Not Invented Here illustrated (here)

December 13th, 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?

Miranda IM : braindead design

December 12th, 2006

I was on a quest to find a Windows jabber client That Doesn't Suck, which is a surprisingly tall order. Along the way, I came across Miranda, which looked promising at first. The project's goal, apparently, is to develop a small and easy client. The website makes a good impression, in fact it turns out to be a lot more fetching than the client itself, which isn't beautiful. But enough about looks. I was testing for a certain subset of features, and the first impression was good. Multi protocol client, low memory footprint, small windows, and it seemed to have all the essentials - file transfers, avatars.. hm no emoticons? Turns out Miranda is so small that emoticons are treated as a plugin. I download the add-on, a .dll (not the first thing that comes to mind when you say user friendly) and dump it in the right place. Yes, emoticon themes are supported. I'm interested in that, because I maintain one.

Now, it's bad enough that every client has a different way of dealing with emoticon themes. And these approaches do not vary in what functionality they provide, all of them do the exact same thing. Making an emoticon theme is no more complicated than this:

[default]
angel.png *angel* *A*
biggrin.png *biggrin* *g*
blind.png *blind*

The above is from gaim. It's simply a picture, and a list of replacement strings which activate it. There's nothing more to a theme declaration than this. For the purpose of my emoticon theme, I wrote a few simple scripts which generate these files (which are all similar). Thusly, I wanted to find out how to generate a theme file for Miranda.

I was in for quite a surprise. The declaration itself is very much the same, of course:

; defines-----------------------------------------------------------------

Smiley = ".\OGSmileys.dll", -127, "*biggrin* *g*"
Smiley = ".\OGSmileys.dll", -122, "*blind*"
Smiley = ".\OGSmileys.dll", -111, "(B) (b)"

But what of the smilies themselves? They're in a .dll file! That's right, in Miranda's Smaller, Faster, Easier spirit, they have stored the images in a .dll. This simply means that the same bits are aggregated in a library, there's nothing more happening there, they're not being compressed or processed in any way, just plain stored.

Need I mention that emoticon themes are supposed to be easy to create? It's not supposed to take a coder to do it, it's a feature for users to enjoy, to tinker with, without needing any help.

So for someone who wants to make themselves an emoticon theme for Miranda, they need a compiler! Yes, nothing easier than tossing a few images into a directory and setting up a definition (like the one for gaim), that any schmuck can figure out, no you have to compile the bloody thing. Screw that all the other clients are doing it this way, we don't give a shit, compile it or piss off. Needless to say, for me to find and set up a compiler just for this would be a humongous hassle and no sooner did I discover this interesting little quirk did I dump Miranda altogether.

The Miranda people are so in love with .dll's, that connecting to Google Talk (which is also an add-on), you need to download another .dll. Then you need to install an openssl library as a whole separate install. Yes, ssl also an add-on, who would possibly need that?

UPDATE: Apparently there are other ways to do this.

UPDATE2: Factual errors were discovered after this entry was written, as such I posted the link above, to the Miranda forum, where the clarification was established. However, not unreasonably so, the Miranda people have urged me to clarify the situation right here as well, so as not to misrepresent their client.

Emoticons in Miranda were historically stored in .dll's. That explains why the theme that comes with the plugin is as such. However, that is not the only way to store them, and the emoticon definition example included in the plugin (which I failed to notice), explains the different options, including just using pngs.

It was never my intention to misrepresent Miranda, and while my observation about .dll's was not incorrect, it was incomplete.

first names are sacred

December 10th, 2006

My bank doesn't know my first name. Neither does the city. Or any business or institution I've dealt with. First names are not in apparently. It smacks of a sad attempt at personal privacy, but since they know everything else about us, what's the difference? You don't have to know a person's first name to hack into the bank and steal their money. The name isn't used for anything. And as such, it's not strictly necessary either. They use the initials of the first and middle name (if any), plus the last name. So if you have a kid, you can name him I. B. Clever. Or C. O. O. Lio. And if someone asks about the first name, you can tell them it's none of their business. Then you can give the kid a nickname for informal use.

First place I've ever been where no one wants your first name. :undecide:

bad, bad shopping

December 10th, 2006

Shopping in this country is so difficult that I might as well have a separate category for it on the blog. From food, to stationary, to bikes, to plants, to decor, to just about everything. Clothing seems to be decent, but that's an exception. So it's not without a certain skepticism I approached the first stab at Christmas gifts. Indeed the only thing I ended up buying was batteries on sale at Media Markt. Christmas gifts are tricky to begin with, cause there are no rules. Although I enjoy actually getting them and giving them, I don't enjoy the shopping process, wandering around trying to brainstorm. I mean Trondheim is a small town, it makes shopping hard. But Utrecht is the same kind of place, just that all the articles seem to be randomly spread and the kind of things I expect to find are not to be seen anywhere. I cruised around V&D and found their stationary department, which is pretty pathetic. I'm gonna make a note of getting stationary in Poland, where the culture for it is rich.

What you will find here is a bunch of stores very rarely found in Norway. Stores that have no defined role, they just sell completely random crap. Kruidvat is a chemist, but on the side they sell candy, cosmetics, photo equipment, CDs/DVDs, cheap clothing, children's toys, non-prescription drugs, and a bunch of things you will find there only once (like a tennis racket) by chance. This may sound disorganized, but HEMA seems to have no defined role at all, in there it's all random. This means if you want something in particular, you end up wandering through these stores on the off chance that they have what you need (which never seems to be the case). And it's not brand stores either, for clothes and media you know exactly where to go, but these "do you feel lucky?" stores make it impossible to know where to go for say a mirror, or a thermometer.

And I'm not the only one to think shopping here is awful, it seems to be a fairly well established claim.

Harvard or MIT?

December 9th, 2006

And some people claim I over-analyze movies, pah! Read this. Now we also know the difference between Harvard and MIT people.