Recent hacking

Over the last week I finally made extensive time for some spare time hacking. I ended up writing a CoreText backend for Pango, which is much needed as the old ATSUI backend that is used on Mac OS X uses the ATSUI API that has been deprecated since 10.5.

While writing this backend I finally got a greater understanding of how Pango works internally. Also I managed to fix the most annoying bug on 64-bit Snow Leopard wherein some ligatures were incorrectly displayed using the wrong glyph (bug 608923).

I hope to be wrapping up development of this new backend soon. Further development and review will be tracked in bug 611943.

Oh yeah, so Lanedo flew all of us to Brussels for FOSDEM this year. (Well actually I went by train. The train was supposed to be hitting 300km/h, but that didn’t really happen, “software issues”, really!). Either way, had lots of time for hacking there as well. With Carlos Garnacho sitting next to me, I managed to port the GTK+ Quartz/Mac OS X backend to his shiny GTK+ xi2 branch in 1.2 days. In the remaining time I looked into getting support for the multitouch trackpads found on all recent Apple laptops going in GTK+/xi2. Even though the branch is called xi2, it is really the GTK+ multi-pointer branch. This last part has been moderately successful. We identified a few kinks in the new API that have to be fixed first. When that has been arranged, it seems well possible to have support for these multitouch trackpads in GTK+ Quartz, and that should be really cool.

When the above mentioned CoreText backend is done, I hope to find the time to at least push the port of GTK+ Quartz to the xi2 branch into the xi2 branch. This means that when the xi2 branch is merged into GTK+ master, the required OS X backend changes will already be included so the backend won’t be broken at that point.

Seems like a waste of energy

Anyone seen the new “fading” that happens on the Google frontpage as of a few days? The only use I can think of is that it is utterly distracting, other than that it seems completely useless. Also, this uses up a lot of unneeded CPU cycles all over the world, a bit contradicting from a company that also tries to be very green[1].

Either way, its annoying me and I would love to turn it off, but there seems to be no way to do that easily. And no, I do not want to patch my browser, install an extension or whatever.


Taking on a new challenge

During my graduation a new opportunity popped up on my path. After long contemplation I decided to take it on. Since October 1st, I am a PhD student in the Computer Systems group at LIACS, Leiden University. Under Professor Wijshoff I will be working on databases and compiler optimizations. For most of our implementation work we are using LLVM, which is incredibly nice to work with and its future is looking very promising. Exciting times.

I also remain associated with Lanedo, providing expert help and advice.

Privacy took another hit this week

With the introduction of obligatory finger prints in Dutch passports this week, privacy has taken another hit. When applying for a new passport (or identity card), it will be mandatory to provide four finger prints. Two of these will end up in the RFID chip in the travel document. This is due to EU legislation and will be implemented in all European countries.

As an added bonus, all Dutch finger prints will be stored in a central database, accessible by the Police. Scary, considering that the Netherlands has 12 times as much telephone taps on its inhabitants compared to the United States. It has to be noted that the EU legislation does not require this at all!

For a few years now, I have been refusing the enter the United States. Main reason: you are mandated to supply all 10 finger prints at the border. You can easily choose to not enter the US anymore. When your own country starts implemented such unnecessary rules, it becomes much harder. Adults are required to carry ID. You need an ID for getting a job, a house, an Internet connection, almost everything you need in life.

Many people will say: “Who cares? You have nothing to hide, do you?”. Sure you do, I don’t know much people who would write their credit card credentials on their front door, for everybody to read. But this is not the point, it gets scary once the data collected will be used against you. Fraud with finger prints is absolutely not unheard of, the CCC already researched this in 2004. Identity theft will become much easier, since finger prints are stored in the RFID it is easily read out wirelessly. These can then subsequently be faked. People usually try to find a balance between privacy and safety for these kind of things. Since many highly value safety, they have no problem to turn in some of their privacy. The problem with finger prints is that it provides absolutely no safety at all.

An interesting remark I found on this was about access verification based on finger prints. Now that you have to carry your ID with you, with the finger prints on the RFID, you basically always carry your “password” with you. Free to read out from 5 to 100 meters. We can be pretty sure the encryption scheme for passports will be hacked, if it has not been hacked already.

Fortunately, I got a new identity card for travel in Europe last Summer, so I should be “safe” for another 4.7 years…

Unit testing the filter model

One thing that has been on my todo list for many years was writing proper unit tests for GtkTreeModelFilter (the “filter model”). The state keeping that the filter model has to do is enormously complex. Sadly, this has caused the filter model to get to a state where it was basically impossible to maintain it, a patch fixing something would almost always break something else. Getting out of such a state is generally only possible by bringing the entire thing under test. And that’s what I have done about 2 weeks ago and took a week to get the basics of the unit tests right.

The majority of the filter model code is now under test. Not only the correctness of the model’s structure is tested (are the right nodes there? Also at the correct position? Are the right nodes designated as parents? etc.), but also whether the right signals are emitted at the right moment (and with the correct details/arguments).

While writing the unit tests, 2 or 3 bugs were uncovered and also fixed. Using the unit tests I was also able to clear the long outstanding filter model bug reports from Bugzilla. Actually, being able to do that was the entire point of writing the test suite ;). When handling those reports, the usefulness of the unit tests immediately proved themselves: when patching one of the problems (with a fix that looked generally okay), one of the other tests started to fail. This regression would not have been noticed without the test suite.

Hopefully, we’ll soon get support for seeing the testing coverage (from what I heard there is a bug/patch for this in Bugzilla). Some parts of the filter model are not under test yet, most importantly the intricate reference counting of nodes. Some day I will get back to this.

What I am also hoping for is to re-use some of the concepts used for these unit tests in unit tests for other tree models. And, of course, to come up with a generic tree model tester that can be used to test custom tree models.

Many people might find such a generic tree model tester overkill and say that tree models must be much more trivial to implement. That’s something for the future really. I will promise to blog about the plans/ideas I have for GtkTreeView and friends later on. (You can imagine that a lot of ideas have been brewing while I was busy finishing my studies ;) ).

Oh by the way, currently I am doing some work on GTK+’s Quartz backend. It has suffered from some regressions after the introduction of client side windows in GTK+ and I am trying to get those under control as well as cleaning up the Quartz patch queue in Bugzilla. After that I will most probably be looking into extending/improving the CellEditable API to finally get proper acceptance/cancellation behavior.

My new self-built “Mac” (really a Ubuntu machine)

I have been wanting to blog about this for ages. So in November last year I decided that my old trusty Athlon XP that has served me for years was really due for replacement. It was still fast enough to run vim and Firefox and such, but the machine became annoying as soon as I switched to Gmail last Summer. The machine could just not keep up with me typing e-mail in the browser. For a very long time I have been wanting to buy a Mac Pro (or Powermac G5 before), in the end I chose for a different solution.

So I ended up buying components for a Intel Core 2 Quad, 4G RAM and RAID1 on pretty fast SATA2 disks. I bought the cheapest PCI-e video card available to drive my dual Iiyama displays. After assembling the machine myself, I loaded it with the 64-bit version of Ubuntu. Figuring out the partitions (software RAID and LVM) took a while (apparently I needed another install DVD image for this) but after that the installation process was fantastic. Completely flawless, everything worked out of the box.

The end result: my own self-built “Mac”. Everything works in Ubuntu, also suspend (what I would buy a desktop Mac for). The configuration I have right now would be impossible to get from Apple for 500 euros, and works as flawless as the Macs I have. Plus, it runs Linux which I still prefer over Mac OS X for programming tasks.

Really, really glad that I ended up getting this as my new desktop machine. I am pretty sure that my next desktop machine (which I will get in 4 years or so :) will again be a Linux machine and not a Mac. Though for laptops I still prefer Macs, sorry ;)

Oh yea, what I did learn was that I could also just have upgraded the browser to Firefox 3 on the old Athlon. Oh well, it is still amazing to watch a Quad core compile GTK+.

Dear Philip,

Even though you do really have a point that the current GtkTreeModel interface is way too complex, I am getting very, very tired about the way you are trying to get this across. We have discussed your ideas in person some time ago already and I am very well aware of the direction in which you want to head.

You are comparing GtkTreeModel and DataTable in .NET and saying that GtkTreeModel is not generic like IList is. That is a correct observation, because GtkTreeModel was not at all designed to be a generic model. Note it was named GtkTreeModel, not GModel, GtkGenericModel or whatever. It was designed to be a model for GtkTreeView and nothing else. And yes, it is being misused.

So why was GtkTreeView not designed like that? Well, you give the answer to that yourself in your earlier blog entry: we did not have a collection framework.

Doing it right, like .NET does, requires a collection framework. You are talking about IList and IList is a part of .NET’s collection framework. I am not at all opposed to walk this route and introduce proper models in GTK+ and GtkTreeView can then also use these. But it is not at all fair to keep comparing .NET’s generic data binding with the current non-generic GtkTreeModel.

For some reason you feel obliged to mention that the .NET implementation will only access data of visible entries. You know that for GtkTreeView the same holds if you are using fixed height mode. And you also know that I have been working on patches that will remove the validation process that has to iterate over the entire model in advance, making it possible to work with very large models without using fixed height mode. In fact, this will deprecate fixed height mode.

It is easy to pick on work people have been maintaining in their spare time, but it does not provide a form of motivation nor encouragement.

No lowlands this year

This year’s lowlands festival started on Friday. For the last six editions I have been there, but we are missing out on this one. Also because it was sold out incredibly early, I think they broke a record with that. More importantly, we are not going because the line-up totally sucks this year. In a news article today they reviewed the Friday evening and mentioned there was dance, rock and even metal. Like having metal is special, I mean the previous incarnations of lowlands always had a very large share of punk, metal and alternative bands. Unfortunately, that has really been on the decline over the last few years. This also attracted a different kind of people and the real authentic “lowlands feel” that I felt during the first time I went really started to evaporate in the last few years.

Too bad really. We’re opting for proper concerts instead these days (and living in Amsterdam is very helpful for that :). We will be seeing Korpiklaani at Pagan Fest in September and hopefully we might even catch Enserifum when they hit the Netherlands. Seems like Anti-Flag will be playing the Melkweg in November.

Oh yeah, the studies are done now and I should be receiving my BSc and MSc certificates on Friday (both in Computer Science, surprise). So I have been getting back into GTK+ in my spare time now wooooo. Should definitely be playing more guitar and bass guitar as well.

Apparently blogging about stuff helps, one day after blogging and complaining about my missing Internet connection my DSL modem was delivered. Rejoice.

Once all of GNOME has migrated to git this week, I should try to find time to check out the new repositories and rebuild everything. I hope I can finally get my branches in order and then slowly get back to hacking yaaaay.

Finally BSc. And moved to Amsterdam.

Well the hard work over the last 1.5 years has finally paid off. As far as I know I have fulfilled all requirements for my BSc degree (in Computer Science). The new thesis for this turned out to be quite an interesting work dealing with a supercomputer cluster and DNA data (titled “Distributed approaches for discovering unique factors in the human genome”). When you search for unique substrings in DNA data, the amount of data you get in return is quite amazing. Another cool thing was that I finally got to play with MPI.

Right now I am working on the last bits for my MSc degree (did a lot of work in parallel with finishing my BSc already). In one of the last projects I am having fun with SQL parsers and LLVM. LLVM seems very interesting. Hope to have this all done before the summer.

Since my move to Amsterdam I am without Internet connection at home. It is very weird (and actually bloody annoying) to be without Internet at home, and that already for 3 weeks … I hope these people will get their act together soon. Fortunately I am still a student and Universities have pretty decent wireless ;)