Hackety hack hack

Atypisches Nutzerverhalten mit Rat und Tat.

Die Cola oder das Cola? Mediawiki APIs hacken

Die Web-API von Mediawiki (und damit von den meisten Wikimedia-Projekten) ist zwar nicht gerade versteckt, aber meiner Meinung nach viel zu unbekannt. In loser Folge werde ich ein paar Hacks mit APIs für verschiedene Projekte vorstellen, auch um dazu anzuregen, selbst mit der Infrastruktur zu spielen.

Die Web-API von Mediawiki

Mediawiki hat eine RESTful Web-API. Leider ist API im Mediawiki-Umfeld ein mehrfach belegtes Wort, so dass es auch eine API gibt, um eigene Erweiterungen in PHP zu schreiben; diese API meine ich in dem Fall nicht, sondern die Schnittstelle, mit der sich Daten und Inhalte per HTTP aus Mediawiki holen lassen.

Zunächst gibt es da einen Endpunkt. Bei den Wikimedia-Projekten liegt dieser unter /w/api.php, bei dem unten benutzten Wiktionary also unter https://de.wiktionary.org/w/api.php. Praktischerweise ist der Endpunkt für die API-Calls auch gleich eine URL zur Dokumentation. Einfach den Endpunkt im Browser eingeben es erscheint eine Seite, auf der die möglichen Calls verzeichnet sind und auch mit Beispielen erklärt werden.

Ein vollständiger API-Call könnte etwa so aussehen:

https://de.wiktionary.org/w/api.php?format=json&action=query&prop=revisions&rvprop=content&titles=Cola

Schauen wir uns den API-Call mal genauer an und zerlegen ihn in seine Einzelteile.

Das Format für die Serialisierung

format=json

Hiermit sagen wir dem Wikimedia-Web-Service, dass wir den Rückgabewert gern als JSON formatiert bekommen wollen. Alternativ können wir zur Anzeige im Webbrowser das auch schön formatiert mit dem Aufruf format=jsonfm bekommen – das ist manchmal für das Debugging übersichtlicher und hilfreicher. Die API unterstützt noch andere Ausgabeformate wie WDDX, XML, YAML und eine native PHP-Serialisierung, aber möglicherweise werde diese in Zukunft nicht mehr bedient. JSON wird stark präferiert und sollte wenn immer möglich benutzt werden.

Die Action

action=query

Die “Action”, also sozusagen das Verb, ist der eigentliche Befehl, der aufgerufen wird. Es gibt etliche solche Actions, die in der Mediawiki-API dokumentiert sind, Extensions können noch weitere Actions hinzufügen, die Actions zu Wikidata etwa beginnen mit “wb” für Wikibase. Hier benutzen wir queryzur Abfrage von Daten.

Die Action query ist selbst wieder umfangreich dokumentiert, wir schauen uns hier ein paar beispielhafte Parameter an.

Action-spezifische Parameter

titles=Cola

Wir fragen hier die API nach den Daten einer Wiki-Seite mit dem Titel “Cola”. In der Abfrage werden Titel URL-kodiert, wenn der Titel also ein Leerzeichen enthält, wird dieses zu %20. Wenn mehrere Seiten gleichzeitig abgefragt werden können (und sollten) sie kombiniert werden, um nicht durch mehrere Abfragen hintereinander die Netzwerklast unnötig zu erhöhen: titles=PageA|PageB|PageC

prop=revisions

Mit diesem Parameter können wir eine Revision der Seite angeben. Wenn wir keine weiteren Informationen zur Revision angeben bekommen wir die aktuelle Version der Seite.

rvprop=content

Mit diesem Parameter sagen wir der API, dass wir den Inhalt der Seite haben wollen. Hätten wir stattdessen zum Beispiel rvprop=content|user angegen, bekämen wir den Inhalt un den Benutzer, der die letzte Änderung vorgenommen hat.

Es gibt über die API und mögliche Parameter und Actions noch viel mehr zu sagen, aber als Beispiel reicht das erstmal. Die Dokumentation zur API ist noch viel umfangreicher. Ein guter Einstiegspunkt ist die Dokumentation auf Mediawiki, die ich hier teilweise übersetzt habe.

Eine gute Einführung in die API gibt es auch als Video:

Artikel von Substantiven mit migrationsschatten.py abfragen

Als erstes Beispiel für eine Spielerei mit der API geht es um Zweifelsfragen der deutschen Sprache. Eine sehr gute Freundin von mir, beneidenswert bilingual aufgewachsen mit Deutsch und Englisch als Muttersprache, erzählte mir vor einiger Zeit davon, dass sie dann doch manchmal überrascht sei, welches grammatikalische Geschlecht und damit welchen Artikel ein Wort im Deutschen hat: Der Knoblauch? Ernsthaft?”. Wie gesagt, es handelt sich bei ihr um eine Muttersprachlerin, aber diesen Einwand wischte sie schnell beiseite mit “Ach, das ist eben mein Migrationsschatten”.

Das Problem ist aber häufig genug, um sich hinzusetzen und ein kleines Programm zu schreiben, das Wiktionary nach dem korrekten Artikel befragt. Heisst es “der Laptop” oder “das Laptop”? Und was war mit der Werbung einer österreichischen Energydrink-Marke, die von “das Cola” sprach? Ist das korrekt?

Das Progrämmchen ist ein bisschen älter, aber ich habe es seitdem ein bisschen poliert und umgeschrieben. Die Freundin mit der Frage nach den Artikeln benutzt es nach eigener Aussage regelmäßig. Im Original ist es als gist auf Github verfügbar, aber gehen wir das Programm doch mal der Reihe nach durch:

 
 
 
 
 
from __future__ import print_function
import json
import re
import sys
import urllib2

Es beginnt mit ein paar Imports. Das Programm ist für Python 2.7 geschrieben, eine Portierung nach Python3 lasse ich mal als Aufgabe für die Leserin oder den Leser (urllib2 und json bräuchten dafür Liebe, die über die automatische Portierung mit 2to3 hinausgeht).

 
 
 
if len(sys.argv) < 2:
    sys.exit('Abfrage mit: %s Substantiv' % sys.argv[0])
substantiv = sys.argv[1]

Wenn kein Substantiv angegeben ist, ist die ganze Sache auch schon vorbei, ansonsten nehmen wir an, dass der erste Kommandozeilenparameter das gesuchte Substantiv ist.

 
 
 
 
 
 
 
 
 
 
 
 
try:
    r = urllib2.urlopen(
        'http://de.wiktionary.org/w/api.php?' +
        'format=json' +
        '&action=query' +
        '&prop=revisions' +
        '&rvprop=content' +
        '&titles=' +
        substantiv
        ).read()
except urllib2.URLError, e:
    sys.exit('Problem beim Zugriff auf Wiktionary.')

Wir basteln uns die API-Anfrage zusammen. Oben ist erklärt, wieso die Abfrage so aussieht, wie sie aussieht. Wenn die Abfrage über das Internet nicht klappen sollte, brechen wir hier ab.

 
 
 
 
 
 
 
content = json.loads(r)
page = content['query']['pages'][content['query']['pages'].keys()[0]]
if 'revisions' not in page.keys():
        sys.exit(
            'Substantiv nicht im deutschsprachigen Wiktionary verzeichnet.'
        )
wikitext = (page['revisions'][0]['*'])

Der Seiteninhalt wird als JSON eingelesen und in eine Python-Datenstruktur hineingeschlürft. Wenn es keine Seite mit dem Titel gibt, der gewünscht ist, brechen wir ab. Python kennt schließlich keine Autovivication bei Collections, also passen wir auf wie ein Luchs, dass wir nicht auf eine Struktur zugreifen, für die es keinen Key gibt.

 
 
 
 
 
 
 
 
match = re.search(
    '===\s?,\s?' +
    '' +
    '(,\s?(,\s?)?)*' +
    '\s?===',
    wikitext)
if match is None:
    sys.exit('Kein Substantiv!')

Es folgt eine epische regular expression, mit der der Wikitext geparst wird. Leider wird im Wiktionary nicht ganz durchgängig dasselbe Pattern für die Angabe des grammatischen Geschlechts genutzt. Aber irgendwie sowas wie “m” oder “mf” oder “m,f,n” steht hinter einer Template-Variable, die ein Substantiv bezeichnet. Wenn nicht mal dieses Pattern gefunden wird, ist der Suchstring wohl kein Substantiv und wir verabschieden uns aus dem Programm.

 
 
genera = filter(lambda x: re.match('^[mfn]$', x),
                filter(lambda x: x is not None, match.groups()))

Wir filtern aus den capturing brackets alles heraus, was nicht “m”, “f”, oder “n” ist. Ich finde da eine Lösung mit zwei Filtern (und anonymen Lambda-Funktionen) am elegantesten, aber das ist natürlich Geschmackssache.

 
 
 
 
m = ["der " + substantiv for genus in genera if genus == "m"]
f = ["die " + substantiv for genus in genera if genus == "f"]
n = ["das " + substantiv for genus in genera if genus == "n"]
artikel = m + f + n

Mit ein paar list comprehensions bauen wir uns drei Listen mit den gefilterten Ergebnissen, die wir dann zu einer flachen Ergebnisliste vereinigen (artikel). Natürlich kann ein Substantiv mehr als ein grammtisches Geschlecht und damit mehr als einen gültigen Artikel haben.

Warum basteln wir uns eine Liste? Nun, darum:

 
map(print, artikel)

Lieber ein gedingenes map auf eine Liste als eine for-Schleife. Da wir print als Funktion benutzen können (wir haben extra from __future__ import print_function benutzt), können wir diese Funktion auf alle möglichen Ergebnis-Strings anwenden.

Was gibt dieses Programm jetzt aus? Nun, schauen wir mal:

 
 
python migrationsschatten.py Knoblauch
der Knoblauch

oder auch:

 
 
 
python migrationsschatten.py Ketchup
der Ketchup
das Ketchup

oder gar:

 
 
 
 
python migrationsschatten.py Joghurt
der Joghurt
die Joghurt
das Joghurt

Und was ist mit der Frage aus der Überschrift?

 
 
 
python migrationsschatten.py Cola
die Cola
das Cola

So seltsam das für bundesdeutsche Sprecherinnen und Sprecher klingen mag, das Cola ist okay, sagt Wiktionary. Es handelt sich um einen Austriazismus.

Leiwand!

Wie bereits gesagt, das vollständige Programm findet sich hier.

Links, Links, Links

Dinge

Einigen Dingen ist etwas einbeschrieben:

Wie manchen Dingen Gesten, und damit Weisen des Verhaltens einbeschrieben sind. Pantoffel — »Schlappen«, Slippers — sind darauf berechnet, daß man ohne Hilfe der Hand mit den Füßen hineinschlüpft. Sie sind Denkmale des Hasses gegen das sich Bücken.

Theodor W. AdornoMinima Moralia

Andere Dinge hingegen werden durch kreativ-kritische Aneignung von dem Kontext befreit, in denen ihnen ein intendierter Zweck einbeschrieben ist.

Eine Dose mit Chips von Pringels wird zur Wavelan-Yagi-Antenne — auch wenn Pringels-Dosen sich gar nicht am besten für diesen Antennentyp eignen.

Und eine Dose mit Altoids-Mints ist für mich dann kein Behälter für Minz-Bonbons mehr. In erster Linie sehe ich es es als Gehäuse für Arduino-Basteleien.

Es tut sich was

Es passieren Sachen im c-atre, dem Science-Fiction-Theater in der c-base. Stichworte: Urheberrecht, Zeitreisen. Im Mai wissen wir mehr.

Pad-Thai-Tag

Es fing damit an, dass ich dies hier auf Twitter schrieb:

Dann bekam ich Hunger. Phat Thai oder Pad Thai (Thai: ผัดไทย) ist ein traditionelles Nudelgericht der thailändischen Küche. Mit Reisnudeln, die zusammen mit ein paar Eiern, reichlich Knoblauch und Chili, Tofu, Hühnchen, Austernsauce, Fischsauce, Frühlingszwiebeln und ein bisschen Zucker im Wok gerührt, gebraten und mit nicht zu knapp Mungobohnensprossen und Erdnüssen garniert werden (die Shrimps, die noch dazu gehören, hatte ich nicht zur Hand) lässt sich schon etwas zaubern, was ganz lecker ist. Während des Entstehungsprozesses sah es so aus:

Auf meiner Liste von Dingen, die ich mir für 2014 vorgenommen habe, steht neben „Ukulele lernen“ auch „mehr Haskell programmieren“, also warum nicht mal schauen, wie das mit dem One-Time-Pad in Haskell geht. Ein One-Time-Pad, auch bekannt als Vernam-Chiffre, ist ein kryptographisches Verfahren:

Das One-Time-Pad (Abkürzung: OTP, deutsch: Einmalverschlüsselung oder Einmalschlüssel-Verfahren, wörtlich Einmal-Block, nicht zu verwechseln mit dem Einmal-Passwort-Verfahren) ist ein symmetrisches Verschlüsselungsverfahren zur geheimen Nachrichtenübermittlung. Kennzeichnend ist, dass ein Schlüssel verwendet wird, der (mindestens) so lang ist wie die Nachricht selbst. Das OTP ist informationstheoretisch sicher und kann nachweislich nicht gebrochen werden – vorausgesetzt, es wird bestimmungsgemäß verwendet.

Zunächst muss ich dazu den Key und den Eingabetext in Bytes umwandeln, damit ich die einzelnen Zeichen per XOR verbinden kann, um zu verschlüsseln. Das Internet bietet ja alles. Deshalb war es auch nicht besonders schwer, eine Webseite zu finden, die mir einiges über Bytestrings in Haskell erzählte und auch noch die Lösung für den OTP enthielt.

Das entsprechende Haskell-Package bytestrings zickte beim Installieren. Wie mir dann bei der weiteren Suche klar wurde, ist seit Ende letzten Jahres die Haskell-Plattform auf MacOS X 10.9 kaputt — Apple hat beschlossen, den Compiler gcc nicht mehr mit auszuliefern, weshalb bis zur nächsten Haskell-Version ein Fix benutzt werden muss, um GHC mitzuteilen, dass clang benutzt werden muss. Die Seite „Haskell Platform for Mac OS X“ half mir weiter.

Dann passierte noch weiteres Zeug, aber im Wesentlichen war es das mit dem Pad-Thai-Tag.

Polizei Hamburg möchte lieber keine Auskunft nach dem Transparenzgesetz geben

Am 3. Oktober 2013 fanden hunderte Menschen bei dem Versuch von der afrikanischen Küste aus in die Europäische Union zu flüchten den Tod. Einige Tage danach begann die Hamburger Polizei mit der Suche nach Überlebenden, indem sie in den Stadtteilen St. Pauli und St. Georg Kontrollen von Menschen mit nicht-weisser Hautfarbe durchführte. Die Bewertung des Verhaltens der Hamburger Polizei möchte ich den Leserinnen und Lesern überlassen, ich las jedenfalls auch schon die Einschätzung als „rassistisch“ für Massenkontrollen aufgrund der Hautfarbe; in vielen Ländern wäre ein solcher Polizeieinsatz vermutlich illegales racial profiling.

Im Oktober 2013 stellte ich eine Anfrage nach dem Hamburger Transparenzgesetz an die Hamburger Polizei zu den Kosten des Einsatzes. Das Transparenzgesetz gilt als vorbildlich in Deutschland. Das Gesetz wurde von einer Volksinitiative von Mehr Demokratie, Transparency International und dem Chaos Computer Club sowie einigen Bündnispartnern in einem Wiki geschrieben. Die Kernelemente des Gesetzes sind eine Veröffentlichungspflicht für alle Informationen von öffentlichem Interesse (u.A. Verträge zur Daseinsvorsorge, Gutachten, Geodaten, Baugenehmigungen, Zuwendungsbescheide, § 3), eine Ausweitung des Behördenbegriffs u.A. auf Unternehmen die öffentliche Aufgaben wahrnehmen (§ 2 Abs. 3) sowie eine deutliche Einschränkung der Ausnahmetatbestände, z.B. Betriebs- und Geschäftsgeheimnisse (§§ 4 bis 7). Damit geht das Transparenzgesetz deutlich über bestehende IFGs hinaus. Das Gesetz trat am 6. Oktober 2012 in Kraft.

Meine Anfrage, die hier einsehbar ist, traf bei der Hamburger Polizei möglicherweise nicht auf Gegenliebe. Ich wurde in einem Schriftwechsel gebeten, meine Anfrage über die Einsätze im Oktober in Hamburg zu konkretisieren, was ich tat, indem ich mitteilte, dass ich den Zeitraum vom 1. bis zum 31. 10. mit „im Oktober“ meinte und mit „in Hamburg“ das Gebiet der Freien und Hansestadt Hamburg. Daraufhin bekam ich eine Mitteilung über Kosten, die ich zum Glück und Dank der Unterstützung vieler guter Menschen im Internet auf mehrere Schultern verteilen konnte — die Kosten für die Anfrage waren innerhalb weniger Minuten zusammen, nachdem ich auf Twitter um Unterstützung gefragt hatte. Im Dezember (wann genau kann ich wegen Abwesenheit nicht feststellen) bekam ich einen Brief der Polizei Hamburg mit dem Datum vom 18.11., also noch innerhalb der gesetzlichen Frist. Darin teilte man mir mit, dass meine Anfrage nicht beantwortet werden würde, „da es sich bei denen von Ihnen gewünschten Unterlagen […] um Informationen handelt, deren Bekanntmachung die innere Sicherheit nicht unerheblich gefährden würden.“ Für diese Auskunft wurden mir 165,50€ in Rechnung gestellt.

Der vollständige Brief ist hier einsehbar. Am Montag, den 6. Januar 2014, bezifferte Peter Born von der Polizei Hamburg die Kosten des Polizeieinsatzes am 22.12. 2013 mit 1,13 Millionen €. Offensichtlich gab es bei der Pressekonferenz plötzliche keine „nicht unerhebliche“ Gefährungen der inneren Sicherheit durch Nennung von Einsatzkosten.

Für mich stellt die Weigerung der Polizei, ihrer gesetzlichen Transparenzpflicht nachzukommen, einen Akt staatlicher Willkür dar. Ich werde deshalb die zuständigen Behörden um Vermittlung bei meiner Transparenzgesetzanfrage bemühen. Leider steht diese Taktik der Hamburger Polizei, sich über geltendes Recht hinwegzusetzen, in einer langen Reihe von Verstößen in den letzten Tagen. Es ist meine Hoffnung, dass ich durch die Vermittlung durch die Aufsichtsbehörden zumindest in diesem einem kleinen Fall die Hamburger Polizei dazu bewegen kann, die Einhaltung rechtsstaatlicher Grundsätze in Zukunft ernsthafter in Erwägung zu ziehen.

Update: Nachdem eine Webseite des NDR auch über diesen Blogpost berichtet hat, liegt mittlerweile eine Stellungnahme der Innenbehörde vor, die ich zitieren möchte:

Der Sprecher der Hamburger Innenbehörde, Frank Reschreiter, sagt, es gebe keinen Widerspruch. Die Summe von 1,1 Millionen Euro setze sich aus den Kosten für den Einsatz von Polizisten aus anderen Bundesländern, die der Stadt Hamburg in Rechnung gestellt würden, sowie der entstandenen Schäden an Polizeifahrzeugen zusammen. Die eigentlichen Einsatzkosten der Hamburger Beamten seien damit also nicht erfasst, würden aber als normale laufenden Kosten auch nicht berechnet. Da bei den Lampedusa-Einsätzen keine “Fremdkosten” durch auswärtige Beamte entstanden seien, könnten dort eben gar keine Angaben gemacht werden (wie Ohlig mitgeteilt). Die Begründung mit der möglichen Gefährdung der inneren Sicherheit bezöge sich lediglich auf die von Ohlig zusätzlich angeforderten Einsatz-Unterlagen, nicht auf seine Frage nach den Kosten.

Ich nehme zur Kenntnis, dass die Hamburger Polizei keinen Überblick über die Kosten eigener Einsätze (ohne Beteiligung von Polizei aus anderen Bundesländern) hat, auch wenn ich mir vorstellen kann, dass das die (innere) Revision unnötig erschwert. Zu den Kosten von 165,50€ für eine im Wesentlichen unbeantwortete Anfrage werde ich trotzdem die zuständige Behörde zur Vermittlung anrufen.

Für das überaus großartige Portal „Frag den Staat“, ohne das ich diese Anfrage vermutlich nie hätte stellen können, kann man auch spenden. Um Stefan Wehrmeyer und den anderen tollen Menschen dort beim Weiterbetrieb von „Frag den Staat“ zumindest ein bisschen zu helfen habe ich 10€ in Bitcoin dorthin geschickt.

Assoziationen aufgrund eines Ohrwurms nach dem Hören des Stückes „Hallelujah“ von Leonard Cohen

Ein Stück im Radio

Wenn man sich in die Welt da draussen begibt, auf der anderen Seite des Videoschirms, wie es in dem Film Tron heisst, trifft man unvermeidlicherweise auf fremde kulturelle Praktiken. Es wird fern gesehen und Radio gehört, zum Beispiel. Über die Weihnachtsfeiertage spielte das Radio ein Lied von Leonard Cohen, das wohl als passend zum Weihnachtsprogramm empfunden wurde. Der Titel lautet “Hallelujah” und das Wort hört man ja zur Weihnachtszeit häufiger in christlichen Kirchen, müssen sich die Radiomenschen gedacht haben, also spielen wir das mal. Dass man anhand des Namens des Interpreten Leonard Cohen hätte raten können, dass er vielleicht einer anderen Religion angehört, deren Bildsprache auch einen wichtigen Platz in seinen Liedern einnimmt — geschenkt. Ebensowenig fiel ins Gewicht, dass Cohen (die praktische Doppelmitgliedschaftsoption des Zen-Buddhismus mitnehmend) einige Zeit als zenbuddhistischer Mönch gelebt hatte.

Einen Ohrwurm wegzubekommen ist nicht einfach, wenn das Internet mit immer neuen Möglichkeiten lockt, noch mehr Details zu einem Lied zu erfahren. Schlimmstenfalls kann es sich zu einer Obsession entwickeln, für die nur ein Blogbeitrag die angemessene Katharsis ist. Dies ist dieser Blogeintrag. Vielleicht ist er an Informationen etwas zu dicht geraten, langsames Lesen ist möglicherweise eine gute Strategie zu Annäherung. Alternativ könnte es auch sein, dass ich einen einzelnen Song einfach zu wichtig nehme und zuviel Zeit in Assoziationen bezüglich eines Popmusikstückes gesteckt habe.

Erste Strophe: Quine und Strange Loop

G                   Em  
I heard there was a secret chord 
G                        Em
that David played and it pleased the Lord,
    C  2x            (D)               G     (D)
But you don't really care for music do you.
G                     /C         D     
It goes like this the fourth the fifth,              
   /Em                /C     D    
the minor fall and the major lift
   /Em(D)            D(D7/+?)  Em
The baffled king composing hallelujah
     C         Em          C        G-D-G
Hallelujah, Hallelujah, Hallelujah, Hallelujah

Das Lied ist in G-Dur und im 6/8-Takt. Ein Takt in Triolen (3/4 oder 6/8) ist typisch für Gospel-Musik, da es auch bei langsamen, getragenen Stücken noch eine gewisse Dynamik, einen tänzelnden Charakter behält.

Die erste Zeile bezieht sich auf König David, den Psalmendichter, der auf seiner Harfe spielt. Auf die biblische Bildsprache kommen wir später zurück, denn viel auffälliger ist in der Strophe die Selbstbezüglichkeit.

Benannt nach dem amerikanischen Logiker Willard Van Orman Quine prägte Douglas Hofstadter den Begriff Quine für ein selbstbezügliches Computerprogramm, das eine Kopie seiner selbst (üblicherweise seines Quelltextes) als Ausgabe schreibt.

Ein Quine in Lisp könnte etwa so aussehen:

((lambda (x)
  (list x (list (quote quote) x)))
 (quote
    (lambda (x)
      (list x (list (quote quote) x)))))

Beim Aufruf ergibt dieses Programm genau die Ausgabe seiner selbst. In Sprachen, die eine leere Eingabedatei als syntaktisch korrektes Programm erlauben, ist ein minimales Quine-Programm denkbar: eine leere Datei, die kompiliert ihren Inhalt, nämlich nichts, ausgibt. Interessanter sind Quines höherer Ordnung, etwa dieser mehrstufige Quine: The code below spits out a Haskell program that prints out a Perl program that prints out a Python program that prints out a Ruby program that prints out a C program that prints out a Java program that prints out the original program.

In der allerersten Ausgabe der CCC-Zeitschrift Datenschleuder 1984 gab es eine „Aufnahmeprüfung für den C.C.C.“ mit der Forderung, einen Quine zu programmieren:

Gesucht ist ein Programm in einer beliebigen Programmiersprache, das eine “rekursive” Aufgabe erfüllt: Es soll, wenn es läuft, den Programmquelltext (sich selbst) ausgegeben. Triviallösungen wie (unter einigen BASIC’s möglich) von 10 LIST werden nicht akzeptiert!!!

Die erste Strophe von Cohens „Hallelujah“ beinhaltet einen musikalischen Quine und erzeugt damit eine Seltsame Schleife oder einen Strange Loop, also einen Text, der Aussagen über sich selbst macht und damit möglicherweise kognitiv ein Paradoxon erzeugt, das den Text auf eine weitere Ebene hebt. Das bekannte Lügner-Paradox, also ein Satz, der seine eigene Falschheit behauptet, ist ein Beispiel für eine Seltsame Schleife. In der ersten Strophe von Hallelujah finden wir ein weiteres Beispiel. Die geheime Harmoniefolge, die David auf seiner Laute schlägt und die den Herrn erfreut und mit der er zu seinem eigenen Erstaunen das Hallelujah komponiert („the baffled king composing Hallelujah“) wird explizit genannt und stellt für das Lied, wenn es als mathematische Funktion gesehen wird, die Ausgabe dar: It goes like this the fourth the fifth, the minor fall and the major lift. Von G ausgehend begleitet den Text dabei die Quarte (C-Dur), die Quinte (D-Dur), der minor fall in die parallele Moll-Tonart (E-Moll) und hinauf ins Dur (C-Dur). Ein musikalischer Quine entsprechend der Harmonielehre, but you don’t really care for music do you?

Zweite Strophe: Batseba und Delila

G                             Em
Your faith was strong but you needed proof
G                   Em
You saw her bathing on the roof
    C                            G
Her beauty and the moonlight overthrew you
G                /C       D     
She tied you to a kitchen chair
   /Em                        /C        D      
She broke your throne, and she cut your hair
   /Em(D)              D             Em
And from your lips she drew the Hallelujah
     C         Em            C         G-D-G 
Hallelujah, Hallelujah, Hallelujah, Hallelujah

Die zweite Strophe ist vollgestopft mit der Bildsprache der Bibel. Allerdings scheint es sich um eine andere als die hebräische Bibel zu handeln, vielleicht aus einem Paralleluniversum stammend, denn Geschichten werden hier remixt und zusammengeführt, die eigentlich getrennt sind. David, der psalmendichtende König Israels aus der ersten Strophe beobachtet Batseba auf dem Dach und sieht sie baden, was eine lange Schicksalskette von Ehebruch und Sünde, aber auch die Zeugung des späteren Königs Salomon auslöst (2. Samuel 11).

Dann wieder ist König David eigentlich Samson der Nasiräer (Richter 16,4), der von Gott von Geburt an mit unbesiegbarer Stärke ausgestattet war, solange er sein Gelübde einhielt, niemals seine Haare schneiden zu lassen (die Parallelen zu den Dreadlocks der Rastafari-Kultur sind nicht zufällig). Seine Feinde waren vom Volk der Philister, die auch der Region den heutigen arabischen Namen فلسطين‎ Falastīn gaben, auch wenn die jetztige palästinensische Bevölkerung aus Arabern besteht, die mit dem historischen Volk der Philister nichts zu tun haben. Die Fürsten der Philister überedeten Delila, das Geheimnis seiner Stärke herauszufinden. Als archetypische Figur der Verführerin in der Bibel — die ihren Betrug zu aller Schande sogar für Geld vollzog! — tat Delila, wie ihr geheissen und entlockte Samson nach drei Versuchen, in denen er ihr die falsche Antwort gab, das Geheimnis. Sie schor ihm schlafend die Haare und Samson konnte von den Philister besiegt werden. Nach seiner Gefangennahme wurde Samson nach Gaza verschleppt, ein Schicksal das viele Jahrhunderte später Leonard Cohen erspart blieb, als er sich 1973 auf israelischer Seite im Yom-Kippur-Krieg verpflichtete und als Truppenunterhalter in der Sinai-Wüste in ein Feuergefecht geriet.

Dritte Strophe: HaSchem

G                  Em
You say I took the name in vain
G            Em
I don't even know the name
    C                                G
But if I did, well really, what's it to you?
G                       /C        D    
There's a blaze of light in every word
  /Em            /C         D      
It doesn't matter which you heard                    
   /Em(D)          D        Em
The holy or the broken Hallelujah
     C         Em            C          G-D-G 
Hallelujah, Hallelujah, Hallelujah, Hallelujah

Der Erzähler verwehrt sich gegen den Vorwurf, gegen das Gebot „Du sollst den Namen des Herrn, deines Gottes, nicht missbrauchen; denn der Herr lässt den nicht ungestraft, der seinen Namen missbraucht“ (Exodus 20,7) verstoßen zu haben mit dem Argument, er kenne den Namen ja gar nicht. Mit diesem Unwissen steht er nicht ganz alleine da, denn der Name Gottes (haSchem, השם ‚Der Name‘) ist nach jüdischem Verständnis verloren: Mit der Zerstörung des letzten Tempels im Jahr 70 ging das Wissen um die Aussprache des Namens verloren.

In einem meiner Lieblingsfilme wird die fieberhafte Suche nach dem Namen als mathematische Formel direkt angesprochen. In Darren Aronofskys Film „π“ dreht sich alles um die Suche nach Mustern, die dem vermeintlichen Chaos der Welt zugrunde liegen können: die Fibonacci-Folge ebenso wie das Auf und Ab des Börsenmarktes. Der Mathematiker Max Cohen (noch ein Cohen!) vergräbt sich immer wahnhafter in der Suche nach dem Muster, mit katastrophalen Folgen für ihn am Ende. In einer Szene wird er in einem Brooklyner Coffee Shop von einem kabbalistischen Torah-Schüler angesprochen. Dieser versucht ihm zu erklären, dass Hebräisch eine Folge von Zahlen ist; ein Code. In der esoterischen Zahlenmystik erkennt der Mathematiker — vielleicht schon vom Wahnsinn gezeichnet — Parallelen zu seiner eigenen Arbeit:

Aber vielleicht ist die Suche nach dem Namen auch nicht so wichtig, zumindest für Leonard Cohen. It doesn’t matter which you heard / The holy or the broken Hallelujah Das wirklich Wichtige kommt erst noch.

Vierte Strophe: Eigentlich geht es um die Liebe

G                Em
I did my best it wasn't much.
G                    Em
I couldn't feel so I learned to touch.
     C                                G
I've told the truth, I didn't come to fool you.
G                  C        D
And even though it all went wrong,
     Em               C       D
I'll stand before the Lord of Song 
     Em            D               Em
with nothing on my tongue but Hallelujah
     C         Em            C         G-D-G 
Hallelujah, Hallelujah, Hallelujah, Hallelujah

Von dem Lied „Hallelujah“ existieren über 100 Cover-Versionen. Die meisten von ihnen benutzen nicht die Strophen 1-4 aus diesem Blogpost, sondern eine neuere Version, die von Leonard Cohen auch live gesungen wird. In einem Interview bezeichnete er die neue Version, die sich deutlich von dem Lied auf seinem 1984er Album Various Positions unterscheidet, als das „weltliche Hallelujah“. Das Thema der neueren Version ist klar die Liebe und es finden sich Zeilen wie „Now maybe there’s a god above / but all I ever learned from love / is how to shoot at someone who outdrew you“. In der Album-Version tritt der Aspekt, dass es eigentlich am Ende in erster Linie um die Liebe und die Beziehung zu einem Partner geht, viel weniger deutlich zu Tage. Dafür gibt es mehr Mathematik und Bilder aus der Bibel, erst in der letzten Strophe wird das Geheimnis aufgedeckt. I did my best it wasn’t much. / I couldn’t feel so I learned to touch. Wovon man nicht sprechen kann, das müssen wir lernen zu fühlen.