auf.kante
Gunnar macht sich selbststaendig und fliegt auf
die Schnauze
wird erfolgreich. Wer mag darf zuschauen.
Gunnar is starting his business. He will certainly
fail succeed. You may watch.
auf.kante

Fri, 30 Jun 2006

Plönck

Ein menschlicher Schädel der unvermittelt auf den Holzfußboden knallt. Sofort flutet Licht den Saal, Sanitäter eilen schnellen Schrittes herbei. Hunderte Gesichter suchen irritierten Blickes die Person, die am Boden liegt. Mitgefühl schwängert die Luft.

Auf der Bühne die beiden Schauspieler. Herausgerissen aus der von ihnen geschaffenen Welt. Hilflos, erschüttert, bleibt nichts als Warten. Bis die Ärzte kurz darauf nicken, den stabilen Zustand signalisieren und der Patient wieder sitzt. Offensichtlich unbeschadet.

Benedikt und Beatrice verharren in Anspannung, die sich nicht löst. Zweifelnden Blickes, zögerlich fragend:

"Ist alles in Ordnung?"

Es wird genickt, bejaht. Benedikt ringt nach Fassung, versucht aus Spannung, Nervosität und Konzentration zur Ruhe zu kommen, murmelt:

"Vielleicht ist er nur eingeschlafen."

Die unfreiwillige Komik löst den Knoten. Er schüttelt die Irritation ab, sucht den Fokus und den Faden:

"Wo war ich? Ich war gerade beim Sterben..."

Das sprengt den Knoten vollends. Beatrice und Benedikt blicken sich in die Augen, müssen unfreiwillig lachen und ihre verkrampften Körper lösen sich sichtbar. Sie geben sich kurz Halt, umarmen sich, nehmen Kraft vom jeweils anderen.

Und fahren fort. Besiegeln endgültig Benedikts blutiges Schicksal.

Wed, 28 Jun 2006

hrm..., layman-1.0.4

Testing on layman-1.0.3 was not rigid enough and I needed to resolve a bug ... hence layman-1.0.4.

Tue, 27 Jun 2006

Sei mein

Du bist Licht in dem ich nicht einmal Schatten werfe. Licht in dem ich nur verglühen kann. Doch was birgt nun noch die Dunkelheit? Lass mich brennen.

Und doch ... ich vergehe nicht. Erblickst Du mich in Deinem Strahlenkranz? Ich bin. Still. Nichtiger Hauch. Umlodert von Deiner Glut. Dein Feuer, dass den Willen blendet. Doch nicht zerstört, nicht vernichtet.

Dann gestatte die Berührung. Den letzten Akt. Den letzten Willen vor dem Ende. Du hast keine Wahl gelassen. Du darfst mich nehmen.

Und doch ... ich erlöse nicht. Streife zart die feinen Glieder. Lasse mich umhüllen von der Hitze. Du ruhst und lässt geschehen. Als wäre ich nicht bloß Wind. Du ruhst und verführst. Und ich bin Nichts, das keinen Schatten wirft in Deinem Angesicht.

Als Leere muss ich weichen. Meine Hoffnung ist Vermessenheit, die in Deinem Glanz nicht währt. So bleibt nur Nacht.

Und doch ... ich gehe nicht. Wer einmal geschaut, wer einmal gespürt, wer einmal geliebt hat, bleibt. Schaut zurück. Denn zu brennen bedeutet keinen Schmerz.

Dein Blick bannt mich. Hält und fordert. Du gewährst mir Leben. Vielleicht Liebe? Doch was bin ich noch außer Verlangen?

Und doch ... ich zögere nicht. Was ist schon Willen? Sucht nach Gnade beherrscht die Sinne. Und findet Erlösung in zärtlicher Hand. Die behutsam meinen Kopf verwahrt. Verweilt und gewährt.

Und war ich einst Wind. Vielleicht auch Schatten in der Dunkelheit. Wurde als Nichts getauft. Als Hauch vergessen. Jetzt bin ich Liebe und Du mein Atem.

Horde webclient packages added for Kolab/Gentoo

The Kolab/Gentoo overlay now provides experimental horde ebuilds to install the web client for the Kolab server.

emerge horde-kolab-all

will emerge a meta-package that pulls in all horde parts that are necessary for the complete web client.

When using horde with Kolab there were usually a number of features that were broken. I tried to fix the most obvious ones and the ebuilds contain a number of Kolab specific patches. Some of these patches are rather bad hacks and will never make it upstream.

You should now be able to login with your uid, shares should work most of the time and the groupware parts of horde should provide you access to notes, tasks, addresses and calendars.

Testing and comments welcome as always.

Layman-1.0.3 released

The next version of layman has been released.

Changes and fixes:

  • Unsupported overlays are marked in the overlay listing. If you try to add such an overlay you will get appropriate information about the package that need to be installed in order to use the overlay
  • Fixed length of short overlay listing
  • If an overlay relocates to a new url layman will issue a warning to the user.
  • The fetch operation is now the default. You do not need to specify "-f" anymore. In case you are not online or do not want to sync the global list, use the new "-n" flag.
  • Experimental support for bzr overlays. I did not test this yet and if somebody uses this for overlay management I'd be happy about feedback.
  • Online tests have been removed from teh unit tests

Sun, 25 Jun 2006

Private Bloglesung

Interessante Perspektive, wenn einem ein angetrunkener Freund die eigenen Blogeinträge vorliest. Natürlich problematisch, wenn besagter Freund zwar nur eingeschränkt kohärent vorlesen kann, aber als gelernter Autor leider noch ausreichend Geistesgegenwärtigkeit besitzt, um einen darauf hinzuweisen, dass man plötzlich völlig unmotiviert aus dem Präsens ins Präteritum gewechselt hätte. Nun könnte man ins Zweifeln geraten und sich fragen, ob die Schwierigkeiten beim Vorlesen nicht eher durch den eigenen holprigen Satzbau verursacht werden. Oder man könnte bierumnebelt darüber nachdenken, dass man sich eigentlich gar nicht mehr so sicher ist, was dieses Wörtchen "Präteritum" eigentlich bedeuten könnte. Oder ... man öffnet sich einfach das nächste Bier und bloggt's halt nacher weg.

Fri, 23 Jun 2006

Ribbeln

Als ich heute morgen aufgewacht bin, fand ich einen kleinen Faden, der vorwitzig aus meinem Bauchnabel hervorschielte. Keinen Fussel, nein, ein fleischfarbenes Fädchen, festgewachsen. Ich habe versucht ihn zu ignorieren. Aber auch als ich mich angezogen hatte, kitzelte er ein wenig, als wolle er mich an seine Anwesenheit erinnern. Bei jeder Bewegung ein leises Kribbeln. Nein, er war da, unbestreitbar.

Knibbeln am Körper ist grundsätzlich untersagt. Am Körper gibt es nichts Unnormales, nichts das gerechtfertigt weggerubbelt, geknibbelt, gerissen oder gerupft werden könnte. Und doch, dieses Fädchen gehört dort nicht hin. Verlangt nach Aufmerksamkeit und will gezogen, verdreht und entfernt werden.

Irgendwann hat die Hand einen unbedachten Moment genutzt, ist leise, still und heimlich, ganz ungewollt unter das T-Shirt gewandert. Die Finger nach dem Nabel ausgestreckt, das kleine Fädchen erspürt, gefühlt und ertastet. Und dann, es leicht zwischen Daumen und Zeigefinger packend, ein kleines wenig gezupft, gezogen. Dann ein wenig mehr, das ziehende Gefühl verstärkend. Und schließlich kommt es los, das Fädchen.

Und mein Nabel ribbelt sich. Ribbelt sich auf. Ein wenig nur. Ein seltsames Gefühl, während sich der Bauchnabel langsam ins Nichts hinfort ribbelt. Zurück bleibt nur ein unbestimmtes Gefühl. Eine leere Faserigkeit.

Gedankenverloren wird der Faden um den Zeigefinger gewickelt, während sich die Bauchdecke langsam ins Unbestimmte auflöst. Zurück bleiben ausgefranste Maschen die trostlos die mulmige Leere umsäumen. Haltlose Maschen orientierungslosen Fleisches, das dem unausweichlichen Auflösungsprozess harrt.

Ein kleines Knäuel hat sich so schon um meinen Finger gewickelt, bis ich mein Tun bemerkte, erschreckt aufspringe und die Hand unbedacht, ruckartig hervor ziehe. Dabei die rechte Hüfte in ein ungeordnetes Faserwirrwarr verwandle.

Und jetzt geht alles ganz schnell. Es sind nicht mehr nur die losen Maschen zu sehen, sondern überall lose Enden. Enden, die nach Erlösung suchen. Die gerupft, gezogen und gerissen werden wollen, denn sie sind aus der Ordnung gefallen. Sie gehören nicht in das Geflecht, sind reine Faserigkeit, aus den Fugen geraten. Und ich reiße und zupfe. Löse hier, ribbel dort. Links und rechts, die Hüfte verschwindet in unbeherrschbarer Unsicherheit. Der Po verwandelt sich in ein Meer unkontrollierter Trübsinnigkeit. Die Oberschenkel lösen sich auf in wütenden Selbsthass, die Füße in brennenden Schmerz. Die Rippen werden freigelegt, lassen Luft für zerstörerische Selbstzweifel.

Und schließlich bleibt ein Faden, der Letzte, der das Gesicht nimmt und der Flut an Verzweiflung erlaubt alles zu überschwemmen. Ausgeribbelt.

Thu, 22 Jun 2006

Venture Capital

Bei der letzten Lesung kam ich nicht umhin festzustellen, dass gleich mehrere fein gekleidete, ältere Damen den jungen Autor in literarische Zwiegespräche verstrickten. Ganz augenscheinlich durchaus zum Leidwesen des Autors.

Ich kam aber auch nicht umhin, über neue Finanzierungsmodelle nachzudenken. Früher konnte man als Informatiker ja noch mit seinem Säckel unter den Fenstern der Banken herlaufen und den süßen Klimperregen auffangen.

Heutzutage könnte so ein Schreibkurs schon einen geldwerten Vorteil bedeuten. Wenn ich so durch meine Blogeinträge lese, belege ich aber vielleicht doch besser gleich zwei Kurse.

Wed, 21 Jun 2006

Der Wink mit der Birke

Das Niendorfer Gehege bezeichne ich mit einem Lächeln als meinen persönlichen Märchenwald. Wie es sich für einen zünftigen Märchenwald gehört, treffe ich dort beim Joggen ab und an Erscheinungen, die nicht von dieser Welt sind. Zu denen gehört zum Beispiel die wundersame Wandergruppe. Nicht dass der Eindruck entsteht ich hätte etwas gegen Seniorengruppen oder sei militanter Gegner der Nordic Walking Bewegung.

Natürlich erinnere ich mich immer gerne an mein Idealbild des Nordic Walkers. Die kleine Dampfwalze, die in der kalifornischen Sonne mit schnaufenden Geräuschen die Hanteln ganz weltmeisterlich hektisch auf und ab schwenkte. Eigentlich war ihr Einsatz mustergültig, die Sportkleidung tadellos teuer und Kritik wohl kaum angebracht. Trotzdem konnte ich mir einen leicht verwunderten Blick nicht verkneifen, während ich langsamen Schrittes rechts zum Überholen ansetzte. Das am Rande.

Nein, eine Gruppe Senioren beim gemeinsamen Stöckchen-Schwingen ist bei weitem noch im Rahmen der Phänomene des Alltags auf diesem Planeten. Nun ist dieser spezielle Wanderverein aber eine Multi-Tasking-Gruppe, die in besonders fröhlichen Momenten der Wanderung innehält und ein Liedchen anstimmt.

Um meine Verwunderung bei unserer ersten Begegnung zu verdeutlichen fehlt noch ein kleines Detail das meinen Märchenwald auszeichnet: Er liegt exakt unter der Einflugschneise des Hamburger Flughafens.

Man stelle sich also vor, dass man durch eine Horde Senioren prescht, in eine Serie verzückt aufgerissener Münder blickt, die Gesichtszüge wie in fröhliche singender Ekstase eingefroren, während einen die volle Ladung Dezibel aus den Triebwerken des just in diesem Moment landenden Jumbos auf die Ohren knallt. Ein denkwürdiger Moment, der wie in Zeitlupe an einem vorbeizieht.

Das Geschehene wurde unter der Kategorie "unerklärliche Freizeitbeschäftigung" abgeheftet und ich hatte eigentlich nicht erwartet, das Attribut "unerklärlich" streichen zu müssen.

Doch wir hatten das Vergnügen einer zweiten Begegnung. Zu meinem Leidwesen nur in trauter Zweisamkeit. Mein guter Freund der Jumbo verspätete sich um eine halbe Minute.

Ich hätte wohl schon aufgrund der Lied-Wahl Fersengeld gegeben:

... es tönen die Lieder aus der Schalalalalalalalalalalalalalameieieieieiei ...

Aber den ultimativen Adrenalinkick versetzte mir die völlig missglückte Tonlage. Die konnten nicht einen Deut besser singen als ich selbst. Mit blutenden Ohren habe ich mir den A380 im Tiefflug herbei gewünscht und die letzten Reserven für einen 100m-Sprint aktiviert. Jedenfalls kann ich mir mittlerweile keinen besseren Ort für den Gesangsverein vorstellen als eben genau diese Einflugschneise.

Nun mag manch einer für gutes Wetter beten, bevor es ans Laufen geht, ich für meinen Teil schicke eine kurze Fürbitte für Fluglärm gen Himmel. Allerdings war mir nicht klar, dass mein Draht zu den himmlischen Mächten nicht ganz so störungsfrei ist, wie ich mir das wünschen würde.

Zugegeben, die von Gottes Hand gefällte Birke, die mir heute den Weg an genau jener Stelle versperrte, an der ich ansonsten meine Wandergruppe treffe, hat sicherlich eine gewisse Signalwirkung. Aber mein Fürbitten beinhaltete nicht die Anwendung von Gewalt. Wenn schon Märchenwald, dann bitte einen friedlichen.

Mon, 19 Jun 2006

Bei Axel Brauns auf dem Sofa

Den Namen Axel Brauns habe ich das erste Mal vor drei Monaten gehört. Als Namen eines Hamburger Filmregisseurs der besonderen Sorte. Die Geschichte konnte ich mir merken, den Namen nicht.

Als ich vor drei Wochen die Plätze für die Wohnzimmerlesung reserviert habe, fiel der Name ein zweites Mal. Und zwar als Spender des Wohnzimmers. Ich notierte den Namen bar jeglicher Assoziation. Der kleine Zettel gammelte seitdem friedlich auf meinem Schreibtisch vor sich hin.

Am Samstag animierte mich die Notiz dann aber dazu nachzusehen, ob denn der Mensch mit dem Wohnzimmer auch irgendwie literarisch aktiv sei. Google führte wie üblich in zwei Schritten zum Ziel.

Ein Autist, der mit seiner Biografie in der Spiegel-Bestseller Liste landet und derzeit als Regisseur arbeitet. Der eine völlig wildfremde Horde Leute für eine Lesung in sein Wohnzimmer einlädt!? Ich war mehr als fasziniert.

Zuerst landete seine Autobiografie auf meiner Wunschliste bei Amazon, nur um dann kurze Zeit wieder gelöscht zu werden, da ich noch ein letzes Exemplar in der Buchhandlung fand. Die Zugfahrt am Sonntag wurde vollständig durch "Buntschatten und Fledermäuse" ausgefüllt. Eine wunderbare Lektüre. Die Geschichte ist bewegend und sprachlich ist das Buch eine kleine Schatztruhe in der ich einige Sätze gefunden habe, die mich glücklich gemacht haben.

Es wäre natürlich auch ohne diesen Hintergrund faszinierend gewesen an einer fremden Tür zu klingeln, die Treppe bis zum obersten Stock zu erklimmen und das unbekannte Wohnzimmer zu betreten.

Eine Lesung, bei der fünfzehn Leute gemütlich beieinander sitzen, die zwei Autoren (Benjamin Maack und Friederike Trudzinski) auf dem Sofa vor einem. Man fühlt sich wie unter Freunden.

links: Benjamin Maack, rechts: Friederike Trudzinski

Allerdings bin ich vermutlich etwas zu weit gegangen als ich Friederike gefragt habe, ob diese Sofa-Situation der Standard sei. Irgendwie harmonierten die beiden so gut und manchmal bin ich offensichtlich ein neugieriger Mensch.

Benjamin hat uns mit sehr abwechslungsreichen Kurzgeschichten verwöhnt und durch ein Wechselbad der Gefühle geschickt. Der tragische Tod eines Baby-Igels traf einige der Zuhörer doch etwas härter und auf die Frage, warum es denn kein Happy End gegeben hätte, entwarf er kurzerhand und wortgewandt eine goldene Zukunft im Igel-Himmel. Er wäre gut beim Improvisieren auf der Bühne.

Friederike scheint durch die zwei Schwestern und ihre eigene Perspektive mehr als nur einen tiefen Einblick in die weibliche Psyche bekommen zu haben. Ihre Texte waren messerscharfe Bilder weiblicher Eigenarten, gewürzt mit einer guten Prise Selbstironie und einem sehr melancholischen Gefühl der Isolation. Der Stil hat mich derart fasziniert, dass ich bei ihrem Buch nicht Nein sagen konnte. Dazu hat sie noch perfekt vorgelesen. Ich war überrascht, dass sie keinerlei Training dafür absolviert hat. Sie verwies nur auf die Notwendigkeit sich bei zwei Schwestern durchsetzen zu müssen.

Axel Brauns hatte sich während der Lesung zur Sicherheit hinter seinem Schreibtisch und den Getränken verschanzt. Aber er beteiligte sich lebhaft an den Gesprächen. Hoffentlich hat ihm die Lesung genauso viel Freude bereitet wie uns.

Wie meinte Trixie kurz und präzise, als die Tür hinter uns wieder ins Schloß fiel:

"Scharf!"

Ich mag den Aldi ...

... weil man da auch Blumen kaufen kann ...

... und das Arbeiten so einfach mehr Spaß macht.

Fri, 16 Jun 2006

Mal über sich selber lachen

Wer pflanzt einem eigentlich dieses kleine, fiese Männchen ein? Diesen gehässigen Zwerg, dessen einzige Aufgabe darin besteht mit Begeisterung unsere peinlichsten Erfahrungen im Leben zusammen zu sammeln, nur um sie beim kleinsten Anlass aus der Versenkung zu zaubern und uns mit voller Wucht ins Bewußtsein zu schleudern? Hervorragende Kontraste, bestechende Farben, innere Großbildleinwand. Ganz kostenfrei.

Ich stamme aus einer unmusikalischen Familie. Die Eltern konnten froh sein, wenn ich als Kind überhaupt einen Laut von mir gegeben habe. Da wäre es wohl auch mehr als übertrieben gewesen, mich zum fröhlichen Daherträllern zu bewegen. Musikinstrumente standen bei uns auch nicht auf dem Programm und ich muss zugeben, dass der Musikunterricht für mich das geheimnisvollste Fach war. Abgesehen davon, dass mir heute nicht im mindesten einfallen möchte, was ich damals eigentlich gelernt haben könnte, kann ich mich zumindest noch an eine Übung erinnern: Wir sollten die verschiedenen Instrumente bei einem Musikstück heraushören. Zu meiner Verwunderung waren die Mitschüler durchaus in der Lage diese Leistung zu erbringen, während ich meine volle Aufmerksamkeit der Maserung der Tischplatte widmete.

Glücklicherweise lebe ich in Hamburg, nicht in Tokyo. Karaoke ist hier keine Pflichtveranstaltung. Wäre ja noch schöner. Man kann in den ruhigen, nördlichen Gefilden recht problemlos jegliche musikalischen Klippen umschiffen.

Dachte ich.

Gut, man mag jetzt sagen es wäre auch eine blöde Idee von mir gewesen. Theatersport, Improvisieren auf der Bühne. Man weiß ja gar nicht was da so auf einen zukommen kann. Was ja auch durchaus zutrifft. Was es auch durchaus spannend macht. Aber auch jeden Grad der Peinlichkeit erreichen kann. Da bewegt man sich offen und bereit auf die Bühne, harrt der Dinge, die als Vorschlag von den Zuschauern kommen können, und erstarrt zur Salzsäule, als einem aus der zweiten Reihe das lauthals gebrüllte Schlagwort "Musical" ans Ohr dringt.

Zap.

Klein-Gunnar in der sechsten Klasse. Englisch Unterricht. Gewohnte dröge Stunde bei Herrn Babiak. Alle Schüler friedlich, die Hälfte schläft und der Rest arbeitet sich widerwillig durch die Aufgaben vom Vortag. Keine Ahnung worum es in Aufgabe Nr. 5 eigentlich ging. Aus irgend einem Grund finden sich da zwei oder drei Liedzeilen. Noten stehen auch dabei. Nur Gott im Himmel weiß warum Herr Babiak plötzlich fröhlich strahlend Energie sammelt und meint: "Gunnar, sing das doch mal!". 25 Schüler in der Klasse. Warum ich? Englischunterricht. Warum singen?

Leider findet sich selbst bei größtem Bemühen in den Winkeln meines Körpers noch nicht genug Selbstbewußtsein, um dankend abzulehnen. Und so leiere ich mit hochrotem Kopf durch 20 Sekunden Horror, begleitet von einer Horde prustender Mitschüler. Es hilft nicht wirklich, dass man Herrn Babiak ansieht, dass er sich solch spontane Ideen demnächst zweimal überlegen wird.

Und der kleine Zwerg im Hintergrund schneidet die Szene hämisch grinsend mit. Hochauflösend.

Zap.

Nochmal von der Bühne rennen? Hinterausgang? Seitlicher Vorhang?

Hände vor das Gesicht? Was ich nicht sehe sieht mich auch nicht?

Mittlerweile wäre das Selbstbewußtsein vielleicht da:

"Och nö du, lass mal..."

Dann wäre ich allerdings eigenhändig von der Regie verprügelt worden. Die Dame, die dort vorne am Bühnenrand steht. Fröhlich vor sich hin grinsend. Königlich amüsiert, weil sie an Körpersprache und Gestik erkennt, dass gerade mal wieder einer der Schauspieler seine eigenen Grenzen überwindet. Die Dame, die mich am Anfang mal gefragt hat, wo denn meine Herausforderungen liegen, und die es geschafft hat, dass ich ihr das jetzt problemlos beantworten kann.

Ich habe es gespielt und gesungen. Aber die Grenze ist noch nicht nieder gerissen. Nur mal über den Zaun geklettert und festgestellt, dass es auf der anderen Seite immer noch nach ziemlich tristem Ödland aussieht.

Aber eins habe ich gelernt: Man kann sich neben den Zwerg setzen, sich zurück lehnen, das Panorama genießen und mal eine Runde herzlich lachen. Dann ist er eigentlich ein ganz famoser Kumpel. Gehört ja schließlich zur Familie.

Thu, 15 Jun 2006

Converting a trac macro to a plugin

I had an old macro that needed conversion to the new plugin style in trac. Since I plan on continue using trac it might not be too bad if I take a few notes during the process.

The old macro is just one file: layontrac.py.

Starting with some more structure:

> mkdir -p layontrac-plugin/layontrac
> mv layontrac.py layontrac-plugin/layontrac/

Create setup.py in layontrac-plugin:

from setuptools import setup

setup(name         = 'LayOnTrac',
      version      = '0.8',
      packages     = ['layontrac'],
      author       = 'Gunnar Wrobel',
      author_email = 'wrobel@pardus.de',
      description  = 'A plugin for displaying the contents of a gentoo overlay',
      url          = 'http://projects.gunnarwrobel.de/scripts/wiki',
      license      = 'GPL',
      entry_points = {'trac.plugins':
                      ['layontrac.layontrac=layontrac.layontrac']})

Create __init__.py in layontrac-plugin/layontrac:

from layontrac import *

The macro itself resides in layontrac.py in layontrac-plugin/layontrac.

The the original macro was written as a simple function:

def execute(hdf, args, env):
   ...

This needs to be adapted into tracs new component structure. The plugin needs to be a class that extends Component:

from trac.core      import Component

class LayOnTracPlugin(Component):
   ...

This does not yet tell trac what this component actually provides. It is necessary to implement the IWikiMacroProvider interface to declare that this will add a macro to the system:

from trac.core      import Component, implements
from trac.wiki.api  import IWikiMacroProvider

class LayOnTracPlugin(Component):
  implements(IWikiMacroProvider)

   ...

This interface requires that the component implements three functions:

  • a function that lists the available macros (get_macros)
  • a function that describes the macro in plain text (get_macro_description(name))
  • a function that actually renders the macro (render_macro(req, name, content))

The listing function is rather simple and just uses a yield statement to return the result:

  def get_macros(self):
    '''Return the macros provided by this plugin.'''
    yield 'layontrac'

For the description we will assume that the docstring of the actual rendering function provides sufficient information concerning the macro:

  def get_macro_description(self, name):
    '''Return a description for the macro by fetching the necessary
    information from the docstring of the render_macro function.'''
    import pydoc
    return pydoc.getdoc(getattr(self, 'render_macro'))

The last function handles the actual rendering. The function declaration with the docstring:

  def render_macro(self, req, name, content):
    ''' Traverses a Gentoo overlay within the trac repository and builds
    an automatic table of contents for your overlay. It will fetch
    some information from the ebuilds directly but also takes special
    "trac.BAK" files into account. These can provide additional
    information, like links into Gentoo's bugzilla database.'''

The arguments for the macro will be parsed from the content argument. Here this is just the path to the root of the overlay:

    if content:
      argv = [arg.strip() for arg in content.split(',')]
      if len(argv) > 0:
        path = argv[0]
      else:
        path = '/'

And the last thing I had to change was fetching of the svn repository. In macro style it was retrieved from the env argument to the macro, now it is provided by the component itself:

    repos = self.env.get_repository(req.authname)

The result can be visited in my scripts repository

Time to package the whole thing:

> cd layontrac-plugin
> python setup.py bdist_egg

The egg can now be copied into the plugins directory of the trac directory or use any other mean of installing a python egg into trac (see references below).

References:

Vorfreude

Wohnzimmerlesung. Hat schon vom Namen her etwas Faszinierendes. Einfach mal bei fremden Leuten das Wohnzimmer besetzen, den mitgebrachten Wein entkorken und sich von Profis etwas vorlesen lassen. Kann es viel gemütlicher werden?

Am Sonntag lesen jedenfalls Benjamin Maack und Friederike Trudzinski in einem geheimen Wohnzimmer. Und die Vorfreude hat mich schon erfasst.

Wed, 14 Jun 2006

Gut angetäuscht

Sie

Frankreich hat zu Null gespielt.

Er

Ja. Frankreich hat immer einen langsamen Start.

Sie

Ja?

Er

Nö, keine Ahnung. Aber als Mann muss man so etwas sagen.

Tue, 13 Jun 2006

Was hast Du erwartet?

Dass ich es dir einfach mache? Das du entkommen kannst? Ich kann nichts für Züge, die vor sich selbst resignieren. Sie nehmen, das kann ich. Das willst Du? Das hast du dir gewünscht?

Es ist mehr als deine Reflektion im kalten Stahl. Das hast du nicht gesehen. Nicht bedacht. Der rohe Schliff, die verlorene Gestik, der gebrochene Körper. Wirres Mosaik sich beißender Splitter. Wohin willst du gehen? Für dich kann ich nichts, dein Scheitern ignoriere ich, du bist mir egal.

Du machst mich lächerlich. Ich bin keine Hülle. Ich bin. Und du füllst mich nicht, fühlst mich nicht. Ich kenne meinen Weg, deiner verliert sich im Nirgendwo.

Leg mich beiseite, du genügst nicht. Mir nicht, anderen nicht. Das möchtest du nicht? Dann nimm mich, aber sei ich. Vergesse dich, verlass dich. Vielleicht gewähre ich dir Gnade und wir hinterlassen Scherben.

Staatsbesuch

Wenn man an vier Jeeps in Reihe vorbei läuft, jeder mit Doppelbeflaggung, Deutschlandfahne, dann erwartet man irgendwie, dass einem hinter dem nächsten Busch die Merkel entgegen hoppst.

Kolabadmin added to the kolab2 overlay

Tobias König recently announced a new kolab administration tool that runs natively on your desktop and can replace the standard administration web frontend provided by kolab. The tool is especially handy for larger installations.

Today I added the necessary ebuild to the Kolab on Gentoo overlay as x11-apps/kolabadmin. The ebuild uses a direct subversion checkout so do not expect this thing to be completely stable yet. Nevertheless a very useful tool and I recommend you give it a try:

layman -s kolab2
ACCEPT_KEYWORDS="~x86" emerge kolabadmin

And yes, you are not supposed to use ACCEPT_KEYWORDS. Well, you know the correct alternative.

Mon, 12 Jun 2006

Frustrierend ist ...

... wenn man nach dem Essen die clevere Idee hat, die Tischdecke angesichts der ganzen Flecken mal um zu drehen, nur um festzustellen, dass man vor einer Woche schon einmal den gleichen, genialen Gedanken hatte.

Sun, 11 Jun 2006

Ich schmelze dahin

Heute das zweite Mal an diesem Wochenende in die Sonne gelegt und etwas gebräunt. Dabei darüber nachgedacht, dass ich meine Nahrungsaufnahme noch etwas reduzieren könnte. Nicht allzu lange an diesem Gedanken hängen geblieben. Die Sonne macht ja auch dösig. Man wacht nur ab und zu auf, um dem nächsten Billig-Flieger Richtung Kanaren hinterher zu winken. Schade, dass man gerade hier unten sitzt.

Manchmal entwickele ich schon Sehnsüchte. Ich weiß nicht so wirklich wie ich diesen Sommer überleben soll. Dabei bin ich jetzt so absolut froh, dass es endlich mal warm ist. Aber ich habe den Eindruck mir könnte meine Disziplin dahinschmelzen wie Vanilleeis in der Sonne.

Apropos Eis: Direkt um die Ecke liegt auch noch die genialste Eisdiele von Eimsbüttel. Gestern "Heidi" probiert, heute "Quarkose". "Schneeweißchen" und "Kalter Hund" stehen auf dem Plan für die nächste Woche. Wobei wir ja wieder bei der Nahrungsaufnahme wären...

... ach was bin ich plötzlich dösig.

Sat, 10 Jun 2006

Zwei Fremde

Seine Hand, gereicht zum Abschied, wird kurz ergriffen, eine unverbindliche Berührung. Doch sie zögert, die Hände seien so kühl.

Die kalten Finger, dem Kontakt schon wieder entzogen, wandern wie von selbst nach oben, werden ohne Gedanken umfasst, von zwei sorgenden Händen umschlossen und wie selbstverständlich gewärmt.

Zwei Herzschläge. Wir bemerken den Moment und trennen uns.

Wed, 07 Jun 2006

Tranzyt #28

links: Katja Danowski, rechts: Wojciech Kuczok

Schon alleine das alte Karstadt-Gebäude mit der Hansepol-Ausstellung wäre wohl einen Besuch wert gewesen. Vor der Lesung blieb noch ein wenig Zeit die verschiedenen Kunstobjekte - nun ja - sagen wir mal wahrzunehmen. Einiges war recht interessant, wobei ich den Harakiri-Hasen zugegebenermaßen nur aus rein voyeuristischen Gründen abgelichtet habe.

Für die eigentliche Lesung durfte man in einer extra eingerichteten Wohnzimmerecke in der alten Verkaufshalle Platz nehmen. Sehr gemütliches Ambiente. Im Ohrensessel zurück lehnen und der polnischen Volksmusik aus einer anderen Zeit lauschen.

Daniel Beskos hatte mit seiner Moderation zwar einige Schwierigkeiten Brücken zwischen Polen und Deutschland zu bauen, aber das hatte ganz unbestreitbar seinen eigenen Charme.

Der erste Autor, Michael Weins, klärte so zum Beispiel direkt zu Beginn, nie mehr als Urlaub in Polen gemacht zu haben und raubte der Moderation jegliche Chance die vorbereiteten Fragen anzubringen. Dafür lieferte er aber danach eine wunderbar traurige Geschichte fehlgeschlagener deutsch-polnischer Kommunikation.

Artur Becker folgte mit der Feststellung, dass ihm nach 21 Jahren Kosmopoliten-Daseins in Deutschland leider auch fast jeglicher Bezug zum heutigen Polen fehlen würde. Daniel blieb auch nicht mehr viel übrig als das nickend zur Kenntnis zu nehmen und zu dem Buch "Die Zeit der Stinte" überzuleiten. Das liegt jetzt übrigens auf meinem Schreibtisch. Muss ich also noch erwähnen, dass es mir gefallen hat?

Die beiden nächsten Autoren, Wojciech Kuczok und Dorota Maslowska, lieferten als Polen zwar den direkten Bezug zu unserem östlichen Nachbarn, aber sie stellten Daniel Besko auf keine geringere Probe. Die deutsche Übersetzung beider Texte wurde von Katja Danowski vorgelesen und so bestand die Aufgabe der eigentlichen Autoren nur in stoischem Dabei-Sitzen. Das führte zu einigen verlegenen Fragen, ob das denn okay wäre und der kurzen Ankündigung, "Dorota würde sich einfach gerne nur hier hinsetzen und eine Zigarette rauchen." Und wenn es auch eine gewisse unfreiwillige Komik hatte, passte es perfekt in die Stimmung.

Ganz großes Kompliment an Katja Danowski. Es hat etwas Faszinierendes wenn Literatur von einer professionellen Schauspielerin vertont wird. Besonders beim Text von Wojciech Kuczok liefen einem Schauer über den Rücken. Wobei ich wahrscheinlich Text-unabhängig an ihren Lippen gehangen hätte. So etwas nennt man dann wohl Bühnenpräsenz.

Wunderbarer Abend.

Care-Paket

Und auch wenn man sich als Kommunikations-Junkie schon im Endstadium befinden sollte, der Zeigefinger alle 30 Sekunden nervös zitternd über der abgewetzten Maustaste schwebt, um einmal mehr vergeblich den Knopf "Neue Nachrichten" nieder zu drücken: Es gibt ihn noch.

Diesen kleinen, glücklichen Moment, in dem man seinen Briefkasten öffnet. Dieser Moment, in dem das Auge die Abweichung vom alltäglichen, langweiligen, klinischen Weiß registriert. Ein kleines, knusprig braunes Päckchen unbekannten Inhaltes. Ihm haftet noch der frische Duft des Briefträgers an.

Langsam und vorsichtig greift man nach dem unerwarteten Objekt. "Tyskland" prangt da in großen Lettern auf der Vorderseite. Das Paket ist weit gereist. Die Lieben in der Ferne haben an die einsamen Daheimgebliebenen gedacht. In rührender Fürsorge einige wunderschöne Briefmarken mit Motiven des Urlaubsortes auf den Umschlag geklebt. So erhascht man einen Ausschnitt der malerischen Schönheit schwedischer Natur. Sieht schwedische Hafenarbeiter mit größter Sorgfalt einige Fässer Selbstgebranntes verschiffen. Man fühlt sich sogleich an die glücklichen Kindheitstage an Stränden von Seen und dem morgendlichen Einholen der Fischernetze erinnert. Und natürlich: Oben links klebt ein kleines Schildchen mit weißer Schrift auf blauem Grund - "Prioritaire".

Man wendet das Päckchen ein, zwei Mal, sucht die Stelle an der man es sorgfältig und vorsichtig öffnen kann. Verharrt einen Moment in gespannter Erwartung des unbekannten Inhaltes und wagt es dann. Beginnt langsam aber sicher den braunen Umschlag einzureissen, erst zögernd, dann etwas schneller, bis man schließlich hinein greifen und das Geschenk in freudiger Erregung aus dem Umschlag ziehen kann:

Einen Topflappen!

Mon, 05 Jun 2006

Layman-1.0.2 features support for git overlays

Thanks to Stefan Schweizer layman now also handles overlays managed with git.

KNACKS!

Oh, verdammt. Da ist irgendwas kaputt gegangen. Kurz ins Bad rennen. Vermutlich die Ablage unter dem Spiegel. Ich wusste doch, dass die Geschichte mit dem Holzklotz nicht gehen würde. Sowas muss man ordentlich machen. Ich Vollidiot!

Hm, komisch, alles noch dran. Kurz rütteln. Nö, bombenfest. Küche? Die Regale? Alle hängen in alter Formation an den Wänden. Nochmal Wohnzimmer. Ne, alles wirkt friedlich. Die Bilder noch an den Wänden. Kann doch nicht sein. Habe ich Wahnvorstellungen? Nochmal die Küche...

Alles scheint in bester Ordnung... außer... was macht da der Kaffeefleck unter der Thermoskanne? Das tröpfelt da so still vergnügt vor sich hin, die Ablage hinunter auf den Fußboden.

Faszinierend. Eine implodierte Thermoskanne. Habe ich auch noch nicht erlebt. Hoffe, dass so etwas nicht beim Öffnen einer Kanne passieren kann denn der Kaffee-Scherben-Brei wirkt ziemlich kleingeschreddert.

War das jetzt das Signal zum reduzierten Kaffee-Konsum?

Sun, 04 Jun 2006

Herzlichen Glückwunsch, Mike!

Tja, da ich heute ja noch nicht mit feiern kann, gibt es auch erst mal nur das virtuelle Geschenk. Um reelle Geschenke kümmern wir uns dann in drei Wochen.

Also, ohne lang drumherum zu reden, voila...

... Dein Probe-Blog!

Viel Spaß beim Bloggen.

Getting indexed in technorati

Since I am using Pyblosxom for this blog, I was not certain whether it would be an easy feat to get my blog indexed by technorati. While it did not work initially, the help section explained the necessary steps well enough. So I had to

  • Add this to my HTML head section:
    <link rel="alternate"
          type="application/rss+xml"
          title="All Entries"
          href="http://gunnarwrobel.de/blog/index.rss2" />

    <link rel="alternate"
          type="application/atom+xml"
          title="All Entries"
          href="http://gunnarwrobel.de/blog/index.atom" />
  • Add this permalink entry to my blog entry ("story") template
  <a href="$base_url/$file_path.$flavour"
     title="$title" rel="bookmark">
    Permalink
  </a> |

Works fine now and the only thing left for testing is to try tagging. I hacked together short muse function that allows to quickly tag a blog entry. It is not at all beautiful but better than nothing:

(defun muse-publish-tagit (beg end attrs)
  (let ((source (cdr (assoc "source" attrs)))
	(tags (buffer-substring-no-properties beg end)))
    (delete-region beg end)
    (if (string-match "^\\s-+" tags)
	(setq tags (replace-match "" nil t tags)))
    (if (string-match "\\s-+$" tags)
	(setq tags (replace-match "" nil t tags)))
    (insert (muse-markup-text 'begin-tagit))
    (if (string-match "techno" source)
	    (insert "http://technorati.com/tag/"))
    (if (string-match "flickr" source)
	    (insert "http://flickr.com/photos/tags/"))
    (if (string-match "wiki" source)
	    (insert "http://en.wikipedia.org/wiki/"))
    (insert tags)
    (insert (muse-markup-text 'middle-tagit))
    (insert tags)
    (insert (muse-markup-text 'end-tagit))
    (muse-publish-mark-read-only beg (point))))

(setq muse-html-markup-strings
      (append '((begin-tagit
                  . "<a class=\"tagit\" href=\"")
		(middle-tagit     . "\" rel=\"tag\">")
		(end-tagit        . "</a>"))
	      muse-html-markup-strings))

(setq muse-publish-markup-tags
      (append '(("tagit" t t muse-publish-tagit))
	      muse-publish-markup-tags))

Now I can use the following snippet for tagging:

<tagit source="techno">pyblosxom</tagit>
<tagit source="techno">technorati</tagit>

And that finally looks like this (you will only see something if you use an intelligent browser):

My heart is bleeding

For the first time in an amazing span of two years I went into a computer store and bought a piece of software. It did honestly hurt. Especially since I am not really going to use it. Especially since I know that I can simply type ''emerge kontact'' to get the same damn functionality. Especially since Windows managed to produce a nice bluescreen while I installed the software.

Sometimes your options are limited. Call me a proud owner of Outlook now.