Newton's Birthday Eve
Last edited on March 16, 2007
Christmassy toughts in #lisp:
(Full text in the publicly archived logs of the freenode-channel #lisp.)
Christmassy toughts in #lisp:
(Full text in the publicly archived logs of the freenode-channel #lisp.)
Wohl das erste Mal, daß ich ein Buch fast ungelesen gekauft habe! Nachdem mir Eine Billion Dollar so unheimlich gut gefallen und beeindruckt hat — es ist auch jenes andere Buch, auf das ich auch schon in dem letzten Eintrag der Kategorie Literatur verwiesen habe —, habe ich nun bei der Weihnachtsgeschenkesuche von einem Geburtstagsgutschein den Thriller Der Letzte seiner Art von Andreas Eschbach gekauft. Normalerweise suche ich mir in einem Buchladen zunächst nach Titel und Klappentext einen ganzen Stapel Bücher zusammen und lese dann in jedem Buch erstmal ein paar Minuten oder sogar eine Viertel Stunde, bevor ich kaufe. Zu oft erscheint ein Werk zwar interessant, aber der Schreibstil oder einfach die Erzählart stellen sich schlicht als unerträglich heraus. Bei diesem Buch habe ich gerade mal den Klappentext und vielleicht noch den ersten Absatz gelesen — und das, obwohl ich beim Thema erstmal ein wenig skeptisch sein müßte; naja, andererseits mag ich auch die Kurzgeschichten in jeder Ausgabe der c't sehr (Sie dürften inzwischen der einzige Teil des Magazins sein, den ich jedes Mal lesen, und das so ziemlich zuerst.) —, so sehr hat mich der Autor im letzten Buch beeindruckt. (Einen eigenen Eintrag zu Eine Billion Dollar wird es natürlich noch geben. Ich habe auch schon am 11.11. im Zug nach Paris einen geschrieben, bisher hatte ich aber noch keine Lust, ihn für die Veröffentlichung zu überarbeiten.) Aber zunächst habe ich noch ein paar andere Bücher vor mir.
Ein anderes, das einfach unerträglich wurde, habe ich vor ein paar Tagen abgebrochen, weil die etwas betagtere Autorin doch leider auch schreibt, wie man es von einer Großmutter erwartet: Schauplätze werden gleich mehrmals vorgestellt, und jedes Mal natürlich in großer Ausführlichkeit. Insgesamt wundere ich mich, daß das Buch — bzw. das von mir gelesene Drittel — kapitelweise zusammengestückelt wirkt und insgesamt durcheinander erscheint; immerhin soll doch der Autorin Nichte als Co-Autorin mitgewirkt haben, der doch spätestens die argen Wiederholungen aufgefallen sein müßten. Oder wird hier auf eine vergeßliche Leserschaft spekuliert?
Ich kann natürlich nur den Teil kommentieren, den ich gelesen habe. Dieser hat mir neben dem Schreibstil aus noch anderen Gründen nicht gefallen. Zunächst aber möchte ich anfügen, daß ich die Autorin für ihr geführtes Leben nicht angreifen möchte. Sie hat wohl Bemerkenswertes geleistet, wie der Klappentext verrät. Beispielsweise habe sie nach dem großen Bürgerkrieg in Ruanda ein Waisenhaus gegründet. Allerdings kann ich sehr wohl kommentieren, wie ungeschickt und unbedacht sie erzählt.
In meinen Augen betrachtet sie ihr Leben arg selbstgerecht. Es geht um eine Frau, die, 1912 in Amerika geboren, 1949 mit ihrem Mann, einem weltweit bekannten Großwildjäger, nach Ruanda auswandert. Dort bewirtschaftet sie zunächst mit jenem Mann eine Plantage, schließlich verwaltet sie eine andere alleine und letztendlich beteiligt sie sich an einer eigenen, auf der sie auch ihr restliches Leben verbringt (bisher zumindest).
Zwar ist ihr zugute zu halten, daß sie auf ihrer Plantage eine Schule für den Großteil der Belegschaft errichtet hat, der aus Kindern besteht. Doch trotz Schule handelt es sich eben um Kinder. Gut, mögen es zu jener noch gar nicht allzu lang vergangenen Zeit zumindest auf jenem Kontinent noch selbstverständlicherweise Kinder gewesen sein, allerdings verstört mich doch, daß sie dies in ihrem Rückblick, den sie immerhin in heutigen Tagen verfaßt hat, völlig ohne kritische Worte oder Entschuldigungen beschreibt. Im Gegenteil!
Hach, toll. Feldarbeit ist ja aber auch gar nicht allzu anstrengend. (Die Betonungen sind, eigentlich unnötig, von mir eingefügt. Das Zitat findet sich auf Seite 47.) Aber natürlich fallen diese Erzählungen beschönigend und ohne Entschuldigungen aus: Schließlich blickt hier eine Frau auf ihre Vergangenheit zurück, die zufrieden mit sich sein kann und in ihrem hohen Alter nur gerecht mit sich selbst umgeht. (Achja, Sarkasmus, Krankheit der Kritiker, macht nur allzu viel Spaß.)
Desweiteren stört mich, daß sie in all ihren niedlichen Anekdötchen über ihre Angestellten und umliegend Wohnende (auch Mitglieder ihrer Kreise) ständig die vollen Namen nennt, von denen ich vermuten kann, daß es sich um die wahren Namen handelt. Sicherlich hat sie nicht vor der Veröffentlichung ihre ehemaligen Wohnorte im Kongo und in Ruanda bereist, um all die Vorkommenden um Einwilligung zu bitten. Sei es, es handelt sich um die angestellten Männer, die ihren Frauen angeblich übel mitspielen, die Frauen, die zickig und dickköpfig ihren Männern gegenüber seien, oder den Mann, den nur ich hier nicht mit Namen nenne, der ebenfalls der "auserlesenen Gesellschaft von Abenteurern und Aristokraten, welche es nicht an schillernden Charakteren mangelte," angehört und der laut der Autorin "ein kräftiger Mann mit unglaublicher körperlicher wie auch sexueller Energie" ist; auch die zum Beweis angeführten Liebschaften werden natürlich, wenn es das Gedächtnis noch hergibt, mit Namen genannt (Seiten 83-53). Muß ja alles authentisch sein. Wer hat denn da ein Recht auf Privatsphäre. Ist doch schließlich ihre Geschichte und Vergangenheit, die sie da offenlegt.
Oh, und natürlich darf man auch gute und enge Freunde im nachhinein outen (Seite 152):
Bemerken beide Autoren nicht, wie bitter folgende Zeilen auf Seite 151 sind? Das sollte man nicht etwas anders ausdrücken?
Oh, Mann, ich merke gerade, daß ich 40 Prozent des Buches gelesen habe, eben bis jene Seite 152 (von 372 Seiten, wobei man acht Seiten am Anfang abziehen muß)! So lange durchgehalten habe ich auch nur, da eine gute Freundin mir das Buch ausgeliehen hat. Aber jetzt halte ich es doch nicht weiter aus, und ich habe hiermit dargelegt, warum, was ich mir hier als Pfand anrechnen möchte, eben nicht mehr weiterlesen zu müssen. Bin ich zu empfindlich oder anspruchsvoll? Andere mögen das Buch wunderbar finden, es als "warmherziges Buch" bezeichnen oder meinen, es sei "hervorragend zu Papier gebracht" (erste Rezension auf Amazon.de), für mich ist es nichts. (Vielen Dank natürlich trotzdem fürs Ausleihen! Nicht, daß mir jetzt keiner mehr etwas ausleiht. . . :-) )
Obwohl ich es eigentlich nicht wollte, erwähne ich zum Schluß doch den Titel, damit dieses Buch nicht doch aus Versehen erwischt und Lesezeit verschwendet wird: Rosamond Halsey Carr und Ann Howard Halsey, Land der Tausend Hügel — ein Leben in Afrika (Originaltitel: Land of a Thousand Hills).
Abgebrochen, jedenfalls, habe ich dieses Buch, um Paradise von A.L. Kennedy zu lesen, das ich dann aber nach zwei, drei Seiten auch unterbrochen habe; allerdings nur, weil ich jetzt erst den von drei Freunden (zusammen mit edlem Wein) geschenkten Steppenwolf von Hermann Hesse lesen muß. (Um jenes Buch sollte sich dieser Eintrag auch eigentlich drehen, nach zwei, drei einleitenden Sätzen zu den anderen Büchern. . . *hust*)
Was für ein Buch (bisher)! Ich habe selten, nein, nie!, soviel in einem Buch unter- und angestrichen! Da mag manch einer sagen: "Du sollst lesen nicht markieren", aber hier gibt es einfach so viele zitierenswerte Sätze und ganze Abschnitte. Da ist meine ansonsten eigentlich gut ausgebildete Fähigkeit, beliebige Stellen in einem gelesenen Buch wiederzufinden, einfach überfordert. Doch nicht mehr in diesem Artikel, da werden gesonderte folgen.
Nein, doch!, ein zu passendes Zitat angesichts des zuvor besprochenen Buches:
Vielen Dank, Ralf, Johann und Hannes! (Und natürlich auch an Moritz, Basti und Jenny für den Gutschein!)
An meiner Geburtstagsparty vor ein paar Tagen habe ich meine nicht unzahlreichen Gäste bekocht, und da gleich mehrere Freunde daraufhin das Rezept für die Suppe haben wollten, habe ich letzte Nacht das Rezept noch mal ordentlich aufgeschrieben. Jetzt packe ich es der Einfachheit halber direkt in mein Weblog, nachdem meine Mutter, der ich das Rezept verdanke, nichts dagegen einzuwenden hat.
Die Kurzfassung lautet:
Und die lange Version gibt es hier (anklicken, ist auch in 150dpi zum brauchbaren Ausdrucken):
Ich hoffe, daß das jetzt nicht dazu führt, daß die dauernd von Freunden gekocht wird, so daß sie nichts besonders mehr sein wird. Andererseits glaube ich kaum, daß diese Gefahr besteht. Also: Guten Appetit!
PS: Kommentare sind wie immer natürlich sehr willkommen! Ich leite auch gerne eventuelles Lob an meine Mutter weiter. :-)
Anfang der Woche habe ich mir des nächtens endlich ein Input-Plugin für das JACK Audio Connection Kit und XMMS zusammengeschustert. Hauptbeweggrund ist gewesen, daß ich mein XMMS Visualization-Plugin für den LED-Cube für andere, externe Dinge benutzen wollte als nur für Audiodateien, die XMMS selber abspielen kann — besonders, um letztendlich zu Line-in den Kubus blinken lassen zu können, oder was mir gerade einfällt. Ist auch ganz niedlich, wenn er via Mikrophon zur eigenen Stimme oder Geklopfe blinkt.
Noch ein XMMS-Plugin in der abstrusen Programmiersprache C zu schreiben, hatte ich wenig Lust. Auch wollte ich mich weder mit der Plugin-Schnittstelle von XMMS weiter herumschlagen oder mir die Innereien von JACK antun. Ein Ausweg schien das Meta-Input-Plugin aufzuzeigen (die Homepage des Autors, die von der zuvor genannter xmms.org-Seite verlinkt ist, ist wohl seit geraumer Zeit tot, allderings findet man die Datei xmms-meta-input-0.4.tar.gz auch gut per Google). Oh, gerade sehe ich, daß Mikael Bouillot, besagter Autor, wohl umgezogen ist, und sich die Seite nun unter http://www.corbac.com/page3.html findet! Dort finden sich auch alle bisherigen Versionen, — und der Hinweis, man solle inzwischen lieber das BMP-Meta-Plugin von Michael Doering verwenden. Nun, mein Hack baut noch auf das "alte" Plugin auf.
Das nächste Problem war, ein Programm zu finden, das sich am JACK-Server anmeldet und den Sound möglichst als rohen WAV-Stream auf Standard Output herauswirft. jackrec schien zunächst ein geeigneter Kandidat, will allerdings zwingend in eine Datei schreiben. Ein schneller Test mit einer benannten Pfeife ("named pipe" via mkfifo) schlug leider fehl (wäre allerdings auch etwas unergonomsich); ich hatte schon angefangen, jackrec entsprechend umzuschreiben, allerdings habe ich dann gemerkt, daß es auch Blödsinn macht, wenn man es einfach so in eine Datei schreiben löst. Es macht nur eine klitzekleine Datei, die kaum mehr als ein PLIK enthält und bricht ab. Also war dies eine Sackgasse, den ich hatte keine Lust, den Bug in jackrec zu suchen.
Nächster Kandidat schien jack.udp zu sein, ein Client, der zwei jackd-Server per UDP über ein Netzwerk verbindet. Ich wollte auf der einen Seite jack.udp im send-Mode starten, mit Qjackctl verkabeln und den Stream mit dem Allzwecktaschenmesser netcat abfangen. Aber das war natürlich Blödsinn, da am Ende natürlich nicht ein WAV-Stream herauskommt, sondern irgendein JACK-Protokoll. (Nebenbei hat sich herausgestellt, daß jack.udp zwar ein nettes Tool wäre, es allerdings für den Einsatz in einem wirklichen Netzwerk ohne weiteres erst einmal ungeeignet ist. Am Ende kommt nur ein langgezogener, zerknitterter Ton mit vielen Unterbrechungen heraus.)
Als ich schon fast keine Lust mehr hatte (okay, "fast" ist ein Euphemismus), habe ich mir ein paar generelle, nicht JACK-spezifische Audioprogramme für die Kommandozeile genauer angesehen, SoX und co. SoX selbst war zwar nicht geeignet, aber mit Ecasound wurde ich endlich fündig! Ein schneller Test ohne irgendwelche Optimierungen war erfolgreich, anschließend habe ich das ganze noch etwas verschönt und mit allerlei Optionen garniert, damit Ecasound nicht dick puffert (im einzelnen: "-B:rt -b:0 -z:nodb -z:nointbuf").
Hier ist das Ergebnis:
case $1 in
play)
source=$(basename "$(echo -n "$2" | head -c -5)")
echo -e "\n======= Connectiong to Jack source: $source =======" 1>&2
# ecasound -q -i jack_auto,"$source" -o stdout
ecasound -q -B:rt -b:0 -z:nodb -z:nointbuf -i jack_auto,"$source" -o stdout
exit 0
;;
isOurFile)
extensions=$(echo -n "$2" | tail -c 5)
if [ "x$extensions" == "x.jack" ]; then
exit 0
else
exit 1
fi
;;
esac
exit 1
Man lade sich das Meta-Input-Plugin herunter, kompiliert es sich und installiere es (d.h. man packe bei einer Benutzerinstallation einfach die Datei libmetainput.so in sein ~/.xmms/Plugins und erstelle das Verzeichnis ~/.xmms/Plugins/Meta). (Für Eilige gibt es hier auch mein fertiges Binary für die x86er Plattform, natürlich ohne jegliche Garantien, allerdings bin ich ja ein lieber, netter Kerl.)
Die Datei jack-via-ecasound kommt anschließend in das eben erstellte Meta-Verzeichnis, und sollte mit executable flag versehen werden ("chmod +x jack-via-ecasound").
Plugins für XMMS funktionieren in einem Zwei-Schritt-Verfahren. Beim Öffnen einer Datei in XMMS (bzw. Hinzufügen in die Playlist) fragt XMMS die einzelnen Plugins, welches denn bitte für die Datei zuständig ist. Beim Meta-Input-Plugin werden die installierten Skripte dazu mit "isOurFile" als erstes Argument und dem Dateinamen (einschließlich Pfad) als zweites aufgerufen; beim Abspielen schließlich lautet das erste Argument "play", das zweite bleibt der vollständige Dateiname.
Für mein Skript gebe man bitte eine (nicht zwingend vorhandene) Datei mit der Erweiterung ".jack" an, wobei man vor dem Punkt direkt die JACK-Quelle angeben kann. Bei Ecasound kann man idealerweise "jack_auto" als Eingabequelle angeben, wobei der Name (beim Dateinnamen der Teil vor dem Punkt) mit etwas Voodoo auf den eigentlichen JACK-Output gematcht wird. Sehr praktisch!
Mit eingeschaltetem Plugin gebe man also einfach "alsa_pcm.jack" als Dateinamen an und, voila!, XMMS startet beim Abspielen Ecasound, das sich mit der JACK-Quelle "alsa_pcm" verbindet und die Visualization-Plugins blinken zum Ton, der an Line-In hereikommt (so der Mixer der Soundkarte richtig eingestellt ist). Und soll's zu Videos in (G)Mplayer blinken, gebe man einfach "MPlayer.jack" an.
Hach, ich bin glücklich.
Es gibt mindestens zwei solcher Plugins: XMMS jack Driver und XMMS Jackasyn Driver. Beide machen so ziemlich das gleiche, das zweite, das die libjackasyn-Bibliothek verwendet, hört sich laut Beschreibung des Debian-Pakets aber besser an:
Es hat allerdings den gewaltigen Nachteil, daß es — wie auch das OSS-Output-Plugin, von dem wohl fleissig kopiert wurde — immer puffert. Der Standardwert ist dabei gigantische 3 Sekunden! Und der Mindestwert ist nicht etwa 0 Milisekunden, sondern immer noch ordentlich wahrnehmbare 200ms (obwohl es sich nicht wirklich nach 200ms angehört hat). Das ist natürlich reichlich dämlich, wenn man einen low-latency audio server wie eben JACK verwendet. . . Das "normale" JACK-Plugin ohne "asyn" hat dieses Problem nicht.