Category Archives: Free Software Hacking

Creating nice and clean patches

I was creating some patches for tracker today from a rather large amount of local changes which was nicely filtered together. Some source files had several independent changes that I wanted to extract and submit as a single patches instead of one big megapatch. So I looked around and found out that the OO guys have created a script to do exactly that. It takes as input a regular expression (the script is created in perl so one gets the nice regular expressions from perl) and a diff and spits out a clean diff + the rest of the changes.

Bzr kicks gits ass

So I’ve been known to rant about bzr before. I got a new machine recently and it came to my attention that it quite a pain to keep two local bazaar branches in sync. So I thought I would have a look at the new breed of revision control systems: git and bzr.

My first preference was git, mainly because of what I said in my rant post. So I installed it and got my arch repository imported. I then tried to see how it handled merging of two branches. To be fair the branches have diverted quite a lot but the change was extremely simple: two identical po files where one of them has been updated. It completely fall flat on its face and I had to manually merge the changes. It also failed to find a merge point between the two revisions so I had to cherry pick changes by hand. After some more testing I tried to merge my local repo to the mms mirror using ftp. Sadly ftp is not supported so that was kind of the last drop that made me think twice about trying out bzr.

So I installed bzr, made it import my two branches and went to sleep (it takes a long time since it takes all my 1000+ changes). After I woke up I played around with the different commands. It’s really a pleasure to work with the system. I guess the clean start was a very good thing. Every command just work like you think they do, you don’t have to use a lot of time learning the system. E.g. when you want to mirror an archive you just do bzr push sftp://somewhere. It will automatically remember that location and just use that path the next time you push. So far it has been working great and I even put all of my cxfe patches into a repo since it’s just so damn easy. It handled the arch import with grace and I have been able to pick of where I left in baz. It can merge the two branches without and problem. The only small bug I have hit so far has been that it won’t work if your ftp server doesn’t support renaming (sunsite doesn’t) but at least it has been confirmed and added to their bug db so there is hope that it will get fixed.

bazaar rant

So arch has had two major implementations: tla and bazaar. Bazaar was a fork of tla and for a while was actively maintained by Cannonical. That was until they decided that the future was in bzr. That’s their right, but it left the users with a big void. Tla was not really maintained anymore since everyone was more or less using bazaar and bzr was not nearly stable enough to put your sensitive data into. It was still changing repository format 😉

Furthermore it causes big problems for distributions when upstream just suddenly disappears. What happens when critical external libraries are updated in a non-compatible way (libneon anyone?) with no way to SLOT them.

Luckily someone has picked up tla again and it is slowly putting out releases again, but bazaar is completely dead. I tried contacting the former maintainer but he doesn’t even respond to emails anymore it seems.

I have updated my free software patches page with the patches from Gentoo. It might come in handy for other people.

So what’s the future? bzr, git? I don’t know, but I don’t have a lot of faith in Cannonical with the bazaar stunt they pulled.

Profiling mmsv2

Inspired by the profiling work on Abiword by Hubert Figuiere, I installed Kcachegrind to try and profile mmsv2. His two posts on his blog explains very well how to find and fix bottlenecks in an application. What I thought was really cool about Kcachegrind, compared to other profiling solutions I have tried, was the way it handled threads and C++ perfectly. Guess being a KDE project helps a lot in this area 🙂

Fixing mindless automaton

My friend Bo wanted to play magic online over apprentice today with me, so I installed mindless automaton to play with him. Apparently mindless doesn’t work 100% with amd64. It crashes when you either connect to another computer or wait for someone to connect to you. So I began investigating and came up with a patch. I had my old language patch applied to be able to write danish chars, but it didn’t work very well with an UTF-8 locale. So I had to redo the patch, which you can find here. It now works with UTF-8 and non UTF-8 locales 🙂

Disable analyzer feature in imms

I’ve created a patch for imms 2.0.2a which allows you to disable the very cpu intensive BPM and frequenzy analyzer feature of imms. On my machine (AMD64 3000+) it takes almost 10 seconds to analyze a single track. While you could still install imms without sox and by
doing so disable this feature you would still need the fftw library installed for no reason. I’ve emailed the patch upstream, so I hope to see it in the next version of imms 🙂

You can download the patches here: patch part one patch part two.