Looking Back on Four and a Half Years of Education

Tuesday, 2010-02-09 01:53, 1265680398 seconds since Unix epoch

So I received my degree. Whoop-the-fucking-doo. Now I’m fully qualified to do something, although nobody seems to know for sure what exactly. The only thing I have to do now is to actually go and collect the physical representation of this achievement. There’s a ceremony planned in a few weeks, and I guess people expect me to be there. I’ve paid for it, so I might just as well go.

People who have read this blog before (yes, all three of you!) might know where I’m going with this post. I’ll try to keep this as neutral as possible, and I’ll try to refrain from any biased negative comments towards the educational system. I initially wanted to list all of the useful things I’ve learned during my time, but that would make this post awfully short. I’ll just make this some kind of chronological report of all of the things I remember of the past four and a half years.

Back in the day I knew exactly what I wanted to do. I wanted to combine computer science with a bit of engineering and electronics. Luckily for me, the Dutch educational system offered a four year course teaching exactly that. Although, in hindsight they didn’t, but that’s beside the point. I visited the school a few times to make sure my cash ended up somewhere worth while. A few teachers seemed to be quite competent, so I decided to enroll.

The first two years were a breeze. Most of the stuff was actually quite easy. None of it was interesting, compelling or even slightly useful. There might have been a few exceptions to this rule. I remember learning C++. It’s an odd choice for a programming language. You have to keep in mind most people attending these classes haven’t written a single line of code in their entire life. Throwing C++ at them won’t make much of a difference. So all of the people who didn’t already know how to code automatically left. After the first two years, more than half of the students had left. Which was a shame, because some of them were quite smart and clearly possessed the required talent. But the educational system didn’t motivate these people at all, so they dropped out. Anyway, back to C++. It’s a great language, once you get the hang of it. It has a huge learning curve, which makes it absolutely useless as an educational language. If your goal is to teach people some programming basics, grab a language that’s accessible to novice programmers. In that respect, almost any language would be better than C++. I’d suggest Lua, Ruby or Python. Pascal used to be a good choice, although the world has passed that era a few eras ago. It got even worse by the way. Students initially started out using Borland C++, creating nifty win32 GUI point-and-click applications. That’s no way to learn a language. Only afterwards people learned an application didn’t necessarily come with a GUI. After C++, and if you were able to write C++ on paper during a test, you could go on to the advanced course. C. Yes, you’ve read that correctly. C. It’s like learning how to construct a roof before you’ve learned how the foundation works. Instead of teaching that C++ offers methods to easily work with strings, you learned that C lacks those and works with character arrays. Throw some pointer magic in there while most people didn’t even grasp the difference between for- and while-loops, and you end up with total chaos. The very basics of software engineering, e.g. writing software, were neglected to a degree of absolute shamefulness. If I didn’t have years of experience writing software, I think I also would’ve dropped out.

Next to writing software, we also learned useful things like teamwork. Teamwork usually translates in one of two things. Or you work your ass off to get the project finished in time, or you just make it seem you do all the work, while you’re actually just relying on your teammates to finish the job for you. The second kind of people tend to be more successful, since they actually have the time to study for all of those other things the educational system tries to shove down the student’s throats. During the first two years this system has made some of the best people leave out of pure frustration. I didn’t, but I did have trouble finding the motivation to be the one doing all the work all the time.

The rest of the curriculum during the first two years wasn’t that interesting. Most courses needed a whole semester to teach something that can be taught equally well by reading some relevant Wikipedia articles for an hour or so. That’s what I ended up doing, too. It’s amazing how much nonsense some of these courses try to teach, ranging from extremely dated theories to outright lies. Too bad the educational system doesn’t approve of people pointing out the absurdities during tests. To pass the test, you’re expected to copy over the same things you’ve been taught in class. You’re not, I repeat, not allowed to think for yourself. On the other hand, some things were quite lacking. I’ve already covered programming basics, but things like maths and logic were completely non-existent during the entire four and a half years. How do people expect students to create decent solutions if they’re not even told how some of the most basic principles in engineering work?

The other two years were interesting in their own right. Now the students (the ones who were left) grasped the basics, or that’s what they were being told anyway, the fun stuff could begin. It turned out to be quite a challenge. During these two years two semesters were dedicated to internships, and the other two to “regular” education. The educational semesters seem to have been designed to test the student’s ability to cope with vast amounts of stress. First off, they managed to cram 100 hours worth of work in a single week, for five months straight. During these semesters students had to follow all kinds of weird courses, some of which even had dependency problems by scheduling a course parallel to it’s predecessor. Next to these courses a project was organized, which in itself cost more than 40 hours a week. Again, it was mostly one or two people doing all the work, while others were idly slacking along. The worst thing is, these projects were actually fun. I especially invested lots of time into these projects to make the best out of the end result. Playing around with Embedded Linux, networking and electronics is way too much fun to sacrifice for a few of these lame courses. I ended up doing another semester worth of overtime because of this decision. All of that while the slackers graduated before me. I still don’t understand why there are companies actually hiring these people. These people end up automating banks, public transport and other sensitive areas. It’s a horrifying idea. Anyway, the two projects I’ve done have been quite successful. I’ve learned most of what I know today about X11 and Embedded Linux during these two semester projects. I’m actually putting that knowledge to good use right now. The sad thing is though, there’s not a single teacher who understands what I’ve built. They ended up hiring post-graduates to teach the students about the technology we’ve been playing around with. Luckily these guys know what they’re talking about, and I admire them for their effort. I sure as hell couldn’t function as a teacher within that educational system, let alone actually bring my message across.

During the same two projects, the educational system had to introduce something which most engineers hate the most. Paperwork and bureaucracy. And lots of it. Every feature needed it’s own set of documents, seals of approval and meetings. Writing these documents took way more time than actually developing the damn thing in the first place. For every line of code there were 60 lines of documentation. I’m not even counting comments here, it’s 60 lines of bullshit for every line of actual code. I’ve still got the source tree of those projects, and it’s awful. We ended up with almost 300 pages of text, and a product lacking features. All of those features had been documented though, and that has to count for something, right? Right?

The other two semesters were internships. No courses, just a full-time project to invest your time in. Most of the students called these internships vacation, because of the sheer contrast of a normal 40 hour week to the 100 hour week we were used to. Of course we had to write a report, but that’s it. We were expected to show up after 100 work days with a report, a presentation and a happy employer. Some of us even managed to get a contract out of these internships. I already had a contract at my first internship, so that doesn’t really count. I’ve had a wonderful time hacking on Linux-HA, OpenBSD, VLC, X11 and way more cool stuff. If I replaced all of the educational mumbo-jumbo with internships, I could’ve been a full time kernel developer at one of the big sponsors or something. I could’ve learned so much more in those four and a half years.

So, while everybody went to work at their new employers after graduation, I had to endure another semester worth of education. I had a few courses left, all of them having something to do with drawing pictures and schematics instead of actually writing the damn software. Coincidence? I think not. Luckily I was given the chance to participate in a new Embedded Linux project for a group a companies, headed by my university. This way I didn’t have to do all of the courses again, but only a small subset of them. I don’t know how I did it, but I have pulled through. The Embedded Linux project is starting to look quite promising, and all of the courses have been dealt with. I’ve got a final meeting with the project members tomorrow. After that, I’m a free man. I’m actually quoting one of my teachers here.

So, looking back on these years. What have I learned? Most of the things I’ve learned, I’ve taught myself. I don’t believe having all of those teachers around has made that much of a difference. I’ve only met a few teachers who were actually interesting, and managed to teach me new things I’m able to use in my job as a software and network engineer. Don’t get me wrong, most of them are great people, but they just can’t keep up with what has happened in the last, say, 20 years. The educational system hasn’t entirely wasted my time, but it’s gotten damn close. I think I could’ve achieved way more in less time under a much lower budget. There’s something wrong with this system, and it should be fixed.

XKCD Sandwich

Monday, 2010-01-11 16:53, 1263228785 seconds since Unix epoch

It may be old, but it’s still valid.

user@box:~/kitchen$ make
Make what?
user@box:~/kitchen$ make sandwich
What? Make it yourself.
user@box:~/kitchen$ sudo make sandwich
Okay.

Multi Host Trac using NGINX

Sunday, 2010-01-10 02:52, 1263091927 seconds since Unix epoch

So, after using NGINX as my primary web server for over six months, I’m quite happy with it. The sites I’ve migrated have all been running without real practical problems what so ever. During my usage of NGINX, one of the most useful aspects is it’s use of assignable variables in the configuration files. Where I needed to write the same twenty-something lines of configuration for every similar virtual host using Apache, NGINX allows me to replace all that with a single write-once works-for-all virtual host. Trac is one of the things for which this will come in handy. I’m hosting a dozen of Trac sites, all requiring their own Apache Location directive. I’ve replaced all of that with a few lines of NGINX config and a single init-script. I’m going to show you how.

Before we start, I have to tell you I’ve only tested this using Trac 0.11.6 and NGINX 0.7.64 on Debian GNU/Linux. It’ll probably work everywhere, except on Windows. Trac’s FastCGI simply won’t run.

Just like NGINX hasn’t got mod_php, mod_python is equally absent. Which is a good thingtm. Trac supports running every site in FastCGI mode since 0.9, making it entirely NGINX-compatible. There’s even a config sample on the wiki, which we are not going to use.

After creating your Trac environment using trac-admin, you’ll have to deploy the site first. Since I’m using Debian, it’s going to end up somewhere under /var/www/. I’ve also put my Trac sites in /var/trac/, just to make things a little more complicated. Put your files wherever you fancy, I’ll keep using these paths. Say, we’re about to host helloworld’s project trac page.

trac-admin /var/trac/helloworld initenv
mkdir -p /var/www/trac && chown www-data:www-data /var/www/trac
trac-admin /var/trac/helloworld deploy /var/www/trac/helloworld
chown -R www-data:www-data /var/www/trac/helloworld /var/trac/helloworld

Replace www-data with whatever user your NGINX is using. This will initialize your Trac environment and deploy the site-specific static files to the webroot. This will also provide you with the FastCGI server, which in turn can be started using Lighty’s spawn-fcgi. As always, I’ll supply the init script you can use to automate this. This time though, I’ve simplified things a bit. Since all of the Trac FastCGI processes are the same anyway, we can use symlinks and the init script’s basename to unify our configuration. The only thing you have to do to start the site’s FastCGI daemon during the system boot is to copy the fcgi-trac-base script to /etc/init.d/, and the following.

ln -s /etc/init.d/fcgi-trac-base /etc/init.d/fcgi-trac-helloworld
update-rc.d fcgi-trac-helloworld defaults
/etc/init.d/fcgi-trac-helloworld start

Now we’ve got Trac itself running, it’s time to get NGINX to actually serve the site. I’ve chosen, because of SSL limitations, to host Trac sites under https://www.domain.tld/trac/project instead of a sub domain. I think the config’s easy enough to change this behavior. The first thing we want to do is to make sure static content, like CSS and images, is served directly by NGINX instead of tunneled through FastCGI. All the following configuration goes, in order, into your domain’s server { } block.

location ~ ^/trac/([0-9a-zA-Z\-_]*)/chrome(.*)$ {
    alias /var/www/trac/$1/htdocs$2;
}

All of the static content will now be caught before Trac’s even touched. This increases the speed of serving this content drastically. Next up, calling Trac itself. It becomes a little tricky from here, since we’re juggling with regular expressions and variables. Once you’ve set them up correctly though, you shouldn’t have to edit a single line anymore when adding extra Trac sites. First, we want to store which Trac site we’re accessing. In this case, we want the helloworld part from our Trac URI.

if ($uri ~ ^/trac/([0-9a-zA-Z\-_]*).*$) {
    set $trac_host $1;
}

We’ll make good use of this variable. The next step is to call the right Trac FastCGI server. Because we’ve used a self-configuring init script, we can safely assume the location of the listening UNIX socket. We can even use this variable to point to the right authentication file, if you wish to secure your Trac sites. The right way to create this authentication file is using Apache’s htpasswd.

mkdir /etc/nginx/trac
htpasswd /etc/nginx/trac/trac.helloworld.passwd johndoe
chmod 400 /etc/nginx/trac/trac.helloworld.passwd
chown www-data /etc/nginx/trac/trac.helloworld.passwd

I’ll explain the following block in parts, because there are quite some gotcha’s hidden between the lines.

location ~ ^/trac {
    auth_basic            "Trac";
    auth_basic_user_file  /etc/nginx/trac/trac.$trac_host.passwd;

I’ve used a regular expression match in the location instead of a regular location definer because otherwise the PHP interpreter out of my previous NGINX post would try to parse anything that ends with .php, including PHP files in Trac’s browse source functionality. It would fail of course, but Trac will also fail to produce the pretty syntax highlighted source code. You do have to make sure Trac’s configuration comes before PHP’s.

    fastcgi_split_path_info ^(/trac/[0-9a-zA-Z\-_]*[/]*)(.*)$;

It took me a while, and some help, to figure this out. To get the right PATH_INFO FastCGI variable, you can’t just use the regular expression in the previous if-statement. It will work, except for URIs with urlencoded characters in them, like spaces. NGINX keeps these %something characters, while FastCGI’s PATH_INFO expects these strings to be supplied decoded. The special function fastcgi_split_path_info corrects this error, and will supply you with a correct value stored in the $fastcgi_path_info variable. You’ll have to be using NGINX 0.7.31 or later to get this to work.

    fastcgi_pass   unix:/var/run/trac-fastcgi-$trac_host.sock;

Now we can pass everything to our eagerly waiting UNIX socket, which has been set up by the fcgi-trac-base init script. As you can see, it’s important the project name throughout the config matches exactly. Otherwise, some components might fail to find the right locations.

    fastcgi_param  HTTPS            on;
    fastcgi_param  QUERY_STRING     $query_string;
    fastcgi_param  CONTENT_TYPE     $content_type;
    fastcgi_param  CONTENT_LENGTH   $content_length;
    fastcgi_param  SCRIPT_NAME      /trac/$trac_host;
    fastcgi_param  PATH_INFO        /$fastcgi_path_info;
    fastcgi_param  AUTH_USER        $remote_user;
    fastcgi_param  REMOTE_USER      $remote_user;
    fastcgi_param  REQUEST_METHOD   $request_method;
    fastcgi_param  SERVER_NAME      $server_name;
    fastcgi_param  SERVER_PORT      $server_port;
    fastcgi_param  SERVER_PROTOCOL  $server_protocol;
}

Finally, we can add the right variables to get FastCGI the information needed to serve the Trac pages. Remove the HTTPS variable if you don’t use HTTPS for your Trac sites. Also, remove the *_USER variables if you don’t use NGINX’s HTTP authentication for Trac.

Now you can easily add new Trac sites by following the next steps.

trac-admin /var/trac/$PROJECT initenv
trac-admin /var/trac/$PROJECT deploy /var/www/trac/$PROJECT
chown -R www-data:www-data /var/trac/$PROJECT /var/www/trac/$PROJECT
htpasswd /etc/nginx/trac/trac.$PROJECT.passwd $USER
chmod 400 /etc/nginx/trac/trac.$PROJECT.passwd
chown www-data /etc/nginx/trac/trac.$PROJECT.passwd
ln -s /etc/init.d/fcgi-trac-base /etc/init.d/fcgi-trac-$PROJECT
update-rc.d fcgi-trac-$PROJECT defaults
/etc/init.d/fcgi-trac-$PROJECT start

I’ve combined all of the config into a single file you can place in your NGINX config directory, which you can include inside any server {} block.

Sinterklaas

Sunday, 2009-12-06 02:15, 1260065708 seconds since Unix epoch

Here in the Netherlands, we’ve got a tradition called Sinterklaas. It’s about an old, single bearded man with a love for children dressed in red coming down the chimney with presents around December. But unlike Santaclaus, he’s got black people instead of reindeer. Who said the Dutch abolished slavery and apartheid? The Americans pretty much stole the whole thing, and made it Geneva-compatible, but that’s neither here nor there.

Sinterklaas comes from Spain in our traditions, on a big ocean steamer. This year though, he’s delivered his presents through email. And the email didn’t even come from Spain, it was sent by our Swedish friends. So I guess it wasn’t Sinterklaas this time. Unless these guys are Sinterklaas, that is.

Because Opeth has been going strong since way before I knew about them, that’s like 20 years of Opeth, they’re celebrating with a series of concerts. They kind of forgot to schedule a concert in the Netherlands, so we’ll have to come to them. To Germany. Not that I dislike our eastern neighbors, but you know, there has always been a bit of a friendly competition between the two of us. Let’s just don’t mention the war, now shall we?

Anyways, to make this extra special, the concert’s being held at the Lichtburg in Essen. As you can see, it’s not that much of a moshpit-esque venue. They’ll be playing the entire Blackwater Park album though, so they do deserve a venue with a certain style to play in. Not that the Lichtburg has that particular style, but at least it’s a proper recognition of the sheer musical quality these people have been producing for the last two decades.

Aaand, to make this whole deal even more awesome, me and my brother have got VIP-access. Another meet ‘n greet, wooh. It’s getting a bit tedious now, isn’t it? So I guess my brother can get his guitar signed again and I’ll be fumbling around, looking for the right words in front of gods again.

Play MKV on the PS3 For Free

Monday, 2009-11-23 20:01, 1259006487 seconds since Unix epoch

Okay, I’m getting just about sick of all of these half-assed solutions out there. I’ve done some research and I’ve made a script that usually works. It converts a H.264/AC3 MKV file to H.264/AAC. I’ve also downsized the AC3 to 192Kbit/s AAC stereo, because almost nobody has proper 5.1.

The script does make some assumptions, but it’ll work for almost 99% of the content out there. You can download it here or copy-paste from this piece of code. Oh, you’ll need some tools as well. Those would be mkvtoolnix, gpac and ffmpeg on Debian. Can’t find the packages you need? Debian-Multimedia might help.

#!/bin/bash

if [ -z "$1" -o -z "$2" ]; then
  echo "Usage: $0 movie.mkv movie.mp4"
  exit
fi

FPS=`mkvinfo "$1" |grep -m 1 fps | awk ' { print $6 }' | sed 's/(//'`

echo "Detected $FPS fps first stream"

mkvextract tracks "$1" 1:/tmp/mkv2ps3.264 2:/tmp/mkv2ps3.ac3
ffmpeg -i /tmp/mkv2ps3.ac3 -ab 192k -ac 2 -acodec libfaac /tmp/mkv2ps3.aac
MP4Box -new "$2" -add /tmp/mkv2ps3.264 -add /tmp/mkv2ps3.aac -fps $FPS
rm /tmp/mkv2ps3.{264,ac3,aac}

Edit: If you’re having trouble with double free or memory corruption errors at the end of the script, you’re using a broken gpac. Here’s a little something to get yourself a functional MP4Box. Run as root:

cd /usr/src/
cvs -z3 -d:pserver:anonymous@gpac.cvs.sourceforge.net:/cvsroot/gpac co -P gpac
cd gpac
chmod +x configure
./configure --static-mp4box
make
cp bin/gcc/MP4Box /usr/local/bin

Motorcycle Madness

Tuesday, 2009-10-27 00:52, 1256604730 seconds since Unix epoch

Okay, as I’ve ranted before, I want to go ahead and ignore everybody’s advise and get myself a two wheeled life shortening device next year. I didn’t know it could be this captivating. It’s okay to covet things, but this is getting ridiculous. Granted, it’s potentially the most expensive toy I’ll ever buy, but that doesn’t make it that important. I can’t get my mind off of these machines. Even new Sun hardware hardly excites me anymore. How did it ever come this far?

It all started with several friends and family members owning motorcycles. The standard guy reaction became a fact. “I want one of those.” But when I was sixteen years old, it didn’t even occur to me to get a moped or something. I was buying computers instead. Even when I turned eighteen, I didn’t get the urge to get a driver’s license. Somehow this youth dream of owning a motorcycle of my own got buried under years of dusty geekery.

All of that changed when I saw, about a year ago, the motorcycle a friend’s neighbor bought himself. It was a Moto Guzzi Griso, probably the 850. It still is, without a doubt, the most beautiful motorcycle ever built by man. This thing removed all the electronics and computers from my want-to-have list in one clean sweep, and restored “motorcycle” to the #1 position on this list, where it belongs.

For a very long time, I couldn’t be bothered with any other bike than the Griso. Especially because the beefed-up version, the Griso 1200 8V I wrote about earlier, has received nothing but good reviews. In my mind, there was no bike that could beat the Griso. A few weeks ago, I came to the conclusion I’ve been crossing every border I’ve come to respect during my years as a skeptic. I haven’t talked with a single opponent, just with people who already share my positive disposition towards the Griso. I didn’t even properly analyze my requirements for a motorcycle.

So, I decided to start from scratch. Forget the Griso for the moment, even if it’s hard. I knew I was going to use the machine for commuting back and forth between home and work. I’m also thinking of exploring Europe instead of flying across half the globe next holiday. So it has to be able to carry me (and my camera equipment) to far away places and back. I want to cut costs where ever I can during these economic questionable times, so it shouldn’t guzzle fuel like a Harley. Roads in the far east and north of Europe aren’t that great, so my new toy should have the ability to handle that. The final real challenge are my legs. They’re pretty long for motorcycle standards. If I’m going to ride the motorcycle for days on end, I need to sit comfortably. Of course things like looks, performance, durability, availability, accessories and price are pretty important as well.

People, whom I trust to be knowledgeable in the field of motorcycles, explained I’m looking for an adventure-touring type of motorcycle. It’s basically a touring machine, standard riding position, lots of power, luggage capacity and tank range. The thing making it an adventure-touring machine is it’s ability to be controllable on bad roads like gravel or dirt. This type of motorcycles has become immensely popular, so availability won’t be that much of a problem. Remember the Long Way Round with Ewan McGregor and Charley Boorman? Those were adventure-touring machines. Now everybody thinks they need off road capability in the suburbs. Including me, it seems.

So there are a few bikes to choose from. Let’s just start with Ewan and Charley’s choice. The BMW R1200GS Adventure. Every man, woman, child and dog in Europe seems to have one. It’s the best selling bike ever. It’s not selling by it’s looks. Oh my, it’s ugly. When you’ve got a R1200GS in your mirrors it’s like looking at a retarded man child, questioning the validity of your license plate. It isn’t that great off road either, mostly because of it’s weight. It can manage, but that’s about it. It’s a lot happier on the tarmac. Yes, it does have a great engine, gearbox and transmission and comes with all the bells and whistles you could think of, but it’s still ugly. Besides, I don’t want anything everybody already has. I don’t want the motorcycle equivalent of an iPod, for Satan’s sake. There are also a myriad of technical problems reported about this bike. Since everything is built by BMW, who like to electronically manage everything, lots of electronics ended up in this bike. It’s great when it works, but it adds so much more potential breakdowns I’m not looking forward to fixing at the side of the road in Bosnia. So to sum things up, I simply don’t want to be seen with this monstrosity.

Surprisingly, the big contender comes from Moto Guzzi. The Stelvio NTX. It’s not that bad looking for an adventure bike. I actually like it. There’s so much nice stuff to choose from to bolt onto the bike, like panniers and crash bars. It’s being marketed as the big R1200GS contender, so Guzzi has to compensate for all of the accessories made by BMW. This includes ABS, which is really handy with a bike this big. Just like the BMW, the Stelvio isn’t light and nimble. But on the other hand, I don’t expect it to be. It comes equipped with roughly the Griso’s engine, delivering enough power to be able to cruise around comfortably. That’s also it’s biggest weakness. The Guzzi V-twin lacks torque in the mid range, which is okay for a sports bike like the Griso, but pretty annoying on difficult terrain. It’s not that fuel efficient either, with 1151cc of displacement and rudimentary motor management this thing is a bit thirsty. Combine this engine with an extremely heavy clutch leaver, road-going suspension and tires and you’ll end up with an awful off road experience. I’m sure some people manage to get this thing across a dirt road, but I wouldn’t want to try. But on the other hand, as long as there’s some tarmac left, this motorcycle will stand it’s own. The nicest aspect of this bike must be the logo by the way. It’s a Guzzi. That must count for something, right?

The third contender is the KTM 990 Adventure. I had almost made up my mind and chose the Stelvio, until I did some research about this machine. What a bike. It’s built by KTM, renowned for the quality and durability of it’s creations. You can take this thing across any terrain, and it’ll keep going. Not that I’m really looking for an all-roader, but this thing shouldn’t give me problems with the worst tracks Europe’s back country can throw at me. Sure, it’s a bit of overkill to take a landrover when my neighbor’s ford will do just fine. But that hasn’t stopped anyone from doing so anyway. Apart from being durable, it has enough oompf to impress those furry big eared rodents along the freeway just enough to not kill themselves. It has a tried and tested V-twin, a smooth 6-speed and a friendly clutch. After this power plant accelerates you beyond the limits of what’s considered safe, you’ll be looking for brakes of some sort. Just like the GS (if you pay even more) and NTX, the 990 has ABS, helping a hand in your efforts stopping this orange thing. Especially because I’m a bit of a novice, ABS does come in handy during the first few months. This bike is fairly complete on it’s own. There are many things you can add to this bike to make it even more useful. It’s pretty much the entire collection of accessories you’d expect in the adventure touring market, with a few neat extras. It’s all colored in KTM’s distinctive orange, of course. There’s even a KTM tent for you and your bike, for those people wo’d rather sleep with a KTM than another toy. Fuel efficiency is okay, with a range of roughly 330km on it’s 19.5L tank. It’s not as good as the theoretical figures of the GS, but it seems not a single tester has been able to completely drain the fuel supply on that German oil tanker. The 990 surely looks better than the GS, but doesn’t cut it when compared to the Stelvio. Granted, it’s radical design is KTM’s trademark. It just breathes durability and functionality. One thing that immediately struck gold in my eyes is it’s size. It’s a huge bike, both in length and height. I’m sure I’ll have no trouble at all touring around on this motorcycle. Now I fully understand why Charley Boorman wanted this thing so badly instead of the German competition. There’s one little problem though, and that’s it’s price. I’m sure it’s fully justified by the quality, so it’ll be cheaper down the lane. Still, an initial investment of 15.251 euros for just the standard bike is a bit steep.

There’s one other competitor though, which just might meet my expectations. The Buell XB12X. It definitely looks (and sounds) better than both the GS and 990, but it’s more road oriented as well. It’s not as expensive either, at 13.795 euros. In design, it’s the GS done right. The big American V-twin underneath does the job, and quite well at that. Even though it’s not that advanced as the competition. It’s a four valve air cooled engine, with a helper fan on the front. Personally, I don’t like the sound of my Sun Ultra 27 coming from my motorcycle. Luckily it only runs for a few minutes after you’ve parked the thing. Of course, being an adventure tourer, some cases and toys can be bolted on. Fuel efficiency is okay, actually quite impressive for such a big V-twin, at the almost same level as the KTM 990. The XB12X can handle gravel, but it’s completely rubbish on anything worse than that. At least it doesn’t really look like it can manage, like the Guzzi. I like this bike, although it would limit my possibilities a bit. It’s obviously a lesser option than the KTM, but it’s a real alternative when I’m short in cash in 2010.

To summarize this, I’m looking for the BMW R1200GS without it’s hideous looks. I think I’m going for the KTM 990 Adventure, unless it’s unaffordable for me next year. The Buell XB12X would make a nice cheaper alternative.

Edit: I just found out Buell is no more, so I guess I’ve just got make sure I can afford the KTM. And no, the V-Strom is no alternative.

Fiber Fail

Wednesday, 2009-10-21 23:56, 1256169361 seconds since Unix epoch

Ever since we’ve received fiber to the home in my town I’ve been happily browsing the web using this awesome new 100Mbit/s service. Okay, some of the ISP services have been failing, but the link itself is fine. I’m even watching Discovery HD without any problems. Hell, even the phones work.

I work only a few kilometers from where I live (because I’m a lazy bastard), so obviously we’ve got fiber to the office as well. If only that worked as well as the connection I’ve got at home.

The trouble started when we decided to ask for a business link in stead of a regular link. We’d get 100Mbit/s guaranteed and a 1Gb/s cross link with our other building down the street. There was also some deal with an SIP trunk for a telephony, to enable our regiment of well spoken ladies to chat along freely with the customers. It all sounded pretty nice, and looked like it too. On paper that is.

To sweeten the deal, we’ve rented out a part of our building to the fiber business. We got our fiber for cheap, and they got a nice place for customer service. Whenever we had a problem, we could just walk over to the fiber people and talk nerdy to each other. Maybe even share some IT war stories, who knows.

Four months behind schedule, random people started digging randomly with even more random equipment around our premises. The pavement had to be yanked out, a trench had to be dug and lots of coffee had to be consumed. You couldn’t talk with the digging crew, they all spoke some eastern European language. After the digging crew left, another group of professionals dove into the trenches to fill them with shiny new fiber cables. After they left, the original crew could come back to fill up the trenches with the original soil and put the pavement back where it belonged. This setup sounds great in theory, but these people managed to screw a few things up. The coordination between the two crews wasn’t that well thought out. Trenches would stay open for days, waiting for fiber that just wouldn’t come. The town center looked like a WWI war zone during a weekend. Everybody knows that when you make a hole, put something in it, and put the original soil back, you’ll end up with too much soil. Apparently they didn’t know that. So after these people were finished, you could just follow the narrow stretched speed bumps in the pavement to see where the fiber went into the ground. Anyway, while they were messing around with the orange bundles of joy, we started to wonder why our office didn’t get entrenched. Every other building in the street got their trench, but not us. Did we collaborate with the enemy or something? Why didn’t we get one of those defensive perimeters?

After a while, the eastern European diggers were gone, the opposing factions reached a peace agreement and the trenches vanished from our streets. Minus the pedestrian speed bumps of course, those were still everywhere, causing elderly people to break bones they didn’t even know they had. Everybody in our neighborhood had their orange bundle of fiber sticking out of the pavement, but we didn’t. Neither did our fiber supplying neighbors, who were running the whole show. Somehow they managed to skip themselves and us in their planning.

As (a lot of) time passed by, one by one the naked fiber strings, which were sticking out of the pavement while enduring the worst Dutch weather could throw at them, were warmly tucked away in people’s houses and offices. Even our fiber friends next door managed to get their own fiber connection, illegally adding cabling to our building, while they should’ve connected us instead. We managed the building’s internal gigabit network, on which they could surf the intertubes. So now we had no fiber, no connection and a tenant who does, but doesn’t want to share.

After lots of whining and complaining, the eastern European dudes came back and fixed us some fiber. The complimentary pedestrian speed bump was placed nicely in front of our doorstep. It took even longer for the technicians to hook it all up, but finally we had two fiber connections. What, two? Apparently we needed one for regular internet, and the other one for the link to our other building. The original plan was to put the internet connection at the other building and route the internet connection through the gigabit fiber cross link. We finally had fiber to the office, almost a year behind schedule and twice as many cables as we originally thought we’d get.

But we weren’t there yet. Oh no. People had to activate our connection first. In order to do that they needed to know what kind of connection we had in mind. Somehow something went wrong between sales and the technical people, because now we needed to buy some really expensive Cisco equipment all of a sudden. According to the engineers, that’s the only way to create a sustainable VLAN across their fiber network. We’re a 3com shop, so that would’ve caused quite some havoc in our network unless we added some routers as well. During the process the government telecom watchdog intervened and split the fiber company in two, causing the price to go up. This made the whole ordeal even more expensive than a Cogent multi-gigabit carrier line. Even registering ourselves as an ISP on the (now separated) network, with all the hardware it takes, would’ve been cheaper. So after some debate, we chose to get two regular connections, one of which with 100Mbit/s guaranteed. We only needed one, but it would be a shame not to use the extra fiber. After all that was communicated and done, we got the connections activated. One of these connections was the business line, but they didn’t tell which one. Both the fiber modems were identical and weren’t marked. We couldn’t tell the difference either, because the fiber provider activated both of them as regular consumer lines. Later they told us their activation scheme works using addresses only, so it couldn’t even handle two lines at the same address. So we’ve connected one of the modems to our company router and told the ISP to use that particular modem as a business line. Up until this day we haven’t received a business connection.

After the fiber people cleaned up, the town center continued it’s daily life. People were happily watching HD adult entertainment, calling distant friends and sending spam in unprecedented volumes in their newly fiber connected homes. This digital utopia would only last this long, because a large group of people who can’t even spell the word education decided to start WWII.

Their mission was to turn the peaceful town center into a battlefield again. They brought bigger toys with them as well. While the fiber people could easily manage with a set of spades, these uneducated grunts brought heavy machinery. Slowly it became apparent they were just there to replace the sewage and water systems, the pavement and some shrubberies. After two days of digging they had uncovered almost all of the fiber again, some of it dangerously dangling over deep holes they created to replace the sewage piping.

A few days later we suffered a major brown out. Only our radio kept playing, because it’s built out of an old laptop. One of the half-brained apes in orange clothing managed to cut the power lines with one of his big digging toys. In doing so he blew a bunch of fuses in a central power hub, cutting off half the town. It’s not that bad for an IT company to suffer a brown out, compared to the fact that we had a Perfect Draft next to the fridge, keeping our beer from going bad. We had to drink all of our beer that day. Luckily the power people have been able to fix it quite fast.

Only a short while later the infantile orange dressed mammals did it again, but this time they pulled our precious fiber to bits. Right in front of our door. Luckily the fiber technicians have been able to weld the two pieces back together again. We’ve only suffered minor downtime in comparison to what happened next.

Now these shit-for-brains dirt cowboys have really done it. They’ve completely destroyed an important fiber linkage, causing almost two hundred homes and businesses to lose connection, including us. According to the fiber gurus they can’t fix it this time, without having to replace the whole cable. That means they have to open up the pavement again, all the way back to the junction box, on the other side of the village. This’ll probably take all weekend, so that’s even more downtime.

There are two things that’ll probably happen now after all of this fiber failing. Some lawyers are going to get paid, and paid well. Some nine months after these brown and web outs, we’ll have to welcome lots and lots of new inhabitants in our village.

Finger for the .plan

Wednesday, 2009-09-23 00:30, 1253665838 seconds since Unix epoch

Okay, everybody has got plans. Right? Not everybody fingers for them anymore, though. It used to be such a nice method of finding out what someone was up to. Just fingering around, you know. “Hey! How’s your holiday been?” “How did you know?” “I fingered you for it last week.”

Enough with the geek humor. I’ve got quite a nice list of activities lined up for this year.

At e-Viela!, the office if you will, I’ve got some programming work to finish. After that’s done I can join a great project to create a Debian GNU/Linux powered terminal server cluster. It’s going to be huge, hugely awesome and equally fun to operate. Several hundred people will be able to experience the fastest desktop experience ever experienced by man. Maybe I’m overrating it a bit. Anyway, it could incorporate toys like HTTP booting thin clients, dynamically distributed KVM instances, ZFS and much more.

Unfortunately I’m not finished with my education just yet. In the next semester I’ll work for the Embedded Linux lectureship, advising companies about using Linux in embedded environments. It’s going to be lots and lots of research, some electronics and a bit of coding. I hope I’m allowed to share my research with the rest of the world this time. All I know about the projects at hand right now is that it’s going to involve the ARM architecture, hardware I/O interfacing and “standard” procedures I’m not all too happy with. But hey, we can’t have it all.

I’m going to jump on the Rails bandwagon. It’s a bit late, I know. I’ve still got the Barrato web shop to maintain, and it’s getting really nasty with a 5 year old PHP code base. Since I’ve already met Ruby and fell in love ever since, Rails would be the logical platform to create v3 of the web shop with. I’ve bought a book, a server and loads of Dr. Foots and peperkoek. I’m sure I can manage with having made this preparation.

Now I’m looking at semi-permanent employment at e-Viela!, banks will take me seriously. This opens a shitload of financial possibilities and accompanied death traps. I’m looking for a nice little apartment of my own. Nothing crazy, just the necessary luxuries. I’ve never felt like living in a student apartment, sharing and caring with everybody, spending heaps of rent for sub-par living comfort. No, just give me a modern compact kitchen and bathroom, a living room for me and my guests and a bedroom where no magic will ever happen. Oh, and a little corner for Lucifer’s shrine of course. I’m afraid no apartments come with complimentary CAT-6 cabling and wall sockets.

Oh, I almost forgot, I promised myself a Guzzi for my Bachelor’s degree. My motivation was running low, so this is my way of compensating for that loss. I’ve got to bribe an instructor for a driver’s license first of course, but that won’t be that much of a problem. The Guzzi I’m talking about is the coolest bike ever built. The Moto Guzzi Griso 1200 8V. The Italians have done the impossible. Making a loud, powerful bike look sexy. Just listen to that v-twin, it’s like speed metal on a Sunday. This is an Epic Want.

This is a bunch of Czech people playing around with an older (1100?) orange Griso. I mean, even in orange it’s beatiful.

Debian PHP Session Sharing Stopped Working

Thursday, 2009-08-27 15:27, 1251386831 seconds since Unix epoch

The preferred method of sharing sessions between (sub)domains has always been the session.cookie_domain PHP setting. For example, if I want to keep my blog’s session in the photography pages, I simply set PHP’s session.cookie_domain to ".jrrzz.net".

But all of a sudden, all of this stopped working. Visiting one of the domains while having an active session on another destroyed all active sessions all together. After searching through the docs and several angry users later, I’ve found the culprit.

The suhosin security patch encrypts the session data using the DocumentRoot string. Since this usually varies between sub domains, you’ll have to disable this in suhosin’s own configuration file. Simply set the PHP directive suhosin.session.cryptdocroot to off.

Even Jesus Worships Me. I Bow Down To None.

Tuesday, 2009-08-25 20:13, 1251231192 seconds since Unix epoch

Otep’s new album, Smash The Control Machine.

A real poetic protest album, throwing the dark side of humanity in your face with unprecedented vigor. Just when you thought you’ve come to know Otep, she surprises you with new aspects of her mind. Art is war. Words are weapons. This album is the WMD.

But I’m afraid it’s not all honey and bliss. The production of this album is vastly different for earlier work. Whereas Sevas Tra damaged my speakers, Smash The Control Machine leaves me adjusting the volume up constantly in search of the oompf eViL j’s bass lines should deliver. Guitars sound flat out wrong. To quote Curt Cobain: “What are they tuning, a harp?”. It could have been intentional, to emphasize the lyrics. But I highly doubt it.

Anyway, I still really recommend this album. Just make sure to reconfig your equalizer.