Impressions from Jonah’s school

Lately, Madeleine and I took some photos of Jonah’s school. I think they’re nice, and the school is quite interesting.

American Bach Soloists on Magnatune

A while ago I was pointed to Magnatune, a cool online record label. I often browse through the catalogue on the search for good music. The cool thing about Magnatune is, you can listen everything and fully online. If you like it, you can buy and choose the price yourself. Then you can download it in all formats, including OGG Vorbis and CD quality FLAC. You are even encouraged to share the files with your friends. I like that.

Lately I found something that I really like alot, the recordings of the American Bach Soloists, especially Bach’s Mass in B minor. I’ve never been much into this kind of music before, so this is like discovering new land for me. I find it really amazing how somebody can sing that way, and how complex this music is, and still perfectly harmonic. Makes me think about values of today. Who would care about sitting down and passionately diving so deep into music to make such incredible piece of art?

Speaking about music, I’ve got tickets for Neil Young in Colmar in August, yay 🙂 I’m glad I’ve not went to see him in March or May this year, that would have cost me a lot more (up to 130€) and would have been several hours from here. Now it costs me less than 50€ and it’s basically around the corner from here. Yuppie! I’m really disappointed by his announcement at JavaOne though. Stupid audio snob. (And I don’t think BlueRay or anything is so much better quality-wise than CD, unless you own a 10000€ hifi and listen at insane volume levels).

Ubuntu 8.04

I’m using the latest Ubuntu release for a while now. It has many nice improvements, resume and suspend seem to work perfectly now, even suspend-to-ram. The browser is slimmer and integrates better with Gnome (GTK widgets for forms, yay!) There has been some polish here and there.

But still, overall I’m a little disappointed. I have the feeling that there are many small regressions. For example, there’s no notification anymore after I unmounted my camera that it’s ready to unmounted (I thought that was a nice feature in one of the previous releases). I cannot access the data part of a hybrid audio/data CD (and thus can’t see the video that’s hidden there). The gnome-volume-manager settings don’t know about CDs/DVDs anymore and I can’t choose my favorite player for those. The default for ripping CDs is now Rhythmbox, which just can’t replace Sound-Juicer yet (cannot replace special chars in filenames with ‘_’). The browser locks up in some complicated situations with certificates. I think there’s many more.

My feeling is that it boils down to two unfortunate decisions: To include Firefox3 Beta and the brand new gio from Gnome. That just doesn’t feel right for an LTS release. I don’t envy the poor developers at Canonical that have to support that release for 3(5) years. From my point of view, the last series of non-LTS releases all appeared to be more stable and mature than this release. This is pretty sad. Luckily I don’t care much about LTS myself and happily await the Intrepid Ibex.

Tags with Mercurial and Forests

When you have a project in a Mercurial repository, probably using the Forest extension (like I’m doing), then you most likely want to tag the forest occasionally, be it before a release, or (like in my case) when an autobuilder was successful and wants to mark a specific version as OK. Obviously, when working with a forest, there’s a problem, because there is not a single version to tag, but in fact a couple of version. Each tree needs to be tagged. My specific requirements for tagging are those:

  • A tag must identify a specific state of the source tree (forest).
  • It must be reliable. I don’t want to recover from arbitrary errors.
  • Setting and removing a tag must be atomic. No other operation should interfer with it.
  • It must be possible for multiple processes to set and remove tags on a repository.
  • The tags should be available through the VCS (I could simply store the stuff in a database myself, but that would partly defeat the purpose).

Here’s my solutions, in the order that I tried:

Using hg tag

This is the first thing that comes to mind, simply because there is such a command. Frankly, in hindsight, this seems the worst solution to the problem, at least with forests. I tried to write scripts that walk the forest and set tags in all the repositories. I even started an HG extension for that. Not only is this very complicated, it turns out that it is almost impossible to push back the tags to a master repository reliably, especially when you want to do this automatically. Also, this stores the tag in each of the repositories, introducing changesets in all of them, thus cluttering all the logs. Ugly. Keep away from that.

Using snapshots

The next solution is based on hg fsnap. This is an interesting command. Using that, you can create a snapshot of a forest, and later you can use fseed or fclone to re-create the forest at exactly this state. Seems like a reasonable candidate to implement tagging with. So I did. My script did create snapshots of a specific state, put them in their own repository inside the forest, and pushed them to the master. Since the tags are in their own repository, it is much easier to push them back. However, it is still not 100% fault-proof, especially when several autobuild-processes plus developers are involved. Much better than the first solution, but still, not recommended.

Using clones

Funnily, this idea comes from the Subversion development model. Instead of hg tag or hg snapshot, it is very straightforward to simply create a clone as a tag. Just like you do with branching. (Yes, I consider in-tree branches somewhat broken. or at least confusing.) Cloning inside the same filesystem has almost zero overhead, because HG uses hardlinks internally. This makes it easy to deploy a similar structure as is common in Subversion:




Trunk is where all the main development goes. Branches holds all the clones that are considered branches, be it separate release branches or some kind of development branch. You can do just the same with tags, simply clone the forest from trunk (or some branch) to the tags directory and don’t touch it anymore afterwards. This is very straightforward to implement and is the only solution (AFAICS) that fulfills all the requirements above. I’d even go so far to recommend this for non-forest repositories too instead of hg tag. I wish I had this idea earlier. This is why having all kind of commands in the core of HG and having them named like in other RCSs is probably not a good idea, it misleads to thinking that (for example) hg tag is just the same as cvs tag. It stole me a lot of time.

Windows games on Wine

I wanted to give big KUDOs to the developers of the Wine project. Lately I’ve been trying a couple of my favorite Windows games (from back when I had a Windows machine and time to play). Namely, Baldurs Gate I & II, Heroes of Might and Magic III and Starcraft. All of them run out of the box and absolutely flawlessly! With sound, graphics, everything! This is really amazing. Ok, these games are quite old now (I still consider them classics), but from what I hear, newer games like WoW run almost perfect too.

Somehow, I can relate to the developers of the Wine project, after all, they are doing much the same thing as we did in the GNU Classpath project, only that the specs are much much worse.

It even integrates nicely into the desktop: When you click an .exe (e.g. on the setup CD) it launches correctly with Wine. After you installed a program, it shows up in the Gnome menu. Perfect!

If you have some old favorite Windows games lying around, and last time you checked they haven’t been doing anything useful (ahem) on Linux, I think there’s a good chance that they now work out of the box, or with only little effort. Again, big KUDOs to the Wine devs! Soon they are releasing 1.0, yay!

Everyday Apps

Some days ago, a friend of mine (Rainer Haage of Qemulator‘s fame) started a cool wiki called ‘Everyday Apps’. There you can find everyday things written for hackers. Example:

def enter_site()
result = None
you = You()
site = EverydayApps()
if you.likethispage(site) == True:
result = you.write_your_own_code(site)
return result

If you have a funny idea, and it can really be anything like family things, everyday workflows, poems, prayers, etc, please add to the wiki. Should be fun.