Category Archives: General

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.

gtkmm: Closer to a stable release

gtkmm is edging closer to a stable release. I think the freeze announcement did a good job of shaking those last API patches out of people. I spent some time on another lifecycle bug. It turned out to be something simple, and I would have seen that quickly if I had just used valgrind at the start. nullity said some good things about gtkmm, which is nice.

I finished setting up lxr and bonsa at work – we now have a complete system much like the one at cvs.gnome.org. I wrote some extra notes to supplement gleblanc‘s installation instructions.

Running is now becoming ridiculous. The canal is a great discovery. I can’t believe that I lived in London before and had no real idea it was there, cutting quietly through London. Hampstead Heath is far too small for me now – I just get to the top of Parliament Hill and pick a landmark to head for. This time I made it along a meandering route to the river, across to the London Eye and back across to Hyde Park. I have made London small.

I’m more and more sure that I want to go back to Munich – I just need to find some work there. Nevermind a contract, I think I’d take any Unix job there.

gtkmm API freeze

Just lost another weekend to gtkmm. Andreas Holzmann fixed our last API bug, so I thought we were ready for a source-frozen release. But then Michael v. Szombathely found that we were leaking GtkDialogs. It turned out to need quite a hefty recoding of the various bits of code that link the gtkmm and GTK+ object lifecycles. I spent all of Saturday and most of Sunday doing that, and the code is now even better documented than before.

But I now find that one or two of our examples, particularly the menus, segfault on quit, somewhere in memcpy(). I just downloaded Valgrind and it looks like it's going to be very helpful. I'm already impressed.

I'm pleased to see that julian is working on the gnomemm2 port of Gabber. Like everyone he's finding that you have to completely recode for TreeView. But it could be worse – he could be doing it with the C API. I'm glad that I created a generic grid interface for Glom. It's still a lot of work to convert from GtkExtra::Sheet to Gtk::TreeView, but at least it's all in one place.

The past 2 weeks have been hellish at work. I've been fighting with MSMQ and it's apparent inability to either send or receive messages. I've never known any piece of software to so defy prediction. No two tests ever yield the same results. In a sane world I'd be able to quickly see what was wrong by looking at the code. Unfortunately I can't seem to find any open-source message queues that don't have only Java interfaces.

I went to the South Bank's Hayward gallery the other day, to see photography exhibitions by William Eggleston and Ansel Adams. I particularly recommend the first one.

gtkmm: Auto-store editable TreeView cells

I just spent the weekend playing with template code to add easy auto-store editable cells functionality to Gtk::TreeView. I thought it would be simple but I kept hitting template madness and pulling back from the brink. It works now anyway.

I’ve given up on providing one simple is-this-change-ok? callback because there are just too many types in play, what with the CellRenderers not sharing enough common interfaces. But I still think that this could be done in GTK+ itself some day.

Cactus just finished making his sensible orbit-cpp-cactus branch good enough for bonobomm, so we can forget about the dodgy cpp branch. People should expect me to be annoying until this gets into ORBit2 releases.

I can’t find a UK or European online custom T-shirt company. I’d really like to send Cactus one of these.

I need to start looking for the next contract soon, and I’ll be more enthusiastic about that when gtkmm goes stable. At least the current job has convinced me that I should never waste my time on MFC coding ever again, no matter what they pay me. I knew that before but I guess I needed to be reminded.