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
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
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.

Totally useful for doing the yearly disk clean. :-)
NP: Bob Dylan—Love Minus Zero [London, 05-09-1965]
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 forte
— metro fozze!
NP: Bob Dylan—Just Like Tom Thumb’s Blues
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
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
www.heeltoe.com 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:

NP: Bob Dylan—Shelter From The Storm
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
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?
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.)
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
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
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 ruby-doc.org 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: http://www.ruby-doc.org/find/pickaxe/Array/.
After an short excursion on the history of the site and it’s various
stages, he started showing some problems of ruby-doc.org, among them
the broken ri support (ruby-doc.org 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 ruby-doc.org 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 ruby-doc.org, 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 ruby-doc.org,
but I don’t think he got lots of new ideas, so ruby-doc.org 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…
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
ruby-doc.org 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
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
Wenigstens seid ihr witzig...
Mal wieder Quotes:
Blausucht
e = mc donalds
Humoriden
Wasser gibt’s wie Sand am Meer.
Rockzipfel
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
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
http://bungee.example.org/chris/blog/42
get’s mapped to this:
root['chris']['blog']['42']
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
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