chris blogs: January 2005

30jan2005 · Ubuntu on the iBook

I just tried the Ubuntu Hoary Live CD on my iBook and it worked pretty well. It boots up just fine and includes a nice Gnome desktop. I had already tried Warty on my Athlon XP, but Hoary feels even better and has less rough edges.

Still, there were some things that didn’t work that well: I think the sound is quieter and a bit more noisy than on OS X, probably the driver is not yet perfect. Airport Extreme is still not supported (Not really their fault, Broadcom should open their damn drivers.). And the damn CPU fan spins up far to often!

The biggest showstopper was the lack of Suspend. I really need that when I’m on notebooks. When ACPI (or whatever is needed) works out of the box, a new partition on my iBook is a sure thing for Ubuntu. (And just a matter of disk space, oh well…)

NP: Dan Bern—Too Late To Die Young

29jan2005 · FramerD

I’ve been playing with FramerD recently, and I think I’m gonna write a Ruby interface to it.

FramerD is an Object-Oriented Database which was orignally made for AI, but I think you can use it for storing just about everything.

The actual fun is the language you use to talk to FramerD: a dialect of Scheme. As a sample, I’ve imported my local ruby-talk archive into it. This piece of code does that:

(define ruby-talk (sorted (getfiles "/home/chris/Mail/ruby-talk")))

(define mail-pool  (use-pool "mail.pool"))
(define mail-index (use-index "mail.index"))

(doseq (mail ruby-talk)
  (lineout mail)
  (define error
    (signals-error? (let ((frame (read-mime (filestring mail))))
                      (fadd! frame 'obj-name (fget frame 'SUBJECT))
                      (let ((ref (fget frame 'REFERENCES)))
                        (if ref
                            (fset! frame 'REFERENCES
                                   (reverse (tx-segment ref
                                       '(+ {" " "\n"}))))))
                      (frame-create mail-pool frame)
                      (index-frame mail-index frame 'FROM)
                      (index-frame mail-index frame 'MESSAGE-ID)
                      (index-frame mail-index frame 'REFERENCES))))
  (if error
      (lineout "error on " mail ": " error)))

(commit-pool mail-pool)
(commit-index mail-index)

Now, I can easily query the datastore. For example, get all mail by me:

(find-frames mail-index
             'FROM "Christian Neukirchen <>")

Or, get all my Subject:s:

(get (find-frames "mail.index"
                  'FROM "Christian Neukirchen <>")
{;; There are 14 results
 "Re: Collecting list of most wanted libraries and apps to port to\n ruby"
 "Merry Christmas"
 "[ANN] Nukumi2 0.1"

It’s a wonderful thing and would make a great backend for a Ruby OODB, I think.

NP: Bob Dylan—Stuck Inside Of Mobile With The Memphis Blues Again

27jan2005 · Comparing Bible Translations

Donald Knuth once wrote a book called 3:16 Bible Texts Illuminated. In this book, he analyzes verse 16 of the 3rd chapter of each book in the bible.

Yesterday we talked in #ruby-de about Onan (Gen 38, 8-10), of whom is delivered to practice the “coitus interruptus”. However, this was not clear by the german Luther translation of the bible:

Aber da Onan wußte, daß der Same nicht sein eigen sein sollte, wenn er einging zu seines Bruders Weib, ließ er’s auf die Erde fallen und verderbte es, auf daß er seinem Bruder nicht Samen gäbe.

(Poor, but literal translation:

But because Onan knew the semen should not be his own, when he penetrated his brother’s wife he dropped it on the earth and ruined it, not to give semen to his brother.

). What is described is not the coitus interruptus at all, it seems to be masturbation. BTW, this story is also the reason the german word “onanieren” (masturbate) exists.

Now, contains a lot of bible etexts of different translations, so just for fun, I looked at all of them. And I think I made an interesting discovery: The actual semantics of the text vary a lot among the translations.

First, Young’s Literal Translation:

and Onan knoweth that the seed is not [reckoned] his; and it hath come to pass, if he hath gone in unto his brother’s wife, that he hath destroyed [it] to the earth, so as not to give seed to his brother;

Since this is supposed to be a literal translation, I expect it to carry the same semantics as the Hebrew original text. (This may not be true, but let’s assume it.)

Here is the King James Version of that section (all emphasis following is mine, of course):

And Onan knew that the seed should not be his; and it came to pass, when he went in unto his brother’s wife, that he spilled it on the ground, lest that he should give seed to his brother.

Notice that “destroyed” and “spilled” is quite different, isn’t it?

Next, New American Standard Bible:

Onan knew that the offspring would not be his; so when he went in to his brother’s wife, he wasted his seed on the ground in order not to give offspring to his brother.

“seed” has changed here to “offspring”. “destroyed” got “wasted”.

Here is the New International Version:

But Onan knew that the offspring would not be his; so whenever he lay with his brother’s wife, he spilled his semen on the ground to keep from producing offspring for his brother.

Aha! Suddenly, he lays with his brother’s wife not once, but multiple times. (Interesting, because god kills him because of that.) The Message, a recent translation also says “whenever he slept with his brother’s widow”.

The version included in the Amplified Bible blurries the actual action:

But Onan knew that the family would not be his, so when he cohabited with his brother’s widow, he prevented conception, lest he should raise up a child for his brother.

The New Living Translation is very easy to understand (written in 1996, by the way):

But Onan was not willing to have a child who would not be his own heir. So whenever he had intercourse with Tamar, he spilled the semen on the ground to keep her from having a baby who would belong to his brother.

“to have intercourse”, nice. The New International Reader’s Version puts it even more romantic:

But Onan knew that the children wouldn’t belong to him. So every time he made love to his brother’s wife, he spilled his semen on the ground. He did it so he wouldn’t produce children for his brother.

Quite a contrast with the Contemporary English Version (1995):

Onan knew the child would not be his, and when he had sex with Tamar, he made sure that she would not get pregnant.

Again, the actual action was not delivered. (And don’t forget that the coitus interruptus is not a safe way of prevention!)

The New King James Version somehow makes me think of transistors:

But Onan knew that the heir would not be his; and it came to pass, when he went in to his brother’s wife, that he emitted on the ground, lest he should give an heir to his brother.

Somehow, there are quite a lot of possibilities to influence readers of bible translations. Now if we just knew what actually the intent of the writers was…

NP: Jack Johnson—Wasting Time (this was not on purpose!)

25jan2005 · Dan Bern Digital Archive

I’m so happy I found this true gem of Dan Bern bootlegs. It contains over 30 recordings of Dan Bern’s live shows.

In case you don’t know him, Dan Bern is probably one of the best American songwriters around, and probably one of the most controversial too. His lyrics have to taken with a grain of salt and be read carefully before you can say anything about them, take for example Hiroshima or Swastika.

On the other hand, how could anyone possibly write such genious lines like this (which is from I Need You)?:

Walking around the happiest place in the world
But all I do is wonder if your hair’s still curled
South of Brownsville, Texas, South of Miami Beach
But all it means to me is that you’re further out of reach
Every where is sand and sun, blue sky water too
I need you

So here’s the truth at last, I tell you, Hemingway is dead
And everybody wants to find a steak that’s slightly red
I thought I could escape myself by just not getting dressed
I thought I could escape you by coming to Key West
Sometimes you get lost and you don’t find something new
I need you

Listening to Paradise Lounge (October 2004) right now. Great show (and a nice cover of “Basket Case” by Green Day).

NP: Dan Bern—Seventy Three

23jan2005 · Rock, Scissors, Paper

There is a brilliant quiz taking place on ruby-talk: You are supposed to write an bot to play Rock, Scissors, Paper.

I had sent in these players (Arranged in strength, in local tests most winning first):

  • CNBiasInverter: Choose so that your bias will be the inverted opponent’s bias.

  • CNIrrflug: Pick a random choice. If you win, use it again; else, use a random choice.

  • CNStepAhead: Try to think a step ahead. If you win, use the choice where you’d have lost. If you lose, you the choice where you’d have won. Use the same on draw.

  • CNBiasFlipper: Always use the choice that hits what the opponent said most or second-to-most often (if the most often choice is not absolutely prefered).

  • CNBiasBreaker: Always use the choice that hits what the opponent said most often.

  • CNMeanPlayer: Pick a random choice. If you win, use it again; else, use the opponent’s choice.

It was a great fun, and the contest is still running for this week. Sit down and code!

NP: Dan Bern—Crossroads

21jan2005 · Bunny suicides

Some of these Bunny suicides are just too great. :-)

Update: Where did it go?? sniff

NP: Interpol—Take You On A Cruise

21jan2005 · Umlauts and Carbon Emacs

I finally found out how to enter special characters the right way in Carbon Emacs. Previously, when I hit “ä” and the likes, it would tell me about “Undefined keys” and the like. Interestingly, the character C-q ä on my german keyboard creates a totally different character than it’s supposed to be (0x8a vs 0x8e4). I helped myself adding these characters with TextEdit afterwise, well knowing that this approach can’t be the whole truth.

However, this is now fixed. I simply added

(set-keyboard-coding-system 'mac-roman)

to my .emacs and now I can enter the correct characters with a single keypress.

I still haven’t found out how to make Emacs actually display these characters, though: I still only see empty boxes. Not that bad, but not perfect either. Comments on this would be very welcome.

Update 30jan2005: I fixed that issue! The code you need in your .emacs is:

(set-frame-font "fontset-mac" 'keep)
(add-to-list 'default-frame-alist
         '(font . "fontset-mac"))

NP: Interpol—Not Even Jail

19jan2005 · Reden ist Schweigen

Mal wieder gesammelte Werke in Reinform:

Space towel

Reden ist Schweigen, Silber ist Gold.

Vatinin [meint: Valentin]

Macht keine Witze über Bulimie. Das ist zum Kotzen.

Und ich, hacke Zug aus’m dicht.

Womit kann man jemanden betäuben?Mit Chlorophyll!

[Reden über Reißnägel in den Füßen] … nur das Reinstecken tut weh, danach merkt man nix mehr. — [Lehrer kommt vorbei] — Nicht so wie sie denken!

Hilft AIDS gegen die Pille?

Wenn ich du wäre, würde ich mal aufpassen!Und wenn ich sie wäre, wäre ich krank. Dann hätten wir jetzt nämlich frei.

NP: Bob Dylan—Clean Cut Kid (Rough-Mix)

17jan2005 · Tagged Entries

Today I extended Nukumi2 to use Technorati Tags for each entry’s categories. This means you can easily find my entries about Ruby by looking at the “Ruby” Tag Site.

Thanks a lot to _why who mentioned this on RedHandled.

NP: Interpol—Obstacle 1

16jan2005 · Move to done

If everything worked correctly, the whole blog should have been moved as proclaimed to now.

As a nice side effect, I’ve updated my templates to feature Google search and Technorati.

Thanks to Nukumi2, I only had to change the URI of the blog once, and add a simple Rewrite rule on

Update: Due request, I’ve fixed the style of this page to look readable with Safari too. Please reload your stylesheets.

NP: Interpol—Say Hello To The Angels

15jan2005 ·

I finally managed to switch my webhoster. I’m currently moving most content of over to

Should be doable without breaking too much links using more or less intelligent mod_rewrite rules… Expect the site to be moved next week. Old content will continue to stay here, tough.

Now, I figure what’s the best way to mark darcs repositories as outdated. Probably the “message of the day”.

Thanks a lot to The Internet Company for the amazingly quick setup (one hour including registering a .org!). :-)

NP: Juli—Kurz vor der Sonne

13jan2005 · Converting BlueCloth to PDF

I’ve been posting my XSLT stylesheet for conversion of BlueCloth-generated HTML to ConTeXt on ruby-talk (you can find it here, too:

Patrick Grundlach asked me why I used XSLT instead of ConTeXt’s XML handling macros… Now, that was a good question. I totally forgot about these actually (I first wanted to use xmltex, but the XSLT approach is a lot simpler, especially if you know XSLT already. And using XSL-FO would have been way overkill.)

So, I looked into the fine manual and am quite delighted now, it looks very easy to use… I could imagine converting above stylesheet to ConTeXt directly very well.

Somehow, ConTeXt always surprises me again…

NP: Bob Dylan—Sweetheart Like You (Rehearsals)

10jan2005 · Magic Mush-Room

Da fängt das Jahr doch wieder gut an:

Was heißt, “er hat sich hochgefickt?”He fucked himself upstairs.


Was wäre, wenn Hitler ein Geek gewesen wäre?Dann hätte es das 1024-jährige Reich gegeben!

Neulich hat mich der Zoll beim Brechmittelschmuggel erwischt… dann haben sie mir schnell mit Drogen gefüllte Kondome verabreicht.

Ja, beschreib’ mich, du Sau!

Ich kleb’ ein Plakat an meine Zimmertür: “Magic Mush-Room”.

Jetzt mir eigener Kategorie!

(Und ich fluche über den Emacs-Aqua Unicode-Support. *grpmf*)

NP: Mark Knopfler—Everybody Pays

08jan2005 · Got RAM?

Updated my iBook’s RAM so I now have 768 megabytes. Very nice that Firefox is a lot quicker now. :-)

Unfortunately, that killed my uptime:

16:26  up 12 days,  5:25, 5 users, load averages: 1.36 1.08 1.06

NP: Pearl Jam—Small Town

07jan2005 · In Munich

Right now, I’m sitting in a Munich cafe (San Francisco Coffe Company at Odeonsplatz) and enjoying the (unfortunately quite expensive) connectivity I have here.

Got a bit productive lately and wrote

  • a BlueCloth to ConTeXt converter. Works pretty nicely now and converts a large part of the *Cloth-typical HTML to TeX (I touched XSLT after over three months again). Maybe I’ll make a first release tomorrow, when I’m back home.

  • the beginnings of a new object-oriented database. Featuring object serialization to source-code (so you can load with eval only (Whine, kbrooks!)) and lazy loading (just-in-time on access of referenced objects). It’s still in a very early state, can’t tell about it’s usefulness in general yet.

    It uses the Hash-Ducktype API ([], []= and delete so far) and really uses SDBM so far.

NP: Madonna—Die Another Day

05jan2005 · Haskell humor

Who said Haskellers can’t be funny?

The EuroHaskell 2004 Bathroom Door

Also note the location description on the front page:

Just follow the arrow (>>>) to the conference area and bind (>>=) to The Monad (the official EuroHaskell pub).

NP: Pearl Jam—Corduroy

03jan2005 · XML::Simple

Sometimes, you wonder if other people can read your mind. Only recently i blogged about different XML APIs and an anonymous reader asked in the comments why there is no good libxml2 binding for Ruby.

Well, there you are: XML::Simple [darcs repository]

XML::Simple provides a simple (who’d have guessed?) binding to—so far—the DOM and Pull API of libxml2. Jürgen Mangler wrote the biggest part, I threw in a fair part of the Pull API and lots of design issues. And the Pull API rocks. :-) It’s almost 6 times faster than the Ruby/DL binding (and hasn’t yet crashed onto me ;-)).

Even more scary, there has been a new release every day so far. ;-)

NP: Tom Waits—I Hope That I Don’t Fall in Love With You

Copyright © 2004–2016