Cut off pages with brother printer

Do you use Ubuntu Intrepid/ Jaunty and your Brother Printer cuts off some part of the pages when printing, regardless of which paper setting you chose?

Well then this command might help you.

brprintconf_<your_model> -pt A4 # brprintconf_dcp135c in my case

the problem is, that the user interface in ubuntu only changes the CUPS settings while the brother drivers are LPR, so the settings are without effect. The command above on the other hand changes the LPR settings. If you want to know all the command options, look here.

Making money out of my visitors

As you probably noticed I added google banners to my page in order to get rich. They are currently only visible on article and single-news pages and should not get in your way too much.

But if they still annoy you, they are easily blockable by AdBlock or similar – if you keep them on the other hand, this will help me pay for the server.

Sidenote: Google obviously does not support XHTML with AdSense, so I had to do some tricks in order to get it to work at all – quite a shame for a so called web company…

Thunderbird a step closer to being integrated

As of yesterdays nightly, Thunderbird has got an early version of a Gnomestripe theme. It now uses system icons for the folders and replaces the Mozilla themed icons with ones in Tango style, which make it look much more like a Gnome application.

thunderbird-tango

What is still missing though are the icons for the main toolbar and natively themed tabs, but I think we can expect these for the final release of Thunderbird3. Together with the nice interface improvements this will make Thunderbird a really great alternative to Evolution and hopefully make it also the default mail client for Karmic.

The next items on my wishlist for Thunderbird are integration with the notification/ indicator system in Ubuntu and integration with the gnome calendar,

Giving Google Earth a native look & feel

Although Google Earth is a native Linux application and even uses Qt it still looks like a Windows95 application – even in KDE. The problem is that Google Eerth ship its own Qt libraries instead of using the ones installed on the system and thus also does not respect the system settings.

But there is help! If you want to make it look native,  make

# assuming you are using the medibuntu packages
cd /usr/lib/googleearth/
sudo rm libQt*

this will fore Googleearth use the system libraries instead, which include a GTK Qt Style. So if you launch googleearth as

googleearth -style GTK+

it will look like this:

Native Googleearth

but this will only work on Jaunty, since the GTK Qt Style was just added in Qt 4.5. If you are still on Intrepid you can use

googleearth -style cleanlooks

which will look at least familiar with the default Human Theme.

Finally free voice/ video chat is there

Just 3 years after Google first released their Jingle extension for Jabber which they used in their GTalk application it is finally possible to use it on the open source desktop too. This is just 2 years after Nokia released their Linux/ Gnome based N800 internet tablet, which also supported it.

But now Jaunty got an update to the Empathy Messanger, which brought Voice/ Video support to it. So now you can finally do calls between two Empathy Clients, between Empathy and GTalk on Windows and even between Empathy and your now actually useful N800 and that regardless whether you are on 32bit or on 64bit – only requiring a Jabber account – no need for Skype any more.

and here is the proof screenshot:

Empathy and N800 chat

No fglrx for Jaunty?

Jaunty will have the new Xserver 1.6, which brings a lot of 2D acceleration improvements and bug fixes but also a API/ABI change, so that binary only graphics drivers must be updated in order to work with it. This makes all currently released fglrx drivers (Catalyst 9.2) incompatible with Jaunty.

With the release of intrepid there already was a similar situatuation, but AMD released a special version for intrepid back then. But this time AMD just announced to drop the support for chips <= R600 (HDxxxx series) from fglrx coming with Catalyt 9.3 and recommends to use the open source -ati driver for the not longer supported cards. So the question is will Catalyst 9.3 support Xserver 1.6?

It seems to be not so likely, since even the leaked Catalyst 9.4 does not yet support Xserver1.6 and the Ubuntu developers are trying to get R600/R700 support into the open source driver.

The good news is that the open source -ati driver in Jaunty will support all currently available ATI chipsets (yes this includes R600/R700), which will give you probably the fastest 2D acceleration among all linux drivers(intel just broke their driver by merging UXA) and also much better Xvideo accelereation in comparison to fglrx. (no tearing)

The back side is that there will be a regression regarding 3D acceleration. The open source 3D driver stack currently is much slower then the one in fglrx and the work to fix this will not be ready until Ubuntu 9.10 (or probably longer). This will not affect anyone just using Compiz – these will even get a major performance improvement in comparison with fglrx. But in games or more sophisticated 3D applications there will be a noticable slowdown.

And R600/ R700 chips will not have any 3D acceleration at all – not even Compiz. But for these there is still hope for Catalyst 9.5.

C++ becoming usable

Recently I had to write a small project in C++ which involved a lot of cursing, since C++ has many awkward places and no sane way to get around them. Then I discovered that the GCC installed had C++0x support if you compile with “-std=c++0x” and suddenly C++ became a usable language for me.

And these are the core problems currently existing in C++, which C++0x solves:

Broken array data type

currently one has only the C arrays available which are nice if you want raw access to memory, but already fail if you just want to know the size of the array:

// ok you can do
int a[3];
cout << sizeof(a)/sizeof(int) << endl; // 3

// but this one fails
int a[3][2];
cout << sizeof(a)/sizeof(int) << endl; // 6 and no easy way to get the size of the first dimension

but with C++0x one has a proper array data type:

array<int, 3> a;
cout << a.size() // already more readable

array<array<int, 2>, 3> a;
cout << a.size() << endl; // 3

Manual Memory Management

currently one has only auto_ptr for memory management, but it is quite limited since there can be only one auto_ptr pointing to an object at any time. Coming with C++0x there will be a shared_ptr which can be copied around and assigned just like an ordinary pointer, but automatically realeases the memory.

// so if you always do
shared_ptr<int> p = new int;

// instead of
int* p = new int;

you will get reference counted garbage collection in C++. If you are coming from Java, you might winkle your nose, since this is not as efficient as the “proper” garbage collector in Java, but this is what is used in GTK and Python all the time…

Bad Collection Integration

although C++ already offers some Collection types besides of plain C arrays they are badly integrated in the language

// for instance this works
int a[3] = {1, 2, 3};

// but this does not
vector<int> a = {1, 2, 3};

well with C++0x the latter example also works 🙂

then there is also better integration with iterators

list<int> l;
// while you currently have to write
for (list<int>::iterator it = l.begin(); it != l.end(); it++) {
    cout << *it << endl;
}

// you will be able to write
for(int& i: l) {
    cout << i << endl;
}

Sugar on top

do you know the occasions where you have to write

list<vector<int>>* l = new list<vector<int>>();

// well now you can write
auto l = new list<vector<int>>();

this also helps in cases where you just do not care of the type or do not know it like in

auto f = bind(&Class::method, inst, "hello", _1, _2);
f(12, 13); // calls inst.method("hello", 12, 13)

Conclusion

this were only a few of the changes, but they already bring a new level of abstraction to C++, which allow expressing algorithms in a higher and more understandable level. This probably will not convert any Java programmers, but it will certainly make life for C++ alternatives like D harder, since they are certainly less attractive now.

Nokia LGPLed Qt

This is another example why Nokia is currently the most OSS friendly company when it comes do Desktop applications.

First they sponsored most of the work on Telepathy which they needed for their Maemo platform and which shall now be used as a desktop-wide presence framework in gnome.

Then they sponsored the development of Tracker, which will be used on Maemo Frementale and probably will be the most advanced desktop-search engine with the coming 0.7 release.

This two projects are already great examples for working with the OSS community; instead of just using the Kernel and building your own closed user-land, they chose to use available Open Source projects and supported them to bring them in shape – therefore the whole Gnome desktop profited.

But now they did probably the most important contribution for the whole OSS desktop; the relicensed Qt under the LGPL. Up to now the linux desktop was split up between Qt applications and GTK applications. This split was really deep; it went from a different API down to the X11 level how the primitives were drawn. This was like that, because the licensing of Qt and GTK was incompatible and absolutely no code could be shared.

Now both Qt and GTK are LGPL, but expecting that either Qt or GTK will be discontinued now is utopic, since many applications would still use the dropped toolkit and developers would not just adapt to a new API if they already one that they like.

But what I think we can expect that Qt and GTK can share a lot of code. Right now GTK uses Cairo for drawing, while Qt has its own implementation which does basically the same. There are also many other such areas where code was unnecessarily duplicated.

So what I hope is that the difference between Qt and GTK will become just the API – with a mostly identical implementation.

Going back to Intrepid

Well Jaunty is really great; the new Xorg with the improved EXA just flies here on the radeon driver. Compiz now just flies – no more jerky scrolling like with fglrx.

And then there is already ext4 with support in grub, so I promptly converted all my partitions to ext4 since I wanted to get rid of the long drawn out fsck. What turned out not so cool, since ext4 needs the inode size of 256 in order to store the additional checksums for the fast fsck, but if you convert from ext3 you most likely have only 128byte long inodes, so no fast fsck for me… 🙁

Then I realized that – altough great – OSS drivers just suck for 3D and fglrx did a far better job here. And since I need OpenGL for work, I decided to go back to Intrepid.

Well I have just to wipe root and reinstall Intrepid there, since I was so clever to create a separate /home – but wait my /home is ext4 now! And Intrepid was not yet able to handle ext4. ouch!

In case you were saying “just like me” while reading up to now, here is the solution: you can take just the kernel out of the jaunty repository and use it with intrepid to mount /home. Everything plays nice with the foreign kernel 🙂

You can even do this on purpose to get ext4 support in Intrepid, but well, just dont.

Still no OSS R600 & R700 support in Jaunty

Although AMD released the example code for several hours already, there are still no attempts to update the according packages in Jaunty in order to finally enable the R600 and R700 to use open source acceleration techniques like EXA or or tear free Textured Video.

There is also no attemts to make Kernel Mode Setting and GEM to work on this chips, which finally leads me to the question if AMD is really that serious with Linux support. Like I see things there is no chance that things will be ready by – lets say – tomorrow. I am really considering getting a NVidia Card now. 🙁