Archive for the 'OSU OSL Crosspost' Category

Minefield?

Minefield, pfft… what kind of name is that?

From a funny love letter Mozilla received. It’s part of a nice picture series wired.com took at the Mozilla headquarters. Check it out.

Famous Songs in Code (What’s Your Guess?)

Inspired by Philipp Lenssen’s fabulous idea to express idioms in code, I came up—just for fun—with the following 10 well-known song titles, written in horrible C/Java/PHP pseudocode.

Have fun… and take a guess in the comments!

// Song 1:
it = b

// Song 2:
for (i=0; i<people.count(); i++)
  people[i].attributes |= (shiny | happy);

// Song 3:
function get(want) {
  if (random.bool() == true)
    return want;
  else
    return null;
}

// Song 4:
//function leave() {
//  return new Color(0,0,0);
//}
// Oh, I think I screwed this one up, so here it goes:
// Version 2.0 of Song 4: ;-)
function leave(me) {
  me.setColor(0,0,0);
  return me;
}

// Song 5:
who = fire.getStarter();
assert(who != us);

// Song 6:
function cry(person) {
  return (person.gender == female);
}

// Song 7:
person = king.getWife();
person.dance();

// Song 8:
life = me.getLife();
life.setSunshine(you);

// Song 9:
person = USGovernmentEmployees.getRandom();
while (person.boss != null)
  person = person.boss;
person.writeLetter();

// Song 10:
train = trains.getLine(A);
you.take(train);

Update: I fixed Song 4 and 9 because they made way too little sense. Oops ;)

Xen: NetBSD VM on a Debian Dom0

It’s been a while since I have blogged geekiness, but this one is really necessary: Today I installed a test box with an instance of the Xen Virtual Machine Monitor, with Debian Lenny as the Domain 0 (or Device Driver VM, as the researchers at my university like to call it).

The reason was that I have to run a piece of legacy software that is in SCO Unix binary format, which is incompatible with the (unaltered) Linux kernel. There is the linux-abi project whose kernel patches bring SCO binary compatibility to Linux, but I always try to avoid rebuilding the kernel because I won’t be able to update it anymore with the distro’s means; instead, I have to rebuild the kernel myself when I want to update, and (much worse), before long I am likely to end up in a situation where I am unable to avoid breaking package dependencies — keeping an up-to-date system should just not be that hard.

Thus the idea was born to run several virtual machines on the same hardware, dedicating one of them to the task of running the legacy software, and another one to running the more up-to-date standard services.

However, this still doesn’t change the fact that I would have to build a special linux-abi patched kernel, and this time even worse: It would also have to be modified for running in a Xen domain. To save myself that pain, I looked for alternatives and found the binary compatibility page in the NetBSD docs, stating that it supports UNIX binaries (including SCO) out of the box (and many more). Furthermore, NetBSD has apparently been supporting running on Xen since quite a while now.

Installing NetBSD into a Xen VM (following the howtos) is supposedly quite easy. I created an LVM volume on the harddrive to put the new system into, set up that partition as well as a current NetBSD ISO image as virtual devices, and pointed the config file to a special NetBSD installer kernel image for Xen that NetBSD provides. Then I tried to start installing the VM. But, ouch, Xen claims: “incompatible kernel”. Hm. Wasn’t that easy after all.

As it turns out, the problem is that current Debian kernels are all compiled with Intel’s physical address extensions (PAE) enabled: In short, common 32bit hardware can only address 2^32 bytes of physical RAM, that’s about 4GB. For modern systems, this can be a little short, so extensions where built to support more than that. Modern Linux distributions support them and they usually don’t harm even if you have less RAM than that; sadly, the stable NetBSD distribution does not support PAE yet, and running two systems on the same physical box that have a different understanding of how to talk to physical memory does not work.

But, lucky as I am, just a few weeks ago, NetBSD/Xen hacker Manuel Bouyer has implemented PAE support for NetBSD to an extent that allows it to run on a Xen system with PAE-enabled dom0. Thanks, Manuel!

The respective installation and regular kernel images can be found among the daily builds on the NetBSD FTP server, and if you use these kernel images instead, you’ll easily be able to get a NetBSD instance up and running without touching the stock Debian kernel.

As expected, NetBSD was able to run the SCO binaries, so far without problems. A few iptables rules on the domain0 will soon be in place to transparently forward requests for this service to the NetBSD VM, so clients will never know that it is not the Linux server itself responding to their request, but a little virtual machine running in the background.

Recruiting in the Silicon Valley

“Another Difficulty for a Microsoft-Yahoo Marriage: Recruiting”

– an interesting NYT article about how big companies become an increasingly less popular workplace for young engineering talent, in favor of smaller companies, where they have more impact and some of which have the potential of making them rich if they take off.

(Thanks for the link, Paul)

Subversion bulk move

The version control system Subversion comes with a handy function to copy or move an already versioned file from one place in the repository to another: The command svn move.

This is particularly good (and superior over, for example, CVS which is unable to do so) because the version history of the file is kept, and also the copy on the server is done lazily, meaning just because the file was copied there won’t be a second physical copy created on the server (yet, until you write to it).

A drawback of the command, though, is that it is only possible to move one single file or directory at a time. If you have a lot of files to be moved, this can get very tedious.

However, if the files you want to cover have something to be distinguished by, you may try the following (which I blog here mainly so I can get back later when I have forgotten the syntax again ;) ):

find . -name "06*" -maxdepth 1 -exec svn mv "{}" 2006/ \;

Note that I am filtering by name here (everything starting with 06), with a maximum tree depth of 1 (to avoid pulling in the .svn folder) and I am moving the respective files into the (recently created) subfolder 2006/. Also note that the the -exec flag of the find command wants to be terminated by a semicolon, but since that is a reserved character for the Bash shell, you need to escape it. This is something I trip over every time.

Anyway, I hope this helps.

Merry Christmas!

Dear readers!

I wish you a merry Christmas and a good and successful year 2008. I hope you had fun reading my blog this year and thank you all for your helpful comments and constructive input. I hope you’ll still bear with me for a long time to come!

Now get back to your Christmas feasts but make sure to not drink and sing (instead, always choose a designated singer!), or you may end up like this guy: ;-)

(The song being so graciously interpreted here, by the way, is a German Christmas song that goes “silent, silent, silent, because the child wants to sleep…”)

Apple (Allegedly) Fixes Leopard Keyboard Bug

Yesterday, Apple released a system update that is supposed to fix the severe “keyboard unresponsive” bug in OS X Leopard:

Update for the Apple Keyboard Bug(s)

With hardly 800K in size, the patch is a lightweight that could have a big influence. If that’s not the right place to use the word of the year, where else: W00t.

I just installed it and so far, the keyboard works fine, but of course I haven’t sent the box to sleep yet, so by now I can’t tell yet if the patch actually fixed the bug. Of course, the reboot the update asked for promptly resulted in a kernel panic (great start), but luckily, another reboot went through without problems.

If you like, please let me know in the comments if the patch worked for you or not. Good luck!

(Thanks Justin, Jean Pierre and Marc, who all told me about the update being available.)