February 02, 2010
David King - February 02, 2010 - 16:57
Going to FOSDEM
I'm going to FOSDEM,the Free and Open Source Software Developers' European Meeting

I will be attending FOSDEM this weekend as part of my work on maemo.org developer documentation. Come and talk to me about Maemo, developer documentation, wiki.maemo.org or even Maemomm. I will also be going to the keysigning event, so come along with some photo ID to get yourself into the web of trust.
January 31, 2010
Peter Penz - January 31, 2010 - 14:07
Internal Cleanups
Warning: This might be a quite boring blog entry for non-developers - no fancy screenshots and no new features... ;-)

Beside taking care to keep Dolphin simple and efficient for users, it is also very important for me to do the same for the code: It should be simple and easy to maintain for developers.

Sometimes this works quite well, but it also happens that parts of the code need to be refactored. It is quite common in commercial companies that developers don't get the chance to refactor the code: The user does not recognize it in the first sight and there is definitely a risk of having regressions.

I'm convinced that in the long-term keeping the code base clean pays off and results in less bugs and easier maintenance. Although some features like improved searching or version control support have been added for Dolphin in KDE SC 4.4, I also did some internal cleanups.

For KDE SC 4.5 I want to completely concentrate on fine-tuning the code base of Dolphin, so that some long standing bugs can be fixed in a clean manner:

Information Panel

I totally underestimated the complexity of the Information Panel before KDE SC 4.0 had been released and was never happy with the code-base. I tried to fix things from release to release (which can also be seen visually when looking at the screenshots from the Dolphin-News). Now with KDE SC 4.4 the code-base is a lot better, although there is still some work until it can be moved to kdelibs to get shared with other applications (I blogged about it already in Information Panel and Tooltips). One issue that needs definitely to be solved for KDE SC 4.5 is a non-blocking fallback solution for showing meta information even when Nepomuk and Strigi indexing are turned off (bug 193592). Also fixing the missing meta information in the properties dialog (bug 190588) is a must.

Column View

The column view has been added shortly before the feature freeze for KDE SC 4.0. I fell into the trap to assume that showing several columns cannot be much more difficult in comparison to the other views. The result was that the column view added a lot of complexity to the code and fixing column view related bugs was tricky. I cleaned up the code base for KDE SC 4.4 and am quite happy now: A lot of interfaces and workarounds could be removed, less code is needed and fixing column view bugs is straight forward. The beta releases and release candidates popped up some regressions, but they could be fixed quite fast.

Location bar ("breadcrumb")

Long before KDE SC 4.0 had been released, the location bar was only meant as prototype. It happened too fast, that we moved it to kdelibs to make it available for the file dialog... It was my fault not taking care to cleanup up the public interface of this widget before KDE SC 4.0 (honestly speaking: There really where more serious problems to solve to that time ;-)). I could not manage to do a cleanup for KDE SC 4.4, but a refactored version is already available on trunk. There are two nice "side effects" of this cleanup:
  1. Dolphin can now easily remember the expansion state of detail-view trees when going back in history (I've to thank Frank Reininghaus a lot for his contributions in this area).
  2. The Dolphin code could be simplified, as it is very easy now to remember history states.
There are also a lot of minor things I wanted to fix since KDE SC 4.0 already. For example in the icons view the wrapping of file names is only done nice on spaces or the minus symbol. Dots and underscores are handled like letters, which might lead to nasty wrappings like:
my_document.tx
t
instead of
my_document.
txt

The searching for Dolphin has already improved in KDE SC 4.4, but still needs a lot of work...

Things like these are what I'd like to fix in Dolphin for KDE SC 4.5, so please don't expect huge, new features :-)

BTW: I'm very happy to announce that on February the 1st I'll start working fulltime at Openismus. Most probably I'll get the chance to work with Qt for Maemo 6 (Harmattan).
January 29, 2010
Michael Hasselmann - January 29, 2010 - 16:00
How to customize your view with delegates

The usual way in Qt, when an item view wants to render itself, is to ask the item model for everything, layout, style and the actual data. Storing view-specific layout information in the model itself means that views and models can always only exist in a 1:1 relationship. The logical conclusion: If you need to share a model between different views, you will probably have to add proxy models for each view. I wasn't satisfied with that idea, so I continued to research QStyledItemDelegates. They have the following nice properties:

  1. They are owned by the view.
  2. They have complete control over the cell they are assigned to (although that might not be too obvious).
  3. They only get called if there's work to do, that is, nothing is wasted unless a cell becomes visible in a view.

So instead of having one proxy model per view, I can now keep the single model/multiple views approach by writing custom delegates for each view. For a tabular view, that means I want to install custom delegates per column or row (see Qlom's main window implementation).

How to change colors of a cell

Use the delegate's paint method, apply your changes to the QStyleOptionViewItem's palette and forward the paint request to the parent class. I had problems getting the correct background role, that is why I simply used the supplied painter to draw the background myself.

How to format data from the model in the view

The delegates' displayText method comes in handy. The model's data is wrapped in a QVariant already, so your custom delegate can apply all kinds of string formatting here. Just be aware that this method will never be called if the QVariant returned from the model (for the queried model index) is null.

How to replace a cell with a custom widget

For this, we abuse the fact that delegates are owned by their view. We only need to find a method that has a model index parameter, e.g., the paint method, and we are good to go! Inside that method, we query the parent() and use the item view's setIndexWidget method (perhaps check if there already is a widget at the given index, so that we don't end up re-creating widgets for every paint request).

In Qlom, the embedded widget is a simple button, so I was interested in its pressed signal. For that, I used a QSignalMapper to bind custom data (here: the model index) to the delegate's buttonPressed signal. Now the view can connect to the delegates' buttonPressed signal, unwrap the custom QObject to find the model index and display a nice message box with the exact model index of the clicked button.

Feedback and especially corrections welcome!

January 25, 2010
André Klapper - January 25, 2010 - 14:31
FOSDEM, ah well, why not?

Okay, after checking exam dates, chatting with Olav and the Openismus crew, and having the Maemo and GNOME communities in mind I’d like to state:

I'm going to FOSDEM, the Free and Open Source Software Developers' European Meeting
Just booked a one-way flight to Brussels, not decided yet how and where to go back.

January 20, 2010
Murray Cumming - January 20, 2010 - 07:46
GtkToolPalette in GTK+ 2.20

We (Openismus) recently got our GtkToolPalette widget into GTK+’s git master, to be seen in recent GTK+ 2.19 (unstable) tarballs. We haven’t had much extra time for this kind of thing, so I’m glad it’s finally done after being worked on now and then by Mathias Hasselmann, Jan Arne Petersen and Johannes Schmid. Thanks to Matthias Clasen for valuable reviewing and cleanup.

We hope that this can replace the hand-coded tool palette widgets in Glade and Gimp, as well as making this easier for new applications. It replaces EggToolPalette in libegg, where we started the work. Please take a look and report any problems. I’m already using it in a Glom branch.

Here’s the GTK+ API reference for GtkToolPalette. There’s a GtkToolPalette example in gtk-demo.

And here’s a little introductory Gtk::ToolPalette chapter I wrote for the gtkmm (C++) book. Note that gtkmm’s API reference for this is mostly empty, but fixed already in git.

January 18, 2010
André Klapper - January 18, 2010 - 06:30
maemo.org: SNAFU ;-)

The last two weeks were a bit… stressful.

First of all some Nokia-internal changes with regard to Error Management, then maemo.org Bugzilla moving to a new server. Unexpected side effect was data loss. Spent part of last Monday restoring what I still had in my bugmail. Still it leads to confusion and mistrust (”Why was my account deleted?” – “You probably created it in that data loss time frame?” – “Ah.”).

Then we had the Maemo5 PR1.1 release on Thursday (with a nice ChangeLog) and some problems on Saturday and Sunday, hence bugmail (change notifications) was not delivered.

Sharing other thoughts on broader issues that are currently on my mind:

Before writing the very first bug report (maybe even of your life) it’s recommended that reporters take a look at the How-To. Good bug reports save everybody’s time and issues get fixed faster. We should put this information on the first Bugzilla page to avoid frustration on both sides.

Also the number of incoming reports is constantly high, hence I am sometimes short with my comments (as I also have to take a look at the internal comments for public tickets, verify some reported issues in newer internal versions, keep stuff in sync, and other stuff). Depending on cultural backgrounds some of my comments might be misinterpreted as unfriendlyness.

For the high workload Ubuntu has a nice approach called 5 A Day which is asking community members to triage five bug reports a day. I’d be happy with any number though. ;-)
On a related note, for some reasons I expect more Nokians to be around in maemo.org Bugzilla after the next feature release (PR1.2) has been published. Looking forward to it.

Another problem is that many normal users don’t understand the difference between a bug report and a forum (I’ve blogged about this before, anyway). That’s predictable if you’ve never seen a bugtracker before, but if everybody wants Nokia to be more present in maemo.org Bugzilla and folks actually reading bugmail and responding, please reduce adding comments on what is helpful and avoid unneeded fullquotes or answering above the quote.
Especially if instructions how to provide further information have been posted already adding just another “I have this problem too” comment is unhelpful and creates bugmail noise in everybody’s inbox. Bug reports with hundreds of comments, mixing up issues with similar outcome but different reasons quickly become unreadable so the same questions or comments get reposted plus subscribed people tend to ignore new comments. Of course this is also a question of providing better information on how to provide logs etc – should spend time on this in the next weeks.

In general of course reading before posting is required, but people are lazy. “If this is RESOLVED FIXED, then why do I still see that issue here?” It’s explained that FIXED does not mean PUBLISHED, but we could consider renaming FIXED after having Bugzilla 3.4 in place, as it confuses many people. Red Hat for example calls an internal fix “RESOLVED ON_QA” in their Bugzilla until the fix is really available for public.

So that’s the reason why I educate people ask people to please “behave”. Sometimes I scare some people or maybe have less friends at the end of the day, sometimes people are fine with what I’m doing.
In any way it’s necessary, I just felt a need to explain my intentions in public after a bit of negative feedback in the last days.

January 12, 2010
Murray Cumming - January 12, 2010 - 11:43
Peter Penz Joining Openismus

I’m pleased to say that Peter Penz will become an Openismus employee at the start of February. I’ve known and liked Peter since I worked with him six years ago in Linz, Austria on a proprietary C++ mobile phone platform. Back then I was impressed with his skill and temperament so I’ve watched with interest as he has become a core KDE maintainer via the Dolphin file manager.

Obviously Peter will help Openismus as we gain experience with Qt for Maemo 6 (Harmattan) in addition to our continued use of GTK+ and gtkmm.

Peter will work from home in Linz, occasionally visiting the office in Berlin. I like the idea of another office in Linz though.

January 11, 2010
Mathias Hasselmann - January 11, 2010 - 08:36
Technique vs. Intelligence

New York Times reports:

As the military rushes to place more spy drones over Afghanistan, the remote-controlled planes are producing so much video intelligence that analysts are finding it more and more difficult to keep up.

Yet another proof that technique cannot replace intelligence.

(Notice the wordplay.)

January 10, 2010
Mathias Hasselmann - January 10, 2010 - 09:25
Re: Facebook Scam Groups

Erich: Not sure if Facebook is in charge. All that happens is, that people try to cheat and get cheated back. That's what happens to greedy people who consider themself smarter than they really are.

January 07, 2010
Murray Cumming - January 07, 2010 - 10:16
Liam at Two

December’s long season of presents is over and Liam is now two years old.

He’s recently started the famous language explosion, learning several new words each day. He’s obviously aware that he speaks two languages, now learning to say both words instead of preferring the first one he’d learned. He still prefers hand gestures where he has learned them first, seeing no need to learn words for them too.

For the past couple of months Liam has spent the mornings in the crèche over the road. That’s why I’m online again every morning. It’s great for him to learn some independence and spend time with the same kids every day. Leaving him there in tears has been heart-breaking every morning for weeks, but now he’s happy to go there and is nonchalant about us leaving.

I was worried when he suddenly learned more German at the crèche, but that has settled down now. Still, I make an extra effort with plenty of English books and music and some DVDs of gentle British children’s TV from the 70s, such as The Wombles and Ivor the Engine.

The language explosion was accompanied by a sudden increase in general understanding and concentration. Now he happily listens as I read all of a Dr Seuss book to him and seems to understand narrative instead of just wanting to identify objects. His imaginative play is more complicated, with detailed routines.

We’ve had a little snow in Munich this week. Liam learned to walk in last year’s snow. I hope he remembers enjoying this year’s.

January 02, 2010
Michael Hasselmann - January 02, 2010 - 18:00
Fragile API and invalid iterators

For the Miniature project I sometimes need to iterate over all graphics items in a QGraphicsScene, or more precisely, all items of a specific parent item, the chess board itself. For that, I use the QGraphicsItem::childItems() API. However, when used with STL-style iterators you have to be careful, since value types of that form can easily break the iterator idiom:

for (QList<QGraphicsItem *>::iterator iter = parent_item->childItems().begin();
     iter != parent_item->childItems().end();
     ++iter)
{
    (*iter)->doSth(); // Ooops! Invalid iterator deref'ing! 
}

The value-type list that is returned by parent_item->childItems() has not been bound to a variable explicitly, so it is bound to an anonymous variable instead. The compiler will not complain here although the code is borken, from a C++ point of view. Worse yet, "(*iter)->doSth();" might work often enough for you to not see the crashes right away, depending on the compiled code and how the architecture handles memory.

Eventually though it will crash, and according to Murphy this will happen right after the big release. Valgrind of course would have complained about the illegal memory access right away (when run through that part of your code), because the list that we queried in the loop header is invalidated as soon as we enter the loop body, leaving us with an iterator that points into the void. This is C++-specific, in other languages even anonymous variables are only ever cleaned up after leaving the current block context, but in C++ their life time is only guaranteed for the scope of the current expression.

There is one fix and one workaround to that problem. First the fix: let QGraphicsItem::childItems() return a reference to a list member instead, or simply expose the begin/end iterators for the internal data structure directly. Assuming this is not possible, we are left with the workaround - bind the returned list to a variable explicitly, before the iterator is used:

QList<QGraphicsItem *> children = parent_item->childItems();
for (QList<QGraphicsItem *>::iterator iter = children.begin();
     iter != children.end();
     ++iter)
{
    (*iter)->doSth(); // Fine!
}

This of course prolongs the life time of the returned list unnecessarily. We only needed it inside the loop, but now it won't be cleaned up until the flow of control leaves the surrounding block context. To finally get the desired behaviour we could limit the surrounding block context:

{
    QList<QGraphicsItem *> children = parent_item->childItems();
    for (QList<QGraphicsItem *>::iterator iter = children.begin();
         iter != children.end();
         ++iter)
    {
        (*iter)->doSth(); // Fine!
    }
}

Perhaps a cleaner way is to move the loop code in a function of its own instead, although that might not always be feasible, depending on the code inside the loop body.

Another issue might be the need to dynamically cast QGraphicsItems (QGI) to the desired type, once you implemented your custom QGraphicsItem type. This wouldn't be too bad if there wasn't this horrible mix of QGraphicsObjects and QGraphicsItems in Qt 4.6 - some items inherit from QObject (QGraphicsSvgItem), others don't (QGraphicsPixmapItem). So now you also have to decide between dynamic_casts and qobject_casts, how nice ... not! Honestly, it would be easier here to simply forget about qobject_casts, but that might break in subtle ways.

These two issues were enough for me to avoid the QGI::childItems() API whenever possible. One possible replacement can be provided by signals and slots [1]: First, add a slot representing the loop body to your custom QGI type. Second, connect a signal to the instances of your QGI type that would have been iterated in the loop, that is, have a custom signal representing the loop iteration. Then, instead of iterating over the children of the parent item you simply emit the custom signal which triggers the "loop body" execution for each connected custom QGI instance.

[1] requires QObject inheritance for your custom QGraphicsItem type

January 01, 2010
André Klapper - January 01, 2010 - 20:44
2009 Bugzilla statistics for maemo.org and GNOME

This morning my calendar told me there’s a new year available, so I created some quick & dirty statistics for my favorite bug databases:

December 31, 2009
André Klapper - December 31, 2009 - 03:36
2009: Music.

Like last year my private soundtrack for 2009 in alphabetic order. (Warning: Explicit lyrics and/or video content.)

Röyksopp and The Dø to mention separately, because both albums are just marvelous. Quite unfair to pick just one song here.

Miou Miou – À l’été de la Saint-Martin ‘68 / School of Seven Bells – Connjur / Depeche Mode – Everything counts (Oliver Huntemann & Stephan Bodzin Dub remix) / Paul Kalkbrenner – Gebrünn Gebrünn (Berlin Calling Edit) / N.A.S.A. ft. Kanye West, Santogold, Lykke Li – Gifted / Dear Reader – Great white bear / Unkle – Heaven / Dragonette – I go around (Midnight Juggernauts remix) / Black Eyed Peas – I got a feeling / Yarn:moor – It’s blooming / London Elektricity – Just one second / Friendly Fires ft. Au Revoir Simone – Paris (Aeroplane Remix) / Lady GaGa – Pokerface / Metric – Sick muse / Lady Sovereign: So Human / IAMX – Spit It Out (Designer Drugs Remix) / Hell – U can dance / David Guetta ft. Kelly Rowland – When love takes over / 2raumwohnung – Wir werden sehen (Paul Kalkbrenner Remix)

December 21, 2009
André Klapper - December 21, 2009 - 18:40
GNOME 3 platform cleanup

Long time no update on the Cleanup part of GNOME 3, hence if somebody wants to spend the Christmas days with hacking a bit on boring stuff, here’s the ToDo list! ;-)

And in the extended basket:

  • Killing libsexy: vino
  • Killing HAL: See the open dependencies of the meta bug
  • Killing XULRunner in favor of WebKit: yelp
  • So, what did I forget in this quickly written list? :-)

    Nice to see more and more modules getting Introspection Support.

    Worth to consider: XDG config folder implementation.

    Also I’d like to give a big “Thanks” to Javier Jardon for working like mad by both filing bugs and providing patches in these fields, especially when it comes to GTK+.

    December 13, 2009
    André Klapper - December 13, 2009 - 15:24
    To GNU or not to GNU

    Being not subscribed to GNOME’s foundation-list mailing list (and having no intention to subscribe to it), I tried to catch up a bit with the controversy of the last days. I might have missed stuff of course.

    Trying to summarize:

    Initially, Lucas brought up complaints received about content posted on Planet GNOME which triggered a discussion whether there should be rules on appropriate content, whether an annual reminder should be sent to blog authors aggregated to Planet GNOME (telling them that they can remove themselves if they don’t feel fine with it anymore), and whether GNOME has “lost” people because of reasons that could have been avoided.
    RMS joined the discussion and Philip disagreed with him. RMS then wrote that people should not post about closed source on Planet GNOME and defined his “most minimal support for the free software movement” . Because of the obvious disagreement, Philip consequently proposed “to have a vote on GNOME’s membership to the GNU project”. Dave warned that such a vote “could cause a lot of harm & discord for the GNOME community” which was answered by Philip.

    So far my summary.

    Other folks may find other postings more important than the ones I’ve picked – feel free to read the entire thread yourself to get your own opinion.

    Now some questions come up here:

    Sorry if answers exist out there and I have been too lazy to search or have not found them yet.

    With regard to my current personal opinion (which may of course change as I’m willing to learn), having read Richard M. Stallman’s recent posts on the foundation mailinglist, he remains a fascistic extremist to me, painting black & white, ignoring reality (with a bad impact on free software user experience if you cannot interact properly with closed source products that obviously do exist out there) and trying to exclude folks from the GNOME community (because they also work on VMWare stuff) because he knows better what’s good for the GNOME community.

    RMS has done great work in the 80es and 90es that I really appreciate, but I prefer to forget about his last years (a bit similar to Michael Jackson actually), especially his GCDS keynote in 2009 (yes, I have to come up with this again, because it’s part of the picture). RMS was a non-funny comedian with jokes that can easily be interpreted as sexistic (to me they definitely were, though that most probably was not his intention), trying desperately to auction a GNU puppet by behaving like on a children’s birthday. Okay, one can probably discuss humor here. At least it was not my type of humor. If GNOME ever invites RMS again to a conference, I prefer to stay away and not go there. It’s simply not the community that I want to be part of and proud of.

    I always tell myself that RMS does not speak on behalf of the entire FSF, as the FSF has good intentions. But good intentions don’t count if the actual acting and outcome is bad. Plus organizations normally are reflected quite well by the leaders that were elected to represent them.

    So yes, the discussion might be definitely less heated if the request to not post about closed source on Planet GNOME had been posted by a different person than RMS, as he himself is controversial enough already. Plus for many people, FSF = RMS.

    A general note at the end: “Freedom” to me is also the personal freedom to tolerate and even to use non-free software from time to time, without having a big issue if it fits my needs way better. (For potential “Then help the free software to become better!” comments: I talk about the present here, not about the future.)
    And I have enough friends working on closed software. They are awesome people. They just have a different concept that I totally accept because I’m not in a position to say “My concept is the only right one and superior to any other concept”. I prefer to let history decide on that instead.

    December 12, 2009
    Peter Penz - December 12, 2009 - 18:13
    Version Control Support
    Before a feature is added in Dolphin, it is checked whether the feature is mandatory for Dolphin’s target user group. If this is not the case, it does not mean that the feature cannot be added; first it must be clarified whether the feature might be non-intrusive and adds a value for users outside the primary target user group. Non-intrusive is mainly related to the user interface. A feature that adds a lot of clutter to the main menu, context menus or toolbar might harm the target user group. In this case the feature will not be added.

    A good example of a feature that is non-intrusive is the embedded terminal in Dolphin. It only requires one entry inside a sub menu, but adds great value for a lot of people that are not in the scope of Dolphin’s target user group.

    Another kind of non-intrusive feature will be available for Dolphin in KDE SC 4.4: version control support. In KDE 4.4 at least a plugin for Subversion is given:


    The version state emblems and additional entries in the context menu will only be shown if a directory is under version control, so this feature fulfills the requirements for being non-intrusive. The plugin still has a lot of rough edges and has mainly been written for testing the plugin interface. Still I use it regularly and it fulfills most of my needs.

    It is possible for developers to write other version control plugins for Git, Mercurial or whatever, just by following the instructions given in the plugin interface. In KDE SC 4.5 it is planned to embed the plugins as part of the kdevplatform package, but this has not been finally decided yet. The benefit to offer the plugins as part of kdevplatform will be, that the existing infrastructure for version control integration can be reused by the plugins.

    Big thanks go to Nuno Pinheiro, who created icons for the version control states!
    December 09, 2009
    André Klapper - December 09, 2009 - 06:10
    Maemo: Contributing and long-term platform strategy

    Great to see the interest on Maemo in the last weeks. As expected, traffic in the forum, in Bugzilla and in Brainstorm has increased impressively.
    Discussions have been taking place (with regard to Bugzilla for example here or here) how to make infrastructure work out better for users, with some good proposals. I am also impressed by the patience and friendlyness towards new folks not searching for already existing threads or bug reports, partially pushing the limits of english grammar and punctuation, or towards folks having wrong expectations (Symbian is a completely different codebase than Maemo, hence talking about “regressions” is technically speaking wrong. If you want all of the Symbian functionality and lose some of the Maemo functionality, just get a Symbian device if it makes you happier). On a related note, I’m also trying to keep Bugzilla a technically focused place and make clear that it’s not a forum (”WTF???” comments are counterproductive noise if you want developers to read maemo.org Bugzilla mail, really).

    Two issues that have been on my mind lately:

    Open source community expectations are about taking (Give me the code!) but also about giving back (Let me provide patches in Bugzilla and have maintainers review them!).
    Tarballs are available in the repositories, but hackers normally prefer the fresh code instead.

    Photo by brentdanley, CC licensed

    December 07, 2009
    André Klapper - December 07, 2009 - 15:18
    maemo.org Bugday: Dec 15th, 18:00-03:00 UTC

    I’m proudly announcing the first maemo.org Bugday:

    Tuesday, Dec 15th, 18:00-03:00 UTC
    in #maemo-bugs on Freenode IRC

    This is a nice way to get involved if you are a fan of the Maemo platform and the N900, but cannot or do not want to write code for example.

    Bugdays are about hanging out together on IRC, triaging/discussing some reports in maemo.org Bugzilla, and introducing new people into triaging. No technical knowledge needed, no obligations. So, step by and say hello to the Bugsquad.

    And now to some other bits and pieces:

    November 30, 2009
    Karsten Bräckelmann - November 30, 2009 - 19:50
    Bugzilla maintenance to trunk. Progress.

    As Andre mentioned, me being back part-time to the technical side of Bugzilla and taking hacking work off his hands already paid off — some minor, yet much needed Bugzilla tweaks finally went live. While Andre can keep fully concentrating on the growing number of community bug reports, due to a growing community.

    The first task turned out to also require quite some cleaning-up, fixing and Perl compatibility coding, to get the maintenance branch back into working state. Once I won the fight with SVN, the requested changes were done quickly. ;)

    Currently I’m wading through SVN again (trunk this time), making heads and tails of some confusing commits, chasing missing templates and skins, to get a clean, almost vanilla Bugzilla 3.4 up and running, while maintaining our precious customizations. A whole lot of CSS fun is lurking right behind the corner — Bugzilla with the new maemo.org style!

    Michael Hasselmann - November 30, 2009 - 08:00
    About delegates and cell renderers - data formatting in Qt

    Warning: the following blog post has a rant-to-usefulness ratio of 3:1.

    Last week I needed to perform some data formatting on Qt list view. From reading the documentation alone I could not find a satisfying answer. When asking on IRC the answer was to use proxy models. This would have worked, but having two models for one view can create all kind of correspondence problems (think of sorting etc.). And there is this interesting bugreport, complaining that there is no easy way to format data. Status: rejected! So formatting should be a responsibility of the view? Wow, who would have thought ... however, if proxy models are a no-go we are left with ... custom delegates.

    (cut some nonsense about MVC)

    In the Qt world, a delegate is reponsible for 3 tasks:

    Somehow, that's two tasks too many, for something that is not a controller. That's where I prefersLet's take a look at GTK+ cell renderers: they only perform one task, and that's exactly what their names suggests(correction: actually, they are responsible for editing and updating as well, should have read more). A text cell renderer renders text, a pixbuf cell renderer renders pixbufs, and so on. Simple but tremendously flexible.

    So how can I inject this flexibility into delegates? The QItemDelegate won't be very useful unless you want to use a QPainter for everything. But there is this styled item delegate, added with version 4.4 of Qt. And if we look at the roles & accepted types table we can see how this - together with displayText - could translate nicely into Qt "cell renderers". So we create custom styled delegates for each data type we need to display in our view: text delegates, pixmap^Wdecoration delegates ... Once we have defined a set of custom delegate classes we then request the view to use them on a per-row or on a per-column basis. A proof of concept can be found here.

    EDIT: Had to correct some nonsense, this post was too much of a rant and I wasn't thinking clearly. What I originally wanted to express was that with QStyledItemDelegate we can have something very similar to GtkCellRenderer and use them both in a very similar way, too. I think the Qt documentation could have been easier to follow with straight and simple formatting data example, hence my rant. Sorry =/

    November 20, 2009
    Murray Cumming - November 20, 2009 - 13:21
    Trying to use gnuplot in massif_grapher

    I’ve been trying to use gnuplot instead of Gd::Chart in my massif_grapher script, mostly just so it can generate zoomable postscript or SVG output.

    I first tried using the Chart::Gnuplot perl API, but after a very helpful email conversation with its maintainer Ka-Wai Mak, we found that it cannot yet be used to create gnuplot’s “rowstacked” histograms. So now my gnuplot branch of massif_brancher uses gnuplot directly. However, there are still some problems that I can’t solve easily:

    Actually, I wish I could do these stacked (or “cumulative” in Gd::Chart terms) graphs for regular line graphs, instead of just as items on a histogram, in case the snapshot times are not at regular intervals.

    November 19, 2009
    Murray Cumming - November 19, 2009 - 16:45
    LDTP in jhbuild: A Cry For Help

    Glom has lots of code, lots of functionality and lots of UI. It’s easy to break things when making changes to the code. So Armin set up some initial Glom LDTP python scripts to check for regressions. These scripts try to actually use the UI and then check that the application worked as expected.

    I’m sure I had that working once, but it doesn’t work for me now. I wish it did because it would be incredibly useful to me. Note that I build Glom in jhbuild, so I need LDTP to work there. To simplify things, I build LDTP in jhbuild too. I’m trying this on Ubuntu Jaunty and Ubuntu Karmic. Armin has a similar environment and it does work for him.

    The problem is that the waittillguiexist() [1] function calls just timeout instead of recognizing that the first window has appeared. I definitely have accessibility support enabled, and Accerciser does show the window properly. I’ve asked the LDTP developers but they haven’t been able to help me.

    [1] Yes, I hate that function name. I wish that the API and documentation had received proper feedback from native English speakers. It’s rather embarrassing to look at so far.

    November 18, 2009
    André Klapper - November 18, 2009 - 20:24
    maemo.org Bugzilla: Minor tweaks
    Statistics

    Incoming reports in the last weeks

    As I’m quite busy with the normal “Triaging and Syncing” business already (as seen above, a first increase of bug reports happened right after Maemo Summit in week 41, but I expect way busier times ahead) Karsten concentrates on technical stuff. It’s good to have him back as now stuff gets done that unfortunately was on the backburner.
    First pay-offs (small, but definitely worth to mention, not only for the sake of transparency) that were done because I could “outsource” this to Karsten:

    Screenshot

    Entering a new report

    Having users/customers reporting a bug in order to improve a product is great (always keep in mind that they do not need to spend the time on that). However the freetext input makes this sometimes complicated: A “Steps to reproduce: Connect to foo.” is vague when there are several ways offered by the UI to connect to foo and only one of these ways triggers the bug. Also, some testers (me, for example) love to simply follow braindead exact instructions without the need to think a lot. ;-)
    Hence Bugzilla now asks reporters to use an ordered list to provide exact steps. Yes, it is helpful.
    Also, when it comes to reproducibility of issues an answer like “Sometimes, but not too often” is always a bit vague and does not tell how often the reporter had tried (once? five times?). Now we ask for numbers like “maybe 3 out of 10 times”.

    Screenshot

    New “Moved to Brainstorm” answer

    Closing valid enhancement requests as INVALID just because they are better suited for maemo.org Brainstorm always sounded a bit rude. We now have a MOVED resolution plus a nice one-click-button-and-done implemented.

    And third, we have a link to the Bugsquad on the maemo.org Bugzilla frontpage now.

    More news to come.

    November 16, 2009
    Michael Hasselmann - November 16, 2009 - 13:00
    First Miniature .debs sighted!

    Thanks to Mathias, Miniature is now suitable for debian packaging. He also uploaded a first test balloon which at least allows you to move pieces around. Feedback is of course more than welcome.

    Personally I wish the board's cell size could have been made bigger, but 60x60 pixels is already the upper limit. It is now up to us - the Miniature team - to come up with clever techniques to make the board handling as finger-friendly as possible.

    November 14, 2009
    Peter Penz - November 14, 2009 - 13:59
    Searching
    If I compare the number of files on my current hard disk with the number of files I had 10 years ago, I'm quite amazed. How to deal with this increased number of files is topic of a lot discussions. Tagging, searching, filtering, relations, virtual folders... - terms, where from a KDE-developer's point of view Nepomuk comes to mind, which provides already all the technical base. Still there is the task to integrate Nepomuk into applications, so that users out there are able to benefit from this great technology.

    It's a small step only, but at least one step further: During the last week I've integrated Addam Kidder's GSoC 2009 work into Dolphin. I know that some people don't see searching and filtering as "the solution" to deal with the increased number of files and I agree. Nepomuk offers a lot more, still the searching and filtering is a basic feature, that I personally require quite often during my workflow. The current state of the code is far from finished, still the basics are there now. As soon as the search-bar at the top gets focused, the search configurations pop up below as shown here:


    Searching for files having the tag "Tree" is very simple. Selecting "Equal to" and the corresponding tag in the combo-boxes beside "Tag:" has the following result:


    One goal of the interface was to minimize the number of clicks that are required to specify a search query. That's the reason why per default at least three (hopefully) commonly used search criterions are visible. For sure it is possible to create very complex queries with more criterions too:


    Still I think users will use such complex search queries quite rarely. I had some discussions with Sebastian Trüg and Alessandro Sivieri regarding the faceted panel, that exists as prototype currently. The discussion convinced me that a common workflow for users might be:

    This might sound obvious, but has implications on the user interface:
    1. The number of clicks to activate a filter must be minimized.
    2. It should still be powerful: The kind of filters should not be limited.
    3. Doing filtering step by step means that the user interface may not get hidden after triggering the first filter.
    Especially the combination of point 1 and 2 have requires doing some compromises. Limiting the number of clicks requires more screen space. As there is only a limited screen space, the number of shown filters must be decreased. Finding a balanced solution is quite tricky.

    I'm also unsure which data the breadcrumb should show: Visualizing a string like "nepomuksearch:/+lastModified2009-11-13 +rating8 +tag:Peter" to the user is something where I doubt Apple would do. Any suggestions would be welcome.

    That's also one purpose to write this blog entry: Please let me know your daily problems when trying to search and filter files from your hard disk. I hope that I can integrate your input until KDE 4.4... Thanks!
    November 13, 2009
    Karsten Bräckelmann - November 13, 2009 - 19:31
    Back Open, Back to Bugzilla

    After an interesting ride internal, I’m back to open and hacking Bugzilla — at least for a couple weeks — helping Andre with technical and coding stuff for maemo.org Bugzilla, as the increasing amount of incoming bug reports takes more and more time. It’s very nice to see the same old guys still around.

    My priority tasks are first some quick, much needed tweaks to the current version. Then on to new lands, getting Bugzilla 3.4 in shape for maemo.org. Stay tuned.

    November 11, 2009
    Michael Hasselmann - November 11, 2009 - 22:30
    Qt 4.6 for Maemo: It works!

    Today at work, David King kindly informed me that there was some new Qt package in extras-devel. This could only mean one thing - I immediately fired up my scratchbox environment and installed the packages, trying to confirm that this new version would run with Qlom. And in fact, it was surprisingly painless. Thanks to autotroll, a simple QT_PATH env variable did all the magic, hooray!

    Both of us were impressed with the UI improvements. It's certainly a big step forward regarding the Hildonisation of Qt on Maemo5. The application menues look correct now. Button sizes, colors, animations, etc - it all comes together nicely, finally.

    There are still some widgets that need more work, but for a tech preview this is a pleasant surprise.

    On another note, the timing for the Miniature project could not have been much better. We immediately switched to Qt 4.6, and it even runs on the N900. It feels good to know that we can stop using hacks and that we can start to do (most) things properly, staying as cross-platform as possible. Needless to say, Quim was happy, too.

    November 10, 2009
    Murray Cumming - November 10, 2009 - 14:18
    Graphs from valgrind’s massif

    Valgrind’s massif tool tracks how much memory an application uses over time, allowing you to see leaks. Previous versions produced pretty graphs. For instance, see the graph in this out-dated GNOME tutorial about massif.

    However, massif’s behaviour has changed and those graphs are no longer generally appropriate. But they were nice. So I hacked a copy of the current ms_print perl code, producing massif_grapher. Forgive me for my perl code.

    I used perl’s GD::Graph module. It worked but it’s a little eccentric. The image size is hard-coded and needs to be increased in the code when Gd::Graph complains that the vertical or horizontal space is too small, if you have too many data points.

    massif_grapher.pl outputs a massif_pretty.png file:

    Time will tell if this is useful.

    Other useful massif tools:

    André Klapper - November 10, 2009 - 11:16
    GNOME 3.0: September 2010!

    GNOME logo

    After collecting some feedback, the GNOME Release Team has finally decided on the release date for GNOME 3.0: It will be September 2010.
    To take a look again at the GNOME 3 plan that was released in April 2009: Click here.

    New module decisions for GNOME 2.30 were also made of course.

    November 09, 2009
    Michael Hasselmann - November 09, 2009 - 00:20
    Miniature - it moves!

    How it begun

    When I read Quim's thread about the idea for a better Maemo chess app I knew I wanted to join the project. To me, it's all about the device and the sparkling Hildon UX. I really want a good chess app, for myself! I want to play chess online, everywhere! And I want to analyze games as (OK, maybe after =p) they happen. No more "I'll check this position later" (we all know this rarely happens).

    So I finally started last friday. At this point, Quim and Andreas had already created a beautiful, content-rich wiki page. It took a while for me to digest it all, and I added information where appropiate.

    Kick-starting the development

    Andreas had registered a garage project, but we eventually decided to use gitorious for our repository. Gitorious' UI definitely improved over the recent months, and the possibility to have teams working on a single project - also known as not-so-extreme-dvcs-development - makes gitorious a better choice than github, at the moment.

    Saturday night (what better things to do than coding some Qt - my soul will be forever lost) I had a first running example (see screenshot). Currently, Miniature can move between positions, using next/prev menu navigation (we don't need this functionality per se, but it's perhaps a good demonstration that the simple approach I took works).

    So no matter the toolkit, no matter the outdated packages or the endless confusion I had with the various Qt repos at gitorious - this project is really fun! Hopefully we get to make a 0.1 release soon.

    November 06, 2009
    Peter Penz - November 06, 2009 - 20:17
    Information Panel and Tooltips
    Dolphin for KDE 4.4 will provide a refactored information panel and refactored tooltips. The goals of the refactoring have been:

    Although there is still a lot of finetuning necessary until KDE 4.4, it is obvious already that the tooltips...


    ... show the same information as the information panel:


    Originally it was planned to move the refactored widget to kdelibs, so that applications like Mailody, Gwenview and Okular can show the informations in a similar way. However there have been some usecases especially in combination with Gwenview, where the interface of widget was not sufficient yet. So we decided to leave the widget in Dolphin for KDE 4.4, but I'm confident that we find a good solution until KDE 4.5.
    November 04, 2009
    David King - November 04, 2009 - 20:01
    Packaging Glom for Maemo 5
    I have finally got Glom packaged for Maemo 5. It is currently in extras-devel and is installable from the Application Manager. This took quite a bit of work, which I put down to not knowing enough auto-fu. However, the Debian packages are now /opt-ified, and the DBus .service file and .desktop file are installed to the correct locations on Maemo, which gives working application launcher icons. The process for doing this is not particularly well-documented (the best documentation is from Diablo), so here is a quick list of what the average (moderately complex desktop application) Debian package would need in order to be modified for Maemo:
    November 01, 2009
    David King - November 01, 2009 - 23:03
    Fooshies (and corals)
    It has now been ten months since our move, and the tanks are finally starting to look presentable. Over the last couple of months I have also been getting in touch with various specialist breeders and importers across Germany, as all three of my display tanks were very bare up until very recently, as we concentrated on acquiring new furniture. After many emails, I have finally managed to find a friendly marine importer who had one of my favourite corals in stock: Duncanopsammia axifuga. It is probably one of the easiest corals I have ever kept, being undemanding in the lighting department and very hardy, requiring only the occasional feeding on a regular basis.

    Our freshwater aquariums have also been looking up, with the addition of gravel and décor to both. The Lake Malawi Mbuna travelled well compared to the South American fish, and the yellow Lab (Labidochromis caeruleus) fry were especially resilient. As I am very limited on space, I have been raising them in my Rift Lake themed display tank which, unfortunately, means that I now have to find new homes for them.
    The planted aquarium took the longest to recover, as many of the plants suffered during transport. It took a long time to find a suitable substrate so the plants were left to float at the top of the tank for many months after the move. I have had to put this tank at the top of the list for restocking because I keep keyhole cichlids (Cleithracara maronii), who are renowned for being extremely shy to the point where the sight of a neon tetra can send them into hiding, let alone a big, scary person walking into the room. Therefore, they require dither fish: any peaceful, small, schooling species which will indicate that there is no danger while they are out and about.
    As for the quarantine tank, for the last four months, Jan Arne and Bev have been borowing it to try out fishkeeping; I think they are both addicted now.
    October 31, 2009
    Michael Hasselmann - October 31, 2009 - 00:00
    Wt - a Qt-ish web toolkit written in C++

    First of all, C++ for web apps doesn't necessarily make it easier to write them. Compared to other solutions (let's say Django) you'll end up writing a lot more code. And you have to be very very careful with memory leaks.

    But that isn't the point. The main advantage of this framework is how close it is to desktop applications. Porting your Qt desktop application to the web is certainly easier with Wt than with any other solution, as you keep most of the widget API and also the signal and slots paradigm (which should allow to port the app reusing the same business logic as on the desktop).

    Also, this is the first time I could attach a powerful debugger, namely gdb, to a web app and debug it is as if it were a normal desktop app. Together with the compiler-guaranteed type safety this is a huge improvement for code robustness.

    A toolkit that actually uses C++

    There are also some distinct advantages of this toolkit over Qt itself:

    Installation

    The fastest way is to simply get the source from the git repo and to follow the instructions:

    For your own projects make sure to link against all the needed Wt libs: libwt (core), libwtext (if you want to use anything from Wt::Ext, see below), libwthttp (if you want to build apps with inbuilt web server, quite helpful). If you happen to use autotools then you might want to include AC_CHECK_LIB macros into your configure.ac. I had troubles finding non-name-mangled function names, but "$ readelf --dynamic --symbols /path/to/lib/lib.so | grep -v _Z | tail" should help.

    ExtJS

    Wt wrappes a highly advanced (in terms of bringing desktop UX to the web) Javascript framework - ExtJs. Sadly, it is also big (roughly 80kb have to travel to the client first) and very buggy. It would seem that you could use ExtJS and make it use jQuery instead, perhaps that's worth a try. For now I disabled ExtJS in my little project, since I couldn't debug some of its issues. The Wt-native widgets seem to be quite solid in comparison (even if they look a bit boring).

    The installation instructions that come with Wt don't tell you how to install ExtJS, so here is what I found out:

    October 28, 2009
    Murray Cumming - October 28, 2009 - 09:34
    Trying qmake and CMake

    Until this week I was not familiar with qmake and CMake because I am a fairly satisfied user of autotools. I have not forgotten how strange it was when I first learned it, when there was no decent documentation, but things are much better now. I feel at home with it and I like how other systems and distros expect the standard “configure;make all install” steps. I am definitely biased against the use of other build systems.

    However, these days I have to deal with code that uses qmake and CMake and I can’t just be stubbornly ignorant. So I tried an experiment. I created branches of a little (but real-world) project that uses Qt and an extra library via pkg-config: qlom with qmake, and qlom with cmake. The master branch uses non-recursive autotools.

    I was not impressed. Please do add comments to correct me. I’d particular like patches that make my errors crystal clear and prove that it’s all much better than I think. I am capable of admitting error and changing my mind when appropriate.

    Bad Documentation. Weird Syntax

    Just like autotools, neither were easy to get started with. The documentation is fragmented, unclear, and incomplete. I found qmake easier than CMake, but that’s probably just because qmake does much less. Nevertheless, CMake has a real problem with documentation and in general, as a widely-used open-source project, it deserves a better infrastructure.

    They both suffer from one major problem shared by autotools: They have evolved over enough time that Google will happily return out-of-date examples and documentation, making the syntax seem more varied than it really is. I wish that autotools could force me not to use deprecated syntax. I don’t know if qmake and CMake can.

    As with autotools there’s a heavy dose or arbitrariness:

    No Respect For pkg-config

    I am dismayed that CMake expects people to write code for “Find” modules for each library they might use, while having poor support for the generic pkg-config solution. A project’s list of dependencies is data, not an excuse to write code. More code means more problems.

    In fact, after several days of trying, I still can’t figure out how to use pkg-config with cmake, so my glom_cmake branch is not finished yet.

    Most libraries provide the simple .pc files these days. The autotools PKG_CHECK_MODULES() macro makes it very easy to check for several dependencies at once. CMake feels too much like the bad old 90s when we suffered fragile copy-paste-hacked config scripts, custom m4, macros and verbose build files with separate CFLAGS and LIBS variables for each dependency, and inconsistent release-version and API-version checking.

    I understand that pkg-config is not popular on Windows or MacOS, and that those are awkward platforms to work with, but:

    CMake’s use of scripts just spreads the chaos to Linux instead of keeping things simple on Linux and improving the other platforms too.

    No Configure Stage

    With qmake, I really miss having a proper configure stage, with the resulting config.h so my code can use ifdefs. I like seeing a list of documented build options from configure –help, which neither qmake or cmake offer.

    CMake can generate a config.h, at least. However,

    Install is an Afterthought

    Both CMake and qmake require explicit extra syntax to actually install the built executable. With autotools you get this for free when using the regular bin_PROGRAMS to specify the executable name, though libraries do need more explicit instructions to install the correct headers in the correct place.

    Also, qmake and CMake have no make distcheck for making source tarball releases.

    This makes sense slightly because CMake (and maybe qmake) aim to support Windows, Mac, and Linux equally, and Windows has no real convention for installation of built-from-source binaries. CMake (and maybe qmake) generate convenient Visual Studio and X-Code project files, for instance. But the end results it that Linux and Linux conventions are not fully supported, so they feel like major regressions compared to autotools.

    (note: removed my nonsense with the TODO about the location of .o files.)

    Summary

    In summary, I think:

    I understand the wish to support Windows and Mac-specific build systems such as Visual Studio and X-Code. I just don’t like how qmake and cmake do that, and for me it’s not worth making things worse on Linux. Still, I’ll have to use these in some existing projects, so I’m glad that I’m more familiar with them now.

    October 25, 2009
    Michael Hasselmann - October 25, 2009 - 20:30
    Show me your home screen!

    To me the empty home screen* of the N900 looked like an invitation, so I tried to fill it up with useless stuff as quickly as possible. The home screen configuration menu offers app launchers (shortcuts), bookmarks, widgets and contacts. Let's go through all four options in detail:

    So what's on my current home screen?

    My current home screen

    I know - it looks as if this was a Symbian smartphone (that is, ugly and horribly crowded). But I like it this way, at least for now =)

    So what's on your current home screen?

    *: I still think dashboard is a better name.

    October 20, 2009
    Jan Arne Petersen - October 20, 2009 - 18:49
    Fremantle Hildon Desktop

    The source code of the Hildon Desktop for Maemo Fremantle including the hildon-deskop, libhildondesktop, hildon-home and hildon-status-menu components, which I worked on for the last year at Openismus, moved to a public git repository at maemo.gitorious.org. It is now easier to track the current developments or create your own modified version of the desktop for the N900.

    Michael Hasselmann - October 20, 2009 - 09:00
    Computer chess and the N900

    My first chess computer

    Years ago, when I was thoroughly fascinated by chess, I always wanted a portable chess computer. When I finally got one (a Novag Piccolo, for the odd chance someone else had the same device) I'd take it with me whenever possible. It got worn out quickly, moving the small plastic figures required more and more pressure to make the computer acknowledge my moves. For each move you first had to "touch" the figure you wanted to move. The computer would beep and show 2 LEDs (one for each row and line), for a lack of better feedback. Then you'd put the figure to its target location and "touch" it again, with the same feedback procedure for a valid move. If the move wasn't valid the error LED was lit. Perhaps this wasn't the best user interface in the world (I yearned for a self-moving Mephisto Phantom which actually was a Fidelity Phantom), but it worked for me and I was happy.

    The problem with computer chess

    The downside came when I realized there was a set of moves for each difficulty level that would always win. Later when Deep Blue won vs Garry Kasparov I lost interest in computer chess, because it seemed you could either have an imperfect machine that was boring to play (a certain set of moves would always win), or a nearly perfect machine that would bruteforce its way to victory. At least that's how the future looked to me in 1996.

    Could computer chess ever be fun again?

    With the N900 device lease programme from the Maemo Summit I think I finally got my very own special version of a Mephisto Phantom: The chess app that is installed by default moves "by itself" (duh ...), and with Hildon's finger touch paradigm I have a similar "board feeling" as with my old Novag Piccolo. And damn - this N900 surely is portable!

    How to make it less fun

    Now you would think that with an ARM Cortex-A8 it should be possible to play challenging but also fun games. But here comes the frustration again: gnuchess - the chess engine being used - comes without the opening book. Of course there might be valid reasons to not include the opening book/end game database:

    Only that chess engines are still too dumb to come up with meaningful opening moves on their own. Worse yet, gnuchess wasn't configured to randomize the outcome of its evaluation function. Which means: this device is still susceptible to the same strategy I used vs. my first chess computer nearly two decades ago!

    Conclusion

    The solution could of course be easy: Include the opening book and let gnuchess pick the worst move (even better: choose one randomly) from the lookup tables on easier difficulty levels, or limit how many moves into the game it is allowed to play "by the book". Also introduce random noise to force gnuchess into mistakes that are exploitable for casual players.

    I will continue to play chess games with the N900. Let's try to improve the chess app though!

    October 18, 2009
    André Klapper - October 18, 2009 - 15:46
    Maemo Summit 2009

    After spending three holidays in Amsterdam (rainy but still a wonderful time) we moved from our hotel to the Openismus apartment on the evening before the summit started. Great to see the friends/colleagues again, plus only 5 minutes of walking to the venue.

    As my laptop had died directly after arriving in Amsterdam this was a good chance to test whether Modest is an acceptable replacement. I ran into three issues: Not possible to mark several messages at once as read, no threading view (really important if you get lots of Bugzilla mail and want to read the previous one), and no option to search for a message (and not just in the one message that you have selected).

    Conference opening was nice. Jim Zemlin’s keynote (Linux Foundation) was a bit too much for me though, sounded like “Linux will have 101% market share next year because it’s better than everything”. Qole interviewing Ari Jaaksi had a good moment: Ari stated that having two bugtrackers does not make sense in the long run. Good to hear that common sense is shared.

    I was content with my talk about the current situation of maemo.org bug management (boring slides here, video hopefully later).

    Now that Nokia handed out 300 N900 pre-production devices to the folks at the summit, maemo.org Bugzilla has been flooded with new reports. Most of them have a good quality (seems like developers know that being exact in the initial description saves everybody’s time) but still it looks like more than we can currently perfectly(TM) handle so we need more help in the long run.
    Let’s see how the next weeks go, especially when average users have found their way to maemo.org Bugzilla and start filing their issues. Keep in mind that for many it will be the first time to do this, hence let’s be friendly and explain some triaging decisions whenever it makes sense (”Thanks for reporting this. This has been already reported.” or “Thanks, but this is not a bug in the software itself. Please go to http://talk.maemo.org to receive help in this case.”).
    As said, help is always welcome.

    Photo by thp4, CC licensed

    October 16, 2009
    Murray Cumming - October 16, 2009 - 15:06
    Glom on Maemo: Slight Improvements

    As expected, my Glom talk at the Maemo summit was rather under-attended while people went to the security talk next door. I had still hoped to do an entertaining talk for the video cameras, but my mind when blank and it was a bit of a shambles. The slides (or with notes that I forgot) should give you an idea of what I was trying to achieve.

    Since then I have made some more simple improvements to the Maemo 5 port of Glom, as you can see in this new video (youtube or .ogv on my site), again using the Sqlite version of the simple Music Collection example.

    These are the visible improvements:

    I will stop coding on this for a while, but I think I’ve shown what’s possible. And I think I’ve shown that Glom is already (or could be) the best base for a simple database-driven application on Maemo – far preferrable to writing code and SQL.

    The current code will be packaged in extras-devel soon.

    Qt’s Bug Tracker Is Not Very Open

    I use Qt again these days in addition to gtkmm and the rest of the GNOME stuff. Things have improved lots since I last used it seriously, though it’s still a little eccentric.

    Not long ago there was no public Qt bug tracker whatsoever, but now there almost is. And Qt now uses a public git repository for (most of) its ongoing work. And it’s LGPL now. Still, when there’s a real bug tracker (just use bugzilla, please) and real open development on a mailing list then I will be much happier. I hope they get there.

    Successful Open Source Needs More Than Just a License

    Regular Bugzilla’s such as GNOME’s or Maemo.org’s allow people to report problems, see previously-reported problems, and generally see how problems are dealt with. People can help other users and provide improvements to the software in a structured environment. Even without the aid of a bugmaster, the system gathers valuable information. You just register, login, and use it.

    When the developers (or the bugmaster) are not responsive then bugzilla provides the necessary public pressure to fix things. When developers are responsive it makes users happy and loyal. Being open increases quality. Being closed hides lack of quality.

    Qt’s public bug tracker is not open like that, even if you manage to find a link to it. I’ve only used it a little, but it’s been disappointing so far.

    Bug Reporting Is Not Open

    To file a bug you must:

    Even if you manage to get your bug accepted, there’s no “My bugs” list where you can track the progress of your issues. One of my email conversations just ended with a promise that it would be fixed, but no bug report was ever opened for that work to be tracked and confirmed.

    Bug Reports are Read-Only

    You can view some open (and accepted) bugs, but you can’t add any comments to them. So you can’t offer advice or a patch, or even give a clue about when to reproduce the problem. That’s a massive lost opportunity.

    Bad Habits

    Unfortunately, the early code-drop of the new Maemo 6 UI Framework and Homescreen shows the same old problem. There are promises to start “working openly” in the near future, and there’s reason to believe those promises. But why wait – in the meantime it’s under a license that forbids distribution or modification and there’s not the slightest suggestion of how people might provide feedback, as Michael Hasselmann noticed. “You’ll take it and like it” is not open development.

    Maybe I should close comments on this bug report to make it clear how frustrating it can be.

    Michael Hasselmann - October 16, 2009 - 12:42
    Who wants my feedback for the Maemo6-Qt tech preview?

    During the Maemo Summit there were several talks about the upcoming Maemo 6 platform and also about the transition from GTK+/Hildon to Qt. One of them - the "(Introduction to the) Harmattan UI framework" also mentioned where to get the code for the Maemo 6 UI Framework from. So I went there and cloned the two available repos (tech preview of the framework, tech preview of the homescreen) together with the most recent Qt version that is also on that site.

    But sadly, compiling the code wasn't possible for me. Apparantly because some header files were missing. The talk didn't mention a specific resource for feedback so I tried Maemo's Bugzilla. An e-mail to the git repo maintainer didn't yield any response (yet), either.

    I reckon that my bug report on the Maemo bugtracker was filed against the wrong module (Qt on Fremantle), but where else should I post problems like that? Even if at this stage the above mentioned repos are probably not much more than a widget gallery it seems like a wasted opportunity to collect feedback, no?

    October 14, 2009
    Daniel Elstner - October 14, 2009 - 18:39
    Simon Singh Wins Leave to Appeal!

    Rejoice! Simon Singh wins leave to appeal in BCA libel case!

    And now it begins!

    Murray Cumming - October 14, 2009 - 07:51
    Maemo Summit and N900

    Maemo Summit 2009

    The Maemo Summit was fun and very productive. The organization was excellent, obviously thanks to a generous budget and a dedicated hard-working maemo.org team. I met several interesting new people with whom I hope to work closely in future.

    I’m very glad that this was timed with important public announcements from Nokia, so people were actually allowed to talk to each other. And the generous loan of 300 pre-release N900s made our conversations realistic.

    Nokia N900 running Maemo 5 (Fremantle)

    This is the first chance I’ve had to actually use an N900 in daily life. I’m not quite the target customer, because I like tiny phones and I don’t have a flat-rate data plan, but for the past couple of years I’ve been using a N95 and then a N85 (a newer model than the N95), both Symbian S60 phones, just so I can use their good cameras to snap Liam and easily upload the pictures to Flickr.

    The N900 is already vastly better for my simple uses:

    My N900 and its applications don’t have these network problems.

    As well as solving these daily frustrations, the N900 has an amazing address book, which ends up being the main starting point for all communication. It brings all my SIM/phone, GoogleTalk, Jabber, Skype, SIP, and ovi.com chat contacts together in one list, allowing me to merge them together. Its use of the Telepathy framework means that even more backends will be added later – you can add some now though you risk breaking your phone by using unstable software. I do miss syncing contacts to ovi.com, though I feel sure that the feature will be added. This allows me to communicate easily with my friends via several methods, without using multiple fragmented applications when jumping between SMS or IM.

    And those conversations (even SMS) are actually presented as individual conversations, instead of just a jumble of messages in an inbox. It’s great to see the conversation’s history when writing a new message.

    I generally find that the Symbian phones don’t warn you when they are using the expensive 3G data connection , though this is again dependent on the application rather than being a system-level thing. I have not yet allowed my N900 to use the 3G connection, so I can’t say if it’s better. I anticipate that the use of a real operating system (Linux) can make this manageable. Unfortunately, network operators don’t want to help users with this. At some point they might realize that cheating customers is not a good strategy.

    Less buggy, and bugs can be reported

    I’ve found a few bugs – after all, this is not the final stable software. But even this pre-release is far less buggy than my awful Symbian phones. As a developer, I believe that Linux and its commonly-used tools has made this possible, though software development remains incredibly difficult for even the best people on any platform.

    Best of all, I can report the bugs at bugs.maemo.org and track their progress. For Symbian, all I can do is whine on my blog. People like companies that listen to their needs instead of hiding from their customers. André will be swamped by new feedback – don’t try this without a bugmaster.

    October 13, 2009
    Karsten Bräckelmann - October 13, 2009 - 01:51
    Why, what?

    If it’s a hardware failure, why does it strike twice in a row at 6 AM? If the four NIC goes bonkers, why is that related to the sound card? If it is a bus, why does a freaking centimeter make a difference?

    I don’t know.

    All I do know is, that I am back online. Different four NIC, different slot, minus sound card. So what the hell is really failing here? The four NIC, the sound card, the board — or a combination thereof?

    Definitely a combination. Something died, something is about to die.

    I am online. For the moment.

    October 12, 2009
    Mathias Hasselmann - October 12, 2009 - 20:48
    Back from Maemo Summit 2009

    So I am back from Maemo Summit 2009. Great people. Great show. Great talks. Great venue: Enjoyed it quite much to walk arround in the Westerpark, Marc-André loved the petting zoo.

    Hotest topic, of course: The N900. Thank you Nokia for lending those devices: Feels so good to finally have one for personal use! Finally got ideas for some private N900 hacking when reflecting responses to Travis' and my talk.

    Another hot topic was DRM on Harmattan. Fortunately David Greaves came to similar conclusions like I've reached so far: Maemo Security - Lockdown or Liberation. Could be I'm just a weirdo, but I seriously hope for game developers targeting Maemo: Already called Rover "My next Wii" in jokes for its nice screen and the acceleration sensor.

    Well, and then there still was this disappointment about Nokia moving to Qt as their prefered UI toolkit. Actually I wonder why people see this as problem: GTK+ was created without Microsoft or IBM holding our hands, so why does everyone expect Nokia to hold our hands for Maemo? If we really care about this platform, it should be absolutely possible for us to provide a proper GTK+ based toolkit for Maemo 6. Ideally Nokia would publish Layout guides and stuff early, so that we would not have to play catchup too much after device launch. Motivation and specs. More should not be needed. Really.

    October 08, 2009
    Murray Cumming - October 08, 2009 - 07:48
    Glom on Maemo: navigation video

    Here is a quick video (youtube,or .ogv on murrayc.com) showing the initial port of Glom for Maemo 5 as I navigate through the simple Music Collection example. Remember,  viewing and navigation are just a tiny part of Glom’s functionality. More imporantly, remember that the database designer would have implemented this little system (structure and UI) with no code and no SQL.

    I wanted to get this much done so I could talk more confidently about Glom during my presentation at the Maemo Summit on Sunday.

    This is also a more extensive test of the maemomm C++ bindings, which David King will do a talk about on Saturday. Maemomm is somewhere between Hildon (C, GTK+, extras) and Harmattan (C++, Qt, extras) in the current sea of programming languages and toolkits.

    (Sorry if some planet’s are showing HTML code here instead of the video. I don’t know why. Try the links above instead.)

    This is not a complete port, of course. There are some obvious problems. For instance, the + button in the list view should be a button in the main AppMenu. And on the details views:

    I should do some videos for the regular desktop version of Glom to give people an idea of what it can do.

    October 07, 2009
    David King - October 07, 2009 - 15:54
    Glom and Qt — Qlom
    I have been learning Qt at Openismus for a while, and recently started playing with the Maemo port. The result so far is Qlom, a Glom database viewer:


    While Glom is a Gtkmm application, it has a non-UI library component called libglom, which I have used from within Qt to deal with all the Glom document-parsing. It was interesting to find out that Qt uses the Glib main loop, which made everything a lot easier. I had to use Qt built from git in order to get the Maemo theming shown above, and some widgets are still not themed correctly, but hopefully this will improve with future releases against the final SDK.

    I will be presenting a talk at the Maemo Summit in Amsterdam on Saturday, at 12:00 in the N800 room. The talk is titled "Maemomm: Maemo with C++ and a Gtkmm flavour", where I will discuss the C++ bindings for Maemo Fremantle, which I have also worked on at Openismus. There will even be some comparisons with Qt…
    October 02, 2009
    André Klapper - October 02, 2009 - 21:20
    maemo.org Bugzilla: One year later.

    It’s the beginning of October and one year ago I started working fulltime as maemo.org Bugmaster (after I had started together with Karsten in May 2008).
    Where are we and what are the plans?

    Stats

    On 29 Sep 2008 there were 1076 open tickets (including Website). Now there are 658 open tickets (including Websites, excluding Extras). That of course does not mean that difference of 418 tickets has all been FIXED (some reports became WONTFIX or got closed due to lack of response of the reporters when asking for more information), but it shows that there’s activity, feedback and that reporters can expect that somebody cares about their issue.

    In the last 12 months 1501 reports have been filed (including 3rd party Extras apps, without it’s only 651). That’s normal average (10/2007–09/2008: 1690; 10/2006–09/2007: 1269). Curious what the number for the next 12 months will be though.

    Nokia

    What has only improved a bit is getting Nokia developers to work in the community instead of with the community. Big thanks to those trying it already.
    It’s the Nokia management that has to allocate developers’ time for this, and it’s the community that has to convince with arguments why it’s better for everybody (simply imagine managers and developers used to commercial closed source development, e.g. the S60 series). I won’t elaborate in this paragraph; in short: I do hope to see improvement here after Fremantle (Maemo5) launch and by having some discussions at the upcoming Maemo Summit.

    Misc

    Future

    Bugsquad

    I’ve already blogged about changes and expectations related to the N900 launch. One more thing that I’d like to add: After the N900 launch I want to start having monthly bugdays – the maemo.org Bugsquad is a great way for people that want to get involved but don’t necessarily want or know how to code. Bugsquads constantly need fresh blood as they always tend to “lose” members to the evil, evil codewriters fraction. ;-)

    You

    So what are your impressions and expectations with regard to maemo.org Bugzilla?

    (Picture by Dženan Šehić, CC licensed)

    September 30, 2009
    André Klapper - September 30, 2009 - 18:00
    “I have come to you in order to inform you that today your departure…”

    Exactly 20 years ago the West German foreign minister announced that the thousands of East German refugees were allowed to leave the Prague Embassy to West Germany.

    The video (click here if the embedded version does not work) still moves me to tears and reminds me that freedom is not made up principally of privileges, but it is made up especially of duties.

    September 25, 2009
    Karsten Bräckelmann - September 25, 2009 - 18:22
    Hackergotchi

    Finally, got myself a floating head. Woot! Yes, that’s me on the left (or right, depending where you actually read this).

    After being physically maltreated to get some decent pictures taken to work with, getting nicened-up, re-assembled and undergoing other unspeakable treatment — it is done. Thanks a ton to the artist, a close friend of mine.

    Oh, and yeah, unlike most pictures of me, I actually like my little hackergotchi. :)

    You can find it live right next to my posts on Planet GNOME, Planet Openismus, as well as statically on my blog’s main site.

    Murray Cumming - September 25, 2009 - 11:30
    Glom 1.12

    I just released Glom 1.12, roughly in-sync with GNOME’s release schedule.

    Most noticeably, Glom databases no longer require a user/password to open them, at least for the default self-hosted databases. That should be much less annoying. You’ll only need to specify a user and password when you choose to share your database over the network with other Glom users.

    We’ve also cleaned up libglom a bit, and David King has shown that it can be used for a simple Qt-based Glom viewer, provisionally called qlom.

    I’m currently working on a Maemo 5 (Fremantle) branch of Glom, with a radically simpler UI with picker buttons and more sub-windows. I need to get that mostly done so I have something for my Handheld Glom talk at the Maemo summit in Amsterdam. I’m planning some rants for that talk – I think it will be entertaining.

    September 23, 2009
    André Klapper - September 23, 2009 - 23:09
    GNOME 2.28 released!

    Just came back from the wonderful Vypsaná fixa album release party to see that there is yet another great GNOME major release available. Go check out the improvements and changes! Made to share!

    Work on GNOME 3 is ongoing, of course.

    (Picture by padro82, CC licensed)

    September 22, 2009
    Mathias Hasselmann - September 22, 2009 - 08:42
    Application Theming Tricks

    From time to time applications need custom theming rules. Especially when the project has professional UI designers involved. So how to achieve this with GTK+?

    Trivial Theming

    Most easy and very wrong:

    if (gdk_color_parse ("pink", &color))
        gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, &color);
    

    This will break and look childish as soon as your users use a custom color scheme.

    Better:

    static void
    style_set_cb (GtkWidget *widget,
                  GtkStyle *old_style)
    {
        GtkStyle *style = gtk_widget_get_style (widget);
    
        if (gtk_style_lookup_color (style, "SecondaryTextColor", &color))
            gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, &color);
    }
    
    static void
    my_widget_init (MyWidget *widget)
    {
        g_signal_connect (widget, "style-set", G_CALLBACK (style_set_cb), NULL);
    }
    

    This will allow theme designers to override your color choice. Notice that you'll have to update those color overrides when the theme changes. Btw, the "style-set" signal is emitted when the widget is realized, therefore you don't have to manually invoke the callback during widget construction.

    Guess it's also worth to mention that Hildon provides convenience API for simple theming requirements.

    Complex Problems

    So for simple requirements GTK+ (and Hildon) have reasonable API support. Things become troublesome when your designers invent rules like "this widget has a rounded border and drop shadow, but only within buttons". Obviously border and drop shadow radius should be themeable and therefore are implemented as style properties, but how to impose this rule?

    You could scan the widget hierarchy when choosing default values for your style properties:

    button = gtk_widget_get_ancestor (widget, GTK_TYPE_BUTTON);
    gtk_widget_style_get (widget, "border-radius", &border_radius, NULL);
    
    if (button)
        border_radius = (button ? 12 : 0);
    

    You'll quickly notice the flawed hard coded default value. Also such things are hard to override in theme files. So it's probably better to apply a custom theming rule via gtk_rc_parse_string():

    static void
    my_widget_class_init (MyWidgetClass *class)
    {
        ...
        gtk_rc_parse_string
            ("style 'my-widget-style-clickable' {"
             "    MyWidget::border-radius = 2"
             "}"
             "widget_class '*.<GtkButton>.MyWidget'"
             "style 'my-widget-style-clickable''");
        ...
    }
    

    Application Theme Files

    Looks like a perfect solution, until you realize that this rule is applied after all rules loaded from gtkrc files!

    So how to inject this rule before the user's theming rules? This was a big question to me until I've found gtk_rc_add_default_file(). Well almost: This function only adds files to the end of the search path. Therefore it suffers from the same issues as gtk_rc_parse_string(). Fortunately the API author was smart enough to also provide gtk_rc_get_default_files() and gtk_rc_set_default_files(). Those functions can be used to apply application specific theming rules, which can be overwritten by the user - drum roll please:

    static void
    inject_rc_file (const char *filename)
    {
        char **system_rc_files, **p;
        GPtrArray *custom_rc_files;
    
        system_rc_files = gtk_rc_get_default_files ();
        custom_rc_files = g_ptr_array_new ();
    
        g_ptr_array_add (custom_rc_files, g_strdup (filename));
    
        for (p = system_rc_files; *p; ++p)
                g_ptr_array_add (custom_rc_files, g_strdup (*p));
    
        g_ptr_array_add (custom_rc_files, NULL);
    
        gtk_rc_set_default_files ((gpointer) custom_rc_files->pdata);
        g_strfreev ((gpointer) g_ptr_array_free (custom_rc_files, FALSE));
    }
    
    int
    main (int argc,
          char **argv)
    {
        ...
        inject_rc_file (PKGDATADIR "/gtkrc." PACKAGE);
        gtk_init (&argc, &argv);
        ...
    }
    

    Update: Benjamin Berg just pointed out that priorities can be assigned to styles. So the following should work fine:

    gtk_rc_parse_string
        ("style 'my-widget-style-clickable' {"
         " MyWidget::border-radius = 2"
         "}"
         "widget_class '*.<GtkButton>.MyWidget'"
         "style : lowest 'my-widget-style-clickable''");
    

    Awesome, little know feature.

    Rant: Trade Imbalance Penalties
    Barack Obama on CNN: "We can't go back to the era where the Chinese or the Germans or other countries just are selling everything to us, we're taking out a bunch of credit card debt or home equity loans, but we're not selling anything to them".

    Found this quote when searching for stories supporting Financial Times Deutschland's story about US and UK officials having tried to establish trade penalties for export nations like China, Germany and Japan during the Pittsburg G20 summit. Either that story is just wrong, or US and UK turned into communistic dictatorships when I was sleeping under some rock. On the other hand FTD is considered one of the more reliable papers. At least Reuters seems to confirm the FTD story.

    So what's about "just" fixing your industries and producing desirable products again? Weren't US and UK usually the first with praising capitalism, competition, challenges? High wages cannot be the reason for your trade problems: German and Japanese industry workers are well paid.

    Well, now trying to calm down again.

    September 21, 2009
    Daniel Elstner - September 21, 2009 - 17:20
    Using config.site to set default options

    Just a quick note about a little-used feature of GNU Autoconf: site defaults.

    Until recently, I used to have a long list of assignments to module_autogenargs['...'] in my ~/.jhbuildrc file to set up default configure options for various modules. This became unwieldy and there was always one module I forgot.

    Autoconf comes to the rescue with its support for site defaults. For illustration, here is my ${prefix}/etc/config.site file:

    # Autoconf site defaults
    test -n "$enable_silent_rules" || enable_silent_rules=yes
    test -n "$enable_static" || enable_static=no
    test -n "$enable_warnings" || enable_warnings=fatal

    The effect is as if I had passed --enable-silent-rules --disable-static --enable-warnings=fatal to every module’s ./autogen.sh, except that I don’t get any annoying warnings if a module doesn’t actually support a particular option. The test conditionals ensure that command-line arguments have precedence over the default values in the config.site file.

    Read the manual for the gory details, if you want to. Otherwise, enjoy!

    Michael Hasselmann - September 21, 2009 - 16:30
    Why Squeak is not the answer, part 2

    Error handling (or god forbid, exception handling) is one of the weak parts in Squeak. A great deal of course comes from its dynamically typed nature. However, the greater impact probably comes from the utter lack of guard clauses in most core librares I've seen so far: Objects will happily accept any kind of parameter and continue to wrack havoc on them until the debugger, at some later point (IF we are lucky), stops the travesty.

    Let's move on to BitBlits, where the lack of parameter checking and the absence of proper initialization quickly crashes your VM. Why use BitBlits at all? Because Morphics are crap. More precisely, they feature:

    1. poor performance (I guess all the redrawing with overlapping Morphic instances doesn't come for free),
    2. a hideously complex class hierarchy
    3. undocumented models (say, the model for PluggableListMorph)
    4. a hard-to-access event loop (read: no ready-made support for signals & slots),
    5. a complex API (only for the base class Morph itself "Morph methodDictionary size" returns 1165 methods, yikes).

    Naturally, while using BitBlits or Forms most work is actually done by Squeak primitives, that is, external C code that is called by some Squeak wrappers. At this point proper argument checking becomes paramount, or else:

    Note the out-commented line, which would prevent the VM crash. Appearantly the form's depth isn't initialized. The funny part starts when you replace "destForm: form" with "destForm: Object new", which triggers the proper error handling and prevents the VM crash as well.

    The comment at the top of this method reads "deprecated". Sadly, bitmaps are much faster than any compressed image format, even after the initial reading (oops?). More importantly though is that we have different behaviour (crash/no crash) depending on the platform where this is executed. Wait a moment - a VM? Platform-dependant? Actually, this is not the only example, many Form methods will not work with the Linux VM. But instead of telling you, they'll happily crash the VM, too.

    (Get the magic bitmap here.)

    Oh well, at least Squeak is good when it comes to runtime optimizations, like any other VM. And loop unrolling is so basic it is hardly worth to test it. Or is it?

    This executes in 4ms on my machine.

    WTF?! 17ms? Well, one quick optimization is to store the range (interval) of the inner loop like so: innerLoop := 1 to: 3.

    +1 for everything (but variables) is an object, -1 for code obfuscation, +1 for getting execution time down to 12ms. But still. WTF?!? Does the code really spend 8 precious milliseconds in the loop variable handling (with other words, 67% of the execution time)?

    (My personal) conclusion: Squeak fails at getting basic stuff right. The things it gets right (reflection/introspection, fast development round-trips) are fantastic! But it suffers from a big NIH syndrome so that instead of wrapping useful and established libraries you are left alone with an incomprehensible "self-documenting" class library. Also, wrapping C libraries using the foreign function interface seemingly requires recompilation of the VM ... platform independence, anyone?

    I'd welcome comments correcting my perception problems with Squeak!

    September 17, 2009
    David King - September 17, 2009 - 16:51
    BeagleBoard guide
    We got a couple of BeagleBoards at the office a while ago, and have been playing with them a lot. As low-powered Linux-running devices they are quite fun, and being a completely different architecture brings some interesting problems. However, there is lots of active development to improve the support, both from the kernel and userspace. There are several distributions and toolchains that can be used, and the setup is relatively painless.

    To make it easier, we have written a guide on Getting started with the BeagleBoard, based on our experiences. We would be grateful for any comments or suggestions, enjoy!
    Daniel Elstner - September 17, 2009 - 10:17
    C++ bindings now in GNOME Documentation Library

    After more than a month of infrastructure work, most of the GNOME C++ binding documentation has now been migrated to the GNOME Documentation Library. This includes the Programming with gtkmm guide and the Doxygen API reference documentation of the core C++ binding modules. Compared to the old documentation hosted on the gtkmm website, we’ve now got a bigger pipe, more bling, and less work for us!

    All this would not have been possible without the help of Frédéric Péters, who did the actual integration work in the library-web module and has been very responsive to our numerous questions and tweak requests.

    Leading up to the migration, the build infrastructure of the GNOME C++ bindings was completely restructured. All the copy’n'paste of build files had degenerated into an unmaintainable mess. When it became clear that we lacked the infrastructure to properly support cross-references from one documentation module to another, I began to cook up something new to replace the mess. The result of this work is the new mm-common module, which provides the shared build support files for the C++ binding modules. As a novelty, it even comes with documentation!

    It is quite a bit of work to convert an existing module to use mm-common, and the transition took more time than I had expected. Despite that, the feedback was very positive, and a number of module maintainers started to convert their modules to mm-common on their own. Many thanks to David King, Fabien Parent, Jonathon Jongsma, José Alburquerque, Krzesimir Nowak and Murray Cumming for your work and feedback!

    September 09, 2009
    David King - September 09, 2009 - 22:15
    Leica M9 and X1
    Today, Kat and I went to Meister Camera in order to watch the Leica 09/09/09 announcement. I was a bit worried that I would feel out of place with all the people that might actually be able to afford a new camera(!), but it was pretty fun. We knew what the announcement would say, with the recent leaks and vigorous forum discussion, but it was still fun to watch, with a special appearence by Seal. Afterwards, we got to play with both the M9 and the X1, which I was more excited by than the M9. An SLR-sized sensor in a compact camera body, with manual controls and a great 35 mm-equivalent lens. Still, it's a bit too expensive.

    Playing with the M9 was pretty fun, and a lot of guys there seemed quite interested in how well the full-frame sensor worked with the wide-angle Tri-Elmar that I had with me. Reassuringly, it worked great, without the need for an IR filter! Testing with a 50/1.4 ASPH was really fun too, especially as it was the black paint LHSA version. Once I'd finished drooling over the ludicrously expensive limited-edition cameras and lenses (including the white M8), we decided to buy an expensive lens cap, and got chatting to a nice Leica collector from Berlin, and lots of others who were both excited and looking knowingly at their wallets. I think that I will have to settle for the lens cap, but I can still dream!