An innocent developer will now not only be addicted to girly drinks, like Malibu, he and his girlfriend will also become addicted to drinking the same Whisky as one of the SMASHED members brought to GUADEC this year.

An innocent developer will now not only be addicted to girly drinks, like Malibu, he and his girlfriend will also become addicted to drinking the same Whisky as one of the SMASHED members brought to GUADEC this year.

I finally found what I was looking for at the Istanbul Spice Bazaar (Misir Çarsisi): mint crystals.
For the Nokians and other Finnish sauna freaks reading this, this is the stuff that you want to mix with a little bit of water (else your sauna is way to dry, of course) and then put the mixture on the hot stones. Crystalised mint is a very pure form of mint. Mint in a sauna gives a very cold and cool feeling on your body. Meanwhile your sauna is obviously very hot. You basically think that it’s cold, yet it’s very hot.
Well, with crystlized mint you maximize this. Eucalyptus is nothing compared to mint crystals. Chinese mint comes close, though. But not quite.
The aftermath is that you probably don’t want to jump in ice water after your sauna anymore. Not before adapting to normal temperatures for ten minutes. You wouldn’t be the first who passes out. I mean, your body is in a very confused state: it behaves as if it’s cold, but it sweats as if it’s very hot. The one thing you don’t want to do is to make it very cold suddenly. Unless you are a big dangerous looking Finnish dude, maybe.
I mean, I’m not underestimating the Finnish sauna people. I’ve been to a public one in Helsinki. Woah.
Anyway. The store can send the crystals to your home with DHL, the owner told me.
If any of the Nokians or other Finnish sauna pussies want to know what a real sauna experience is, you can mail them at ucuzcular@gmail.com, and try it.
Just like how GNOME developers are only good at serving themselves, development communities and hackers, so do web application developers only make solutions that serve the group of people that act like little crying babies whenever there’s no Internet connection. (well, not really. Both serve other groups too. Of course.)
Truth is, and I’ll take any of those Web fan babies on a trip to reality in any city at any time for at least the next 15 years, that the vast majority of people during the vast majority of their time don’t have something that you could call an Internet connection.
Surprisingly those people also often have sex in the evening. Meanwhile the people crying for Internet connections usually don’t.
Choosing between real sex and an Internet connection is an interesting question for me, being a workaholic software developer. But in the end, my Tinne’s charms always wins the fight against my computer’s shiny Internet connection. Seriously.
I mean that listening music in my car using Last.fm is not an option. Consider this: With good music in my car and my girlfriend sitting next to me, I’m far more likely to please her than I would be in case I’d frustrate her with this “Buffering…” and “Connection lost” crap that would inevitably be the result of a Last.fm player in my car.
Guess what will get us at a cocktail bar leaving us with the right atmosphere? A car with a Last.fm player, or a car with a USB stick? (usually we use bicycles, because we are responsible young drivers, but anyway). A car that 90% of the times has this “Buffering…” thing would make her laugh about her funny nerdy boy the first time. But after ten times, I’m pretty sure my investment in her cocktails will be ruined by that piece of shit music player, in my car.
People who are not into computers don’t even get that first time for free from their female partners. A piece of shit music player is an instant failure. Meaning: they won’t buy it. That’s why you are not seeing Last.fm players for cars.
I mean that using Google Maps for car and truck driving navigation is only something the kind of architect that you want to ban from your software development company would propose. You need to focus on the road while driving. Please don’t focus on the millions of irrelevant accessibility and usability problems a web application like Google Maps introduces.
On top of that, there’s no way all of the highways and cities in Belgium would have reliable Wifi coverage for at least another decade. And Belgium is a wealthy Western country.
We ‘rich boys’ are not the only ones with cellphones. We are probably the only ones with super Internet backbones sticking in our arse, though.
I mean, without any of that Web 2.0 stuff are car GPS devices working just fine the way they work today.
Seriously … to say that all the future of computing belongs to the web, while neglecting the real problems mobile solutions are solving today already, is something only the worst kinds of wannabe architects and morons would say. In my opinion.
You really think I would accept that I can only listen to music with your iLast.fmPod device in the most crowded places of planet earth? Places like inner New York City are probably the only ones where, if you are extremely lucky, you could have a Wifi Internet connection. Even with that connection, Last.fm would still take minutes of buffering per song.
That’s why iPod is a success, and your iLast.fmPod wont be. Well, that’s not the only reason. The other reason is that people buy iPods for the same reasons why grown up people buy swimming pools: to make other people jealous.
Usually, they don’t download a free desktop for the same reason as why they invest in swimming pools. They download it because it’s the only way to make the piece of shit computer perform the things that help them achieve their personal goals.
The point that I’m trying to make is: most Web 2.0 applications suck. They solve one problem (deployment) and they introduce fifty clearly identifiable new ones. On top of that, they are not ‘free’ as in free beer either, right?!
They are the monopolist’s best friends! Microsoft’s monopoly will look like a baby compared to Google’s in a few years.
But don’t confront the Web 2.0 fan babies with those ‘problems’! They’ll just go “la la la”, “not listening”, “Youtube rocks”, “la la la”.
That’s fine, but then go out of the way for the people who will solve the real problems in the next decade.
Web apps work and will work where they work. They might even work great, sometimes. But they wont where they wont.
Obviously, European Youtube users didn’t ask for their youtube usage to be handed over to Viacom Inc.. Who knows what Viacom will do with this highly private data (which contains highly detailed information about people’s interests such as the videos they watch, the various topics they are interested in, and so on)?
I only hope that enough Europeans will formally protest at their country’s privacy agencies and/or at the European institutions. Although, I fear it won’t matter anymore as privacy nowadays has become far less important than Britney Spears or Paris Hilton.
I made a little bit of documentation on reference counting. It’s not yet really finished, but I’ve let two other developers review it now. I guess that means it’s somewhat ready.
The reason I made it was because as I browsed and contributed to GNOME’s code, I noticed that a lot of developers seem to either ignore reference counting or they use it incorrectly all over their code.
I even saw people removing their valid reference usage because they had a memory leak they wanted to solve. As if introducing a race condition is the right fix for a memory leak! Some people have rather strange ways of fixing bugs.
What people who don’t want to care about it should do, and I agree with them, is to use Vala instead.(Or D, or Python, or C#, or Java, before I get hordes of language fans in my comments again. Oh! Or C++ with smartpointers too! – oeps, I almost forgot about the poor céé plus plus guys -)
Anyway, I’m sure my guidelines are not correct according to some people, as there are probably a lot of opinions on reference counting. In general I do think that whenever you pass an instance to another context (another thread or a callback) that you simply must add a reference. If you do this consistently you’ll have far less problems with one context finalizing while another context is still using it.
It’s a wiki page, I’m subscribed. You can just change the content if you disagree. Being subscribed I’ll notice your changes and I’ll review them that way.
http://live.gnome.org/ReferenceCounting
It’s not the first such item that I wrote down. Here are a few others:
After reviewing this document José Dapena promised me he’s going to make a page about reference count debugging in gdb, like adding watches on the ref_count field of instances. To make sure he keeps to his promise I decided to put a note about that here. <g>
It’s a little bit frightening … I guess quite a lot of people will now start using our code.
I’m also proud of having been involved with such a great team of software developers working on Modest and Tinymail.
I think I succeeded at creating a healthy free software project suitable for both commercial and purely free software appliances. People are contributing for and from different angles. Different companies are involved. I am trying to blend the contributions a bit more in order to get more “passion contributions” rather than “just the minimum must work, here’s a quick-fix”-patches. It’s improving, though.
Nokia (however) gave me ‘the’ opportunity to create Tinymail. They allowed me to work on it full time for more than a year. Everything was always immediately free software, and happened completely in the open too. Go check if you don’t believe that.
You can accuse Nokia of a lot of things, but they did great at fostering several free software projects. They made mistakes, of course. In my opinion, the handling of this project was done in a very healthy way: very open minded and very much the way free software can be commercially successful. I hope they learned free software won’t do wonders but that it can help you finding experts in specific fields, working together on the bigger picture: the actual consumer device. Working together with free software inspires a certain kind of passion among engineers. Capitalizing on that is fine, as long as you have respect for the passion. Just like the engineers have respect for the passion of solving the problem of producing and bringing millions of devices to the customers in time. Both enemy and friend know no company can do this better than Nokia.
I don’t think there’s anything controversial in respecting the hardware dudes’s jobs. In the end we humans are all about our passions.
I didn’t succeed at making a release before Modest was thrown to the Maemo users. That should happen very soon now, though. I’m very much in agreement with that “release often, release fast” – meme. But I also only want to call something a one-point-zero if it’s really stuff that works, behaves as expected and has all API that people’s E-mail clients require. The problem is that as an engineer I’ll never think that any of my software is finished. Everything can be better. Living near Eindhoven I grew up with the slogan “Let’s make things better“. I agree with the meme in that slogan.
Neither did I reach a bunch of technical goals. I have so many things in mind that would make Tinymail based E-mail clients by far the best kind of mobile E-mail clients ever created. Although Polymer, damn you Dave Cridland! :-), makes it hard to really be the best. Subjects ranging from pipelining to supporting CONVERT, forward without download, streaming media as attachments, and many more. IMAP has a few interesting limitations that I would like to address too, like Lemonade does. And then you have the IMAP servers … grmbl.
Regretfully a lot of people think of E-mail as a simple subject. They should figure out then why so many teams have tried to write good E-mail clients, yet relatively few succeeded. I’ll spare you the details and I’ll just point out that a lot of ’stuff’ is involved that you won’t expect. But really, if it wasn’t a challenge, I wouldn’t have been interested anyway. I’m not complaining, I enjoyed and I am enjoying a hard task ahead of me.
Meanwhile, I enjoy working on Tracker for Nokia. It was time for something different. Incubation time for Tinymail, perhaps? I’m working a lot with SQLite, who knows what will come out of that symbiosis? Perhaps I learn that it’s not suitable? Perhaps it is? I haven’t had the chance to explore cursors in SQLite. That’s what I’d be interested in most for things like Tinymail.
I should stop thinking about it too much, before I end up hacking until eight in the morning again.
For all those Ubuntu 8.04 users who recently left behind their perfectly working 7.10 Ubuntu version and are now amazed by the vast amounts of hardware that ain’t working (like in my case, the sound card, ACPI hanging the kernel at boot (need to add acpi=off), shutting the machine down hangs, etc etc):
First of all, you never remove your old Ubuntu until your new works perfect, for obvious reasons (you are using Ubuntu, chances are pretty high that stuff doesn’t work after an upgrade). You should learn to do this if you didn’t (and I know this is bullshit for the average user, I guess this means something about how ‘ready’ Ubuntu is for that same average user).
mount /dev/sda1 /mnt cp -a /mnt/lib/modules/2.6.22-14-generic/ /lib/modules/ cp /mnt/boot/vmlinuz-2.6.22-14-generic /boot cp /mnt/boot/initrd.img-2.6.22-14-generic /boot umount /mnt
Now edit /boot/grub/menu.lst and at the bottom of the file or under these lines:
### END DEBIAN AUTOMAGIC KERNELS LIST # This is a divider, added to separate the menu items # below from the Debian ones. title Other operating systems: root
add these lines:
# This entry automatically added by the Debian installer # for an existing linux installation on /dev/sda1. title Ubuntu 7.10 for 8.04, kernel 2.6.22-14-olbuntu root (hd0,5) kernel /boot/vmlinuz-2.6.22-14-generic root=UUID=<copy this from above> ro initrd /boot/initrd.img-2.6.22-14-generic savedefault boot
I just realized that the promise of ipv6 will create a demand for good clipboard integration in console applications! Imagine the very long ipv6 addresses that many Unix/Linux admins will have to move from spreadsheets into configuration text files!
Therefore I propose that we start thinking about a libclipboard library. As a pragmatic bridging solution we could easily make a small DBus service that not converts but bridges the target requests to the x11 clipboard owner. This service would just play as a proxy rather than something that collects and harvests x11 clipboard targets (the x11 clipboard supports requesting the owner to convert to a desired format, getting a list of available formats, etc – called targets -).
Meanwhile we could let console applications finally enjoy a decent clipboard that can actually make it possible for a console application to request multiple formats. Sounds better than xterm hacks to me.
Before continuing with reading, do this in your mind:
If you are a religious vim user:
export EDITOR=vim
If you are a religious Emacs user:
export EDITOR="killall -9 vim; emacs"
Examples:
Maybe even have an easy to configure filter application that on-the-fly converts just a copy source into a format that the admin wants in his configuration text file. You know how management always delivers things like IP addresses in spreadsheet format (it’s just a silly example, really).
We could also let such a library solve the problem of two applications running on the same computer being displayed on a remote X11 server having to transfer large clipboards over the X11 protocol (over the wire).
I still think PRIMARY and SECONDARY are broken concepts by design. But I also agree that this is subjective (but really, let’s be honest about it, it’s broken. Seriously).
Of course I realize that whether or not I’m right about such a solution only depends on somebody (like me) doing it rather than just blogging about it. I have always been tempted to try to start something. Who knows someday I will?
I have been whining about features that I want in Vala to Jürg. To make up for all the time he lost listening to me I decided to fix two Vala bugs.
The first bug I fixed was using a recursive mutex for lock statements. Code like this will work as expected now:
public class LockMe : GLib.Object { }
public class Executer : GLib.Object {
LockMe o { get; set; }
construct { o = new LockMe (); }
void Internal () {
lock (o) { }
}
public void Method () {
lock (o) { Internal (); }
}
}
public class App : GLib.Object {
static void main (string[] args) {
Executer e = new Executer ();
e.Method ();
}
}
Here’s a gdb session that most GLib programmers will recognize:
Breakpoint 1, 0x08048a87 in executer_Method () (gdb) break g_static_rec_mutex_lock Breakpoint 2 at 0xb7e4d0e6 (gdb) cont Continuing. Breakpoint 2, 0xb7e4d0e6 in g_static_rec_mutex_lock () from /usr/lib/libglib-2.0.so.0 (gdb) bt #0 0xb7e4d0e6 in g_static_rec_mutex_lock () from /usr/lib/libglib-2.0.so.0 #1 0x08048b04 in executer_Method () #2 0x08049046 in app_main () #3 0x0804908a in main () (gdb) cont Continuing. Breakpoint 2, 0xb7e4d0e6 in g_static_rec_mutex_lock () from /usr/lib/libglib-2.0.so.0 (gdb) bt #0 0xb7e4d0e6 in g_static_rec_mutex_lock () from /usr/lib/libglib-2.0.so.0 #1 0x08048a6e in executer_Internal () #2 0x08048b0f in executer_Method () #3 0x08049046 in app_main () #4 0x0804908a in main () (gdb) cont Continuing. Program exited normally. (gdb)
The second bug is supporting interfaces for D-Bus services in Vala. It goes like this:
using GLib;
[DBus (name = "org.gnome.TestServer")]
public interface TestServerAPI {
public abstract int64 ping (string msg);
}
public class TestServer : Object, TestServerAPI {
int64 counter;
public int64 ping (string msg) {
message (msg);
return counter++;
}
}
void main () {
MainLoop loop = new MainLoop (null, false);
try {
var conn = DBus.Bus.get (DBus.BusType.SESSION);
dynamic DBus.Object bus = conn.get_object (
"org.freedesktop.DBus", "/org/freedesktop/DBus",
"org.freedesktop.DBus");
uint request_name_result = bus.RequestName ("org.gnome.TestService", 0);
if (request_name_result == DBus.RequestNameReply.PRIMARY_OWNER) {
// start server
var server = new TestServer ();
conn.register_object ("/org/gnome/test", server);
loop.run ();
} else { // client
dynamic DBus.Object test_server_object =
conn.get_object ("org.gnome.TestService",
"/org/gnome/test", "org.gnome.TestServer");
int64 pong = test_server_object.ping ("Hello from Vala");
message (pong.to_string ());
}
} catch (Error foo) { }
}
In Vala you can define interfaces just like in C# and Java. Interfaces imply that you can have class types that implement one or more such interfaces. Vala does not force you to implement its interfaces in Vala. You can also implement them in good-old GObject C.
Here’s a detailed example how you implement a type that implements two Vala interfaces in GObject/C:
Your application used to be single threaded and is consuming a resource that is not thread-safe. You’re splitting your application up into two or more threads. Both threads want to consume the non-thread-safe resource.
In this GNOME-Live item I explain how to use GThreadPool for this.
It’s a wiki so if you find any discrepancies in the sample and or text, just correct them. I’m subscribed so I’ll review it that way.
The GNOME-Live item is done in a similar way to the item about using asynchronous DBus bindings and the AsyncWorker item.
A few days ago I made a completely correct analysis of how the Schuko standard for power sockets and plugs, used on the continent of Europe, is superior to the British BS1363 standard.
Today I noticed the fruits of our hard work of trying to convert the British people to the fine uses and traditions of the people who live on the European continent. I saw a carton “Gezeefde Tomaten / Purée de Tomates” at a supermarket in Durham UK.
Just like how politics in Belgium work we have started applying the principle of divide and conqueror: instead of using their native language English, we are now sending them products with dual language branding and descriptions. Just like in our own country. This introduces doubt about their English identity. To divide you first need to generate fear and doubt (Am I really English? I’m not Welsh either? Maybe I’m Dutch? Maybe French!! Wouh!). Then you conqueror them by telling them, with a soft voice:
No no, you are Europe.
Works great! Just make them believe those Belgian “Purée de Tomates or Gezeefde Tomaten” are good. Once they grasped that, tell them: “but the tomatoes and the brand itself (Valfrutta) actually comes from Italy”. That’ll completely confuse them! Then relax them by softly putting your hand on their forehead and say: you are European, don’t be afraid child.
ps. Dear people who don’t live in Europe: this post is sarcasm, irony, a joke.
People living somewhere on the British Islands.

This is a device that produces static electricity

You plug a power plug in a power socket

I have marked on this image of the power plug where the static electricity gets delivered into the power socket

Let me clarify my point:
Let me add another point that I’m trying to make here

Also note that the Germans and the Dutch use sockets that don’t have the dangerous looking pin. Both types of sockets and both types of plugs are compatible with each other. European continental standardisation is very useful sometimes.

Let’s take a look at the European plug and the location where it delivers the static electricity to the wall socket.

Let’s now compare that with an actual photo of a British Island’s (Irish guys use it too) plug.

My adult male finger (I have very thick fingers compared to Tinne’s skinny fingers and Tinne has thick fingers compared to a small child’s fingers) fitted in the space. It was possible for me to fully touch the static electricity pin. The device was powered on so the two pins for delivering the actual electricity where completely connected.
Now let’s see some actual photos of the European plug in action. Decide for yourself.



The solution is to convert those crazy English, Irish, Northern Irish, Scotts and Welshman (boy, I do hope I didn’t forget anybody) to the European system :-)

We receive messages like this quite frequently:
Please only post in English on planet gnome or at least make non-english posts contain english translations.
If you don’t wish that posts like this are syndicated, please have the planet gnome administrator (jdub) pull a certain tag from your blog.
Thanks for understanding.
Note that Jeff Waugh (maintainer of planet-gnome) has indicated several times that he wants planet-gnome to be a window into the world, work and lives of GNOME hackers and contributors (top-right of the site). That includes “lives”, not just “work”, and for that reason planet-gnome does not filter based on tags like “GNOME”.
This however means that you get to read the personal blogs of the people who are syndicated. Very often they asked specifically about the use of non-English languages and about the fact that content is not always going to be related to GNOME at all. Very often it has been pointed out that is precisely the very idea of planet-gnome.
This means that planet-gnome is meant to have posts in different languages, is meant to have posts that are not about GNOME at all. If that’s not comfortable for you, then please either read another website or install filters.
I’m not planning to change my personal blog because planet-gnome doesn’t use my categories. Although I agree with and like its policies, I didn’t decide them. Please don’t complain to the non-English speaking blog writers who are syndicated on planet-gnome.
In Bruges, the movie
Today I went to the movie In Bruges in Newcastle together with Tinne. It’s a funny movie about two assassins in Bruges, a tourism city in Belgium. Now that we are back at our place in Durham UK, I immediately wondered whether they are playing the movie in Belgian movie theaters too. Surprisingly they don’t. Sure they make fun of Belgians, Belgium and the “shit-hole Bruges” quite a lot. But hey, that doesn’t mean you can’t air the movie in our country! We can take a couple of yokes. Don’t worry!
It was a bit sad that they didn’t speak a single word of Flemish/Dutch in the movie. It’s not really normal for Flemish people to spontaneously and automatically reply in fluent English each time any guy asks something. Even the people screaming when a dude falls out of the sky at the end of the movie don’t use a single word of Dutch for the shouting. I’m quite sure you’d hear a “Wat is da joh??” or a “Godverdoemme! Wah valt er naa ut de lucht?! Nen Englander!” and then they’d probably go look at say something like: “ei mo, dien hee een geweer”. And they’d continue with a “goh ligge, die zen aant schieten na mekander!”.
Nothing like that in the movie. Just boring English speaking people doing English, like in every typical movie. They did get the bus company, De Lijn, right in the beginning of the movie. Also some romantic images from the city Bruges. That was about it, regretfully.
Anyway, me and Tinne had a few good laughs. Funny Belgians, etc etc.
DBusGlibBindings and AsyncWorker combined
I added a sample to the DBus page that I wrote this weekend. It uses AsyncWorker. I also made the now two samples actually compile. Although I have not really tested them, you can download them too now.
Summer of code 2008
I’m going to mentor three Summer of Code applications.
One of the Igalians who developed Modest and among many of his Tinymail contributions implemented the libcst implementation for handling certificates in Tinymail, José Dapena Paz, is going to mentor Zhang Shunchang’s application together with me.
Picking up what I left in 2005
I also just picked up AsyncWorker. I made it a little page and with the help of Tinne I improved its API documentation. Perhaps I will do a release someday (I never did, actually). Thing is that I hate the work involved with releasing. Especially since most of our development tools stink.
Note that my super fantastic lovely girlfriend, Tinne, has her own blog now. It contains a bunch of photos of our stay in Durham UK. In a few minutes, she just told me, she will put online a funny photo of me holding a fish bowl filled with cocktail.
While I was gathering some info about a DBus related task that I’m doing at this moment, I wrote down whatever I found about DBus’s glib bindings in tutorial format.
A few other people have done similar things in their blogs. This one explains how to use org.freedesktop.DBus.GLib.Async a little bit too.
If you find any mistakes in the document, it’s a wiki page so please just correct them.
I just released Tinymail’s pre 0.0.9, enjoy!
I noticed that more and more people from several specific cities are visiting Tinymail pages, and I know at least a few companies and organisations who are using Tinymail right now.
My personal opinion on development frameworks is that if they come without documentation, they are worth as much as vaporware.That’s why I started first, at an early stage, with writing the API documentation of Tinymail and then Tinymail’s trac, which holds a collection of examples and on top of the API documentation also explains most of its types and how to use them.
This was not sufficient. I wanted to write a test E-mail client to find the source of bugs in Modest. While I was doing that I decided that this test E-mail client was going to be documentation too. Documentation in the form of source code that itself required documentation.
I started TMut’s trac to deposit that documentation. Yesterday I mentioned that I implemented simple account management in TMut, today this is ~ finished. Here is the documentation about that source code.
New items:
Former items:
You guys remember TMut? It’s an E-mail client for small screens that uses Tinymail. It serves as an actual E-mail client, as some code that you can use to peek at while developing your E-mail client and as a piece of code where you can derive your stuff from (although TMut’s current build is not set up to build TMut’s classes into a library, you could easily do this and then subclass TMut’s high level components).
What makes TMut unusable for non-software developers is that it has no account management. You need to do that in for example GConf (depending on what implementation of TnyAccountStore your TMut uses).
At Modest we need to test Tinymail’s account management capabilities without executing all of the extra code involved in what Modest does whenever you manage its accounts. Therefore I started putting in place some code to have basic account management in TMut.
It’s, as usual with the things that I blog about, unfinished.