Archive for December 14th, 2006

Not Invented Here illustrated (here)

Thursday, December 14th, 2006

Say you were starting a project to develop a common application, like an email client, a web browser, a chat client, something along those lines. You would be well aware of the existing applications in this space, indeed that was your very reason for writing your own, you didn’t quite like any of them. But in your quest to Build A Better World, would you consider re-using elements from existing applications, those elements which were entirely common and for which there was no reason to do otherwise? If you said yes, you’re an exception. Because many would not.

Let’s look at emoticon themes in different chat clients. Emoticon themes are so simple that defining a theme truly isn’t more complicated than making a list of emoticons – and for each one, a list of replacement strings. This is how they do it.

emoticon_themes_gaim.png

Nothing fancy here.

emoticon_themes_kopete.png

Kopete’s syntax says “look at me, I use xml, I’m so sophisticated”.

emoticon_themes_gajim.png

Most elegant of all, perhaps, defining the emoticons as a native dictionary in Python, which is what Gajim is written in.

Three different clients, different syntax for each. But tell me this, is there any semantic difference between them? No, the all mean the same, they convey the same information, exactly the same. Each of these files has to be parsed differently (Gajim’s natively, so the developers don’t even have to write code for it), and each has to be written separately. Now, for someone, let’s say, who creates an emoticon theme and wants to support these clients, that person has to deal with three different configuration files. Since they are semantically identical, it’s not very difficult, but all the same it takes the effort to do it. And these three are just clients which make emoticon themes easy to use, there are others which aren’t quite as easy on the user.

So what stands in the way of having one common syntax for this? One common standard? Kopete re-using gaim’s format? Nothing. Other than isn’t it awesome to write it from scratch?