Category Archives: General

Missing the Meego Conference 2011

I won’t be at the Meego Conference in San Francisco this year. It would just mean too much time away when I should be taking care of my small children.

However, several Openismus people will be there to represent us: Ekaterina Gerasimova (Kat), Michael Hasselmann, David King, André Klapper, and Chris Kühl.

I will instead be taking my family to visit my side of the family in North Berwick, Scotland, where I’ll meet my nephew from New Zealand for the first time.

 

Openismus is Hiring

Openismus is currently looking for a few experienced C++ coders, to work with our expert team in Berlin or Munich. We could really use some more Qt expertise. It’s an advantage if you have experience of GTK+ and GObject-based libraries too, though it’s not essential.

As usual, please email a description of yourself, along with a CV. I look forward to hearing from you.

Lies I Tell My 3 Year Old Son

Small children don’t need to think about everything yet, and can’t always be persuaded to be responsible with the truth. Here are some of my lies:

  • I don’t speak German.
  • I don’t eat meat because I don’t like the taste.
  • Airport scanners check if there are biscuits in our luggage. Biscuits are not allowed.
  • I would never buy an ice cream.
  • Come along now or I’ll go without you.

gtkmm 3.0.0

We’ve been working on gtkmm 3 increasingly since sometime in 2009 and today we have finally declared it stable. gtkmm 3.0.0 is out. We last did an ABI-breaking parallel-installable stable version in April 2004 for gtkmm 2.4.0 so we’ll probably have to live with this for a while.

We didn’t fullfil all our amibions, due to lack of time, but we did fix many annoyances that had built up over the years. And luckily GTK+ 3 turned out to contain far more interesting changes than initially planned, most of which are now available via gtkmm-3.0.

Personally, I’m glad that it’s done. It’s been a long hard slog over the past year, made possible by my company Openismus GmbH, just to keep up with the (nevertheless necessary) API churn during the unstable GTK+ 3 development cycle. That hasn’t left me much time for any other software development, but now I feel free.

To port to gtkmm-3.0 you should first try to build your application with gtkmm-2.4 but without using deprecated API. The deprecated API generally has documentation suggesting what new API you
should use instead. These gtkmm-3.0 porting hints might also be helpful:

Some new/changed API in gtkmm-3.0, though this list is far from complete:

Gtk:

  • Adjustment is now used via RefPtr.
  • AppChooser, AppChooserButton, AppChooserDialog.
  • Box, ButtonBox, IconView, Paned, ProgressBar, ScaleButton, ScrollBar and Separator now derive from Orientable.
  • All widgets derive from Buildable.
  • Several widgets derive from Scrollable.
  • CellArea and CellAreaBox
  • ComboBox now derives from CellLayout.
  • IconSet is now used via RefPtr.
  • StyleContext, StyleProvider, and CssProvider, replacing Style and Rc.
  • Grid
  • NumerableIcon.
  • Switch
  • Widget::on_expose_event() is now Widget::on_draw().

Gdk:

  • Added DeviceManager.
  • Removed Drawable, Pixmap and Bitmap.
  • Cursor is now used via RefPtr.
  • RGBA replaces Color, though Color still exists because it is used by TextView. We hope to deprecated Color completely in gtkmm 3.2.
  • Removed Colormap and its general awkardness.

General:

  • Use std::vector in several methods instead of the intermediate *Handle types to make the API clearer.
  • Change all operator void* to operator const void*, with a BoolExpr typede and extra documentation. This avoids an unintentional implicit cast to int, and is generally considered good practice in C++. The new C++ standard allows the use of the explicit keyword here instead, but that is not yet widespread.
  • Many existing classes have many new methods.
  • gtkmm-3.0 currently has no deprecated API. Not even API that was added and then deprecated during GTK+ 3.0.

See also the list of new API in gtkmm 3.0.

Thanks to everyone who helped.

glibmm 2.28 with Gio::Settings and Gio::DBus

We finally released glibmm 2.28.0. This is the first stable release with new API since glibmm 2.24.0 in March 2010. We skipped glibmm 2.26.0 because there was so much new and awkward API that needed to be wrapped properly for C++. It’s scary to declare so much new API stable, but we had to do it eventually.

Glib has the following new API, though this list is not complete:

  • Variant: A new hierarchy of templated Variant<> types, for use with Gio::Settings and Gio::DBus.
  • Regex uses a new MatchInfo class.
  • build_filename() now has overloads to take up to 9 arguments,
  • get_system_data_dirs() and get_system_config_dirs().

Gio has the following new API, though this list is not complete:

  • Settings: For application settings, replacing GConf (or Gnome::Conf).
  • DBus: API to use or implement D-Bus services.
  • Proxy, ProxyAddress and ProxyResolver.
  • SocketControlMessage, UnixCredentialsMessage and UnixFDMessage.

See also this list of new API in glibmm 2.28.

Gio::DBus, Glib::Variant and Gio::Settings were a huge amount of difficult work mostly by José Alburquerque, with help from Jonathon Jongsmam, Yannick Guesnet, Michael Edwards, Martin Braure de Calignon, Murray Cumming and others. Some of José Alburquerque’s work, and most of Murray Cumming’s was funded by Openismus GmbH.
Thank you, everyone.

Glom: GtkNotebook with no frame

GtkNotebook has a frame around the page that it shows, grouping that page’s widgets together. That makes sense when the notebook is part of a more complicated UI. But Glom uses a GtkNotebook for almost all of its main window, taking up all of the window’s width. The frame needs an inner border that wastes space and the nesting actually makes the UI look more complicated than it is.

That frame is not optional in GtkNotebook, so I had to create a custom Gtk::Notebook-like class to replace it in my code. The result is mostly better, though I don’t like those two toggle buttons much. Suggestions are welcome.

I will also move those top labels around, putting them in the same row as the List and Details toggle buttons, but this is a start.

Return of the GNOME Events Box

Retrieving the Box

In November I mentioned that UPS had lost the GNOME Events Box. Well, we have retrieved it after we did the investigation that UPS would not do, or did not want to tell us about. I didn’t have time to chase this myself, but I want to thank these people:

Henrique Rodrigues personally went to Odivelas in Portugal and tracked down the box’s physical location. He learned that the (incorrect) receipient had at first assumed that it was one of their regular deliveries and had broken the locks to check what was inside. When they discovered that it wasn’t for them, they told UPS, requesting that they take it away again and give them an official acknowledgment that they had not stolen any of the contents. UPS said No and then told us that they couldn’t retrieve the box and that we should send a claims form with all our receipts. The Box remained in a warehouse belonging to the incorrect recipient.

With this information, Bastien Nocera and Ekaterina Gerasimova contacted UPS repeatedly and in various ways, until they agreed to pick up the box and bring it back to Berlin, where it has now arrived.

UPS are usually very efficient and better than the alternatives. But this was all rather silly.

Looking for a new GNOME Events Box Host

I don’t have the time these days to properly manage the GNOME Events Box, so I’d really like someone else to give it a home. You just need to store it, arrange for UPS delivery, and receive it when it returns. I have generally paid peoples’ expenses when they send it back, and I then ask the GNOME Board for reimbursement for all receipts every now and then.

In the meantime, Canonical have generously paid for (and Bastien organized) a replacement GNOME Events Box, so we now have two. So you might end up hosting both, though I guess that the GNOME Board might choose to send one to another part of the world.

Nexus S

I’ve had the Google/Samsung Nexus S phone for a few days and I will now vomit my thoughts out here.

Hardware

The phone’s physical design has some fatal flaws. It has the four standard Android buttons at the bottom – Return, Menu, Search, and Home. But they are touch buttons instead of real buttons, and they are just as super sensitive as the main touch screen. Because the whole phone is so slippery smooth, that makes it incredibly difficult to use the main interface without touching one of these “hardware” buttons. Either the Return button, at the left corner, or the Home button, at the right corner, will typically close the current application. I find it very difficult not to trigger these buttons with my palm.

The on-screen keyboard is already awkward, but this makes it even more important to tap in exactly the right place and not a pixel lower. So it requires your full concentration and gives you the general feeling that you are defusing a ticking bomb hidden in a bar of wet soap. I didn’t have this problem with my older HTC Hero. If I was a regular user, who didn’t care about the Android software getting out of date, I would return the Nexus S.

The older Galaxy S doesn’t seem to share this problem completely. It appears to have a thicker bevel that should be easier to grip and it has less buttons at the bottom, in a slightly safer arrangement. However, two of them are touch buttons, so I guess it’s annoying too.

I generally feel that multi-touch ability is not worth the over-sensitivity of the capacitive screen, as it’s not used much in Android anyway outside of Fruit Ninja. I preferred the N900’s need for a very slight finger press.

Software

I’ve used an HTC Hero with Android 2.2 and the HTC Sense UI, and this is not very different, though regular Android lacks a consistent visual personality. However, I’m surprised that I miss some things from HTC Sense, such as:

  • I love HTC’s clock and weather widget, with the full-screen animations of rain, frost, snow or fog that appear momentarily over the whole desktop. It’s useless but it’s charming. Regular Android 2.3 has just an ugly little analogue clock widget. Its weather widget is boring.
  • My HTC Hero could upload photos and videos to Flickr, even integrating with the Accounts and Sync Settings, but regular Android 2.3 can’t.
  • The HTC Camera application lets you focus on a point by clicking the picture. I don’t know if it really worked, but I liked the idea. I do like that the regular Android 2.3 camera app lets me click the button to focus and then release later to actually take the picture quickly.

These can be replaced imperfectly by apps from the Android Market, but that’s a frustrating experience of choosing between hundreds of similar apps, with no help to judge their quality.

Nexus S versus HTC Hero

This is a rather arbitrary comparison that’s of little use to anyone, but it’s the hardware that I’ve had.

I prefer the HTC Hero hardware because of the above-mentioned hardware problems, and because the chin stopped me from holding it upside-down so often. However, the HTC’s camera was terrible, while the Nexus S takes bright clear pictures and videos.

Android Versus the N900

Before I switched to the HTC Hero, I had used my Nokia N900 for almost a year.

I still miss:

  • Contacts aggregation: The N900 combines contacts from Google Talk, Skype, Facebook, and others into one contacts list and presents communication with them in one Messaging application. It lets your Contacts list be your main start point for communication. Just start Contacts and you’ll see immediately who is online, by whatever protocol, because you can show them at the top of the list. Then click on a contact to call, send email, SMS, instant message, skype, etc. You don’t need to think much about what system you are using.
    Android does some of this, though a) You can’t show online people first, b) Its contact merging (“Join”) UI is clumsy, c) It often leaves the contact listed under the cryptic IM or Skype username instead of the real name and d) The Messaging application is only for SMS, e) the Talk application is only for (GTalk) jabber, f) There is no aggregated message history, so you need to go to the individual apps.
  • GPodder: This podcast client has a sane, usable, uncluttered UI that made my life better. I’m currently using DoggCatcher on Android – It’s the best of several poor choices, but it’s still a mess that gets in my way.
  • True multi-tasking: Multi-tasking in the N900 is truly useful, though it does indeed complicate the UI. Android does pseudo-multitasking – Apps store and restore their state, but they don’t actually do any processing while you are using a different application. But occasionally you do want to use another application because you really are waiting for the current application. This is most noticeable in the browser, for instance. Page display can be slow due to no fault of the browser and it would be nice if the phone let me do other things while waiting.
  • The Camera hardware button. It’s very awkward to take a picture by holding the phone (trying not to touch those Back or Home buttons) and then clicking the small button on the touch screen to take a picture. With the N900, I just pointed the phone and pressed the button on the top side.

I do not miss:

  • The N900’s chunky hardware. I used both the HTC Hero and Nexus S even more than my N900 because they are easier to carry around.
  • The default to landscape mode. Consuming large amounts of text (newspaper content) or lists (twitter or facebook posts), is easier in a portrait layout. That’s why newspapers have columns – they know what they are doing.
  • Non-flowing text in the browser. Android’s browser reflows text so you can read it. The N900’s browser often expects you to keep moving left and right on every line so you can actually read a paragraph. It respects the layout of the original page, but that’s little use on a small screen when I just want to read the content while ignoring the surrounding chaos.
  • Difficulty answering phone calls. On the N900, when the phone rings, I would unlock the screen, at which point the display would rotate from landscape to portrait, just a little to slowly. So my finger would move towards the Answer button, but when my finger reached the screen, the Cancel button was where the Answer button had been.
  • The N900 losing the cell phone signal and not getting it back without a restart or hacky GSM mode switch. I stopped using the N900 during our second pregnancy.

Overall, I feel that an updated N900, with thinner hardware like today’s phones, and slightly updated software, would compete very well with the current generation of Android phones. It would be way more attractive than a Symbian phone, though that’s not saying much. Of course, I enjoy several apps that are only available on Android, but I am not surprised that developers are not writing software for an API that Nokia declared dead before the N900 was even on sale, and for hardware that Nokia never tried to sell. Developers will even learn Objective C if it means reaching an audience.

Handing over cluttermm

I have not worked on the Clutter C++ API (cluttermm) much for the last few months, having no real need for it personally. But Chris Kühl is more enthusiastic.

I’m always looking for ways to give away responsibilities, so he is now the new cluttermm maintainer. He has already fixed several serious bugs, wrapped lots of new API, and put that all in new releases of 1.1 and 1.3. Please show him your thanks by trying it out and giving him some feedback.

gtkmm 2.24 soon

I will soon release gtkmm 2.24.0. This one should really be the last release of the gtkmm-2.4 API, give or take some minor bug-fixes. Afterwards, we can focus completely on gtkmm 3.

So this is your last chance to mention problems that we should fix in the gtkmm-2.4 API. Remember that it’s just meant to help you prepare for porting to gtkmm 3 so we’ve added as much of the new API as possible to gtkmm-2.4, but tell us if we missed something.

I already have gtkmm-documentation and glom building in branches with gtkmm 2.23/24 with no use of deprecated API.