Glom on maemo fremantle

5. September 2009

Glom now bascially starts up on maemo fremantle which means that gtkmm, libgda, libgdamm and pygda are working together now on the maemo platform. Of course lots of bug-fixing and UI work left to make this really cool.

Screenshot:glom-shot

Today, I added a very simple feature to anjuta which makes it possible to build your project inside a scratchbox environment. It does not take care about execution and debugging yet but that’s not so important for me at the moment.

The last weeks I mostly hacked on drag-and-drop layout support for glom. It is far from finished at the moment and anyone is free to make suggestions how improve the whole dnd handling.

Today, I heading for the German Cup-Final in Berlin tommorow and I hope Nuremberg will win it’s first title after 39 years (including several years in the second and even one in the third league).

There are new packages availible for maemo bora:

  • Update: Packages for glibmm/gtkmm: These packages fix a nasty bug that will cause a crash when using Gtk::TextBuffer so everybody is encouraged to upgrade
  • New: Package for libgda3 which brings the GNOME database power to maemo. Please note that this is not yet the final release of libgda and that the packages may have some rough edges.

Both packages are available from the bora-extras repository:

deb http://repository.maemo.org/extras/ bora free
deb-src http://repository.maemo.org/extras/ bora free

So, I finally got to hacking on the cairo support for maemo-launcher. Thanks to Behdad and Owen for pointing me in the right direction.

My patch adds a method to booster_preinit which draws some demo text (“Maemo launcher”) to a image surface using pangocairo. Obviously this is enough to init most of the font stuff of pango and thus speeds up the application start-up for my test-case, the hello-world example from the GTK+ tutorial, by 50%. Again, I may be totally wrong with my results of course as times tend to be very small on a normal PC. I would be glad to hear from poeple using embedded devices if this is a real performance gain.

Start-up time Diagram

The only problem with the patch currently is that I use “Sans 10” as hardcoded value for the font. I have not yet figured out a good way to get the default font without opening a display.

Update: Obviously the font is totally irrelevant! I just removed the line and everything was as fast as before which means the upon layout drawing as font initialisation is done!

All this was done for Openismus in case anyone did not know!

Today was the time to get some results on the improvements that can be reached using maemo-launcher. Of course all this tests might be inaccurate and wrong…

At first, I needed a simple example so I took the Hello World! example from the Gtk+ Tutorial. The only code change was to add a GTimer and to print the elapsed time before gtk_main() is called. I now made some test runs (not enough for a statistical correct result…).

Result Gtk: maemo-launcher speeds up this example by about 25%. That could mean the Gtk initialisation takes about 25% of the start-up time. Of course in bigger applications this value will decrease as they do much more than just to init Gtk and create some widgets.

So, the next step was to test what happens to an application that uses Gtkmm instead of Gtk. Again, I used the simplest example from the tutorial, Hello World in gtkmm and modified it to install a timer before Gtk::Main::run(). This test did not give me that nice results as the above. The standard deviation was much higher so I assume caching has a much bigger influence here.

Result Gtkmm: The speed-up reached by the launcher using the gtk booster was about 22% in average but in a range from +54% to -59%. If I used the new gtkmm booster together with the gtk booster I gained 35% more speed and the range was only +65% to -11%.

Overall results: It seems like maemo-launcher does speed things up a bit. On my laptop this only means some milliseconds but maybe it is more important on embedded platforms. I still wonder why I have such a big standard deviation with the C++ code. You can have a look a the exact results (gnumeric sheet)

All this was done using gtk+ 2.10.9, gtkmm 2.10.8 and maemo-launcher from SVN TRUNK. I had to modify the Gtk booster to work with 2.10 which means that it does only init all the GTypes but avoids all the more advanced hacks that no longer work because many leaks in Gtk have been fixed.

Today, I hacked a bit on maemo-launcher to add support for multiple boosters. It was not very difficult but quite annoying because string handling and lists without Glib are a real mess!

The gtkmm-booster seems to work good now and I had no problems to launch the complete maemo-desktop and the maemomm-helloworld example. There are some instructions in the README to set up the launcher correctly.

Anyway, I still miss a real-life test-case and good ideas how to measure the performance. My laptop might be about 10 times faster as the N800 so I can’t “feel” any performance changes. I also have no real idea how to get objective results.

maemo gtkmm booster

1. March 2007

To speed up application start-up the clever people at Nokia wrote Maemo launcher. It is a quite dirty hack that tries to keep many things in memory and to fork to main() once an application is started.

Of course something like this would be nice for gtkmm/maemomm too. maemo-launcher supports different booster modules and thus we can add a gtkmm booster modules. I spent most of the day figuring out how all this works and finally finished a very simple booster. The gtkmm booster currently simply calls the methods from the gtk booster (as we need all the stuff from gtk anyway) but in the future it will also do some gtkmm specific stuff.

If you are interested you can have a look at the sources (you will also need the patch from this bug against maemo-launcher). It is still broken in many places but at least you should be able to start some apps. Start the launcher using maemo-launcher --daemon --send-app-died --booster gtkmm.

MySQL on Maemo

28. February 2007

I recently tried to build mysql packages to be able to access the client libs from libgda(mm) on maemo bora. I figured out how to build them on SDK_X86 by cutting down depencies as much as possible but failed to build them on SDK_ARMEL because of this internal compiler error:


if arm-linux-gnueabi-g++ -DHAVE_CONFIG_H -DNDEBUG -I. -I. -I../../../../.. -I. -I../../../../../include -I../../../../../ndb/include -I../../../../../ndb/src/kernel/vm -I../../../../../ndb/src/kernel/error -I../../../../../ndb/src/kernel -I../../../../../ndb/include/kernel -I../../../../../ndb/include/transporter -I../../../../../ndb/include/debugger -I../../../../../ndb/include/mgmapi -I../../../../../ndb/include/mgmcommon -I../../../../../ndb/include/ndbapi -I../../../../../ndb/include/util -I../../../../../ndb/include/portlib -I../../../../../ndb/include/logger -O3 -DDBUG_OFF -fno-implicit-templates -fno-exceptions -fno-rtti -MT Cmvmi.o -MD -MP -MF ".deps/Cmvmi.Tpo" -c -o Cmvmi.o Cmvmi.cpp; \
then mv -f ".deps/Cmvmi.Tpo" ".deps/Cmvmi.Po"; else rm -f ".deps/Cmvmi.Tpo"; exit 1; fi
Cmvmi.cpp: In member function `void Cmvmi::execTESTSIG(Signal*)':
Cmvmi.cpp:1463: internal compiler error: in verify_local_live_at_start, at flow.c:546
Please submit a full bug report,
with preprocessed source if appropriate.
Send email to arm-gnu@codesourcery.com for instructions.

It’s not a major issue as I was able to build PostgreSQL packages and one database is enough in the moment but if someone has an idea what I could do about it I would be glad to hear.

In the meantime a have put up a small howto for installing an SDK for C++ development on the Nokia N800.

So, I finally hold my new Nokia N800 in my hands. Nokia was so kind to give a discount code to me for the work we did on Maemomm for openismus. Thanks to Nokia and Murray for organizing this discout!

So its simply incredible! l switched it on connected the wifi and write my first N800 blog now.

I should really start to read the manual now but I am just suprised of some things:
– It’s damn small. Of course I knew the size in cm before I bought it but it should feels much smaller with this 800×600 display.
– The display is very sharp though you need good eyes to be able to read webpages in full-size mode.
– Accidently pushed the button to the right and a webcam moved out
– You can use handwriting to edit text and that works amazing

I will continue playing…

jhs vs. m4 1:1

14. September 2006

More or less the whole day I improved the gtkmm patch to be able to build without the Atkmm api which is particular usefull on platforms like Maemo.

I had to fight a lot with m4, perl and the bad error messages of the C preprocessor. It only tells you that some #ifdef was not closed but it does not really mention where. After I finally also got the conditional building using automake/autoconf working, the updated patch is now in bugzilla.