chris blogs: October 2004

31oct2004 · Org-mode

I’ve been looking for an usable Outliner to run on Linux for a long time now. (My ideal is still UserLand Frontier’s.) And I’ve always been dissatisfied with the Emacs outline-mode because I think it doesn’t behave like an outliner should. It’s more for documents that have an outline.

However, isomer of #emacs just pointed out Org-mode, Carsten’s outline mode for keeping track of everything. I have to say it really rocks. You can manipulate the whole outline with a few keys, TAB, M-RET, M-left and M-right. Besides, it has lots of features like TODO lists, a diary view, calendar integration, hyperlinks, excellent table support (sweet), and HTML export. It also integrates with planner.el and remember.el.

Hmm, maybe I should add OPML support… :-)

NP: Eagles of Death Metal—Stuck in the Metal With You

29oct2004 · Nukumi2 news

Ok, I’ve got a fairly good working spike of Nukumi2. However, I won’t release any code as it’s really ugly and I don’t anyone want to see it. (lots of globals and complicated regexen around…)

However, I’m now confident that I can start writing Nukumi2 the Right Way. The design is correct, the navigation works. Static rendering too.

NP: Bob Dylan—Shooting Star

27oct2004 · xdiskusage

You may know it already, if not, you should definitely check it out: xdiskusage, a disk browser that quickly tells you about the size of your directories. It’s very small and slick and it only depends on fltk.

xdiskusage screenshot

Totally useful for doing the yearly disk clean. :-)

NP: Bob Dylan—Love Minus Zero [London, 05-09-1965]

25oct2004 · Und immer wieder...

… neue Quotes!

David sein Rucksack ist weg?Wer hat Geburtstag?

Wer hat das Geodreieck an die Decke geklebt? [und alle gucken hoch…]

… muss er freiwillig …

Stadt in Kleinasien?Mesopotamien!

Wir sind alle aus Feuer!Ich auch!

mezzo fortemetro fozze!

NP: Bob Dylan—Just Like Tom Thumb’s Blues

23oct2004 · Software Lists

Software I’d like to be Free Software:

  • Apple Keynote
  • GraphViz (the current license is barely acceptable)
  • Mac OS X
  • OmniGraffle
  • Rebol
  • Skype
  • SubEthaEdit

Software that I’d like to run on GNU/Linux:

  • UserLand Frontier
  • .werkkzeug1

I’m pretty sure there is more around, but I think that would be a nice start…

On a side note, the spike of Nukumi2 is doing good progress. I’ve cleaned up Topical to use a URI compatible syntax. Basic navigation already works nicely. The next thing will be modeling “page objects” and adding templates.

NP: Green Day—Boulevard Of Broken Dreams

21oct2004 · Your own CADR

Brad Parker did it: Emulating CADR microcode on modern hardware.

Who didn’t ever want to have a Lisp Machine of his own? There you go! :-)

Grab it over at while it’s still hot! It already works fairly well, you can evaluate code and edit with Zmacs. However, there are some cons (pun intended): It takes 100% CPU even if idle and input is still fleaky (the mouse behaves really annoying…). Besides, it’s not exactly fast (recompiling with -mcpu helps a bit, though). It’s nothing that couldn’t be fixed at a later release.

One dumb thing is that the window is 768x1024, so you have to move the window all the time with a resolution lower than 1600x1200…

Quick screenshot:

CADR screenshot

NP: Bob Dylan—Shelter From The Storm

20oct2004 · News on Nukumi2

I’ve starting to spike Nukumi2 and doing quite good process. I’m now sure that my categorization code (dubbed Topical, to be described later) will work and provide the main navigation. Unfortunately, I did a rather stupid thing defining the Topical “query” syntax that turns out to end up in invalid URIs (WEBrick has problems with //). Oh well, gotta change that and update all the unit tests…

Also, my application container will need a rewrite of some parts; just that kind of stuff that happens when you write libraries without having an application in mind. ;-)

NP: Velvet Revolver—Headspace

18oct2004 · Quotes!

Seit fünf Tagen keine Quotes mehr, es wird mal wieder Zeit:

Ich wär’ gern ein Mädchen… aber ein schönes.

Past Partyzipfel

Ist ja auch ganz wichtig, dass man das große Latinum hat, um Putzfrau zu werden!

Erinnert ihr euch noch dran? Nicht mehr? Gut.

Neu! Der Pfefferminzkaugummi zum Vergessen: Nevermint!

Als ich gehört habe, ihr habt drei Frauen geknallt, aber ihr hasst es, wenn sie bei euch einziehen, dachte ich zuerst, dass ihr ein Real Life habt. Bei “Jetzt muss ich noch eine Person mehr steuern”, wurde mir aber klar, dass ihr nur Sims 2 spielt. [oh, der Sarkasmus…]

Ich hab’ auch noch ‘nen BOGY-Wogy Zettel!

Können Vegetarier Kannibalen sein?

Wie nennt man Sex unter Alkoholeinfluss?Alkopopp!

Massen sind doch träge!Du musst’s wissen!

NP: Bob Dylan—When You Gonna Wake Up
Adulterers in churches and pornography in the schools,
You got gangsters in power and lawbreakers making rules.
When you gonna wake up, when you gonna wake up
When you gonna wake up and strengthen the things that remain?

18oct2004 · Nukumi2 Roadmap

In the last few weeks, I have been writing some Ruby libraries that will ultimately empower Nukumi2, my next-generation blogware. In particular, these, and their current state, are:

  • bungee: The application container that will hold Nukumi2 (and other software, I hope). It will allow to use Nukumi2 using CGI or as a Webrick servlet, but can also do static page generation. bungee is currently early beta, but the design works.

  • topical: A dynamic and flexible categorization framework. I only started that yesterday, but I can tell it works. :-)

  • tangerine: Nukumi2 won’t make use of XSLT (at least, not by default). tangerine will be used to define the page templates. It already works really nicely, but hasn’t been used a lot yet.

  • dana: Later versions of Nukumi2 will use possibly dana, a pre-alpha, so-far proof-of-concept object database, mainly for caching purposes.

These are other Ruby libraries, not written by me, that I am likely to use:

  • needle is a rubyish dependency-injection framework. I will almost surely want to use it (at least 33% of the Nukumi1 code would have been superfluous if I had known about dependency-injection back then…).

  • WEBrick: This Ruby-based webserver will be the preferred way to access Nukumi2, however, CGI and static pages will be supported too.

  • BlueCloth: BlueCloth has been proven to be very useful and will continue to stay the default markup language. Other Clothes will stay to be easy to add, though.

Now, why do we (or I, at least) need Nukumi2 at all?

  • I’m really dissatisfied with the current code base. Every feature I want to add—and that should be easy—is harder than the one before. I don’t understand the main processing loop anymore (shame on me). Besides, I hope (nah, I’m sure…) that my coding qualities have improved, and that refactoring won’t cut it in this case.

  • There is much more Ruby blogware around now that inspires me. When I started coding Nukumi, all I knew of was an early Hobix, and various blosxom ports. Now, I have looked at recent Hobix versions, Blogtari!, Rublog, etc. etc. Nukumi2 won’t be without reason a new major version.

  • There are various features that I’d like to have: dynamic page generation (this will change a lot), better categorization features…

  • It sounds like fun. :-)

I’ll start writing a spike this week; I estimate about 2 weeks for it. (I shouldn’t estimate in my blog entries, I know.) Then, I’ll redo it using test-driven development. I hope to get a 0.1 out this year.

NP: Green Day—American Idiot
(American voters, it will depend on you whether I have to play that song again on November 2nd.)

16oct2004 · Subyou: Das Alkopop aus der Tüte

Subyou könnte noch der Knüller werden in diesem Jahr: Scheinbar hat es einer geschafft, eine Art Brausepulver herzustellen, die sich beim Auflösen in ein “alkoholisches Mixgetränk” verwandelt (a.k.a. Alkopop).

Der klare Vorteil: Kein Pfand, keine Flasche, keine Sondersteuer. Ob’s funktioniert ist unklar, die Seite schweigt sich größtenteils zur Funktionsweise aus (googlen nach “Mixolydin-Aeolat” hilft auch nicht weiter.) Die Seite wirkt ziemlich obskur (einige Abschnitte sind offensichtlich falsch), ist aber eigentlich professionell gemacht. Sie richtet sich wohl hauptsächlich and Mallorca-Urlauber und Komapiloten…

Interessant ist auch die Marketingstrategie, die sich stark an die von Google anlehnt. Obwohl die Firma seit September 2004 existiert, habe ich bis jetzt weder davon gehört noch gelesen. Die Google-Ergebnisse beschränken sich auf wenige Seiten, kaum ein Blog-Eintrag existiert bis jetzt. Diese “Unterschwelligkeit” kannte man auch von Google, das ja praktisch nur durch Mundpropaganda publik wurde. Irgendwann haben’s eben alle benützt.

Bestellen kann man subyou bis jetzt nur im eigenen E-Shop; man muss dazu 18 sein (Das Endprodukt soll 4.8% Alkohol haben), und es gibt nur Packungen mit 15 Tüten (für 29.85€). Eine Tüte soll für 0.25l reichen, es gibt vier Geschmacksrichtungen.

Wenn das wirklich funktioniert, wird ein Aufschrei der Empörung durch Deutschland gehen… falls nicht, Gratulation an die Faker!

NP: Green Day—Jesus Of Suburbia

13oct2004 · Schnelle Frauen und nackte Autos

Und wieder ein paar Quotes:

Lieber in den Löffel beißen, als das Gras abgeben.

Hat’s schon geklingelt?Keine Ahnung. In meinem Kopf klingelt’s ständig!

Was sind Pomaden?Arschkriechertierchen!

Schnelle Frauen und nackte Autos.

I’m busy at the moment trying to convert XFML to YAML…

NP: Twin Hands—Since I Met You

10oct2004 · Euruko 2004 - Day Two

On Sunday there were mostly talks at the second European Ruby Conference, which I’d like to summarize here.

First, James Britt gave his talk about that was scheduled for Saturday, recycling his slides from the Fourth International Ruby Conference (hey, no bad thing!).

To start, he gave an overview of the site and showed what it provides: all kind of Ruby documentation, ranging from the core documentation made using RDoc and the standard library to various additional stuff like videos from Euruko 2003 (none made this year, sorry) and translations of various Ruby tutorials to languages like German and French to pictures of this year’s Euruko (I hope, at least :-)).

He went on talking about the more technical details of the site, about how the site works and what different interfaces it provides. For example, you can query the ri documentation via RESTful HTTP, like this:

After an short excursion on the history of the site and it’s various stages, he started showing some problems of, among them the broken ri support ( still uses the “old” 1.6 ri, as it changed significantly for Ruby 1.8). Also, searching the site is still a problem, googling seems to be the best way to get what you want.

Another problem is that there is some kind of data duplication needed if you want to add new material to the site, making it harder to maintain all the stuff currently available online.

James freely admitted that he is lazy (not essentially a bad thing for a programmer ;-)), so he will be going to automate everything. That is: no handcoded pages, no duplicate information and—to me, very interesting—his requirements to blogging systems that empower the site. He wants some kind of automatic categorization based on XFML and explained a bit about how it is supposed to be. This was the most important aspect of the talk to me; I’ll definitely need to spend some time on the concepts of XFML and faceted metadata.

The new will therefore be using categorization by tags and XFML. He went on talking about aspects of post-modern blogging, the core of which he dubbed annoted view. Basically, this means to generate pages dynamically based on queries by the user and incooperate feeds and external data. Post-modern blogs also support multiple output formats, for example XHTML, RSS, XTM, XFML, and Atom. It is quite logical that such blogs will be accessed by RESTful queries.

Writing the software behind, he tries to keep parts of it general purpose libraries so they can be used for other stuff too; he prefers lightweight frameworks to tightly coupled classes (Don’t we all?).

At the end of his talk he asked what people want from, but I don’t think he got lots of new ideas, so seems to do it’s job pretty well.

The first talk on this Sunday ended with the rhetorical question on how to handle community input without getting big, bloated and hard to manage.

After this, Kingsley Hendrickse presented his website tool Staticweb in a very short talk.

He gave a quick overview of the project, which is to generate some static pages quickly and he showed us interactively how to add new pages and how the templating works.

Kingsley actually wrote that software in two hours while he was sick and couldn’t work, and it was quite impressive for that. A funny thing about the code is that he named all classes after his ex-girlfriends. Whether this improves understanding of the code is questionable, but it’s a nice idea, no? :-)

The next talk was by Armin Roehrl titled Small World in year 2.

He calls Small World—a collaborative distributed contact and knowledge management system—an Eierlegende Wollmichsau—a thing that is supposed to simply do everything.

The special thing about this talk was that Armin didn’t use slides to present his application; instead, he showed a mindmap drawn by FreeMind, and browsed it during his talk. This was a very nice way of presentation, because you always had an overview of the talk and what he currently talked about.

Armin made Small World to keep knowledge among members inside a company that are distributed all over the world. He explained that Small World consists of lots of available software used together in a flexible way and he told that the key to Small World was not a revolution, but heavy development.

Small World is not only used to share knowledge and coordinate projects but also to keep customer contacts and information about them. There were “too many interesting things to do” with it, he told. :-)

The general problem addressed by Small World is the problem of getting information. Armin can’t use a shared filesystem, and he is known for being “messy and lazy”. Versioning and backup of data is a problem too.

The primary path to find the information you want is not to get the information directly, but know people that know the information (or other people that may know it…).

He showed a few ways on how to find data, ranging from a simple grep -r over collecting feedback from individuals and the mass (he gave the Amazon book recommendations as an example) and monitoring for changes up to complex search engines like Clusty and Google.

Although Small World can be used for a personal semantic web, it benefits a lot from the network by making use of the “network effect” as seen on Wikis, for example.

He explained that there are very different types of information ranging from short-term information like email over forums and blogs to files published on the net, which are used for long-time storage mostly. All these kinds of informations need to be managed.

Small World features trivial text classification and collaborated knowledge.

In order to build Small World, Armin explained that he needed only some things, the most important being cheap harddisk and standing on the shoulder of giants, by making use of existing programs like Samizdat, Squish, Estraier, Graphviz, Wikipedia, Freemind, and, of course, Ruby.

He went on with a list of things to do to improve Small World in the future: Writing RDoc documentation, adding a WebDAV interface, building a better search-engine, providing RSS with smart filtering, having better content annotating and so-called multiblogs, which really are blogs of blogs (I think this is comparable to Planets).

Unfortunately, Armin hasn’t yet released any code yet, since the project is still very much being developed and they also are exploring business strategies using it.

After this, Mathieu Bouchard presented some hacks using MetaRuby, for example the InstanceVariableHash which is best described using a short example:

h  # => {}
@foo = 42
h  # => {"@foo" => 42}
h["@bar"] = :mumble
h = {"@foo" => 42, "@bar" => :mumble}
@bar  # => :mumble

He also showed the UndoableArray that provides a undo-method to revert changes to the Array.

An example of SubArray followed:

a  # => [1,2,3,4,5]
b = a.part(1,2)
b  # => [2,3]
b[1] = 42
a  # => [1,2,42,4,5]

MetaRuby was written in 2001, and Mathieu didn’t yet have a chance to update it to Ruby 1.8, so the code only runs with 1.6.8 for now.

The memorable quote about this presentation was the answer on whether he wanted to distribute his own version of Ruby: At least not yet., he told us. ;-)

The turn was now up to Claudius Link who presented rake—Ruby make.

rake is used for build automation, that is creation of executables for multiple configurations, creation of documentation, and building and running tests.

He compared rake to other systems like make and ant and explained that these other systems are limited to a static description of build rules or a special structure, which rake is not. In fact, rake scripts are “usual” ruby programs, so you have the full flexibility and power of ruby at your fingertips. rake basically is a Ruby framework and provides utilities for building.

This was followed by a “Getting started” section that included a simple Rakefile to which dependencies were added in the second step. He showed how you can easily do file tasks that do a timestamp check to see if the task needs to be run. A generalization of this are expression rules or even complex rules whose values can be computed using lambda {}.

Advanced rake users often define new tasks or inherit from existing tasks to do new things and simplify the Rakefiles. If this is done correctly, the Rakefile is written in a domain specific language and even non-programmers (or programmers that don’t know Ruby) can write and adapt Rakefiles easily.

As a final example, Claudius showed how rake is used at his company. They have a quite complex build system there that needs to interact with Rational Rose Real-Time to do Model-Driven Architecture. (I don’t want to say what I think about this, he told us.) The build code needs to support multiple platforms. Additionally, he needs to automate running unit tests and publish their results.

Having used rake in such a complex situation, he discovered some issues with it, among them the lack of “lazy dependencies”, which are expanded only if the given task is actually to be run (I showed him how to do that quite easily, though), multiple dependencies and a more structured error handling. Other problems included lacking parallel and distributed builds, and last but not least the “shaky” documentation, as he put it.

The next—and last—talk was given by Mathieu Bouchard again, this time about RubyX11.

He started comparing RubyX11 to other implementations and their sizes: Xlib, the original and most used C library to speak to X servers, is about 3000kb of sources, which Mathieu thinks is much too much for a “rather simple” protocol like X11. A part of the reason is that it has a lot of comments, and also many shortcuts to the protocol.

Then he showed CLX, a Common Lisp implementation of Xlib which has 800kb, but still is too lowlevel code. To paraphrase him: “I thought all Common Lisp programmers were good programmers.” He mentioned the GNU Smalltalk X11 implementation with 400kb source code and the Perl module X11::Protocol which is 160kb large, but uses numbered parameters ($_[1]), and makes heavy use of pack and unpack, therefore being confusing and unreadable. All these alternatives—and RubyX11 too—do not depend on Xlib.

Now, he got to RubyX11, which is only 85kb in size and consists of three parts: 20kb implement RPC and marshalling code, 50kb reimplement xlib.h, and 15kb are mostly keyname data.

He gave an example of RubyX11 which was a nice screensaver that rendered nice curves using a iterated function system (IFS).

Then he focused on the implementation of RubyX11. He simplified some calls to X11 because they would take 11 arguments in Xlib and it would be nearly impossible to remember their order. :-)

RubyX11 basically works by defining a domain specific language inside Ruby to describe the binary protocols, then X11 would be defined on top of that.

Mathieu also pointed out some performance issues that still exist. While he used an generic encoder up to RubyX11 0.5, which basically was a big function that would format a string, he uses a “compiler” now in the CVS version. It will generate some code on the first run that is getting evaled into a method which can be called then. RubyX11 therefore is a general example for generating code at runtime using a domain specific language. This made a large performance improvement, but Mathieu could even imagine generating C code at installation time…

The Sunday ended with some discussion, and people split up in groups to talk together. They would leave the conference place shortly after, and everyone would be trying to come next year again…

09oct2004 · Euruko 2004 - Day One

This is the first part of very large blog post about Euruko 2004, and also a very complete one. Just about everything that was presented is repeated here. This was done for all the people that couldn’t come, I pity them. Have fun reading my recapture of the conference.

First of all, I need to excuse to all the attendees: Usually, I’m always in time. However, this weekend I’ve been late to just about everything: First, I arrived late at the second European Ruby Conference because we—David and I—just couldn’t find it. It turned out that the Sulzer GmbH was about 20 minutes away from the subway station—something you wouldn’t have expected looking at the wiki. :-)

However, I was only about one hour late (total mis-estimation of the subway latency), there will be worse to come: I misunderstood the time to meet for dinner, and was two hours late to that. :-/ But more about that later. Sunday morning, we were really nicely in time and met other Rubyists at the subway station. Unfortunately, we were two minutes to late to the bus and had to take another 20 minute walk. Never mind. I probably don’t need to add that we also missed the planned train and had to take a later one, making us arrive yet another hour late. At least, it gave me enough time to write this entry. ;-)

What I probably need to add, tough, is that we also missed the second train, which really sucked, as my notebook battery was empty now, too. After all, I could have stayed till the end of the conference, and wouldn’t be more late home than now. To protest, we burned our Nice-Weekend-Ticket at the train station. No one noticed…

But now, let’s recap the things in chronological order:

When we arrived at Saturday, folks just were introducing themselves, too bad I missed most of it as it would have been interesting to know what other people use Ruby for. Now I know at least that Ruby made it into the BMW blueprint and therefore is allowed there to be used for scripting and testing, however it must not be seen as a replacement to J2EE. :-D

After the introduction, we were making up the conference plan. There were only two talks on Saturday (three planned): A talk on the Fourth International Ruby Conference by James Britt, and one about “PureData and GridFlow”by Mathieu Bouchard.

Around twelve o’clock we had lunch, there was Leberkäse (liver loaf) and Weißwurst (veal sausage)—both typically Bavarian food. Additionally, you could get pretzels (the real ones) and baguette. You could get white wine too. By the way, the catering was really good. On each desk, there were lots of drinks, not limited to Coke and Grapefruit juice. Of course, you could also get lots of coffee—extremely important for us Ruby hackers. ;-) There was a box of cookies on each desk; all this stuff was there Sunday too.

James Britt gave the first talk about the Fourth International Ruby Conference that took place in Virgina last week. He basically rehashed all the talks given there, which was interesting, but not new to me since I had listened to some of the .mp3s of it and looked at slides available on the net too. James would hold the talk—which was planned for Saturday too—on Sunday since we had no time left anymore.

After a short break, Mathieu Bouchard gave his first (of three!) talk about PureData and GridFlow. PureData is a visual language and programming environment for real-time sound performances. Mathieu first told us a bit on the history of “calculated music” and the various ancestors of PureData. Then, he gave us an simple example of it. Unfortunately, the Mac OS X port of it doesn’t run very well, so he couldn’t show us an more advanced “patch”—this is how PureData programs are called.

Mathieu is developing GridFlow, an extension to PureData to use it for video performances too. He showed an example of how to generate “fire” using it and also told us about a really cool thing he did with it: a touchscreen that displayed the picture of digital camera and if you touched the screen, it would look like a distorted water surface; unfortunately that thing didn’t run on his notebook either.

He uses Ruby to abstract and script the GridFlow library API to PureData and other, similar environments. In the end, he explained how to use the Ruby REPL inside PureData and how the API works.

In the evening, most people (*g*) got to the Greece restaurant Poseidon near Prinzregentenplatz, where we had dinner. The food was really good there, and the prices were comparably cheap for Munich. A very good choice, IMO. We left about 23:30 going home to our flat.

Read on about Sunday

07oct2004 · Off to EuRuKo!

Tomorrow, I’m gonna visit a local brewery, and all-in-all probably unable to blog before EuRuKo 2004 ends, that is, till Monday.

I’ll be leaving for Munich early Saturday morning, and will come back Sunday evening. I’ll try to blog about EuRuKo, but I assume not being able to update this page due to technical reasons; therefore, watch the EuRuKo wiki for updated links to live blogs.

Also, drop by if you can!

NP: Pearl Jam—Off He Goes

06oct2004 · Wenigstens seid ihr witzig...

Mal wieder Quotes:


e = mc donalds


Wasser gibt’s wie Sand am Meer.


Du warst doch nicht da, als der Jesus gekreuzigt wurde!Ja zum Glück! Sonst hätt’ ich noch drauf geschossen!

Wenigstens seid ihr witzig… es gibt auch dumme Leute, die nicht witzig sind!

NP: Exit Flare—The Last Night

03oct2004 · Bungee

I’m currently designing and spiking Bungee, a flexible ROPE. (Got it? Great.)

Bungee is an webserver independent interface to an object-oriented, hierarchical database—currently there is only a Webrick servlet.

Bungee works by mapping an URI into a series of method calls, which are to be applied in order. For example, the fictive request

get’s mapped to this:


root could in this case be a Bungee::Directory, which would be entered and lookup of 'chris' would follow (let’s assume this is a directory too). When we get to 'blog', some code could get evaluated (residing in that directory), and '42' will return the final page, in this case, an blog entry.

I think this technique allows some pretty cool uses: For example, you could write a YAML mapper, and “browse” into YAML files directly (and use these virtual paths from your own scripts). And it would be have no differently if the YAML file was expanded into a real directory…

NP: Simon & Garfunkel—The Sound of Silence

01oct2004 · Wort zum Freitag

Schon wieder Quotes!

Das Gleichnis vom den verlorenen Eiern.

Das Gleichnis vom Doppelkorn.

Nur die Harten komm’n in Garten.

In der Kotze liegt die Fotze.

Verdammt geschmacklos dieser Freitag…

Nächste Woche: Brauereibesichtigung!

NP: Bob Dylan—Tweedle Dee & Tweedle Dum

Copyright © 2004–2016