Tracker Update

Roadmap to 0.7

While I was at the desktop summit, I decided to come up with a roadmap so we all had something to work to for the 0.7 unstable release which we are hoping to do soon. The roadmap is on here:

As you can see, it is progressing nicely.


The configuration system in Tracker has always consisted of one TrackerConfig inheriting from a GObject and used to load/save applying the GKeyFile API. The problem we found here, is that we really want configurations to be more fine grained to specific binaries. Some of the options (like log verbosity) would apply to ALL binaries that use the config otherwise. So now we have TrackerConfigFile as a base class with tracker-object-keyfile.[ch] to do some utility functions for us in libtracker-common and all binaries that want their own TrackerConfig with object properties now inheirt from TrackerConfigFile. This is quite nice because it reduces the code duplication we had and now we have a nice set of separate config files in $HOME/.config/tracker/.

With 0.6. we also had this concept of “modules” which would be for each type of data we wanted to track. We had “files”, “applications”, “email”, and some others… These modules also have a configuration pertaining to how to index their data. Things like globs for including and ignoring certain files. There are also options to make sure data isn’t indexed too regularly (which was needed for some content that was constantly updating). All of this is in the process of being revised and merged with the TrackerConfig machinery. This mostly applies to the “files” module though. The module config and module code (which was a complex GModule implementation) is all going to be simplified now that we have separate binaries for mining each data we are interested in.

Album Art

This was quite a mess before. We had code in different places for this. Over the past week or so I have cleaned this up too. Now we do all album art downloads and extraction from the tracker-extract binary (called from mp3 and gstreamer extractors when they see media with such content). Before we would request thumbnails for the new art in tracker-extract, but due to the unstable nature of tracker-extract (based on dynamically loading modules using 3rd party APIs we can’t guarantee the stability of) we were always at risk of failing to queue new thumbnail requests to the thumbnail daemon if we had a crash. We only send thumbnail requests AFTER all indexing has been completed, if we don’t do this, we suffer with severe performance problems. Now all thumbnail requests are done from one place, the tracker-miner-fs and the albumart functions are no longer spread across libtracker-common and tracker-extract. They are just in tracker-extract.

Volume Support

Over the past few days Carlos re-added volume support to Tracker so now using a simple query, you can find out if your data on that MMC you just inserted or removed is available.

So, to get a list of ALL data objects and their availability (which is true or false based on if the media is mounted or not) you can use:

$ tracker-sparql -q "SELECT ?do ?av WHERE {
                            ?do a nie:DataObject ;
                            tracker:available ?av }"

You can also get a list of all data objects which are NOT available. To make things faster, we have not included “available” for EVERY item, only where items are available. This makes updating the tables a lot faster. So when looking for files which are not mounted, the query becomes a bit more complex:

$ tracker-sparql -q "SELECT ?do WHERE {
                            ?do a nie:DataObject .
                     OPTIONAL {
                            ?do tracker:available ?av } .
                     FILTER (! BOUND(?av)) }"

Of course the most common use case is, tell me files which are available, which can be done with:

$ tracker-sparql -q "SELECT ?do WHERE {
                            ?do a nie:DataObject ;
                            tracker:available true }"

We are still fine tuning the volume work to be faster but things are coming along swimmingly!

Lanedo sponsors GNOME at LinuxTag

Lanedo has only been running since January and we have been lucky enough to be able to sponsor the conferences we usually attend this year.

So far, these include the Desktop summit and Linuxtag and we are also looking into sponsoring FSCONS later in the year. For LinuxTag we are sponsoring by sending Tim and Sven and by donating to the cause.

This year as usual, Sven will be propping up the GNOME booth for us, so if you are in that vicinity, don’t forget to come by and say hello!

The calm before the storm

Baby Coming!

Sue is about to have our baby (expected date is the 18th of March), she really can’t wait for it to be born now and neither can I! Right now I am just trying to get as much sleep as possible in preparation :)
We don’t yet know if it is a boy or a girl so there is an added excitement after waiting 9 months not knowing. Sue thinks it is a boy, I think it is a girl.

Tracker Release

Yesterday I released Tracker 0.6.91, which follows the recent 0.6.90 release that we did after 12 months of solid development on the project. I say we, there is quite a huge team working on this project now, including Carlos Garnacho, Ivan Frade, Jürg Billeter, Philip Van Hoof, Mikael Ottela, Urho Konttori and many more. We have a preliminary roadmap (as mentioned here) for Tracker  too. This recent release and possibly one more will be the last before 0.7 which will include Jürg’s vstore branch (which we have been working on in parallel for months now). We also had a discussion about the current architecture of the project and decided to change some of the roles around regarding what the indexer and daemon currently do to make things more efficient. With this all in mind, I am expecting some seriously good fun on this project in the next 3 months.

Web Services in Gossip

I haven’t done much on Gossip in a while. Been rather preoccupied with Tracker recently.

Today I managed to add a feature which uses the text under the mouse pointer to search with Google, Wikipedia and Youtube. Right now those are just hard coded, but I had in mind, to make it configurable.

Web Services

GTK+ blog & site improvements

Recently I set up a new blog for GTK+ to document releases and for people to blog about cool new things in GTK+. So far, there is just Andreas and myself on the blog. So if anyone else wants to be added just let me know your blog email account and I will set it up. If you have been missing the GTK+ project news, don’t forget, it can be see at, it is not shown on the regular

Andreas has been doing a great job chasing up some final issues on, mainly with regards to the language bindings. Andreas has now removed all bindings that have no support for 2.6 and above and all bindings which are supported by GNOME are illustrated nicely too. So, if your language binding isn’t listed there and you know it is supported, please let us know on the gtk-devel list so we can rectify the pages!

Finally, gets face lift!

I started working on the new design for last April and tonight the new pages were uploaded and we now have a spiffing new look which I am really happy with.

I want to thank Andreas Nilsson for helping out with the design and Tim Janik for help with the final touches in getting the pages installed, not to mention everyone who commented. revamp

Easily offended

I’ve just caught up on the last 100 blogs I have been neglecting for the last week or so (due to being quite busy recently) and I think it is sad to see people so easily offended by blogs from people like Miguel and Davyd.

I think people miss the point. People blog about what they want to blog about. It is the writer’s choice to write what they want as much as it is the reader’s choice to read what they want.

Feel free to ignore my blog :)

Maintainer 0.6

Over the past month or so I have had a few contributions to the maintainer python script I started writing a while back to help maintainers with the laborious tasks carried out during a release.

Lucas Rocha sent me a great patch for including the help manual translators to the release note generated.

Xavier Claessens is using the script for his Empathy releases and added support for getting the project website (and adding it to the release note) and making it possible to run the “install-module” script on

So thanks to both for their contributions!

I decided to add support for generating the email you send so all you have to do is literally click “Send”. It saves a lot of time and works quite nicely.

Try it out:

Gossip without Telepathy

For a while now we have had Telepathy support in Gossip based on the work that Xavier Claessens, Eitan Isaacson, Raphael Slinckx and Sjoerd Simons submitted. Recently Xavier decided to start his own project called Empathy using the Gossip user interface and as a direct result, we now have no one maintaining the Telepathy backend in Gossip.

The OTHER problem we have with Gossip at the moment is that it is not fun to hack on. I don’t think it is directly the result of integrating Telepathy into Gossip and I am not saying that Telepathy is the reason it is not fun to hack on, I think the same problem would exist had libgaim materialised and we were able to use that instead.

To summarise, the problem is really insufficient man power and the complexity of supporting multiple protocols.

Recently, Micke, Richard and I decided to remove the Telepathy integration completely and become a Jabber ONLY client. By doing this, we can focus on smaller, nicer and more useful features than just supporting another protocol.