orbitcpp

I played around with orbitcpp a bit, understanding how it writes appropriate C++ code when it encounters IDL. I mostly implemented the CORBA::Any stuff, and I’m confident that I can finish that off now. I’m pleased it’s no longer a mystery. I do need to get more people involved, particularly that whole group of orbitcpp-0.3 people. Unfortunately we can’t expect orbitcpp to be API stable for a while, and that prevents libgnomeuimm from being stable too.

Therefore, I have almost finished converting Bakery to depend only on the stable gtkmm, gconfmm, and libglademm libraries. This means that the Bakery-using applications can actually be distributed because they won’t have unstable dependencies. Well, that’s assuming that I can push libxml++ towards a stable API.

I’m really pleased with the result of this refactoring in Bakery. I have mostly separated the whole App/Document/View model implementation from the GUI presentation of those concepts. This means it will be easy to create a Bakery_GnomeUI extension library which uses Gnome::App and libgnomeui menus and toolbars instead of the gtkmm stuff. I’m confident that we could even create a Bakery_Qt version (I did a proprietary standalone Qt port of Bakery once). You’d never reach this level of abstraction and reuse in C.

Bakery has been getting more attention recently, of the “Thanks, that’s made my life easier” kind.

API/ABI-frozen libglademm

I released an API/ABI-frozen libglademm, with some last minutes improvements from danielk. Hopefully this will encourage people to use it rather than writing all that tedious source code just to layout widgets. I added a chapter about it to the gtkmm book to encourage its use.

We also released gtkmm 2.1.1, a couple of days after GTK+ 2.2.0. Our next release can probably be 2.2.0 – I’m pleased that we are back in sync.

I spend the last couple of days fixing the Gtk::Clipboard API, writing examples to use it, and then writing a chapter in the book to explain it. It seems pretty good now, and naturally it’s much simpler than the C API.

While waiting for gtkmm to rebuild, I updated the Release Planning modules list on developer.gnome.org and made sure that meta-gnome-desktop in jhbuild includes the new GNOME 2.2 stuff such as GStreamer and nautilus-media. Apparently aldug and Wayne Schuller are working on the bugzilla GNOME report scripts. I’m looking forward to using them as the basis of a release status and how-to-help page.

libgnomecanvasmm and gconfmm: API frozen

I released 2.0.0 API/ABI-frozen versions of libgnomecanvasmm and gconfmm, and I expect to release 2.0.0 of libglademm soon. I should add a libglademm chapter to the gtkmm book, because it’s obviously the sane thing to use. Freezing these parts of gnomemm should make it more obvious that the remaining work needed is in libbonobo*mm and orbitcpp. I’m thinking of spending the holidays fixing the “WRITE ME” parts of orbitcpp, though there will be quite a steep learning curve because I haven’t paid enough attention to what cactus has done.

Using the new XML-capable Bakery and libglademm, I was able to write a new application – SubSubSub. It’s something that I’ve tried without much success in the past with PowerPlant and MFC/ActiveX, but I was able to do it with Bakery in only a couple of days. Unlike MFC’s resource files, libglademm makes it really easy to visually edit the appearance of custom widgets and that really helped.

However, I did have to fix a few libxml++ bugs, and the released libxml++ still needs fixing. It is gradually moving towards a more DOM-specification-compliant API, with various node-type sub classes, though we’ll try to keep things simple.

I’m really impressed by jamesh‘s new “dot” feature in jhbuild, which shows dependency graphs with graphviz. Here are some gtkmm examples, and one for the GNOME 2.2 Desktop, and one for all of the stuff in jhbuild. Note that these are cvs-build-time dependencies – it’s slightly simpler for tarball/binary dependencies

GNOME 2.2 seems to be trundling towards it’s release date fairly well, with only minor problems here and there. The exciting visible changes stage is now over, so it’ll be mostly just stability bugfixing from now on.

I made a bit of a fuss about the GNOME HIG and nullity‘s recent neglect of it. This resulted in some clarification, particularly the removal of some silly problem-causing technical advice, and a clearer understanding that GTK+ won’t do anything much about the HIG until after GKT+ 2.2.

I’ve been skiing a couple of times recently – to the Stubai glacier and to Gerlos in Zillertal – pretty good conditions, particularly at Stubai. Skiing is so exhillerating – it’s like having super powers.

I saw the Copenhagen play, in german at the TeamTheater. I loved how it played with quantum theory ideas to flesh out an episode about which we know very little of substance.

Still no contract/work.

gtkmm book

Over the past few weeks I have gradually updated the widget-specific chapters in the Programming with gtkmm book, and I’m mostly finished now. This became a lot easier after I gave up trying to keep inline example code in sync with the real source files. Unfortunately DocBook XML currently has no way to include example code, so we might have to do some perl processing later – at the moment we just link to the examples directories.

I have also added screenshots of all the examples, which seems to make it more appealing. Apart from the Basics section and the in-depth appendices, I don’t really think that the book can provide much more information than the reference documentation. That’s because the reference documentation is so good. Again, I chose to add links to the reference docs instead of duplicating the information in the book. If this is ever published on paper, it would make sense to put the reference docs in the same book.

We do still need to write a real step-by-step tutorial. I’m trying to think of a worthwhile, but not too complicated, example.

I’m now on the GNOME release-team, because telsa didn’t have enough time anymore. I will try to be useful. I’m making a list of stuff to pay attention to. Ideally that list will become a How-To-Get-Involved-By-Doing-Simple-Stuff page.

I have switched to jhbuild instead of vicious-build-scripts to build GNOME from CVS, because it seems to handle multiple autotools versions better, and it’s more intelligent when dealing with failed modules. For the past few weeks I have been guilty of waiting for someone else to fix jhbuild build breakages, but this week I finally gave in and started investigating stuff myself.

I replaced my Redhat 7.3 with Redhat 8. It really is a lot better and more consistent. Plus, it’s great to finally use gcc 3.2.

I read Maus 1 and 2, in German.

regexxer

danielk‘s regexxer may be a killer-app. It does multi-file search-and-replace, using regular expressions. It shows the power of GUIs by giving visual feedback every step of the way – it tells you which files will be affected, highlights the search matches and gives a preview of the changed text. No more worrying about whether you got that command-line command correct before processing hundreds of files. I always needed regexxer and now it exists. I hear it’s in debian already.

I’ve been struggling with jakarta-tomcat and cocoon recently, on a hosted server that I’ve created for just this purpose. It is so difficult to install these things – the documentation is awful. I have given up connecting tomcat to apache, though it used to be simple, and I’ve given up getting the Cocoon Portal to work. It’s a real pity because the idea sounds great and I’m sure customers would like to pay for websites built on that kind of architecture. It’s frustrating – if it was a C++ project then I’d just fix it, but I’m not confident enough with Java/JSP these days.

libxml++

I spent a couple of days refactoring libxml++, so that I’d have an XML parser to use in Bakery. It let me move the Document_XML class into Bakery itself. I give up on Xerces-C++ – maybe I’ll look at it again after a few years. It will have either died or got a clue about API stability, versioning, and packaging. It will take a long time until libxml++ does everything that people need, of course.

gtkmm has branched for 2.2, so we can add the GTK+ 2.2. API additions. It should happen quite quickly. I also updated our bugs page. so people can work on the future API break. I think every GNOME sub-project should have a page like that.

I finally uploaded the random photos from the gtkmm get-together in Berlin. Here’s a group shot, red-eye and all.

With all this talk of regime change in Iraq, and Ben Kingsley’s successful portrayal of an unthreatening leader in Afghanistan, I wonder who the Americans will get to take over from Saddam Hussein. I bet that Anthony Hopkins is getting into character.

gtkmm 2.0.0

The big news is that I finally released a binary-API-frozen gtkmm 2.0.0. It’s been almost exactly a year since we started, but it feels like a lot more. I’ve sunk an insane amount of time into it, and I suspect that danielk must feel the same. But the end result is damned good, and seems to be appreciated by many people. I’m proud that we had about 30 patch submitters to credit in the announcement – I feel a little guilty when people thank me personally.

I’m sure we’ve missed stuff, and we’ll want to make API changes. But that will not be the end of the world – the patches can wait until the next API break. We don’t expect the C++ APIs to stay stable as long as C libraries. Every time I mention API stability it seems I have to explain that API stability is about the API not changing, rather than about the code being likely to crash, or being somehow dodgy. So there, I just explained it in advance.

Now that there are taballs of the ORBit that support orbitcpp I think we should start using libbonobo*mm in gnomemm 2, with the aim of completing it. That should give people something new to patch.

Talk of APIs leads me back to Xerces-C++, which still doesn’t seem to have any concept of API stability or parallel installations. In the latest version, make install doesn’t even seem to work. It’s always been difficult to package Xerces-C++ for distributions, but this is taking things too far. What’s the point of a library that nothing can depend on? I’ve tried at various times to get these points across to the current Xerces-C++ maintainers, but they just don’t get it, and it takes them so long to take the baby steps. So, sadly, it looks like I’m going to kick libxml++ into shape instead, because that shouldn’t stop me from actually releasing applications.

I’m not exactly sure how this works, but I like that googlism says that I am the person to speak to.

I have been reading lots of german recently – Arthur Schnitzler’s Traumnovelle, Kafka’s Die Verwandlung and Thomas Mann’s Der Tod in Venedig. It’s getting easier. I’m also translating my CV into german, because things aren’t working out so well so far.

I’m trying to explore the new Pinakothek der Moderne in occasional half hour bursts when they wave the entrance fee at the end of the day. After 3 years in Munich, I only just visited the Lenbachhaus and I’m sorry I didn’t go sooner.

gtkmm: Berlin get-together

I spent the weekend in Berlin with some of the other gtkmm hackers. It was worth meeting people in person – it’s very difficult to guess peoples’ personalities otherwise. danielk seems to be back with us, but now finds it almost impossible to understand me face to face. It’s a good thing that we communicate so well online. I also met cactus again, who I’m really beginning to like because he laughs at my jokes. And Christof Pettig, who explained how glademm is actually a good thing. He seems to use gtkmm for lots of in-house stuff at work. For a settled family man, he also has a bizarre but harmless interest in those DnD-style boardgames. Andreas Holzmann, who is official maintainer of libgnomecanvasmm, has the confidence to say very little until necessary, or maybe he just has problems with my English too. He’s also lucky enough to be using gtkmm in a paid job. I didn’t know Sebastian Rittau very well before but he seems like a nice, energetic, guy, involved in regular GNOME as well as just gtkmm. He really saved us by suggesting the Old Emerald Isle pub as a meeting place.

cactus and I were also able to announce that the separate orbitcpp C++ CORBA mapping for ORBit2 now works. thanks to markmc‘s efforts. And I just got libbonobouimm working with it. The C++-in-ORBit-itself idea didn’t happen in the end but it’s working fine as a separate module. As soon as a release of ORBit2 HEAD is made then we can complete the gnomemm APIs using the libbonobouimm classes. And I’ll expect some help with that.

We did decide to binary freeze and release gtkmm 2.0 by Halloween at the latest, but I might try to do it before that. As an escape clause, we might break the API again for gtkmm 2.4 because it might be necessary for GTK+ API additions. But we’ll avoid it if we can. We just have to accept that we will miss some things.

In anticipation of the gtkmm freeze, I released a binary API-frozen libsigc++ 1.2.0. kenelson gave us his reworked 1.9 code and I hope that someone will get that new development phase underway and eventually take over maintainership.

Real life is also taking time away from development work, but in a good way. And with my dial-up, it’s also very difficult to be quite as tediously exact and omnipresent as normal so there’s a risk that it might look like I don’t care.

gtkmm get-together

I’m looking forward to the informal gtkmm get-together on the 5th October in Berlin. It’s a nice chance to meet people who we usually just talk to through emails, and it’s nice that people think it’s worth getting on a plane. danielk, cactus, Andreas Holzmann, Christian Pettig and Sebastian Rittau should be there. It’s completely disorganised, but isn’t that the point of real life as opposed to online life? Yes, it’s a poor excuse.

I am confident that gtkmm is going to hit 2.0.0 some time soon. We have made more API changes recently but they have all been in the pangomm and glibmm parts which aren’t used much yet. But I know we shouldn’t rush it. On the other hand, I’m thinking of breaking the API again for GTK+ 2.4, so that should give us a second chance while also providing a solution with a stable API.

I am now back in Munich, with limited internet access until I get DSL, and not able to do much work until my ebay-ed laptop arrives. However, I’m glad to be back – there’s more to life than bandwidth.

Of course, I would like it to be generally known that I’m looking for interesting UNIX/C++ work in Munich.

The last week in London was pretty good. I visited London’s tamiltown in Eastham with my friend Kari, after hearing about it often when we worked in Munich. And I extended my run east of Hampstead, taking a look at the effortless wealth of Highgate and discovering the fantastic view into London from Archway Bridge at dusk.

Returned from a week in Munich

I just returned from a week in Munich, with a brief yet intense visit to the Austrian alps. Now I feel alive again.

And I’ve booked my one-way ticket back – 2 weeks from now. There’s still a few details to work out, such as finding a new contract. But that looks more likely there than in London. And I’d prefer to be there while I’m looking. Luckily, a friend has a place to rent, so that’s part of the problem solved. It’s good to make the decision finally. I’m even getting more serious about perfecting my language skills, aiming to read some German literature in the original. I think I can make this work. It’s a risk, but one worth exploring.

A gnome hacker friend recommended me for a very interesting open-source job in Barcelona. I had to reject it in the end partly because of some ethical worries, but felt annoyed by my own principles. The gtkmm mailing list also started getting emails from people working at defence companies, and I am still not sure whether it’s right to answer them. For now I will as long as it’s clearly helpful to others too.

More real-world friends seem to be reading this diary now. That’s so much more efficient than a regular relationship.

I’m about to buy a Dell Inspiron 4150 to run Linux. Tell me now if that’s a bad idea. Maybe now I’ll be able to get my life under the baggage weight limit.