My thanks to the GUADEC organisers

I thought I would walk to the Collabora party from the conference.  It was four miles, a pleasant walk.  On the way I had to stop to write a sonnet.

If anything should happen to The Hague,
if someday they abandon Amsterdam,
philosophers will take these strange and vague
descriptions, and derive each tree and tram
by mathematical necessity:
should nations shake their fists across the seas
with words of war, it follows there must be
a middle ground, a people loving peace.
And is this scrap alone a netherland?
Not so: we spend our nights beneath the sky,
and every country’s low for us, who stand
a thousand miles below the lights on high;
if only I could learn to live as such,
and count myself as kindly as the Dutch.

I passed the Palace of Justice on the way, which is very beautiful. Collabora’s party was as impressive as always, with barbecues and beer. This morning I managed to pull myself out of the resulting hangover enough to give part of a talk on xzibit. (It was really Guillaume’s talk, but he was kind enough to give me a timeslice.) The talk went well except that the demo failed, due to my having tried to fix something and breaking it further. There will presumably be video of it all at some point.

Many thanks to Collabora for organising the party, but still more for sending me here (and to Cambridge).

I have written a nautilus plugin to post photos online. I might tidy it up a little and package it.

The MeeGo book is fast approaching publication. It feels like levelling up.


Yesterday, sitting on a beach in New Jersey, I wrote the final chapter of the first draft of the book on MeeGo on which I’ve been working since a little before Christmas.

There’s still a fair amount of redrafting to do, but it’s mostly in the bag now.

I’m sorry that patch review has suffered during this time. I will be starting to tackle the backlog now.

My editor tells me that we need reviewers. The book is about Qt on Python under MeeGo. If you know about this and would like to review, please let me know (thomas at Apparently reviewers don’t get paid but do get their names in the book.

I shall let you know when the book gets published.

Working on a book

If I’ve seemed rather busy recently, it’s because I’ve been working on a book for Packt. It will be a “cookbook” of ways to solve problems on MeeGo using Python and Qt. It started out as an N900-specific book, but it’s grown in the telling.

How to place a phone call

(Of course, until a version of MeeGo with a GUI goes public, I’m testing everything on the N900.)

I’m enjoying writing it immensely. It should be out sometime around the autumn.

This Week In Metacity

This week: Collabora have been supporting me in working on Metacity over the last week or so.  I began by trying to get the CSS themes branch merged, but then decided that a better use of my time would be patch review, especially given the impending feature freeze.  Here’s a partial list of some of the things I’ve touched; I’ll update it for this week when this week’s over.

ProjectJournal: Producing the Metacity Journal and other Metacity blog posts has been a helpful record of people’s work on the program, but blogging about the project does tend to drive out actual maintenance and development.  For this reason, a while ago I wrote a program called ProjectJournal which would prepare Metacity Journal posts automatically.

ProjectJournal used to scan IMAP folders for Bugzilla notifications and svn checkins.  It would then output a list of bugs that had been touched, files that had been modified, and translations that had been made, as well as any hits for the name of the project on Google Blog Search, add a photo, and then post it as a draft to  Then a human (me) would come along and tidy it up and write the introduction, resulting in posts like this one.  It was a neat hack, and saved a lot of time, but it’s rotted because it was never rewritten to work with git.  Also, Bugzilla should be queryable directly now, though ours isn’t at a version where the API supports queries, so it would have to be done with a screen-scraper.  Ugh.

What I’m wondering is whether any of you would be interested in using such a tool for your own projects, if I resurrected and modernised it.  Do let me know.

(For several months there was also a daily Bug of the Day post, but although that was fun and got the community discussing the issues, it didn’t help the time I had available for coding.  Perhaps the project needs someone who likes writing better than coding, a sort of public recorder.  Or perhaps I could carry on doing it if there were many other people writing the code.)

Posts that might interest you: In case you’re not reading the Metacity blog, here are some interesting posts from the last week:

Feel free to dive in on the discussions.  Feel even more free to volunteer to write patches for some of these; I’ll try to give you all the help you might need.

Podcast: At one point I used to record myself reading all the Metacity blog posts (such as this one).  I’m not sure whether I should bring this feature back, or what should happen to it further if I did.

Introduction to software localisation for conlangers

Some people have asked on CONLANG-L whether it’s possible to translate free software into constructed languages. I said I would put some instructions together, and people were interested, so here goes.


  1. This is about the free desktop. It will describe how to localise GNOME or KDE. I don’t know anything about how to do this on the Mac or on Windows, so my advice to you will consist approximately of “please install Ubuntu“.
  2. Be sure you know what you’re letting yourself in for. There are about 45,000 strings which need translation in GNOME, although you can get a decent effect by translating only a few thousand. Then there are the applications themselves on top of that.
  3. If you’re translating into a language which uses characters which don’t appear in Unicode, I’m going to assume you’ve already made your computer able to display them. Matters such as designing a character set, getting space in CSUR, and building fonts are outside the scope of this tutorial.
  4. This is just enough to get you going; I’ll be cutting some corners and waving my hands around some of the difficult bits.
  5. Before we start, you should have both the “gettext” package and the Gimp installed.
  6. What I’m going to say is true for most programs, but a few have their own way of doing things.  Firefox is one of these.

Here’s what we’re going to do: we’ll change the titlebar of the GNU Image Manipulation Program (the Gimp) to display in a conlang. Since I’m writing this, I’ll translate the titlebar into my own conlang, Nimyad; work out what it is in yours before you go on. Bear in mind that “GNU” is a proper noun and should not be translated.

The phrase “GNU Image Manipulation Program”, rendered in Nimyad, is “dajath GNU camimoth lirinanen”, or in the con-script:

Next we’ll need an ISO 639 code. These are rather difficult to come by for conlangs (even Toki Pona was rejected), but fortunately the codes between qaa and qtz form a private use area. We’ll say that Nimyad is qny; pick one of your own and use it in what follows.

Now you need the translation template for the Gimp. You can get it here; click the green arrow next to “POT file” and it will download. Now rename the gimp.master.pot file to qny.po and open it in a text editor. (Don’t use Emacs for this; it tries too hard to be helpful and will confuse you.) Find the lines which say

msgid “GNU Image Manipulation Program”
msgstr “”

This means that the string “GNU Image Manipulation Program” is translated to nothing at all. That’s not very useful yet, so put your conlang’s translation in there, after the msgstr, between the quotes. Save the file.

Now we need to compile the .po file into a .mo file, which is the format that the programs themselves can read. Run: msgfmt qny.po

If it worked, you will have a file called in the current directory. If it didn’t, make sure you did in fact install the “gettext” package!

Create the locale directory: sudo mkdir -p /usr/share/locale/qny/LC_MESSAGES
and move the file in: sudo mv /usr/share/locale/qny/LC_MESSAGES/

Finally you’ll need to create all the locale data other than the actual language. You can just base that off another locale, such as en_GB, for now: sudo localedef -v -c -i /usr/share/i18n/locales/en_GB -f UTF-8 /usr/lib/locale/qny/

It will probably throw up a lot of errors, which you can ignore at the moment.

When you have a fair number of strings translated, it will make sense to run in the qny locale all the time.  But for now we’ll just run it as needed.  So: now at last you’re ready to type: LANG=qny gimp&

And you should see:

Well, that’s one string down, 45,000 to go.  You see that the strings which haven’t yet been translated fall back to US English.

Finally: now that you’ve seen how easy translation is, if you happen to speak any of these languages, please consider contacting the translation team and offering your help.

Let me know if you have any questions!

Your mountains so lofty

There has been quite a bit of discussion on the GNOME wiki about how CSS themes could be improved. I would very much like your feedback too.  (The section numbers are taken from the Cowbell documentation.)

Also, I am not sure whether to add optional CSS theming support into standard Metacity and then split it out into libcowbell so it can be easily used by other WMs, or to do the libcowbell split first. It’s probably simpler the second way, but the first brings more immediate and obvious results.

I wrote a poem the other day:

April in Paris

The sea lies solid under ice,
The blizzard seldom stops;
The glögi’s running freely
In friendly coffee-shops;
The trams still run and life goes on
And still I can’t remember
Why no-one ever calls a song
“Helsinki in November”.

(It’s actually far more like this in December, so maybe I should make that the month; but then you’d all know that I was employing poetic licence. February even more, but then it wouldn’t rhyme.)

I went to St Nicholas’s yesterday, where everyone was very friendly as usual, and they held a minute’s silence for Remembrance Sunday. It seems that a lot of people are posting “what my grandfather did in the war” stories, so here are the exploits of my own grandfather, Bob Thurman.

I have expanded my old triolets blog into a site called Here’s another I recently wrote for Fin:
To sleep next to you
when the weather is cold
is trusted and true.
To sleep next to you
is decades from new
yet it never grows old
to sleep next to you
when the weather is cold.

On the plane over here, and occasionally in the evenings, I played around with automatic translation into Shavian. We’ve had some problems using Launchpad for translation, so I experimented with doing things upstream the old-fashioned way. Though the translation is automatic, it needs to be hand-checked; otherwise, things like XML elements get translated. But it’s a quick and simple thing to do, and I’ve checked quite a few of them already. I know some of the people reading this are interested in Shavian, so if you want to join in, please do. Once we get GNOME in Shavian, we will of course automatically have GNOME in Deseret, Unifon and Tengwar. I imagine having everything marked up in a phonemic alphabet might actually be useful for screen readers, too.

CSS on window borders experimental layout language

cowbellI’m happy to announce the first experimental version of Metacity with support for CSS window borders (“Cowbell”). This work was largely supported by Collabora Ltd.

You can:

This diagram should explain everything, perhaps.

I would especially like to hear from:

  • theme artists, to let me know whether it’s adequately powerful;
  • anyone else interested in hacking on this with me;
  • the GTK client-side decoration people, so that we can harmonise the way we represent things;
  • people who know a lot about CSS and can offer insights into the suitability of the way we represent things;
  • people who know a lot about the Dublin Core and can offer insights into whether our metadata system uses it appropriately;
  • maintainers of other window managers (especially Mutter), so we can talk about including CSS support in other window managers;
  • everyone else, to suggest which of the directions for future development are most interesting.

I think it may perhaps be helpful to set up a Cowbell mailing list, so that we can compare notes on implementations. For example, I haven’t written down anywhere how to place an image to the right of the title, which is commonly needed (you use border-image).

Photo © Craft*ology, cc-by-nc.

Wednesday in brief

Cowbell, Shavian and a sonnet

I haven’t posted for a while.  Here are four things:

  1. Collabora have been supporting the CSS-on-window-borders project recently by letting me work on it during work hours.  Here is a status update.
  2. Recent updates to include a gentle Shavian tutorial and translations of all the recent XKCDs into Shavian.
  3. Many years ago, I wrote a sonnet for use on a server’s custom 404 page:

    So many years have passed since first you sought
    the lands beyond the edges of the sky,
    so many moons reflected in your eye,
    (familiar newness, fear of leaving port),
    since first you sought, and failed, and learned to fall,
    (first hope, then cynicism, silent dread,
    the countless stars, still counting overhead
    the seconds to your final voyage of all…)
    and last, in glory gold and red around
    your greatest search, your final quest to know!
    yet… ashes drift, the embers cease to glow,
    and darkened life in frozen death is drowned;
    and ashes on the swell are seen no more.
    The silence surges. Error 404.

    It’s been spreading itself around, mostly without my permission, so I’m releasing it under a Creative Commons licence.  Fly free, little sonnet!  Please feel free to copy it onto your own sites, and if you would, let me know you’ve done so.

  4. I need to write more of the Maemo tutorials.  They will be coming soon.  Sorry; things have been busy.

Ubuntu en@Shaw

There has been a small surge of interest in translating (or transliterating) Ubuntu into the Shavian alphabet, possibly by means of the automated transliterator I mentioned a few weeks ago.

A small team has formed; if anyone else would like to join, they will be most welcome.  I’m a bit busy to do a huge amount of the work, but I am providing support and some of my existing transliteration resources.  Also, wiki pages are being worked on.  And discussion, most of it in the alphabet, is continuing on #ubuntu-l10n-en-shaw on freenode. See you there, perhaps.

If this works out, it will be simple to produce Deseret and Tengwar transliterations of Ubuntu as well.  Is anyone interested in those?

In unrelated news, the book I mentioned in my last post now has its own website, where you can read some of the story for yourself.

(Logo mashup by permission.)