Was Technisches zu diesem Blog

Mon, 30 Jun 2008 13:37:56 +0000

Das Caching-Verhalten einiger Newsreader regt mich langsam wirklich auf! Seit mehr als einer Woche, vielleicht sogar schon zwei, habe ich jetzt das Impressum geändert, ohne dass Google Reader eine Änderung anzeigt. Manchmal kommt es vor, dass ich Teile meines Blogs verändere, z.B. Fehler korrigiere – so ein Blogeintrag entsteht bei mir teilweise durch viel Copypasting, z.B. habe ich die ALT-Texte der Bilder im Blogeintrag zu Kornkreisen falsch gesetzt, weil ich die IMG-tags einfach kopiert habe, und die URL’s ersetzt habe, aber vergessen habe, die ALT-Texte zu setzen. Da dies hier ein Schmier-Blog (siehe früherer Name) ist, das heißt, ich schnell mal, wenn ich nichts besseres zu tun habe (oder tun will) hier was reinschreibe, kommt es durchaus vor, dass ich einige Fehler reinbaue, manchmal fallen sie mir sogar kurz nachdem ich den Beitrag veröffentlicht habe, auf, aber meistens bin ich dann zu faul, sie nochmal auszubessern, und warte etwas.

Was ich damit sagen will:

1. Das WICHTIGSTE: Copyright- und Impressums-Angaben sollen immer direkt von der Blog-Seite genommen werden, und zwar aktualisiert – und bitte möglichst auch selbst überprüft werden, falls man irgendwas weiterverwenden will. Es kann immer mal sein, dass ich eine Quelle von einem Zitat oder einem Bild falsch angebe, und sie ausbessere. Es kann sein, dass ich mein eigenes Impressum anpassen muss, oder mich entschließe, es anzupassen. Ich kann keine Garantie für die Korrektheit meiner Lizenzangaben zu fremdem Material geben, und auch nicht, dass ich dieses immer korrekt als solches Deklariere. Ich bin darum bemüht, aber Fehler können immer passieren. Wenn jemandem ein solcher Fehler auffällt, bitte ich darum, ihn mir sofort mitzuteilen.

2. Die URL zu den Bildern kann sich ggf. mal ändern. Wenn also irgendwelche Bilder nicht angezeigt werden, kann eine Aktualisierung helfen. Ich hoste meine Bilder momentan auf einem sehr kleinen, aber mir zugänglichen Webspace, dessen Fassungsvermögen abnimmt. Es kann sein, dass ich meine Bilder deswegen irgendwann woanders hinverfrachte, und dann die URL’s natürlich in den Blog-Einträgen ändere, sofern ich das nicht vergesse. Allerdings cachen manche Newsreader zwar den Textteil, aber nicht die Bilder der Blogeinträge. Das heißt, sie versuchen, die Bilder von den alten URL’s zu laden. In diesem Fall: Aktualisieren, oder direkt zum Blog gehen.

3. Es kann sein, dass ich irgendeinen Fehler produziere. Das ist mir z.B. gestern passiert, als ich versucht habe, latex2html-Code mit WordPress zu importieren (die WordPress-XHTML-Ausbesserungs-Proceduren können ziemlich störrisch sein). Manchmal merke ich dann nicht, dass z.B. ein Teil des Eintrags nicht lesbar ist. Auch in diesem Fall gilt: Auf dem Blog selbst sollte immer die aktuellste Version sein.

4. Falls jemandem ein Fehler auffällt, wäre es nett, wenn er mich davon in Kenntnis setzen würde. Ein einfacher Kommentar reicht – wenn mir jemand nicht seinen richtigen Namen geben will, und nicht seine richtige E-Mail, dann ist das OK, solange er mich nur auf einen kleinen Fehler aufmerksam macht. Wenn es nur um kleinere Fehler geht, z.B. deadlinks oder falsch angegebene Quellen, oder irgendwelche gröberen Darstellungs- oder Rechtschreib-Fehler, schalte ich den Kommentar wohl nichtmal frei, sondern bessere sie einfach aus.

Ansonsten gilt: Wer inhaltliche Fehler bemängeln will, oder eine differenzierte Meinung zu irgendetwas äußern will, der kann dies nur mit einem gescheiten Namen und korrekter E-Mail-Adresse tun. Bei besonders „Kontroversen“ Beiträgen nehme ich mir ggf. die Freiheit, den Schreiber persönlich an seine angegebene E-Mail-Adresse anzuschreiben, um deren Korrektheit zu testen – einfach aus rechtlichen Gründen. So machen das wohl einige andere Blogger. Bisher trat das noch nicht auf, ich bezweifle auch, dass das bei meinem kleinen Blog jemals auftreten wird, aber man weiß ja nie.

Advertisements

Die faszinierende Welt der endlichen Mengen

Mon, 30 Jun 2008 00:30:40 +0000

Ich dachte mir, wenn mir schon mal etwas mathematisch interessantes passiert, was vielleicht die Welt ,,da draußen„ auch interessieren könnte, sollte ich es vielleicht auf meinen Blog schreiben. Obgleich es wohl eher trivial ist (zumindest für jemanden, der die Vorlesungen Mathematische Logik 1 und 2 gehört und verstanden hat), so ist es dennoch interessant, wenn auch nicht im mathematischen, aber wohl doch im philosophischen Sinne, sich über die folgenden Ausführungen Gedanken zu machen. Eventuelle Fehler kann ich leider nicht ausschließen. Ich lasse mich also gerne korrigieren. Formal bin ich nur im notwendigen maße.

Ich wusste schon lange, dass es ein Modell der Zermelo-Fraennkel-Mengenlehre (ZFC) gibt, das eine unendliche $ ni$-Kette besitzt – weil man mir das erzählt hat. Wirklich darüber nachgedacht habe ich nie, war auch jetzt nichts, was mich brennend interessiert hat. Umso überraschender war es, als ich über einige umwege zufällig wieder darauf gestoßen bin.

Aber fangen wir mal am Anfang an: Ich machte mir Gedanken über eine kleine, mir unklare Sache bezüglich der Busy-Bever-Funktion mathbbm{N} rightarrow mathbbm{N}$, eine Funktion, die jeder natürlichen Zahl $ n$ die maximale Anzahl an programmschritten, die ein terminierendes Turingprogramm mit $ n$ Zuständen vor seiner Terminierung haben kann, zuordnet (die Definition auf Wikipedia ist eine Andere, Ähnliche, aber nicht äquivalente, aber ebenfalls nicht effektiv berechenbar). Diese Funktion ist nicht effektiv berechenbar, und ihre Berechenbarkeit ist äquivalent mit der Lösung des Halteproblems. Eine Sache, die mir schon seit Langem nicht ganz klar war, und ich habe mir eigentlich nie die Zeit genommen, mal genauer darüber nachzudenken – früher, noch zu Schulzeiten, einfach aus dem Grund, weil mir das Wissen wohl sowieso gefehlt hätte, aber inzwischen werden viele der Fragen, die ich mir damals stellte, mehr oder weniger trivial. Nur in dieser einen hatte ich soetwas wie eine Denkblockade seit Langem.

Nun, die Frage, die ich mir stellte, lief auf Folgendes hinaus: Angenommen, $ forall n in mathbbm{N} exists k in mathbbm{N}. ensuremath{operatorname{ZFC}} models ensuremath{operatorname{bbf}} (n) = k$, das heißt, angenommen, kein Wert von $ ensuremath{operatorname{bbf}}$ ist unabhängig von ZFC. Dann würde nach dem Vollständigkeitssatz gelten $ forall n in mathbbm{N} exists k in mathbbm{N}. ensuremath{operatorname{ZFC}} vdash ensuremath{operatorname{bbf}} (n) = k$, und somit könnte man mit einem einfachen Beweiscomputer, der alle Beweise so lange durchgeht, bis er eine Aussage der Form $ ensuremath{operatorname{bbf}} (n) = k$ im Sukzedens eines Beweises findet, für jedes $ n$ den Wert von $ ensuremath{operatorname{bbf}} (n)$ effektiv berechnen, denn man weiß, dass der Algorithmus für jedes $ n$ terminieren müsste. Das geht natürlich nicht. Also muss mindestens ein Wert $ ensuremath{operatorname{bbf}} (n)$ unabhängig von ZFC sein, und damit trivialerweise auch alle Werte $ ensuremath{operatorname{bbf}} (m), m > n$. Das heißt – nicht ganz unabhängig, natürlich wäre er durch einige Faktoren nach unten begrenzt, aber ansonsten trotzdem frei wählbar, ohne dass sich ein Widerspruch ergeben dürfte. Dies klang für mich zu Schulzeiten, als ich noch relativ wenig Ahnung über, aber dafür umsomehr Zeit und Interesse für Modelltheorie hatte, unplausibel, sind doch Turing-programme endliche Objekte, und die Aussage, ein Turingprogramm terminiert, ist auf die Aussage über die Endlichkeit einer Zahlensequenz, die einer gewissen Vorschrift genügt, zurückzuführen, und meine naive Überzeugung war, endlichkeit wäre ,,eindeutig„, das heißt, die endlichen Mengen sind in jedem ZFC-Modell die selben, eine Menge, die in einem ZFC-Modell endlich ist, ist auch in jedem anderen ZFC-Modell endlich.

Natürlich war genau das der Trugschluss. Nun, reflektieren wir kurz über Endlichkeit. Für die meisten Mathematiker ist eine Menge genau dann Endlich, wenn es eine Bijektion auf eine Menge der Form $ {1, 2, ldots, n}, n in mathbbm{N}$ gibt. Dies setzt aber die Bekanntheit von $ mathbbm{N}$ voraus, und führt zu dem Zyrkelschluss, $ mathbbm{N}$ als Menge der endlichen (Ordinal)Zahlen zu definieren – oder als kleinste Ordinalzahl, die unendlich ist. Aber auch das ist ein Zyrkelschluss – was ist unendlich? Nun, ich bevorzuge die intrinsische Definition, die man allgemein als Dedekind-Endlichkeit bezeichnet. Eine Menge $ X$ ist demnach genau dann Endlich, wenn es keine Injektion X rightarrow X$ gibt, die nicht auch Bijektion ist. Bezeichne das Kürzel $ ensuremath{operatorname{end}} (X)$ diesen Fakt (ich überlasse es dem gewandten Leser jetzt, die Aussage formal hinzuschreiben). Als Zahlen nimmt man wohl am Besten die Ordinalzahlen, es gibt mehrere äquivalente Definitionen der Ordinalzahlen, sucht euch doch selber eine aus, auf Wikipedia stehen eine ganze Menge, die in ZFC äquivalent sind, drücke $ ensuremath{operatorname{ord}} (X)$ aus, dass $ X$ eine Ordinalzahl ist. Für Ordinalzahlen giltx < y Leftrightarrow x in y$.

So, dann können wir also z.B. definieren ={x vert ensuremath{operatorname{ord}} (x) wedge ensuremath{operatorname{end}} (x)}$. Jetzt, da wir die Begrifflichkeiten auch für alle Nichtmengentheoretiker soweit geklärt haben (den Mengentheoretikern stellen sich wahrscheinlich inzwischen sowieso die Zehennägel über so viel Un-Formalismus…), komme ich vielleicht mal zum punkt. Bezeichne ZFC die Menge der ZFC-Axiome, $ L_{ensuremath{operatorname{ZFC}}} ={in, varnothing}$, wobei wir eigentlich auch $ varnothing$ nicht brauchen, aber mei, es ist halt etwas praktischer manchmal.. Sei $ L_{ensuremath{operatorname{ZFC}}'} = L_{ensuremath{operatorname{ZFC}}} cup {x}$, wobei $ x$ eine Konstante (nullstelliges Funktionssymbol) sei. Wir betrachten die Menge $ ensuremath{operatorname{ZFC}}' = ensuremath{operatorname{ZFC}} cup { lc... ...ame{end}} (x) rceil } cup { lceil n in x rceil vert n in mathbbm{N}}$. Oh, wie unübersichtlich. $ lceil cdot rceil$ drücke aus, dass die syntaktische Aussage, also die Zeichenkette, die die Aussage repräsentiert, gemeint ist. Wir fügen also $ ensuremath{operatorname{ZFC}}$ Axiome zu, dass die Konstante $ x$ für eine endliche Ordinalzahl steht, und dass $ n in x$ für jede endliche Ordinalzahl $ n$, also anders gesagt $ n < x$. Wenn wir davon ausgehen, dass $ ensuremath{operatorname{ZFC}}$ erfüllbar ist, folgt aus dem Kompaktheitssatz, dass auch $ ensuremath{operatorname{ZFC}}'$ erfüllbar ist, denn jede endliche Teilmenge von $ ensuremath{operatorname{ZFC}}'$ ist offensichtlich erfüllbar, wir müssen nur $ x = n + 1$ für das größte vorkommende $ n$ setzen.

Es gibt also ein $ ensuremath{operatorname{ZFC}}'$-Modell. Schauen wir uns dieses $ x$ mal an. Dieses $ x$ ist größer als jede ,,unserer„ natürlichen Zahlen. Andererseits haben wir gefordert, dass $ x$ selbst Ordinalzahl ist, und vor Allem, dass $ x$ endlich ist. Aber $ x$ ist doch ,,offensichtlich„ unendlich. Es kommt noch viel lustiger: Jede endliche Ordinalzahl, die von 0 verschieden ist, hat einen Vorgänger. Also hat auch $ x$ einen Vorgänger, dieser kann nicht in ,,unserem„ $ mathbbm{N}$ liegen, und dessen Vorgänger ebenfalls nicht, es gibt also ,,unendliche„ endliche Zahlen $ x, x - 1, x - 2, ldots$ in diesem Modell, und es gilt $ x ni x - 1 ni x - 2 ni ldots$ – es gibt also sogar eine unendliche absteigende $ in$-Kette. Trotzdem muss ein solches Modell $ ensuremath{operatorname{ZFC}}$ erfüllen, immerhin ist $ ensuremath{operatorname{ZFC}} subseteq ensuremath{operatorname{ZFC}}'$. Was ist da los?

Die Antwort ist ziemlich leicht, wenn man sich an die Definition der Dedekind-Endlichkeit erinnert. Das Modell von $ ensuremath{operatorname{ZFC}}'$ glaubt, $ x$ sei endlich, einfach, weil es keine Injektion $ x rightarrow x$ kennt, die nicht auch Bijektion ist.

Es geht noch weiter. Offensichtlich kann man in einem $ ensuremath{operatorname{ZFC}}'$-Modell kein ZFC-Modell finden, von dem $ ensuremath{operatorname{ZFC}}'$ weiß, dass es ein ZFC-Modell ist, und das ,,weniger„ endliche Zahlen enthält, heißt, dass nicht auch ein Adäquat zu diesem $ x$ enthält, von dem es glaubt, es sei endlich – das folgt einfach daraus, weil man per Induktion zeigen kann, dass jedes Modell von ZFC alle natürlichen Zahlen enthalten muss ( $ varnothing$ ist in jedem Modell per Axiom, und wenn die Ordinalzahl $ n$ enthalten ist, dann auch deren potenzmenge, also $ n + 1$ im endlichen Fall), was im Falle eines $ ensuremath{operatorname{ZFC}}'$-Modells bedeutet, dass alle Zahlen, von denen dieses Modell glaubt, sie seien endlich, darin enthalten sein müssen.

Das heißt, ,,philosophisch„ betrachtet, wenn man sich ,,in„ einem ZFC-Modell befindet, kann man sich kein ZFC-Modell vorstellen, das ,,weniger„ endliche Mengen hat, als das Modell, in dem man sich befindet. Das verhält sich mit dem ZFC-Modell unserer Intuition (falls es ein solches überhaupt eindeutig gibt – der platonist würde wohl sagen, ein solches Modell existiert) dann nicht anders. Das lässt aber auch die philosophische Ansicht zu, dass es vielleicht über unserem intuitiven ZFC-Modell ein für uns nicht plausibles ZFC-Modell geben kann, für das bestimmte Zahlen, die wir für endlich halten, unendlich ist. Um es naiv auszudrücken: Vielleicht kennt irgendein uns nicht plausibles ZFC-Modell eine Injektion von $ {0, 1}$ nach $ {0, 1}$, die nicht bijektiv ist – also glaubt, dass unsere $ 2$ eine unendliche Menge ist. Für uns ist das nicht plausibel – so wie für jedes $ ensuremath{operatorname{ZFC}}'$-Modell nicht plausibel ist, dass $ x$ eine unendliche Menge sein kann.

Ok, das ist jetzt alles wie gesagt mathematisch nicht besonders tiefgründig, aber der Gedanke ist trotzdem irgendwie interessant, finde ich. Also auch mal etwas so einfaches wie ,,Endlichkeit„ zu hinterfragen.

Entschuldigung für die schlechten Formeln… Das Zeug hab ich mit Latex2HTML erzeugen lassen. Ich werd mal bei Gelegenheit nach was Besserem suchen.


Feuerfuchs 3

Thu, 19 Jun 2008 12:15:31 +0000

Mit einer geradezu epischen Aktion wurden die Massen in den letzten Tagen dazu angehalten, sich den supertollen neuen Browser Firefox 3.0 herunterzuladen, der ja so viel besser ist, als alle Feuerfüchse zuvor. Auch ich ließ mich leider von diesem Hype tragen, da ich bisher eigentlich Firefox zwar weit entfernt von der Perfektion sah, aber immernoch besser als das meiste andere, was so herumschwirrt.

Nunja, zuerst versuchte ich mal das Debian-Paket firefox 3.0rc2 – eine Beta-Version in der Unstable-Branch, wie ich dachte. Das hat zuerst mal gemeckert, dass es die alten Firefox-Addons nicht mehr unterstützt, aber gut, das war klar, es dauert wohl nur eine kurze Weile, bis diese wieder Funktionieren. Aber immerhin: Neue kompatible Versionen wurden, soweit vorhanden, automatisch gefunden. Das ist mehr, als man von manchem Debian-Paket sagen kann, muss man jetzt mal gestehen.

Dann ging es los. Gespannt sah ich mir die neue GUI an. Etwas hässlich, aber was solls, es muss ja nicht schön sein, und das liegt wohl eher an meinen Desktop-Einstellungen. Ich logge mich also erstmal in Gmail ein. Ähem. 30 Sekunden zum Aufbauen von GMail? Hallo? Ich kann dem Browser mehr oder weniger dabei zusehen, wie er versucht, die Seite aufzubauen. Gut, vielleicht einfach ein schlechter Start. Ich gehe also über zu Youtube. Die langen Listen der Videos mit den Bildern als Vorschau, die sich unter meinem alten FF2 in ca. 2 Sekunden aufgebaut haben, brauchen jetzt auf einmal ebenfalls fast eine Minute – jedes Bild wird einzeln geladen und aufgebaut, das ganze braucht so viel Processorleistung, dass mein Lüfter anfängt, hochzuschnellen.

Eine Theorie hatte ich auch gleich – unter FF2 musste man immer die Variable MOZ_DISABLE_PANGO=1 setzen, damit Pango nicht verwendet wird, um ihn schneller zu machen. Nunja, das geht jetzt nicht mehr, ich konnte auch nicht herausfinden, ob man das jetzt irgendwie anders hinbekommt.

Nungut, also: Langsam. Vielleicht wenigstens wenig Speicherverbrauch. Naja, er hat, wenn ich die Ausgabe von Top richtig interpretiere, mehr verbraucht als mein FF2, aber angeblich wurden ein paar Memory-Lecks entfernt. Um dazu wirklich was zu sagen, muss man ihn wohl länger benutzen.

Na gut, dann hab ich noch gehört, er soll ein neues innovatives Tab-System haben. Alles was ich gesehen habe ist aber eine Tab-Leiste, die versucht, „smooth“ zu scrollen, woran sie leider kläglich scheiterte. Angeblich soll man das aber ausschalten können – ich habe die Einstellung nicht gefunden, wahrscheinlich wieder irgendein Eintrag in about:config.

Ok. Das war also das Debian-Paket. Debian-Pakete haben ja oft die Eigenschaft, mehr Ideologie als Funktionalität zu bringen, und so entschloss ich mich, es mit dem Tarball direkt von der Firefox-Seite zu versuchen. Als allererstes konnte ich diesen natürlich nicht per ssl herunterladen – wer braucht schon verschlüsselung, ist doch egal, wenn irgendein hiwi zwischen mir und deren Server vielleicht gezielt Firefox-downloads manipuliert (was ja an dem Tag garnicht mal so abwegig gewesen wäre). Egal. Laden wir es uns halt unsigniert herunter, wie ein standard-win-dau, der nicht aufpasst, worauf er clickt.

Also: Entpackt… und erstmal in kindlicher naivität ./firefox ausgeführt – hm. Das Ding hängt von einigen Shared Libraries ab, und die liegen im selben Verzeichnis, aber wenigstens eine Fehlermeldung. Also LD_LIBRARY_PATH gesetzt. Jetzt scheint alles zu gehen. Fröhlich führe ich also wieder ./firefox aus. Und es passiert… Nichts. Also führe ich ./firefox-bin aus. Und es passiert… Nichts. Nichts. Keine Fehlermeldung, kein Process, der sich irgendwie im Hintergrund startet… Nichts. Ich sehe mir also die –help-Ausgabe an. Da steht irgendein Flag namens -g-blabla, der alle Fehler Fatal machen soll – ich erhoffe mir davon also eine etwas verbosere Ausgabe des Fehlers. Auch hier passiert nichts. Es passiert einfach nichts – es wird nichts ausgeführt, keine Fehlermeldung ausgegeben… Nichts.

Erfahren mit freier Software suche ich nach einer INSTALL… Solch eine Datei gibt es nicht. Gefunden habe ich eine README.txt, die auf die Firefox-Seite verweist – auf der keine Installationsanweisungen stehen. Mäh.

Nun, Google ist mein Freund, und so suche ich nach anderen Leuten, mit dem selben Problem. Die meisten scheinen dasselbe versucht zu haben, wie ich, andere wiederum benutzen das Debian-Paket aus der Unstable-Branch. Warum auch nicht. Jetzt langts mir. Nach 3 Stunden herumgesuche (ich hab in der zwischenzeit sogar probiert, die Bashscripts firefox und run-mozilla.sh irgendwie zu verändern) habe ich meine Schuldigkeit getan, und darf wohl guten Gewissens im #firefox-Channel nachfragen. Meine Frage war dann auch ziemlich einfach: Wo findet man eine Installationsanleitung. Nunja, diese Frage konnte mir erstmal niemand beantworten, und man meinte, ich solle doch das Debian-Paket benutzen. Nunja, ich meinte, es hieße 3.0rc2, und ich wisse nicht, ob es nur eine Beta-Version sei. Nach einiger Zeit meldete sich dann ein etwas Kundigerer Chatter. Von ihm erfuhr ich zu den Installationsanweisungen „It is not supposed to need one“ – jaja, Firefox 3 ist so toll, dass es keine Installationsanweisungen braucht. Und ich erfuhr, dass das Debian-Paket aktuell ist, und die dortige Beta-Version dem Release entspricht. W00t. Naja, dann hab ich mir eine freundliche kritische Bemerkung nicht verkneifen können, habe mich anschließend aber, wie es sich gehört, bedankt, und bin dann ins Bett gegangen.

Wenn eine Software so dämlich ist, dass sie weder Fehlermeldungen ausgibt, noch Funktioniert, noch irgendeine Art von Installationsanweisungen hat, und dann, wenn man verzweifelt das vorgefertigte Paket benutzt, auch wirklich so langsam und unbenutzbar ist, kann ich wirklich nichts positives dazu sagen. Schade, ich hatte mich eigentlich auf einen schönen neuen Browser gefreut.

Im Moment bin ich dabei, auf Epiphany umzusatteln. Der ist wirklich schlank, verbraucht wirklich wenig Ram, ist wirklich sauschnell, was das Aufbauen von Seiten angeht, hat allerdings den Nachteil, dass die GUI nicht sehr Benutzerfreundlich gestaltet ist, und man sehr viel mit der about:config arbeiten muss. Ansonsten ist er fast äquivalent zu Firefox, die GUI sowie die about:config-Flags sind ziemlich die selben. Leider finde ich für einige Firefox-Addons, z.B. FireBug, keine Erweiterungen für Epiphany, aber das wird sich denke ich geben. Plugins und alles sind Kompatibel.

Sehr interessant fände ich ja den Closure-Webbrowser – einfach weil er in Common Lisp geschrieben ist, und man vielleicht ein wenig daran Rumhacken kann. Leider habe ich diesen bisher ebenfalls nicht zum Laufen gebracht, wegen Versionskonflikten etc. – es mangelte mir bisher einfach an Zeit.


Ich sehe was, was du nicht siehst, und das ist ein Kaktus mit ner Colaflasche in der Hand

Fri, 13 Jun 2008 22:43:45 +0000

„Ich sehe was, was du nicht siehst, und das ist ein Kaktus mit ner Colaflasche in der Hand“ – wer hätte gedacht, dass man einen solchen Satz mal im Zug hört – irgendeine Grundschul-Klasse oder sowas schien heute mit der Bahn zu fahren, und da schallte dieser Satz neben allerlei anderem Geplapper in mein Ohr, und mein armes Gehirn war leider nicht fähig, ihn, wie den Rest des Geschwafels, herauszufiltern. Nein, dieser Satz war zu strange, als dass man ihn ignorieren könnte, und seine eigenen wirren Gedankengänge fortsetzen könnte.

Was steckt dahinter? Ich war gezwungen, meinen müden Kopf von der Lehne aufzuheben, und mich etwas umzusehen.

Nun, es handelte sich um ein Werbeplakat für eine bekannte Firma, die koffeinhaltige Limonade verkauft, auf dem ein solcher Kaktus abgebildet war, der gleichzeitig einen Luftballon umarmte. Scheinbar soll dieses Plakat in irgendeiner Weise Harmonie oder Frieden zwischen Gegensätzen zur EM ausdrücken. Keine Ahnung. Mir ja auch egal.

Ich fand es nur erstaunlich, und da ich sonst nichts zu tun habe, schreibe ich es halt hier herein, auf dass sich alle Leute ärgern, die jetzt auf irgendeine tiefgründige Pointe warten.


Mit einem Dutzend Mäusen im Rucksack bergwandern.

Fri, 13 Jun 2008 22:37:34 +0000

Von einem äußerst sinnvollen, wenngleich eher weniger grausamen Tierversuch, als man sie in der Regel z.B. in der Datenbank Tierversuche (übrigens sehr interessante Seite) findet, habe ich hier gelesen. Bemerkenswert, mit was für einer Hingabe manch ein Forscher doch forscht. Ich zitiere mal:

Das Ziel war, den Einfluss von Sauerstoffmangel auf die Expression von Genen im Blut zu untersuchen

Ich bin kein Biologe, ich frage mich nur… Es gibt so viele Bergsteiger, hätte man nicht die testen können? So viele Leute steigen freiwillig auf Berge. Die würden sicher im Dienste der Medizin eine Blutprobe oder sowas hinterlassen – oder braucht man dazu irgendwelche inneren Organe? Ich weiß es ja nicht, ich nehme nur mal an, wenn die irgendwas sinnvolles herausfinden, werden die eh Tests an Menschen durchführen müssen. Naja, es geht ja noch weiter. Eine ziemlich geile Frage des Reporters:

Da taten Ihnen die armen Viecher leid?

Was für eine Unverschämtheit: Mäuse nehmen Strapazen (es sind Strapazen, trotz Allem) für die Gesundheit von Menschen auf – und dann, anstatt ihnen wenigstens ein wenig Respekt zu zollen – was ja ein Minimum wäre – bezeichnet man sie als „arme Viecher“ – „Viecher“ – ein sehr negativ behaftetes Schimpfwort. Aber gut, das wird dem Reporter wohl kaum bewusst gewesen sein. Wenigstens hat er die Möglichkeit eingeräumt, Mitleid mit den Tieren zu haben. In einer vom extremistischen Speziesismus regierten Welt muss man wohl schon darüber froh sein. Nunja, dann natürlich die Aussage, die Mäuse mussten getötet werden, um Proben zu entnehmen – die brauchten anscheinend sehr viel Blut für ihre Tests. Vielleicht hätten sie ja größere Tiere nehmen können – aber die sind vermutlich zu wehrhaft, und hätten nicht alles ohne Weiteres mit sich machen lassen.

Nun, ich will keinem Vorwürfe machen, die haltlos sind. Und somit lasse ich mich gerne durch einen Kommentar korrigieren. Es ist für wahr nicht der schlimmste Tierversuch, von dem ich gehört habe, er gehört eher zu den harmlosen, so zumindest mein nicht-fachkundiges Empfinden. Es ist nur… Als ich die Meldung gelesen habe, hatte ich irgendwie sofort das bedürfnis, irgendwas dazu zu sagen – mich hätte viel mehr das Befinden der Mäuse interessiert, als das des Forschers, und sie hätten ruhig mehr darüber schreiben können. Aber mir ja egal. Den Durchschnittsleser wird wohl der Forscher mehr interessieren.


„Aufgrund unserer Verspätung verzögert sich die Weiterfahrt um weitere 7 Minuten“

Sat, 07 Jun 2008 00:26:16 +0000

„Aufgrund unserer Verspätung verzögert sich die Weiterfahrt um weitere 7 Minuten“ – dies war der Satz, den ich heute in der lieblichen Regionalbahn, die mich in Richtung Heimat fahren sollte, hören musste.

Vielleicht fange ich lieber mal am Anfang an: Hauptbahnhof. Ich bin etwas mehr als eine halbe Stunde zu früh da (das ist gut so, da kriegt man für gewöhnlich wenigstens noch einen gescheiten Platz im Zug), und ganz verwirrt, denn der Zug, der eigentlich eine Stunde früher als meiner losfahren sollte, ist noch da. Von irgendwoher schallt das Wort „Lokschaden“. Ja mei, denk ich mir, gehe ich vielleicht gleich in den Zug, wenn er schon da ist, er wird ja vermutlich bald losfahren. Als ich mich diesem Zug dann näherte, sah ich allerdings, dass dieser bereits total überfüllt war – bis zu den Türen quoll Menschenmasse heraus, und ein Bahnangestellter war darum bemüht, diese überquellende Masse doch noch irgendwie in den Zug zu quetschen, damit dieser nun endlich losfahren kann. Ich entschied mich also, lieber zu warten – mein Zug würde schon pünktlich fahren – zwei Lokschäden am selben Tag, auf der selben Linie – zu unwahrscheinlich.

Nun, mein Zug kam schließlich auch an – allerdings musste wegen der Verspätung von dessen Vorgänger ein anderer Zug auf dem Gleis halten, wo mein Zug hätte halten sollen, und somit musste ich zum Bahnsteig gegenüber. Im entgegen meiner Gewohnheit wohltemperierten und sogar nur mäßig nach Urin und Alkohol riechenden Zug angekommen setzte ich mich auf einen Sitz im oberen Stockwerk – es ist einer dieser Doppeldecker, ich nenne solche Züge gerne Sardinenbüchsen – und stellte mein Gepäck auf den sich neben mir befindenden Sitz, denn auf sinnvolle Gepäckablagen, die nicht nur dem Zweck dienen, sich beim Aufstehen Kopfverletzungen zuzuziehen, muss man in diesen Zügen leider verzichten.

Bis zur fahrplanmäßigen Abfahrtszeit füllte sich dieser Zug, allerdings weniger als sonst, vermutlich ist doch ein Großteil der Personen bereits mit dem verspäteten vorherigen Zug gefahren. Warum auch nicht? Wenn man keine Klaustrophobie hat, und mit wenig Sauerstoff auskommt, spricht wohl nichts dagegen. Als der Zeitpunkt der geplanten Abfahrt dann erreicht war, eine Durchsage – irgendwas von Wegen voraussichtlich 5 Minuten verspätung und „Lokschaden“. Sehr erstaunlich. Ein Zufall? Keine Ahnung. Nun, die Verspätung war dann tatsächlich nicht mehr als 5 Minuten – nicht Besorgniserregend, Verspätungen dieser Größenordnung sind bei der Bahn ja normal.

Und so fuhren wir also nichtsahnend los, einige Bahnhöfe lang. Dann plötzlich fuhr der Zug nicht weiter. Unruhe machte sich breit. Was ist das Problem? Eine Durchsage erschallte… „Aufgrund unserer Verspätung verzögert sich die Weiterfahrt um weitere 7 Minuten“. Nun, ich will jetzt mal die allgemeine Reaktion der Passagiere des Zuges auf diese Durchsage nicht weiter kommentieren. Was war der Grund? Der Grund ist für einen normalsterblichen Menschen nicht nachvollziehbar, für Bahnangestellte aber scheinbar nichts ungewöhnliches: Ein ICE musste uns überholen. Und der braucht dazu freilich seine 7 Minuten. Schon klar.

Was solls – dann sind es eben… 12 (?) Minuten Verspätung? Nun, nein, es waren zu dem Zeitpunkt nur 10 – immernoch nichts besorgniserregendes für mich – auch mit solchen Verspätungen habe ich meinen darauffolgenden Anschlusszug meist noch erreicht – ich spekulierte dabei darauf, dass der Zug auf einem Zwischenbahnhof 5 Minuten Aufenthalt hat, die er normalerweise bei Verspätungen auslässt. Dies war diesmal leider nicht der Fall, zumindest habe ich davon nichts mitbekommen. Der Aufenthalt war zumindest sehr lange, ob er die vollen 5 Minuten dauerte, weiß ich nicht.

Nun, die Stimmung war freilich bereits gedämpft – aber die Bahn muss natürlich noch einen draufsetzen, nein, es reicht nicht, dass ein ICE uns überholt, es muss noch ein zweiter kommen. Jegliches Verständnis, um das die Bahn einen ja gerne bittet, war damit natürlich im Keim erstickt, und die arme Schaffnerin musste viele dieser lieblichen kleinen Kärtchen mit den Bahn-Beschwerdeadressen verteilen – ich beschwere mich nicht mehr bei der Bahn – ich verlange meistens Geld das mir ggf. wegen Verspätungen zusteht, selbst wenn es nur kleinbeträge sind – aber beschweren nützt nichts. Entweder man bleibt so lange in der Warteschlange stecken, bis die Gebührenpflichtige (!!!) Beschwerdehotline den Rabatt, den man ggf. bekommt, wieder ausgeglichen hat, oder man bekommt dämliche Standard-Antworten per E-Mail. Aber gut, die anderen Leute dürfen das ja gerne tun.

Irgendwann im Laufe der Fahrt erfuhren wir dann, dass die Verspätung nun noch 14 Minuten beträgt (wie auch immer das zustande kam), und dass wir rechtzeitig erführen, ob wir unsere Anschlusszüge noch erreichen.

Ca. eine halbe Stunde vor der regulären Ankunftszeit entschloss ich mich dann allerdings, nicht mehr warten zu wollen – meine Intuition sagte mir, dass ich den Anschlusszug nicht mehr erreichen werde, und dementsprechend rief ich meine Mutter an, sie solle mich doch bitte an dem Zwischenbahnhof abholen, da ich keine Lust hatte, dort eine Stunde lang zu warten – dies tat sie dann auch. Ca. Fünf Minuten vor der letztendlichen Ankunft dann die Durchsage „der Anschlusszug konnte leider nicht warten, wir bitten um Ihr Verständnis“ – nein, für so viel gebündelte Inkompetenz habe ich kein Verständnis mehr. Ich bin ja sehr geduldig, aber wenn man zu spät losfährt, zweimal auf einen ICE wartet, dann an einem Zwischenbahnhof trotzdem einen längeren Aufenthalt hat, und dann fünf Minuten vor der Ankunft erst definitiv erfährt, dass man den Anschlusszug nicht erreicht, sodass man auch ja niemanden mehr anrufen kann, der einen abholt (wenn man nicht wie ich schon erfahren mit dieser Strecke ist), fehlt mir persönlich jegliche Basis dafür, dieses Verhalten zu entschuldigen.

Und ich hatte Glück – ich hatte keinen wichtigen Termin (abgesehen von Freizeit, die ich in letzter Zeit so bitternötig habe). Andere Leute mussten wirklich warten.


Ein paar Wege, den PC zum Piepen zu bringen

Mon, 02 Jun 2008 01:43:35 +0000

leich vorweg: Es gibt keine Garantie, dass das unten Geschriebene functioniert (eher im Gegenteil). Ausprobieren auf eigene Gefahr. Alle Quellcodes unterliegen mal vorsichtshalber der GPL, sofern sie von mir stammen, wobei ich nicht glaube, dass irgendjemand sie verwenden will. So, aber jetzt zur Sache:

Wer kennt ihn nicht, den guten alten BEEP-Befehl von QuickBASIC. Es ist doch schön, seinen Computer piepen lassen zu können. Allgemein üben grelle Sinustöne einen seltsamen Reiz auf einige Personen aus – eigentlich nerven sie, aber wenn man sie selber erzeugt, dann ist das irgendwie anders.

Nun, zumindest unter Linux gibt es einige grazile Wege, dies zu tun. Der Weg, der noch den meisten Linux-Usern bekannt sein dürfte, ist das allseits beliebte

yes | aplay

Es mag einfach sein, aber ist natürlich ist es viel schöner, wenn man auch die Frequenz beeinflussen kann. Hier bieten sich zum Beispiel Dinge wie

yes " " | aplay
yes "  " | aplay
yes "   " | aplay

etc., aber hier hat man eben das Problem, dass man die Frequenz nicht so gut steuern kann. Freilich könnte man es wohl mit etwas mehr Kreativität approximativ machen, allerdings sind dennoch die Einschränkungen der Bash diesbezüglich zu stark, um es wirklich „schön“ hinzubekommen. Abhilfe kann hier freilich ein kleines Lisp-Programm schaffen. Schaut euch zum Beispiel mal Folgendes an (leider aus Formatierungstechnischen Gründen hässlich strukturiert):

(defvar *default-tone-time* 1000)
(defvar *aplay* (sb-ext:run-program "/usr/bin/aplay" (list "-r" "44100" "-f" "U16_LE" "-c2")
:input :stream :output :stream :error :stream :wait nil))
(defun ton (n &optional (milliseconds *default-tone-time*))
(loop for q from 0 below (* 44100 (/ milliseconds 1000))
do (let ((right (round (* (1+ n) (sin (* q
(expt 2 (/ n 12)) (/ 440 44100))))))
(left (round (* (1+ n) (sin (* q (expt 2 (/  n 12)) (/ 440 44100)))))))
(write-byte (ldb (byte 8 8) right) (sb-ext:process-input *aplay*))
(write-byte (ldb (byte 8 0) right) (sb-ext:process-input *aplay*))
(write-byte (ldb (byte 8 8) left) (sb-ext:process-input *aplay*))
(write-byte (ldb (byte 8 0) left) (sb-ext:process-input *aplay*)))))
(defun playtons (&rest args) (dolist (ton args) (if (typep ton 'cons)
(ton (car ton) (cdr ton)) (ton ton))))
(playtons '(3 . 500) '(5 . 500) 6 8 10 11 13 15)

Dieses Codebeispiel funktioniert wohl leider so hauptsächlich unter SBCL, ist aber schöner. Die Function „playtons“ ist ziemlich versatil, zumindest im Vergleich zu dem yes-Geblubber von vorhin. Common Lisp ist natürlich nicht jedermanns Sache. Man kriegt das selbe auch mit Perl hin. Da dann wieder direkt in der Bash (leider ist SBCL da etwas störrischer, und ich war zu faul, das Ding so umzuschreiben, dass es direkt per Commandline geht), und sogar mit Stereosound…

perl -e 'for ($n=0; $n < 12; $n++) { for ($t=0;$t<44100;$t++) {
$s=int(($n+1)*sin($t*(2 ** ($n/12))*440/44100)); print pack "s", $s;
$s=int(($n+1)*sin($t*(2 ** ((12-$n)/12))*440/44100)); print pack "s",
$s; }}' | aplay -r 44100 -f U16_LE -c2

Nunja, alles schön und gut, aber… Das sind dann doch alles irgendwie recht Shell-Fremde Methoden. Und Linux ist ja bekannt dafür, dass jede noch so komplizierte aufgabe ihren „Oneliner“ hat. Vielleicht kann man ja doch irgendwie etwas „typischeres“ benutzen, um binäre Daten zu erzeugen. Wer uudecode hat, weiß sicherlich schon die Lösung: Zumindest theoretisch ist es möglich, base64-encodede Daten mit der Bash zu erzeugen – klar, die Bash ist turingmächtig, verfügt über die elementaren Substring-Mechanismen, und base64 verwendet nur lesbare Zeichen. Ein wenig zu faul, einen entsprechenden Frequenzerzeuger in der Bash zu implementieren, war ich dann aber doch. Ein Ton muss reichen, den hab ich aus der Ausgabe des Perlscripts genommen – achja, habs btw auch gegzipt, weil… naja… es war sonst etwas groß…

uudecode <<'EOF' |
begin-base64 644 -
H4sICNItQ0gAA2JlZXBzAO3X0Y7bOBAEwNz/f/QdgoWR3Ytly5Ko5gyriH63
JJLT/vULAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgr3+G
xLpjjfp6s+Tff7vl1zKZ37knTO8kcQq3ck7616+dn/IzWCu0Hiu9f37mWulz
XztZ6acfnXRfkqPpL386nKLju7N3rD0r/ZXuaHdzmbVHsU96kq03JfP3UYXc
I/eE6V0oTvBW8r9A/uSz3ZmeuaNDXdfvh3nk74l0aq/025tngsi16XLDjeEk
1E26C+qaV0m/6c7N8FMrtK21V7oP1pyw+TtlheyT/pXHku5L0v30H5f+5f1y
3+5Mz9zRsequ59+0j/w9czbrSr/5HtOna7JTrzO7uW7SXVDXfN+uVk2Wpsa2
dB/M9c38vSCPrDdF0n1JKvTNjPzpmDHpHbcv6Xmra65o39frLn9H/Y51ZKW/
mullMq5zb+75fy4Vkj8dnbpm+on75Lz8zNbyeq703jmX99Jnf52YQJ8m3Zfk
jq5ZT/5kOHFnkp/Luma9NUNbq+26e4q7pSeTybf6ZKt2b173hOldJU7ks8za
o2Rf0jN3ZKgrvXd+DZY+97Uy10q/jdFJ9yXZm7tvrbz86XBqrtutfcIr6a+T
bntZM3cp6/VKT7V1pmb+DqqWcdJP9pX0jhSneevEpX+JHN+d6Zk7MlbtdX4P
zCt/Z9ydPtJvct5pIukJ3J2dXzfpPqhvZtvYzKll1ea1pnQfrDNx8/fISnkt
/evOJ92XpONNcI30U/RIZnemZ+7oUNfXN+wpf98cifVY6S/RbxJVTnrK/Ul3
dm/d5E/H6l0z/YbmzYw3meZm/V7pPnhv18zfBfLI2hMl3Zdk1q6Zlz8dsyS9
0z5PeubqmiusY1+vu8wdxRXSk8YUMwn73puf/EeXKsmfjA5dM/2UPXNMflZr
ff2l987n+Uz67PeOaXQ06b4kI/tmbfnT4aQdTX4+65o1zN7c6pm1R1nvV3pK
mYIrTrNK9+aYp0vvMHFCtzJzl5KtfO3M9LwdHavuyuyZ++TvgNkzr/SbGZ10
X5JXmeUGu1/+ZDgp43Zu7VjfV/przNr6EtJtiTPSE67vBM3fO9VznfSTPE+6
L4nTXee0rJBrdmd65o4MdR3/7jXk74870nOl32qNySKJqdud3V436T6oa34i
/Ubvzdy0sFVXugvO3TXz98bK+Sn9a65Pui9Jl5vheuknqpv0zszP3JGxqq6v
L9hZ/u7ZG/4v/UX6T6UKSU+35+nOjq2b/OlYrW+m30idjKfBcUy6D47tmvmz
L4+YLt+T7ksyU9ecS/50OJlHk565+mZX579eZ/feUdbVKz11TDTTr9edue8J
0ztGnLatzNqj5H32yc9m7W+9ld4/73Nc+tz3y33STzo66b4kV3fNPvKnw+k6
mvy81jfnXVWb3Pxm7lK8l55YpuEqE6zSnTn+CdO7TZzUrczao+R7nu/O9Mwd
Heq6Z49k5O+DGVNnpd/U/ZNCspn5NrtP/nQ4IWN3cN2Q/gLVWuBIVZuV9f+V
nna9Jmn+rumUc9K//nXSfUlWPeXVT06nXL870zN3dKy6a/93ril/n4zIGtJv
udaUkTunbWd2ed2ku6CueW3r6pQ5aWXk++B8fTN/X8jj3kz/gnFJ9yWp3DfH
Sj9draR34s+k5+3oUMXfX6+7/F20FevdSn+htabUTElPtPfpzC6tnfzpWKFr
pt9Evdx1Y2l01qcrvXfG5I/02ReTZivpviTJrjmv/MlwEs8kP391zR5rVCvr
afw9xSjpCWTCmXg97s3PnzC9e8TJe5aZu5S8z7b8PNYE15XeO9u5Rvrc90iH
f/zzJd2X5GzX7Ct/Opymo8nPbl1zHukvNqLVzWnmLmW9XunpZTrm76ZZc797
nzC988Sp3crMXWrtvN+d6Zk7MlbtNW5v5OXvhllST/qN5aeGjE/Vm20sJ6Ju
0n1Q36zT0O5OD10aFt+l+2D9yZq/XzrmmPSv3p90X5KVTvxn0r+2d8buzvTM
HR3qev1ta8vfK1dmvZV+43Unzkq5f+J1Z1fXTboL6prPpN/aHJmHhmb9XOk+
OEfXzN8R8sga0yPdl6Ra17xP/nTMnvQO3E565o6ONfN6/fW6y99L38Mn0l9r
zWllQu5JX/ndICudpCpdM/3k9XOt/AzX7vpI753r8lz67K8Zk+dd0n1JEn2z
hvzpcAKPJj+Hdc3a7m5ofVx/R1l3rfQ0Mu1MuZr35rmnS+8kcRK3MmuPkvf5
W34Ga4bW75XeOz9zvfTZr5u89BsYnXRfkiMZdVPNI38ynKDzO7RnrD0r/ZXu
andzmbVH8V56kq03KfP3UZWMl33C9E4Up/hZ8r9Afuaz3ZmeuSNDXdfvh7nk
74lkaq/025trgsh16XbLXc8pqJt0H9Q1r5B+02NS0wpta+2V7oI1p2z+Plkh
+6R/5fGk+5J0vgHOSf/6frlvd6Zn7shYtdff37SP/B1zNutKv/k+06djslOv
Ozu5btJ9UN/cblarJ0dT47V0H8x0zfydII+sOUXSfUlm75o5+dMxY9K7bl/S
M1ffXM3+r9dZ/n76HevoSn85k8tUXOPO3PsfXWZP/nR06prpp+2Vc/IzW9Pr
u9J753jeS5/7dWIKfZp0X5I7umZN+dPh1B1Nfi7rmvXWLI2truvuKBLSk8nU
W32yVbozr3vC9K4SJ3Irs/YoeZ/0zB0d6srunbHS575W5lvpNzIy6b4ke3P3
rZWXPx1OznW7tVfYkv4y6baXN3OXsl6v9FRbY2Lm76CKGSP9VF9J70hxmrdO
W/qXyPHdmZ65o2PVXee//9zy98ad6SX9NuecJjLDBO7M7q+bdBfUNbNtbObU
snr7Wku6D9aZuPl7ZLVsS/+y80n3Jel4G1wj/RQ9ktmZ6Xk7OtT19Q37yt85
n8Z6rPSX6DmNqiY95X6mM7u3dvKnY+WumX5D82bWm6xvc/sPOPwZCSBiBQA=
====
end
EOF
gunzip -c - | aplay -r 44100 -f U16_LE -c2

Aber schaut euch lieber mal das nächste Beispiel an. Dann hört ihr mich tippen, wie ich das hier schreibe (leider etwas länglich und in sehr schlechter qualität).

uudecode << 'EOF' |
begin-base64 644 -
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
LZ25v/DdBJOqGuPcrqX9nsPBXglss965vbFQlfHNg1ub76P3sdaw6Qn7kYfj
MWwwRyQV2tgF0ULNNJwcxZ7NYftQ+0usm7D1R47+Y4m34QsfeG/C7Xyn+Ba3
N9zq6OY2OU1MNrPyRS9xBQwnI6uWPE0r5aXSb7LamTV7lFMemrVFXmPaBUyZ
SO+YWj1za3azSSi7VMtU25JAllB1GZmRAHclukgTVSyBs2TZaZqDucxWaF6t
F4IjJS7VbhYWMxZ5J1rzV1onlmk+/C9Edc5eDBeRFg0x07Sk4t8E4RpUK0NB
KMKT//r2MXqn55LCisrE5cg2An/Zp5QlzR4XYH9FGwHlQfMjDR9rdpCY6lM+
NcwDyfMQpWBTRFQkbQlY84pn98LP+EP73J2LSo8U7lSIdZNMn65zPKL6g3ed
r47/HotB6h1wlY4a4v4J9XTZtMnLM34vL+ZADB0cnlDQo4Kt+8PxNBohvbLf
g9Nd7yyFoVO7nc10GON6vdvuNjvT98ej5flwvjw+OjfKvR6DTNOM8Xf3erg8
ngYzhjZqOFkMLJNj/qbtRvvjPNiPxQ0Pl77dbVar1abtT0ez32y707FrVh83
ejRD+tE8GXk4HO0n6dRwvlyGZrXa6cPl8eFyPnS62W5Gq8Q6PB76drNaN93x
8nCxX6s7nw5DZ1r3SbrddmP9O4P1Y7T7WOGY8vHp4Wjcl+92u7GcUYBjhqv7
9fjgHDsfHh/GQtR+u9nunH3kfCxHI2g0wpx/pbewwrfy9sFx0QvDfQzP2mHB
g8p4w8p/hiUaDSOiYKfFL9aFT/igry+GTJOXZviSn//eisF91BXd2Iy7+ClF
6UOHXZcOpIZFVgXmGFhnZBJQ8CHH0KgNMg5T/8MrAfH7jaS5xY4KvqDISqCD
gwoVjxsl+SAQjE7Um8FjyWjclZOrdPw6jo4fOMInbkNPydcJ8KKupkSnSxOv
nApjT5p+kfMcUXBiSHJaTHHBAQsSEm8s2T3L5F6fwXubJU1jI3idMn4MmO2E
V4aAolJPA1/BmWfC6adFjlttG5yGQxL8QkyQcpXKjVzGfzT5BYIzBSKA9cz5
seJG5z0WmVukc3TmLo2iV2MexIQsO+WJVdAlyiRTlZBAuYtjfGY+kDOdIbko
EYk1mCEzmSiisucjfoJf+btlKjWpSbkIopGpIJVcGlhcIJQ5rqlILLlQavzX
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
====
EOF
gunzip -c - | aplay

Ja mei. Ich hoff, die wave gibt keine ungewollten Informationen über mich preis (ist jetzt aber keine Herausforderung für echte Hacker). Falls ich irgendwas mit den Kommandos, insb. uudecode oder den „Here Documents“ gemacht habe, was nicht üblich ist, oder nicht „überall“ functioniert, tut es mir leid. Ich verwende beides äußerst selten (und „praktisch“ kenne ich es nur von dem Programm shar), und mein Wissen übersteigt ein paar Manpage-Überflieger nicht.

Ansonsten hat man wohl gesehen, bin ich nur ein kleines Spielkind („Script Kiddie“), zumindest dieser Blogpost sollte also nicht zu ernst genommen werden.