Log <-

Archive for April, 2005

The pope…

The pope is not interesting. Repeat after me: The pope is not interesting. I hope the dutch media can now stop reporting on every word the man speaks. He's not god, he's not jezus, he's just the head of some crazy sect. Enough is enough already.

Man, how I hate the press.

xo.inborn.net RSS feed

Because my friend Zetion is too lazy to create a RSS feed for his web log, I've made one for him. Lazy bastard! ;-)

Update: Yes! My strong-arm tactics have succeeded in forcing Zetion to create a RSS feed! Finally! I'm so happy, I think I'm gonna cry. Thanks, Zetion.

rssmerger v0.3 released

I've just released rssmerger v0.3. This release fixes a bug where a RSS feed with multiple root nodes (for instance, a xml and xml-stylesheet) wasn't handled correctly.

Tridge posts Open BitKeeper compatible tool

Andrew Tridgell (of Samba fame), the guy who allegedly was the cause of the retraction of the BitKeeper license for the Linux kernel, has posted his creation named SourcePuller to freshmeat. From the README:

SourcePuller (also known as 'sp') is a free client for talking to BitKeeper(tm) source code management servers. It is written to offer
enough functionality to enable reasonable access to source code
repositories held in BitKeeper without attempting to actually replace
BitKeeper as a source code management system.

I guess Linus Torvalds was wrong when he said nothing good would come out of Tridgell's tinkering with the BitKeeper protocol.

I'm not sure about the exact wording of the free BitKeeper license, but as far as I know it wasn't allowed to reverse-engineer BitKeeper if you had a free license. Since Tridgell didn't have a license and he didn't reverse BitKeeper itself but only the protocol, I don't see how they could have pulled the license like that. The protocol wasn't even reverse-engineered, Tridgell just used the protocol's help command.

Anyway, Tridgell makes some comments, dated April 2005, on this whole issue in the README in the project:

As you probably know, there has been quite a fuss lately about this
code and the fact that BitMover has now withdrawn the free version of
bk. First off, I would like to say that this result was not the
intention when I wrote this code. I had hoped that an alternative open
client would be able to coexist happily with the proprietary
BitKeeeper client, as has happened with so many other protocols. An
open client combined with the ability to accurately import into other
source code management tools would have been a big step forward, and
should have allowed BitMover to flourish in the commercial environment
while still being used by the free software community.

I would also like to say that BitMover is well within its rights to
license BitKeeper as it sees fit. I am of course disappointed at how
BitMover has portrayed some of my actions, but please understand that
they are under a lot of pressure. Under stress people sometimes say
things that perhaps they shouldn't.

As I have stated previously, my code was written without using
bk. Some people expressed some skepticism over that, perhaps because
they haven't noticed that bk servers have online protocol help (just
type 'help' into a telnet session). I don't think it is unreasonable
to assume that this help was intended for people like myself who
wished to implement new clients.

I would like to thank all the people who have supported me in the
development of this tool by providing useful advice both before,
during and after the development of the code. I tried to consult with
a wide range of interested parties and the feedback I got was
certainly appreciated.

Finally, I would like to point out the obvious fact that Linus was
perfectly within his rights to choose bk for the kernel. I personally
would not have chosen it, but it was his choice to make, not anyone
elses. Linus is now in the unenviable position of changing source code
management systems, which is a painful task, particularly when moving
away from a system that worked as well as bk did. If you want to help,
then help with code not commentary. There have been enough flames over
this issue already.

Yet More Firefox Extensions

Every now and then I take a little time to check out Mozilla Firefox extensions to see if anything new has popped up. This time I found some extensions that I hadn't noticed before but which are highly recommended by me from now on.

  • Document map
    Document Map displays the current HTML page's structure (headings, etc) in the sidebar. This makes navigating large pages much much easier.
  • MediaPlayerConnectivity
    This extension is awesome, especially for GNU/Linux users. It replaces embedded objects (movies, etc) with a clickable launch button (much like the flash blocker). When you click it, it launches an application of your choice (for me that's GMPlayer or Totem) and plays the movie. It also parses direct links to playlists and allows automatic playing of movies upon page loads. Very good. Especially if you don't like embedded movie players.
  • MozEx
    MozEx adds the possibility to use external programs for certain actions in Firefox which are normally handled internally. I'm using MozEx only for two of its features, namely the 'View Page Source in external editor' and 'Edit textarea in external editor'. In fact, I'm typing this in Vim right now and when I'm done, I'll just save and it'll load whatever I typed in Vim into the textarea. Much better then those annoyingly small featureless textareas.

Now go and install above mentioned extensions!

First testing of GPL in court?

In my RSS reader, I just noticed a story about an injunction against Fortinet for GPL violations. (Original press release) The preliminary injunction on holding sales by Fortinet was filed by gpl-violations.org and granted by the Munich district court:

The gpl-violations.org project has uncovered violations by Fortinet UK Ltd., the UK subsidiary of Fortinet Inc., of the GNU General Public License (GPL). According to gpl-violations.org, Fortinet used GPL software in certain products and then used cryptographic techniques to conceal that usage.

As a result of this violation, the Munich district court has granted a preliminary injunction against Fortinet Ltd., banning them from further distribution of their products until they are in compliance with the GNU GPL conditions.

Will this be the first real legal case, as far as I know, involving the GPL? Will it hold up? Perhaps now we'll finally know.

Update: Now that I think about it, whether the GPL 'works' is really a non-issue. All that matters is if you can prove that someone violated the rights granted by the GPL. If you can do that, they automatically loose those rights and the software is placed back under the normal Copyright, meaning that they lose all rights to modify and redistribute the software. So, the GPL really doesn't need to be tested in court.

Alarm.sh: A simple alert tool

A guy phoned me up last monday and said, "Don't forget about our appointment tonight at 20:00!". "I won't", I told him, put the horn down and thought to myself "I will forget about this. Better quickly whip up a script to remind me tonight". So I did.

That evening I was working on the script, cleaning it up, writing some comments, beautifying it. Suddenly the phone rings: "Hey, it's me! Where are you?! It's already 20:30!". Doh!

Anyway, here's the script: Alarm.sh

Am I a perfectionist?

I suspect I might be a perfectionist.

Everytime I get near completing a script, project, whatever, I tend to find something that can in some way be improved. And before I know it, I find myself actually improving it.

It's not even that I notice myself finding something that can be improved. Otherwise I'd just say 'Screw it' and leave it alone. Rather, I'll suddenly find myself rewriting some part of a project thinking 'Why am I doing this? I should've left it alone'. But by then I've already put so much time and effort into it, I'm surely not going to throw away all those changes.

Take PROMS for instance. I was supposed to release it somewhere last week or something. I just noticed myself rewriting the setup tool from scratch because the interfacing wasn't quite up to par. *sigh*

I really need to learn to just let go. Oh well..

Dutch government gone mad

I don't enjoy writing about political topics. Every time I do so, it is because something is terribly wrong. Every time I hear about some ludicrous proposal or new law I get terribly upset. Just like now. The dutch government has been doing Terribly Stupid things again.

The dutch government is, I can hardly believe it, proposing the following:

When a person in a company claims someone else has sexually harassed her (and I'm using 'her' here on purpose), it will be up to the other person to disprove the claim!!

This is absolutely positivelly INSANE! Guilty until proven innocent! How can this happen? How can this happen in this country?! Why, for fucks sake, is nobody getting pissed off about this?! I mean.. guilty until proven innocent! How can you ever prove that you didn't sexually harassed someone? It's completely impossible!

Do these people, these people that make our laws, that we entrust with our privacy, our futures, even think about the consequences of their incredibly stupid ideas?

Do they realise that any person can now claim they've been sexually harassed when they simply don't like the other person? When they want the other persons job? When they're out to destroy their life after a failed office-romance?

Do they realise that this means, in effect, that men won't be able to reprimand any women in a company because of possible retribution? People will have to fear eachother at every step of the way!

I mean, look at what happened to Ruud Lubbers. He's been under constant attack by the media and the people for something that was never proven to be true, just because someone claimed he sexually harassed her. He even had to resort to resigning his function because of the way he was being harassed.

I surely do hope that the person who thought this up is the first person to fall victim to his new law. Let them completely destroy his life, his job and his relationships. He deserves no better.

Disclaimer: I've heard about this on the radio. The radio, as you may know, is media. Media is Evil. I haven't seen this news pop up on any other news sources, so it may not have been accurate. I am including this disclaimer here because, truth be told, I can't believe it myself. This is such a dumb proposel that the person that thought it up should be removed from his position immediatelly.

Two types of programmers

The way I see it, there are two types of programmers*:

  • The practical programmer, and
  • The academic programmer

The practical programmer
The practical programmer knows his stuff. He is experienced and knows what will and won't work. He's been through the same training as every other software engineer and has learned the same things. When a problem rears its head in need of a solution, he takes his knowledge and applies the basics of many principles to solve the problem. All things are taken into account: Ease of use, speed, ease of coding, ease of maintenance, code complexity, etc.

His solutions are elegant. They do what they need to do. No more, no less. They're transparent; one look and you can understand what is being done. They're prepared for the future; their transparency makes them easily extendable, but they are not overly-prepared. The practical programmer understands that completely new problems need completely new solutions, lest they lose their transparency.

The practical programmer's code applies the basics, the ideas, behind academic solutions where needed, but they aren't overdone.

The academic programmer
The academic programmer's been through education. He has learned a variety of solutions to a variety of problems, and can apply them. When a problem arises, in need of a solution, he takes the prefabricated solutions, always the same, and applies them to the problem.

His solutions are almost always over-prepared; they take in account all thought-of future modification, except the ones that matter. His solutions are not transparent but laden with academic concepts and solutions to problems that only occur because of those concepts. His solutions sacrifice speed, ease of coding, transparency and ease of maintenance in favor of The One Correct Solution (as it was taught to him). Of those sacrifices, only speed has a chance of being recovered; often requiring many ugly workarounds.

The academic programmer is baffled by problems that have no prefabricated solution. Creating a new solution requires massive amounts of time, for it must be The One Correct Solution to the problem. His programs take long to implement because the unnecessarily large One Correct Solution needs to be adapted to fit the problem. The size and scope of the solution makes it so that changing it is hard; its non-transparency hides the problem it is trying to solve.

The academic programmer believes the prefabricated solutions are always best. No thought goes into the solution. As it was taught, so it is applied.

Examples

  • Linux vs GNU/Herd/GNUMach
    The Hurd/Mach kernel is the epiphany of academic Kernel design. It is unfinished after having been in development for years. Terrible problems have plagued its completion time and time again.
    The Linux kernel is 'finished'. It runs on sixteen different architectures. It does its thing on embedded appliances, servers, desktop machines and huge clusters. It offers practical solutions to many, many problems. Its following is huge, because it is practical.
  • C vs C++ / Java
    The C programming language has stood its ground for decades. Its initial design was practical, direct and powerful and remains largely unchanged to this day. It required no spin-offs but only minor tweaks because it is complete within itself.
    But it was not The One Correct Solution.
    Then came the academics and they envisioned C++. At first C++ offered practical solutions to 'problems'. Object Oriented capabilities added more transparency by forcing correct design in C. But the academic's fire had been lighted. Templates were added; vague concepts put in that no man could understand.. Even worse was the idea of adding Yet Another Layer to the idea of C++, resulting in Java.
    Where C is fast, easy to write and debug (though it has a somewhat high learning curve), C++ and Java are slow, non-transparent and hard to debug.
  • Forking vs multi-threading
    Forking is the process of creating children processes by forking off a copy of the current program where both keep running independently. The same memory is not shared by the different processes but rather copied. Communication is done through pipes. A clean, simple concept that hardly ever goes wrong. Management of the child process is left to the Operating System so that when the parent dies, the child can live on.
    Multi-threading on the other hand is contained within the parent program. Memory is shared between threads causing all kinds of read/write problems between threads, not to mention the horrors of correct locking. When the parent program dies, all threads die with it. It is, however, not the idea of threading that is the problem. I'm sure it can be put to good use, though I can't think of any. What is the problem though is the use of threading where not needed. Why solve a problem using obfuscating threads when it can be done without?
  • Normalized database designs
    Database normalization is founded on good principles: No redundant data and safe-guarding data integrity. But when overdone causes great problems in databases. Again: speed, transparency and maintainability are sacrificed in the name of The One Correct Solution. Again: When the basics of normalization are applied, all is good. When fully applied as learned by the academic programmer, disasterous.

Conclusion
Academic programmers and solutions have their uses, as long as they stick to academic works. But please keep them out of the 'real' world. Their solutions form a good foundation for solving problems, but they shouldn't be applied as-is in day-to-day programs.

And kids, remember: Just because they taught you to solve problem A with solution 1 in school doesn't mean you should always solve every problem that looks like problem A with solution 1. Keep in mind that Real World problems have no One Correct Solution but rather a whole range of possible ones. Pick the best things from each and apply them pragmatically. Don't build a prefab house in a tornado area.

* There are actually more types. There are also the hackers, drag-and-drop-monkeys, maintainers, etc. This way it sounds more dramatic.