gtkmm

gtkmm

Lost of people use gtkmm for in-house stuff so we don’t get to see it. But I recently found this screenshot of a gtkmm-based GUI that controls an animatronic puppet in this article about Jim Henson’s Creature Shop (muppets, etc). It’s old so maybe people have seen it before.

gc announced that gtkmm will be in the next release of Mandrake Linux – it’s already in the unstable “cooker” thing. I’m still hoping that RedHat will respond to a little desperate customer demand – please don’t “me too”.

My DSL is delayed again, and might never happen, so patches are building up in bugzilla. The more this goes on the more people will help. Some people are already. At least it encourages people to submit finished patches knowing that I won’t have time to fix things for them. danielk, the other gtkmm maintainer is resurfacing, so that should help.

At least I have somewhere to live now – a cute little Haueschen near the centre of Linz.

Rabid Qtism

I can’t seem to post to LinuxToday without Guillaume repeating the same old arguments – see the comments. He’ll reply to this now. I generally stop replying to his replies after a while but I think it might be fun to see just how much he’s willing to repeat himself. I still don’t know why he bothers. His conclusions are interesting, because I also have lots of experience with lots of proprietary APIs and I’ve generally found that they are inept – so I concluded that stuff goes bad if nobody looks at it. There’s a metaphor in there somewhere.

Actually I think that one of Guillaume’s main problems is that he’s still working with old memories of GTK+ 1.2, and doesn’t realize that, unlike Qt, GTK+ and gtkmm were able to improve their APIs over time instead of stagnating.

I do get pissed off when Guillaume or others say that he’s someone who knows all about gtkmm and
decided that it couldn’t work. Firstly, gtkmm 2 clearly did work. But more importantly (and I’ve tried to avoid saying it until this provoked), Guillaume wasn’t ever all that involved. It wasn’t his fault because gtkmm 1.2 wasn’t that clear, but he really didn’t understand gtkmm – none of us did. It’s all better now. He did maintain the libgnomeui bindings (the old, smaller, gnomemm) but he didn’t do a good job, and I brought that API to stability.

Ars Electronica

I visited this techy museum thingy in Linz. It has some fun, simple, stuff in it, but the experience is ruined by the dot-com-era descriptions of the exhibits. Sometimes things are just fun things. And sometimes things are just pretty colors. Their VR Cave is a bit dismal. It would have been quite impressive 5 years ago but a laptop can do a lot more these days.

And anyway, I was expecting a giant electronic arse.

gnome-vfsmm

I wrapped a bit more of gnome-vfs for C++, added a directory-listing example, fixed the distcheck and released a first version. People had better help out with finishing this instead of waiting for others to do it for them. I mean it this time.

libsigc++ 2

Martin Schulze and some others are doing great work on the next-generation libsigc++, He's dealing well with a barrage of uninformed questions from me. We are having some of those big-but-essential discussions about API that involve several exhaustively-explored possibilities. He's doing a good job of directing it towards eventual, justified, decisions.

I really hope I don't have to maintain libsigc++ in future. There's so much other software I want to write and I have so little time these days.

Linz

After living in a Pension outside of town for a month, I just discovered a big climbing wall in the building next door. Next week I move into an apartment on the other side of town. Oh well.

German

My new work environment is all German all of the time. This is the first time that I've had to speak German at work. I don't know what changed. I make lots of mistakes, but people seem to tolerate it. I am often surprised that I am capable of doing it.

I do still get lost in sentence structure when trying to explain some abstract, possible, concepts – the things that are difficult to explain even in English. In the past I often used Die instead of Der for nouns, thinking that I'd be right as much of the time, but it would then look like I did it on purpose. I have extended the idea and now also decline nouns, adjectives, and pronouns almost at random.

War

The war is about as fucked-up as it could be. Such cynicism. The future was supposed to be better than this.

gtkmm

Cedric Gustin’s windows installer is a wonderful example of gtkmm‘s cross-platform ability. It installs the demo so you can see it working straight away, and it installs the documentation prominently so you can see how hard we’ve worked on it.

I have been trying to process bugs and patches this week without actually being able to apply anything. Ole Larson helped me out by applying some of them when they were ready. Hopefully more people will help me with this administrivia in the future. I really want to do more coding/designing instead of just tending bugzilla and mailing lists.

libsigc++

Martin Schulze released a first version of libsigc++ 2. It’s very different to the libsigc++ 1.2 that we use for gtkmm 2, and I suspect that it’s going to have some major API changes. I’m trying not to get too involved, but as far as I can tell it is more STL-like and <proj>boost-like, attempting to reuse as much as possible from both. The differences between boost’s signals and libsigc++ are not that clear to me yet, though there are some clues scattered throughout the archives.

GNOME 2.4 new modules

We really need more proposals/discussion of GEP 11 so that the release-team knows what people want.

There is some controversy over Galeon v. epiphany. I don’t use either at the moment, though I’m trying out epiphany from jhbuild. As I understand it they are both based on much the same base, so I can’t see how the decision for one or the other will make a huge difference, as long as the one that’s chosen fits in nicely with the release process.

I think the next round of new modules will find us discussing whether we need to define what is appropriate for the GNOME desktop release, rather than just whether its ready for inclusion. And if we decide to draw a line then we might need to define where that line is. I don’t think it’s good enough to just say we need to include equivalents of everything that’s bundled with Windows, because Windows is not driven by user’s needs, but by the wish to create and maintain monopolies. I don’t even see much need for a separate release set – the equivalent Windows Office release set (=”bundle”) only exists to maintain the monopoly.

But I’m not worried that new modules take effort away from incremental improvements in core desktop functionality, because new modules are mostly maintained and developed by new people.

GUADEC

GUADEC 4 is looking more and more interesting as the paper abstracts roll in. Book your flights/accomodation now.

ClearCase

My loathing of ClearCase increases daily. In addition to the points I made eariler, here are a couple more big disadvantages:

  • Instead of working with temporary local copies and showing each other patches, each developer creates temporary branches for their work.

    These branches tend to be used by more than one developer, and tend to contain more than one new feature or bugfix. These branches need to be merged later, which is difficult because their changes are not tightly focused.

    Imagine GNOME’s CVS with 50 branches at any one time. Sometimes simpler really is easier.

  • Branching is per-file, not per module or per project or per directory, and only already-changed files are branched.

    So, every time you edit a file you need to issue a branch command. There are ways to do that automatically, but, because there are so many branches, that system can’t be trusted to figure things out properly.

    Instead of just getting a branch of a module, people tend to get the latest stuff plus a few specified branched files from the module. Imagine the stable GNOME branch getting the latest wacky changes from the unstable branch just because nobody needed to change those files in the stable branch yet. Yes, that would be an unbuildable stable branch at the least.

    This branching system is clearly a performance optimisation with awful effects on user functionality. I’d rather have a slower system (though CVS isn’t) that was actually usable.

I suspect that people believe the salesmen who tell them that ClearCase is a solution for complex branching situations. But in fact, ClearCase forces complex branching on simple systems, attempting to justify its own existence. I’m sure everyone would be far better of without it.

Linz Connection problems

This is a terrible week for internet connectivity in Linz. For the last few weeks the company rented a room in the university building down the street so I could walk down there with my laptop and use their unproxied connection. But that isn't available anymore. I might start knocking on doors in the students' building and offer them euros for the use of their network sockets.

So this week will be an experiment showing how much I can achieve just by sending emails.

I found LinzNet who seem to offer a better, simpler, ADSL than Austrian Telekom. Has anyone used them?

This is the Hauptplatz in Linz. I like it, but I don't know why. My new apartment is nearby.

easy-fix

aldug has now added an easy-fix column to our GNOME bugzilla reports, showing bugs with the easy-fix keyword. In combination with the column showing the number of outstanding patches, I think this is the single best way to involve new people and to reinvolve existing people. But maintainers must use it.

gtkmm

Cedric Gustin finished the changes necessary to make gtkmm 2.2 build on Windows. Even better, he created a Windows installer for it, like the one for GTK+. Soon he should have a version that installs an example too. That should be very persuasive. People often list Qt's cross-platform ability as an important feature so I like to show that gtkmm can do it too.

libsigc++

Martin Schulze and Andreas Rottmann are doing great work on the unstable libsigc++ 2. We should have a first tarball release soon.

And Dr Dobbs magazine had a nice article recently about the 1.2 API, comparinng it favourably to C#'s equivalent.

ClearQuest

I started using ClearQuest yesterday and, surprise, surprise, it is a disaster, just like ClearCase. Eventually people must learn that software that's so expensive that only a few people use it is invitably awful. People get a certain confidence from paying vast amounts for proprietary software, but that confidence never lasts more than a few days after the installation. I keep seeing the same situation over and over again. The future can only be better.

The whole idea of a bug-tracker which only allows (some) developers to enter bugs is silly.

Bonobo(mm)

Recent discussions about D-BUS and Bonobo (not necessarily versus) got me thinking about bonobomm again.

I think the main reason bonobomm hasn't moved very fast is that nobody really seems to need to use it, so there is nothing to drive its development. I was thinking why I have found COM and ActiveX so useful (though difficult) on Windows in the past, but don't feel much need for it on linux. I think these are the reasons:

  • Unlike GTK+ and Qt, MFC and VB don't do widget/control nesting, so it's very hard to define new native widgets that are groups of other widgets.
  • MFC and VB don't provide decent high-level controls such as grids or trees, so everyone implements their own. They do it in COM because of 1. Instead, GTK+ provides widgets that are actually usable.
  • Lots of companies use both C++ and VB so it's nice to reuse code in both. Most linux application still seem to be written in C or C++ so apps can reuse code without a binary interoperable component system. I think the growth of Python as an application development language could change that, but it isn't happening very fast.

D-BUS

I don't like the idea of D-BUS string APIs, but I can live with it for very simple response/request stuff. I think a CORBA-based system could be a lot neater, but it's very clear that ORBit/Bonobo has had its chance and it's time to use something that will get the job done. It's not a failure of CORBA – it's a failure to document and explain before pushing on with ever more development.

Therefore Bonobo's best hope for survival is to stop attempting to be everything and concentrate on being viable for a much smaller amount of functionality. That means dynamically-chosen cross-programming-language (visual) components and probably nothing else. It is yet to be seen whether that's actually useful or necessary for anything other than graphs inside spreadsheets.

libxml++

We took a vote to resolve the everything-should-be-a-template versus the just-use-ustring argument which didn't solve the issue but at least made it easier for me to say “you fork if you want to”.

libxml++ 1.0.0 should bre released quite soon, with a frozen API, so take a look now before it's too late.

Linz

I'm gradually settling down in Linz, getting back to Munich for the weekends as much as possible. I am still suffering terrible internet withdrawal, grabbing moments of un-proxied cvs access here and there. This weekend I found a
wonderful little apartment for a few months, so I guess I'll have to get some DSL sorted out. Unfortunately I can't move in for another 3 weeks.

I didn't like the idea of working outside of Munich, but Linz is actually quite close – only 3 hours on the train. Plus it should be quite cheap to live here. And I'm really looking forward to weekends in the mountains in the summer.

After I arrived, I was disgusted to see that the Austrian government teamed up with the far-right party again. I was even more disgusted to see that it was hardly reported in foreign newspapers or TV. Looking for appartments here showed that there really is a problem with the far-right – many of the ads specify clearly that they will only consider Austrians, not even Germans. Not only is that illegal under european law, but it amazes me that this society finds it acceptable.

Paid work is quite frustrating at the moment. I'm dealing with an eccentric build system and an eccentric version control system. I think ClearCase is to blame for most of the problems.

ClearCase

Quite apart from the difficult of using it, Clearcase actually seems to be lacking major functionality. It is quite hopeless compared to regular cvs combined with an lxr/bonsai web site. Apparently it deals well with branches, but so far it looks like it just requires people to branch more often, as workarounds for trivial ClearCase problems. Branching is always complex and should be restricted to maintenance/development branches and occasional short-term experiment branches. The difficulties of not-branching are generally less than the difficulties of managing branches.

Clearcase

  • doesn't allow you to review your changes before checking them in, so all kinds of crap ends up in the official sources.
  • doesn't show you changes per-directory, only per-file.
  • doesn't, or doesn't easily, show you the check-in comments when it shows you changes to a file.
  • doesn't, or doesn't easily, show you the changes when you review the history of a file.
  • doesn't, or doesn't easily, show you changes made in the same check-in when it shows you changes to a file.
  • encourages the use of complex config scripts to define views instead of just offering to show particular branches. So in addition to multiple branches, teams finding themselves using multiple complex combinations of those branches.

Going to Linz, Austria

I’ve been back in Munich for the weekend, but I’m about to leave again for Linz, Austria for another week of training – on a proprietary C++ GUI toolkit for mobile phones. It looks like I will continue to work in Linz afterwards, but it might yet be Frankfurt. Linz seems pleasant and it could be nice to be there during the summer.

I used the connection-less time to fix the memory management in mysqlcppapi, something that I’ve been meaning to do for the last year. I also updated Glom to use the latest version, and fixed a few more regressions left over from the port to gtkmm2. This also showed a libxml++ problem so I fixed that and released a new version.

Matthew Tuck provided some fixes for some remaining “Save Changes?” problems in Bakery caused by the GUI-abstraction change. It’s nice to see these fixes automatically available to all applications built on Bakery.

Nie wieder

Germans tend not to express their opinions much, but it’s great to see that as individuals they have a limit. “Nie wieder” is a powerful moral imperative. I’m really glad I live here.

GNOME release notes

gman, jfleck , louie, jdub and I spent a frenzied few days working on the GNOME release notes. Because we use the latest cvs stuff all the time, seeing gradual changes, and because people don’t use NEWS files like they should, it was really hard to find out what exactly had changed. But I think it turned out well. I was pleasantly surprised by jfleck‘s perfect Strunk & White-like rewriting/editing ability. He can write. That’s rare.

I’m glad that we got the “GNOME is simple and works” message across. It really is the most important thing about GNOME these days, and it’s a very good thing. I think it’s easy for people to consider deployment of a small, non-mysterious, comprehensive system.

I wasn’t around for the actual release because I had to travel up to Hannover at the last minute for an interview about a new contract. I seem to have bagged it, so I should be working in Frankfurt for a few months after 2 weeks of training in Linz, Austria. I’m particularly pleased that I passed an Interview in german. I had 2 disastrous interviews in german in the past and those are the only interviews in the last decade that I’ve not had offers from. I’m still a long way from fluency, but I’ve improved lots over the last few months. Reading is getting easier too – I’m reading newspapers almost as quickly as english ones. I’ve almost finished Thomas Brussig’s Helden Wie Wir, which is teaching me lots of dirty words.

Although it’s good that the maintainer of all of these projects can pay the rent in the future, I will probably have less time for the next few months. Luckily everything is clear and planned and people know what to do.

libxml++ was very frustrating recently. I had to explain to an over-eager contributor why his patch should not contain unrelated changes or introduce regressions, and we had to revise his patch 6 times. He was then given cvs write access and made a terrible mess of our cvs because he had not been given a chance to learn how to contribute. Rather than have to ask someone not to do the wrong things it’s normally much easier to just say “You can do this” and let them learn why by watching. It sounds unhelpful, but people only seem to understand maintainership when they see it done. Some day I might write some justification down in one document but I think first-time contributors still wouldn’t understand the importance without first-hand experience.

I have so many projects at the moment that it’s very frustrating to think again that I should take over another maintainership just to keep a project on track.

Glom port to gtkmm2

After a year or so of occasional porting while I waited for other stuff to compile, I finally finished porting Glom to gtkmm 2. This one has much simpler dependencies, with no need for Xerces-C++ or gnomemm or GtkExtra–. There is now a slim chance that I might actually start adding functionality to it, though I’d like to explore use of libgda instead of just using MySQL

glibmm and gtkmm 2.4 are in gnome’s cvs, with those module names, and pretty much ready for release as soon as glib and GTK+ 2.3.0 versions are released.

Now it’s just orbitcpp that still needs work.

gtkmm 2.2.0

We released gtkmm 2.2.0 and began branching for gtkmm 2.4 which will break API to allow us to make some more improvements. I’m very glad that gtkmm is now so much more in sync with GTK+ compared with the past.

And now that libxml++ has been released with its new DOM-like API, I was able to release the new UI-abstracted Bakery and a couple of apps that depend on it – PrefixSuffix and SubSubSub

I updated the orbitcpp web page, created a gnome.org mailing list, and released a new version to try to stimulate some more interest. I wish we could get people working on it so that gnomemm could stabilize. libgnomeui’s dependency on libbonoboui is starting to become annoying because it doesn’t seem to be used much in the API. And I’m starting to think that it was very foolish for GNOME to decide to write its own CORBA ORB and to expect language bindings to write their own CORBA mappings for that ORB. I thought the whole point of CORBA was reuse.

However, I’m not impressed by KDE’s DCOP alternative – strings are a lousy API. And they built that awkard system because of performance problems with their own CORBA ORB (something that isn’t a problem with ORBit), instead of just fixing the performance problems. There may be other reasons not to use CORBA (e.g. having to use CORBA types) but that’s not what was mentioned at the time.

For Bonobo to survive, I think it needs to slim down to only a component model and surrender the UI/menu/toolbar stuff to GTK+ and its new libegg APIs. If Bonobo becomes simple and tightly focused then maybe its API can be improved by the community.

Real life is kind of in limbo at the moment. I decided I have to give up this freelancing malarky and find a real job. Hopefully I can get something in Muenchen that’s at least Unixy. I find it very strange to be in this position after the last few years of success.

I run now in the scraggly Truderingerwald out here in the Munich suburbs. There are few things better than running at constant speed across a snow-covered field with Bernadette on the headphones, trailing breath behind me, thinking I would so buy the soundtrack to my life.