Saturday, April 23rd, 2005
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.
Saturday, April 23rd, 2005
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.
Friday, April 22nd, 2005
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.
Monday, April 18th, 2005
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!
Thursday, April 14th, 2005
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.
Monday, April 11th, 2005
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
Sunday, April 10th, 2005
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..
Friday, April 8th, 2005
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.
Monday, April 4th, 2005
Today marks the first day in three weeks that I haven’t had a headache. The day isn’t over yet, but at least it feels like there’s not gonna be a headache.
I’m not sure why I’ve been having consecutive headaches for over three weeks. It may have something to do with the weather. We’ve been having cold – warm – cold – hot weather for some time now here in the Netherlands. It’s been warm for the last week or so, so maybe that stability is causing the absence. Could have something to do with differences in air pressure, who knows. I tend to have a period of constant light pain in the head every spring.
It may also have something to do with my bad eye-sight. Anything beyond the monitor on my desk is a complete blur to me. Can’t read roadsigns from the car (unless really close), can’t read advertisements outside stores (yay), etc. So far that has never caused me any problems, but now it might just have caused my headaches. I probably think that every spring though.
This week it’s gonna snow again (we just had three days of 20+ degrees Celcius (36+ degrees Fahrenheit), so if the throbbing temples return, I’ll know what it was.
Monday, April 4th, 2005
If you write and release Free Software, it may be a good idea to keep some things in mind. Just to, you know, make life a little easier on the package maintainers.
The text of all posts on this blog, unless specificly mentioned otherwise, are licensed under this license.