• Globaldokumente in Libreoffice zusammenführen

    Ich hatte gerade einer armen Seele zu helfen, die drei Bücher mit Microsoft Word für Windows geschrieben hat und dazu Word-Zentraldokumente verwendet hat, vor allem wohl, weil vor 20 Jahren – als diese Projekte starteten – Word nicht mit mehreren hundert Seiten auf einmal umgehen konnte. Unbenommen, dass mensch mit Office-Software keine richtige Arbeit machen sollte: da die arme Seele auf Linux migrierte, musste der ganze Kram auf Libreoffice. Für eine Migration auf vernünftige Technologien (TeX, ReStructuredText, Docbook oder was auch immer) reichten weder meine Geduld noch der Erlösungswille der armen Seele.

    Erste Ernüchterung: Word-Zentraldokumente (wie auch Libreoffice-Globaldokumente) speichern ihre Pfade absolut: sie können also ohne Tricks nicht bewegt werden, insbesondere nicht von einem Windows-Dateisystem in ein Linux-Dateisystem. Wie so oft stellt sich die Frage, warum das mal ein wie ein gutes Design ausgesehen haben mag.

    Nach einem kurzen Blick auf das Arbeiten mit Globaldokumenten habe ich beschlossen, dass Rechner jetzt wirklich groß genug sind, um 500-seitige Dokumente im Speicher zu halten und dass der ganze Zentral- und Globaldokumentenzauber mit den begleitenden Komplikationen nicht mehr sein muss.

    Nur: Wie kopiert mensch 20, 30 solche Dateien zusammen? Was ich dazu in der verbleibenden Libreoffice-Doku (das Wiki, das das jetzt sein soll, überzeugt mich übrigens nicht) und dem weiteren Netz gefunden habe, fand ich eher… unbefriedigend – Erinnerungen an Windows-Foren („um den Sound-Treiber zu reparieren, musst du den CD-Treiber deinstallieren. Hat bei mir funktioniert“) werden da dann und wann schon wach. Deshalb dachte ich mir, es könnte nützlich sein, wenn ich auch ein paar Rezepte beitrage, auch wenn ich – Disclaimer – selbst keine Office-Software verwende und in dem Sinn selbst höchstens einäugig bin.

    Wie machte ich aus einem Satz von ODTs oder DOCs ein einziges ODT?

    1. Ein Verzeichnis anlegen und alle Filialdateien reinkopieren.

    2. Die Dateien so benennen, dass eine einfache Sortierung sie in die richtige Reihenfolge bringt (ich habe einfach 000_, 001_ usf vor die Namen gesezt).

    3. Libreoffice starten, Neu → Globaldokument.

    4. F5 drücken, um in den Navigator zu kommen, dort aufs Einfügen-Icon klicken; das poppt eine Auwahlbox auf.

    5. In dieser Auswahlbox in das Verzeichnis mit den Filialdateien gehen und diese in die Reihenfolge sortieren lassen, in der sie nachher im Dokument erscheinen sollen.

    6. Alle Dateien im Verzeichnis auswählen, z.B. durch Control-A oder per Shift-Klick, dann den Import bestätigen.

    7. Datei → Exportieren, dabei ODT als Zielformat auswählen; das ist der erste Schritt, um von der Einbettung im Globaldokument wegzukommen. Ich nenne diese Datei jetzt mal joined.odt.

    8. Das so erzeugte ODT ist leider überall schreibgeschützt, und ich habe keinen Weg gefunden, diesen Schreibschutz per Klicken wegzuzaubern, bevor ich die Geduld mit Doku, Menüs und vor allem Foren verloren habe und mit epubedit beigegangen bin (vgl. unten). Mit dem kleinen Skript dort unten könnt ihr Folgendes in einer Shell laufen lassen:

      epubedit joined.odt
      sed -ie 's/text:protected="[^"]*"//g' content.xml
      

      (ihr könnt natürlich auch mit einem Editor oder gar mit dem hervorragenden xmlstarlet die ganzen text:protected-Attribute löschen)[1]. Geht dann aus der Shell vom epubedit wieder raus; das schreibt joined.odt neu.

    9. Das neue joined.odt in libreoffice öffnen.

    10. Bearbeiten → Verknüpfungen, wieder alle Auswählen (^A), und dann den Lösen-Knopf drücken.

    Das Ergebnis dieser Prozedur ist ein zusammenhängendes „Dokument“ (wenn mensch keine großen Ansprüche an Dokumente hat).

    Zumindest in meinem Fall fing damit die Arbeit allerdings erst an, weil jedes Filialdokument eigene und verrückte Absatzvorlagen hatte. Ich schreibe gleich, wie ich das aufgeräumt habe, aber zunächst müsen wir geschwind über das erwähnte epubedit reden.

    epubedit

    Was Open Document-Dateien tatsächlich etwas angenehmer im Umgang macht als einige andere Office-Dateien, die ich hier erwähnen könnte, ist, dass sie eigentlich nur zip-Archive sind, in denen von für sich nicht unvernünftigen Standards (z.B. XML und CSS) beschriebene Textdateien leben. Das hat mir beispielsweise den obigen Trick mit der Ersetzung der text:protected-Attribute erlaubt.

    Diese Architektur haben sie mit Ebooks im epub-Format gemein, und um an denen geschwind mal kleine Korrekturen vorzunehmen, habe ich mir vor Jahren ein kleines Shell-Skript geschrieben:

    #!/bin/bash
    
    if [ $# -ne 1 ]; then
            echo "Usage: $0 <epub> -- unpack an epub, open a shell, pack it again."
            exit 0
    fi
    
    workdir=$(mktemp -d /tmp/workXXXXXX)
    
    cleanup() {
            rm -rf $workdir
    }
    trap cleanup EXIT
    if [ ! -f  "$1".bak ]; then
            cp -a "$1" "$1".bak
    fi
    
    unzip "$1" -d $workdir
    (cd $workdir; bash)
    fullpath=$(pwd)/"$1"
    
    cd $workdir
    zip -r "$fullpath" *
    

    Nehmt das und legt es als – sagen wir – epubedit irgendwo in euren Pfad und macht es ausführbar. Ihr könnt dann für irgendein epub oder odt epubedit datei.odt sagen und landet in einer Shell, die im Wurzelverzeichnis des jeweiligen ZIP-Archivs läuft. Dort könnt ihr nach Herzenslust editieren – bei ODTs ist der Inhalt in content.xml –, und wenn ihr fertig seid, beendet ihr die Shell und habt ein entsprechend verändertes ODT oder epub.

    Weil dabei gerne mal was schief geht, legt das Skript ein Backup der Originaldatei an (es sei denn, es gäbe schon so ein Backup; die Erfahrung zeigt, dass mensch in der Regel lieber das ursprüngliche Backup behalten will…).

    Stilfragen

    Nun ist das vereinte Dokument zwar immerhin nur noch eine einzige Datei, die zudem – wow! – auch bewegt werden kann. Zumindest mit der Genese in meinem Fall, also den vielen Einzel-Word-Dateien, ist sie trotzdem kaum brauchbar, weil Word einige hundert Formatvorlagen erzeugt hat, meist mit so nützlichen Namen wie Formatvorlage_20_16_20_pt_20_Block_20_Erste_20_Zeile_3a__20__20_05_20_cm_20_Zchn oder Fußnotentext1_20_Zchn oder auch apple-converted-space. Dieses Problem ist schlimm, und ich habe schließlich eingesehen, dass es ohne ein kleines Programm und einige Handarbeit nicht lösbar ist.

    Das Programm hat am Anfang nur Stilnamen aus dem Dokument rausgeprökelt und auf die Standardausgabe gelegt. Inzwischen ist das zu einer Basis für eine Abbildungsdatei geworden, und auch für die Abbildung als solche haben reguläre Ausdrücke noch gereicht. Wegen der Abhängigkeiten der Stile untereinander blieb jedoch immer noch jede Menge Mist in der Liste der verwendeten Stile zurück. Deshalb musste ich schließlich doch noch ordentliche XML-Verarbeitung anwerfen, um die styles.xml umzufummeln. Das Ergebnis ist das Programm defuse-libreoffice-style.py. Wenn ihr dieses Programm für die Dauer der Verarbeitung in euer Homeverzeichnis legt, würdet ihr die Stile wie folgt vereinheitlichen:

    1. epubedit joined.odt; alles Weitere passiert in der Shell, die das öffnet.

    2. python3 ~/defuse_libreoffice-style.py > ~/style-map.txt – wenn ihr das Skript nicht in eurem Home lagert, müsst ihr diesen Pfad anpassen. Und ich lege die Stil-Abbildung ins Home und nicht ins aktuelle Verzeichnis, damit die Abbildung (die recht viel Arbeit ist) nicht gleich verloren ist, wenn ihr die Shell verlasst. Ich jedenfalls habe besonders beim ersten Mal ein paar Anläufe gebraucht, bis das Mapping gut gepasst hat.

    3. Editiert die Datei ~/style-map.txt mit einem Texteditor (also auf keinen Fall mit libreoffice selbst). Da drin stehen Zeilen wie:

      Footnote_20_Symbol -> Footnote_20_Symbol
      

      – in meinem Fall ungefähr 200 davon. Die Aufgabe ist jetzt, die rechten Seiten dieser Zeilen auf eine Handvoll Stile runterzubringen (Textkörper, Überschrift_1, Überschrift_2, Zitat, Fußnotenzeichen und Fußnote waren mein Minimum); die Zeile oben habe ich zum Beispiel zu:

      Footnote_20_Symbol -> Fußnotenzeichen
      

      gemacht. Es ist nicht immer einfach, herauszukriegen, was wohl eine Vorlage mal tun sollte; meist hat Word aber doch einen gewissen Hinweis darauf im Namen hinterlassen.

    4. Wenn die Abbildung fertig ist, lasst das Python-Skript nochmal laufen; wenn es nämlich ein Argument bekommt, interpretiert es das als Abbildung und passt sowohl content.xml als auch style.xml entsprechend an:

      python3 ~/defuse_libreoffice-style.py ~/style-map.txt
      
    5. Um zu sehen, welche Stile noch übrig sind, könnt ihr das Skript ein weiteres Mal ohne Argumente laufen lassen; das gibt dann die noch vorhandenen Stile ins Terminal aus:

      python3 ~/defuse_libreoffice-style.py
      

      Wenn noch was dabei ist, das nicht übrig bleiben soll, könnt ihr style-map.txt anpassen und Schritt (4) nochmal laufen lassen (oder nochmal vom Backup des ODT anfangen).

    6. Verlasst zum Abschluss die Shell vom epubedit und guckt im libreoffice nach, ob alles geklappt hat. Libreoffice erzählt wahrscheinlich, dass das Dokument beschädigt sei (aber nicht genauer, was eigentlich; hier rächt sich, dass ich die Open Document-Standards nicht gelesen und stattdessen einfach munter drauflosgehackt habe). Das, was es zur Reparatur unternimmt, hat aber bei mir immer gut funktioniert – insofern: Nur Mut.

    Und für den Fall, dass jemand in den Python-Code reinguckt: Nein, auch wenn der StyleSanitiser immerhin ordentlich XML bearbeitet (im Gegensatz zu dem RE-Hacks von oben), ist das immer noch nicht Open Document-allgemein, denn ich habe die spezifische Wahl des text:-Präfix von Libreoffice darin hart kodiert, was sich für „richtige“ Software nicht gehören würde. Aber SAX mit richtigen Namespaces macht keinen Spaß, und ich rechne erstmal nicht damit, dass dieser Code je mit ODTs laufen wird, die nicht von Libreoffice kommen.

    Und die Stichworte?

    Die Bücher hatten auch je ein Stichwortverzeichnis. Bei einem Dokument hat das gut funktioniert, bei den anderen standen im Verzeichnis ein paar ordentliche Begriffe, ein paar Begriffe mit sinnlosen typografischen Anführungszeichen und ganz viele Einträge für das leere Wort. Ich habe keine Ahnung, wie es dazu kam.

    Bei der Reparatur hilft erneut der Umstand, dass ODT im Kern ein nicht ganz unvernünftiges XML ist. Dabei sieht das Markup für ein Stichwort beispielsweise so aus:

    Karl Valentin …
  • „Sackgasse Aufrüstung“ mit Jürgen Wagner

    Modern anmutendes Plakat: "Gold gab ich zur Wehr, Eisen nahm ich zur Ehr"

    Dass auch avantgardistisch orientierte Menschen im ersten Weltkrieg die große Knochenmühle mit ihrer Kreativität unterstützten, zeigt, so finde ich, dieses im Technischen Museum Wien ausgestellte zeitgenössische Plakat. Aber dazu später.

    Gestern war Jürgen Wagner von der großartigen Informationsstelle Militarisierung (IMI) in Heidelberg und hat über „Krieg gegen die Ukraine – Russlands Krieg, die westliche Rolle und die Sackgasse Aufrüstung“ referiert (Ankündigung). In einer Zeit, in der praktisch keine öffentliche Äußerung ohne Schaum vorm Mund auskommt, war der im Groben ruhige Verlauf der Veranstaltung eine sehr willkommene Abwechslng. Aber gut, es konnten auch die meisten der (praktisch durchweg grauhaarigen) Anwesenden mit gutem Gewissen sagen: Wir waren gegen die Angriffskriege gegen Serbien, Afghanistan, den Irak, Libyen oder Efrîn auf der Straße – klar sind wir auch gegen den Angriff auf die Ukraine auf der Straße. Wer so viel Routine hat bei der Empörung gegen das staatliche Töten, hat vielleicht wirklich bessere Voraussetzungen, allzu überschäumender Erregung zu entgehen.

    Ich nehme ich an, dass Jürgens Online-Vortrag vom 28.3.2022 ziemlich genau dem entspricht, was er gestern erzählt hat, und so empfehle ich das jetzt mal ungesehen. Lohnend ist das unter anderem, weil Jürgen recht überzeugend eines der hässlicheren Narrative der letzten paar Wochen zerlegt: Dass es nämlich eine Appeasement-Politik gegeben habe und diese gescheitert sei, weshalb nun die Aufrüstung (und in der Konsequenz das Niederringen und -werfen des Feindes) alternativlos sei.

    Es hat seit 1990 keine „Appeasement“-Politik gegeben.

    Beide Teile dieses Narrativs sind Quatsch. Es hat nämlich schon mal keine Appeasement-Politik gegeben. Mal ganz davon abgesehen, dass eine Diffamierung von Entspannungs- und Kompromisspolitik als „Appeasement“ (und damit des Feindes als „Hitler“) an sich schon stark nach übler Demagogie schmeckt: „Der Westen“ hat seit der Niederlage der Sowjetunion konsequent die berühmten „roten Linien“ seiner (nicht nur russischen) Feinde überschritten und hat entsprechende Signale von diesen nonchalant ignoriert. Wer nicht Video gucken will, findet auch auf der Ukraine-Seite der IMI viel Material zu diesem Thema.

    Diese Frage ist durchaus relevant, denn: Zur Abwechslung mal nicht blind die eigenen nationalen Interessen durchsetzen wäre durchaus ein Modell für eine antiapokalyptische Außenpolitik nach dem jüngsten Krieg in Europa, gerade auch im Hinblick auf ein Einbremsen der zahlreichen vergleichbaren Gemetzel im globalen Süden.

    Was im Übrigen vom Appeasement-Narrativ zu halten ist, zeigt die Entwicklung der deutschen Kriegskasse:

    Seit der Eskalation um das Assoziationsabkommen der EU mit der Ukraine stieg das Budget der Bundeswehr von 32,5 Mrd. Euro (2014) auf 46,9 Mrd. (2021) steil an – und das sind nur die offiziellen Zahlen, hinter denen sich noch einmal etliche Milliarden versteckte Militärausgaben verbergen (siehe IMI-Standpunkt 2019/058).

    Jürgen Wagner am 28.2.

    An gleicher Stelle macht Jürgen auch einen weiteren Punkt aus dem Vortrag gestern, und zwar einen, der eigentlich allem Aufrüstungsgerede ohnehin sofort den Boden entziehen sollte:

    Die NATO-Militärausgaben sind also heute bereits rund 18mal höher als die Russlands. Augenscheinlich haben die militärischen Ausgabensteigerungen bislang in keiner Weise zu mehr Sicherheit geführt, wie derzeit leider offensichtlich wird.

    Wer also immer meint, jetzt als Folge der Empörung über Putins Töten die „eigenen“ Fähigkeiten zum Töten ausbauen zu sollen, dürfen oder müssen, sollte besser glaubhafte Geschichten liefern, wie genau der russische Angriff auf die Ukraine nicht stattgefunden hätte, wenn „wir“, sagen wir, 20-mal mehr oder 30-mal mehr oder 100-mal mehr als „die Russen“ fürs Töten ausgegeben hätten. Szenarien, die mehr als 100-mal mehr fürs Militär ausgeben wollen als Russland, gelten nicht, denn das würde wahrscheinlich selbst unsere Volkswirtschaften überlasten, von den verheerenden Wirkungen auf den Rest der Welt ganz zu schweigen.

    Allerdings dreht sich die Spirale logisch und moralisch fragwürdiger Erzählungen im patriotischen Taumel weiter und lässt die behaupteten Sachzwänge der Tötungsmittelspirale inzwischen hinter sich.

    Die Auszeichnungen für das aktuell krummste „Argument“ muss wohl an Dominic Johnson gehen, der gestern in der taz in einem Kommentar mit dem eigenartig selbstbezüglichen Titel „Putins verquere Logik“ ein Aufrüstungsargument versucht, das, nun, verquer ist:

    Vielleicht hofft der russische Präsident, dass im Westen die üblichen Mahner weiter davor warnen, Russland zu „provozieren“ – so als ob Russland nicht schon unprovoziert schlimm genug agiert. Zu befürchten ist aber eher, dass diese Entwicklung gewollt ist. Putin zeichnet gegenüber dem russischen Volk ein Zerrbild des Westens als aggressive Kraft, die die russische Zivilisation im Namen der europäischen Liberalität zerstören will. Mit seiner Gewalt will er jetzt den Westen dazu bringen, diesem Zerrbild zu entsprechen – damit Russland als Führungsnation eines aggressiven „Antiwestens“ auftreten kann. Die Ukraine ist dafür Putins Fußabtreter.

    Gerade deswegen aber ist der Kurs, die Nato zu stärken, richtig und alternativlos.

    Kurz: „Unsere Aufrüstung ist gut für Putin. Lasst uns mehr aufrüsten!“ Und ich dachte, „wir“ sollten „Putin stoppen“?

    Vielleicht missverstehe ich Johnson aber auch. Ich komme ja schon bei der konventionelleren Begeisterung für Waffen und HeldInnen nicht recht mit, etwa wenn heute morgen in der DLF-Presseschau der Vorwurf des Münchner Merkurs wiederholt wurde:

    Schwere Waffen [...] will der Kanzler den heldenhaft gegen Putins Vernichtungsarmee kämpfenden Ukrainern weiterhin nicht liefern.

    Woher kommt so eine Denke, so eine Schreibe bei Leuten, die doch vor gerade mal acht Jahren mit einer Haltung von „bedauernswerte, verwirrte Schlafwandler” dem Kriegsgejubel und -kreditieren von 1914 gedacht haben?

    Wenn wir uns heute empören dürfen, jeden Kompromiss und jede Verhandlung ablehnen, dann durften es die Kaiser, Zaren, Könige und Präsidenten damals auch. Nicht vergessen: Die Zaren, Könige und Präsidenten waren mit Terroristen im Bund, die die geliebte Thronfolgerin für erhebliche Teile der heutigen Ukraine feige und brutal ermordet haben – von den imperialen Politiken überall in der Welt, die uns von unserem verdienten Platz an der Sonne fernhalten, mal ganz zu schweigen.

    Die Kaiser wiederum haben furchtbare Massaker bei ihren eigenen imperialen Abenteuern angerichtet und hielten große Teile ihrer Bevölkerung in bitterer Armut, während sie selbst in Saus und Braus lebten. Klar, dass das die Könige, Präsidenten und Zaren nicht hinnehmen konnten.

    Bullshit? Jaklar. Aber warum hören dann so viele Menschen bis hinein in die Linkspartei – für die ja der Burgfrieden quasi der Gründungsmythos ist – den heutigen Varianten solcher Erzählungen zu?

  • Von Geburtstagen und /etc/papersize

    Ich bin ein stiller Fan des Debian-Pakets installation-birthday. Das hat mir vorhin eine Mail geschrieben:

    Date: Mon, 11 Apr 2022 11:04:11 +0200
    From: Anacron <root@hostname-withheld>
    To: root@hostname-withheld
    Subject: Anacron job 'cron.daily' on hostname-withheld
    
    /etc/cron.daily/installation-birthday:
    
                      0   0
                      |   |
                  ____|___|____
               0  |~ ~ ~ ~ ~ ~|   0
               |  |           |   |
            ___|__|___________|___|__
            |/\/\/\/\/\/\/\/\/\/\/\/|
        0   |       H a p p y       |   0
        |   |/\/\/\/\/\/\/\/\/\/\/\/|   |
       _|___|_______________________|___|__
      |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/|
      |                                   |
      |         B i r t h d a y! ! !      |
      | ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
      |___________________________________|
    
    
    Congratulations, your Debian system "hostname-withheld" was installed
    15 year(s) ago today!
    
    
    Best wishes,
    
    Your local system administrator
    

    Oh wow. So ein glatter Geburtstag ist doch eigentlich ein Grund zu feiern.

    Er ist aber auch ein Grund zum Nachdenken. Irgendwas kann da nicht stimmen. Bevor meine Haupt-Arbeitsmaschine (deren Filesystem so etwa aus dem Jahr 1996 stammt) ein Debian-System wurde, habe ich das selbst gestrickt und gebaut. Das habe ich mir 2007 ganz sicher nicht mehr angetan, denn die Zahl der auf einem durchschnittlichen Desktop-Linux verbauten Zeilen und irgendwie zusammenzufummelnden Komponenten war schon ein paar Jahre vorher deutlich jenseits meiner persönlichen Schmerzgrenze. Was aber ist dann 2007 passiert?

    Nun: wozu gibt es die Quellen? Im Fall von installation-birthday führt ein schneller Blick in die cron-Datei, die in der Mail erwähnt ist, auf ein Python-Skript, das das Installations-Datum berechnet als:

    for candidate in self.gen_installation_datetimes():
      # Use the oldest mtime we can find
      if dt is None or candidate < dt:
        self.log.debug("Preferring %s over %s", candidate, dt)
        dt = candidate
    

    gen_installation_datetime nun geht durch die Timestamps des Root-Filesystems, von /var/log/installer (gibts bei mir nicht), /var/log/bootstrap.log (auch nicht), /var/lib/vim (da kommt das Datum her und reflektiert so wohl eher irgendein Datum in der Entwicklung des Pakets, wahrscheinlich die Einführung formaler Addons), /root und /etc/machine-id (diese Datei ist von 2014, und eine kurze Recherche zeigt: Da habe ich zum ersten Mal versucht, mich mit systemd anzufreunden).

    So romatisch es ist, mein Systemalter anhand von vi-Hilfsdateien zu schätzen: Das will ich schon anders haben. Wie aber bekomme ich das Migrationsdatum raus?

    In meinem Dateisystem sind noch viele Dateien, die auf das selbstgestrickte Linux zurückgehen (und weitere, die von noch älteren Maschinen stammen, aber die beschränken sich auf /home), ich kann also nicht einfach nur die älteste Datei suchen. Es gibt aber eine interessante Häufung von Timestamps in /etc/ am 7. Juli 2005, darunter adduser.conf und papersize, die sehr nach etwas klingen, das Debian beim Überbügeln des Selbstbausystems angelegt haben könnte.

    Umgekehrt gibts davor eigentlich nichts, das irgendwie nach Debian aussieht; der Timestamp von /etc/papersize wird es dann wohl sein.

    Jetzt wollte ich es genauer wissen, und weil ich zu faul bin, aus der ls-Manpage oder sonstwoher rauszupopeln, wie ich ohne Code an die Uhrzeit der letzten Änderung herankomme, muss es ein Python-Einzeiler tun (ja, sowas gibts):

    $ python -c "import os, datetime; print(datetime.datetime.utcfromtimestamp(os.path.getmtime('papersize')))
    2005-07-07 12:48:37
    

    Also: am Donnerstag, 7.7.2005, so gegen drei am Nachmittag, habe ich offenbar meine Arbeitsmaschine auf Debian umgestelt. Uiuiui. Dass ich das Selbstbauen doch so lange durchgehalten habe, hatte ich gar nicht mehr in Erinnerung.

    Damit in Zukunft installation-birthday das richtige Datum nimmt, habe ich gerade noch:

    $ sudo touch -r /etc/papersize /var/log/installer
    

    gesagt. Damit gibt es ein /var/log/installer mit dem Timestamp von /etc/papersize, das jetzt installation-birthday das richtige Signal gibt:

    $ installation-birthday --verbosity 1
    I: Installation date: 2005-07-07
    

    Ich freue mich schon auf den 7.7. Das ist übrigens in diesem Jahr, wie schon 2005, wieder ein Donnerstag.

  • A Feedback Form in Pelican

    I realise that the great days of discussions on blogs are over, as Sam Hartman blogged the other day – at least for now. Still, I'd like to make it somewhat more straightforward to send me feedback on the posts here than having to get the contact address and dropping me a mail. Hence, I've written a little Python script, feedback, that lets people comment from within their web browsers.

    Nachtrag (2022-10-07)

    Don't take it from here; rather, see https://codeberg.org/AnselmF/pelican-ext

    While the script itself is perfectly general and ought to work with any static blog engine, the form template I give in the module docstring is geared towards pelican and jinja, although only in very few places.

    To make it work, this needs to become a CGI (the template assumes it will show up in /bin/feedback according to the server configuration). The notes on deployment from my post on the search engine apply here, too, except that in addition the host has to be able to deliver mail. Most Unix boxes do locally, but whether anyone reads such mail is a different question.

    Is it ethical to check “ok to publish” by default?

    To configure where it sends mail to (by default, that's root, which may make sense if you have your own VM), you can set the CONTACT_ADDRESS environment variable (see the search engine post in case you're unsure how to do that for a web context). If your machine is set up to deliver mail to remote addresses – be it with a full mail server or using a package like nullmailer –, you could use your “normal” mail address here. In that case, you probably should inform people in your privacy policy that their comments will be sent by unencrypted mail, in particular if that “normal“ e-mail is handled by one of the usual rogues (Google still gets about a half of the mail I send – sigh).

    If you look below (or perhaps right if you run your browser full-screen), you will see that there is a checkbox “feel free to publish“ that, right now, I have checked by default. I had some doubts about that in terms of creepy antipatterns. Of course I am as annoyed by most contemporary cookie banners as anyone else, which in violation of the GDPR usually have practical defaults – sure: not what you get when you say “configure” – set at the maximum creep level the operators believe they can get away with. On the other hand, defaults should also be expectable, and I'd guess the expectation when someone fills out a reply form on a blog is that the response will be published with the article. If you disagree: well, the comment form is there for you.

    In terms of spam protection, I do an incredibly dumb textcha. Even if this script got deployed to a few dozen sites (which of course would be charming), I cannot see some spam engine bothering to figure it out; since it just sends a mail to the operator, there is basically nothing to be gained from spamming using the CGI. I fully expect this will be enough to keep out the dumb spambots that blindly send whatever forms they can find – it has worked on many similar services.

    Security Considerations

    The feedback script does at least two things that could be exploited:

    1. It enters remotely controlled values into rendered HTML and
    2. It calls a local binary with content controlled by the remote user.

    In case (1) – that's when I put the URI of the originating article into the reply message to send people back to where they came from –, this can potentially be exploited in cross-site attacks. Suppose you trust my site on only execute benign javascript (I give you that's close to an oxymoron these days), someone could trick you into clicking on a link that goes to my site but executes their, presumably adversarial, javascript.

    Bugs aside, the script is resilient against that, as it properly escapes any user input that gets copied into the output. That is thanks to my “micro templating“ that I keep around to paste into such one-script wonders. Have a look into the code if you're interested in how that works. And totally feel free to paste that into any Python code producing HTML or XML templated in any way – sure, it's not jinja or stan, but it has covered 80% of my templating needs at much less than 20% of the effort (counted in code lines of whatever dependency you'd pull in otherwise), which is a good deal in my book.

    Case (2) is probably a lot more interesting. In the evaluate_form function, I am doing:

    mail_text = MAIL_TEMPLATE.format(**locals())
    

    Code like this usually is reason for alarm, as far too many text formats can be used to execute code or cause other havoc – the cross-site thing I've discussed for HTML above being one example, the totally bizarre Excel CSV import exploit another (where I really cannot see how this doesn't immediately bring every Windows machine on this planet to a grinding halt). In this case, people could for example insert \ncc: victim@address into anything that gets into headers naively and turn the form into a spam engine.

    There are exactly 10000 lines if Python's email module in version 3.9.

    In addition, there is a concrete risk creating some way of locally executing code, as the template being filled out is then used as an input for a local program – in this case, whatever you use as sendmail. In theory, I'm pretty sure this is not a problem here, as no user-controlled input goes into the headers. If you change this, either sanitise the input, probably by clamping everything down to printable ASCII and normalising whitespace, or by parsing them yourself. The message content, on the other hand, gets properly MIME-encapsulated. In practice, I can't say I trust Python's email package too much, as by Python stdlib standards, it feels not terribly mature and is probably less widely used than one may think.

    But that's a risk I'm willing to take; even if someone spots a problem in the email module, shodan or a similar service still has no way to automatically figure out that it is in use in this form, and my page's insignificance makes it extremely unlikely that someone will do a targeted attack on day 0. Or even day 10.

    But then, perhaps this is a good occasion to read through email's source code? Fun fact: in python 3.9, a find . -name "*.py" | xargs wc -l gives exactly 10000 lines. And my instinct that headers are the trickiest part is probably right, too: 3003 of those are in _header_value_parser.py.

  • Ach Bahn, Teil 3: Ade, du schöne Lounge

    Heute morgen habe ich eine Mail bekommen, die ich zunächst für einen besonders dreisten 419 scam gehalten habe. Doch nein, der Absender und die Received-Header sahen alle glaubhaft aus. Die Bahn hat mir wirklich mitgeteilt:

    Um Ihre BahnBonus Statusvorteile nutzen zu können, ist ab dem 13.06.2022 die BahnBonus App erforderlich.

    und in den „FAQ“ (ich wette, dass einen ganzen Haufen davon nie ein realer Mensch gefragt hat, mal ganz zu schweigen von „frequently“) steht tatsächlich:

    Warum gibt es ab Einführung der Statuslevel die meisten Statusvorteile nur in der BahnBonus App?

    Der Wunsch nach digitalen Lösungen ist in den letzten Jahren stark gestiegen. Die Änderungen ab 13.06.2022 werden diesem Wunsch gerecht, weswegen die Prozesse alle rein digital umgesetzt werden.

    Wie? Weil der „Wunsch nach digitalen Lösungen“ (vgl. Antisprache Digitalisierung) zugenommen hat, zwingt die Bahn Leuten „Smartphones“ auf? Leute haben gewünscht, dass sie noch mehr Zirkus machen müssen an den Lounge-Eingangskontrollen? Ich glaube kein Wort und rufe die Antisprache Innovation auf.

    Und, natürlich:

    Mit welchen Betriebssystemen kann die BahnBonus App genutzt werden?

    Bei iOS erfordert die BahnBonus App Version 14.0 oder höher. Bei Android erfordert die BahnBonus App aktuell Version 8.0 oder höher und ab Einführung der BahnBonus Statuslevel im Juni Version 9.0 oder höher.

    Nun ist die Teilnahme an Kundenbindungsprogrammen nichts, dessen mensch sich gerne bezichtigt und das vielleicht auch nicht ganz verträglich ist mit Bedenken bezüglich informationeller Selbstbestimmung. Bahn-Bonus, das will ich hier ganz schnell betonen, war meine einzige Sünde in dem Bereich[1]. Und ja, es ist ohnehin nicht sonderlich nett, in Lounges Kakao zu schlürfen, während die ungewaschenen Massen draußen am Bahnsteig frieren. Insofern will ich hier keine große Moral aufmachen.

    I like both kinds of operating systems: the one where Apple is root and the one where Google is root.

    Dennoch war ich immer gerne in den Lounges, schon, weil ich in keiner anderen Kategorie von Raum so oft zufällig auf Bekannte gestoßen bin. Auch wenn das wegen der kompromittierenden Natur des Eingeständnisses, dass mensch bei der Datensammelei Bahn-Comfort mitmacht, nicht immer ganz unbeschwert war, weine ich diesen Dingern schon eine Träne oder zwei nach. Und drum habe ich, auch wenn ich immer noch auf eine sinnvolle Antwort zu meiner Anfrage zu Captchas an die Bahn vom letzten Jahr warte, nochmal eine Mail an die Bahn-Kundenbetreuung geschickt:

    Date: Tue, 5 Apr 2022 08:31:05 +0200
    Subject: Charmeoffensive

    Hallo,

    Ich denke mal, Sie werden heute viele Mails dieser Art bekommen, aber ich denke, es kann nicht oft genug gesagt werden: Dass in Zukunft der Deal "Daten gegen Dienste" mit entweder Apple oder Google nötig sein soll, um in die Lounges zu kommen, ist sicher keine Charmeoffensive der Bahn, zumal im Hinblick darauf, dass VielfahrerInnen wahrscheinlich eher datenschutzbewusster sind als die Durchschnittsbevölkerung.

    Können Sie nicht wenigstens den Quellcode der "App" veröffentlichen, so dass Leute den Kram auch auf normale Rechner portieren können? Oder, wenn das eh nur eine dünner Lack über eine API sein sollte, das Zeug auch als normale Webseite anbieten?

    Schon etwas fassungslos,

    Ich weiß nicht, was die Bahn antworten wird (aber schon, was nicht: den tatsächlichen Grund dieses Stunts – während Corona waren die Lounges doch immer leer?), aber nach meinen bisherigen Erfahrungen kann ich zuversichtlich vorhersagen, mit was die text/plain-Alternative der Mail anfangen wird. Nämlich:

    -webkit-box-shadow: 0px 4px 8px #828282; /*webkit browser
    */-moz-box-shadow: 0px 4px 8px #828282; /*firefox */box-shadow: 0px 4px
    8px #828282;line-height:1.15;width:467.700pt; padding:0pt 42.550pt 0pt
    85.050pt ; background-color: #FFFFFF; margin:auto.header{
    padding-top:36.000pt ;}.footer{ padding-bottom:31.200pt ;}.page-content{
    position:relative;padding-top: 62.650pt ;padding-bottom: 70.900pt
    ;min-height:708.350pt; ;}del {text-decoration:line-through;color:red;}
    ins {text-decoration:none;} .Hyperlink-H{color:#0000FF;}
    

    Und noch viele Zeilen weiter so. Das ist übrigens schon seit Jahren in dieser Weise kaputt. Besonders mysteriös finde ich dabei ja, warum in diesem CSS-dump ausgerechnet eine Regel für das del-Element enthalten ist, dem ich, so glaube ich, in der Wildnis noch nie begegnet bin. Rätsel über Rätsel bei der Bahn.

    Nachtrag (2022-04-06)

    Ha! Ich hatte recht. Zur Illustration des Ausmaßes an Murks empfehle ich einen Blick auf den ganzen text/plain-Anhang des Bahn-Supports (scrollt ein Stück nach unten, da kommt wirklich auch etwas Nicht-CSS, wenn auch sehr kreativ geklebt).

    Ich habe kurz überlegt, ob ich das vielleicht nicht öffentlich machen sollte, weil es ja erstmal eine private Mail ist. Aber dann ist mir aufgefallen, dass da überhaupt nichts Privates drinsteht. Die Bahn ist ja auf keinen meiner Punkte eingegangen und hat nur „F“AQ-Punkte zusammengeklickt. Und eine Urheberrechtsverletzung kommt schon wegen mangelnder Schöpfungshöhe nicht in Frage.

    Hinweis an der Stelle: Haufenweise Plastik ließe sich wunderbar vermeiden, wenn der Quellcode offen wäre und damit die Menschen nicht unbedingt Betriebssysteme bräuchten, die auf ihrer aktuellen Hardware gar nicht laufen. Aber wem predige ich das?

    Die Antwort: 030 2970, wie in der Mail empfohlen. Oder eher: ich habe das gerade versucht, mitsamt einer Erörterung meines Captcha-Problems. Tatsächlich habe ich nach etwas Interaktion mit einem Computer und nur zwei Minuten Warteschleifenmusik einen Menschen am Telefon gehabt. Dieser war hörbar glücklich, „Ich schicke Sie mal kurz in die Mobilitätsabteilung“ seufzen zu können. Mit der Mitarbeiterin dort hatte ich dann jede Menge Mitleid, weil sie mir in keinem meiner Anliegen auch nur einen Millimeter weit helfen konnte, während ich mit ihrem mehrfachen Angebot, mich im Umgang mit dem DB-Navigator zu schulen, schon deshalb nichts anfangen konnte, weil dieser auf keinem meiner Rechner läuft (von meiner Abneigung gegen unpaketierte Software mal ganz abgesehen).

    Überrascht war ich über diesen Ausgang natürlich nicht. Aber wenn ich hier schon so wohlfeiles wie berechtigtes Bahn-Bashing betreibe, wollte ich es wenigstens versucht haben.

    [1]Also gut, wenn ich schon beichte, dann gleich richtig: ich habe auch mal versucht, hinreichend Schnipsel von Samba-Deckeln zu sammeln, um ein Schneidbrett mit Rapunzel-Logo zu bekommen. Das hat aber leider nicht geklappt.
  • Erfolgskriterien

    Eine regelmäßige Leserin dieser Seiten hat mir zur Frage, wie sich im Augenblick Menschenleben gegen nationale Größe vergleichen eine Collage aus der taz vom 22. März geschickt. Da sie die sich aus dieser Abwägung ergebenden Maßstäbe für Erfolg schön beleuchtet, gebe ich das Dokument hier gerne weiter

  • View with Netsurf

    A screenshot of a browser window

    An early version of this post rendered in netsurf.

    I believe about the worst threat to software freedom these days is web browsers. That is not only because they already are, for many people out there, a more relevant applications platform than their primary operating system, and that almost everything that gets run in them is extremely non-Free software. I've been linking to a discussion of this problem from these pages since this blog's day one as part of my quip on “best viewed with javascript disabled“.

    No, they are also a threat because the “major” browser engines are so humunguous that they are in effect locking out most platforms (which simply don't have enough power to run them). And they are because the sheer size and complexity of their code bases make it essentially impossible for an individual to fix almost any relevant bug in them related to rendering, javascript execution, or network interactions.

    That is why I am so grateful to the authors and maintainers of both dillo (Debian: dillo) and netsurf (Debian: netsurf-gtk, mainly), small browsers with maintainable code bases. While dillo is really basic and is missing so much of CSS and modern HTML that on today's web even many non-adversarial sites become barely usable, netsurf is usually just fine for websites respecting user rights.

    Flex layouts and the article elements: The good part of 20 years of web development after the Web 1.0.

    I have to admit I nevertheless only use it in very specific contexts, mostly because luakit with its vi-like key bindings and lua extensiblity in the end usually wins out even though I don't trust the webkit rendering engine for two cents[1]. And that is why I hadn't noticed that this blog has rendered a lot worse than it should have in netsurf. This is particularly shameful because that was mostly because I have taken liberties with web standards that I should not have taken. Apologies: Netsurf was right and I was wrong.

    I have improved that quite a bit this morning. Given I am using flex layouts quite liberally here, and these don't work in Debian stable's netsurf, the rendered pages do look quite a bit different in netsurf than on the “major” browsers. But the fallbacks are ok as far as I am concerned. Since flex layouts are among the few “innovations“ in the post-Web 1.0 ecosystem that are actually a good idea, I gladly accept these fallbacks. Let me stress again that it is a feature of a friendly web rather than a bug that pages look different in different user agents.

    Dillo, regrettably, is another matter because of the stupid^Wunderconsidered colour games I'm playing here. As things are right now, the light background below text like this one sits on an HTML5 article element, which dillo ignores. Hence, the text is black on dark green, which, well, may be barely readable but really is deeply sub-optimal. Since I consider the article element and its brethren real progress in terms of markup (the other positive “innovation” post Web-1.0), I will not change that markup just to make this render better in dillo. I may finally re-think the silly dark green background soon-ish, though.

    [1]If you feel like this, too, let's team up and massage luakit's front end to work with netsurf's rendering engine. Given the close entanglement of luakit with the webkitgtk API, this certainly will result in a very different program, and almost certainly there would be no way to re-use luakit extensions. Still, I could very well see such a thing become my main browser.
  • Filmtipp: Z

    Filmstill: Französischer Text vor Fernschreiber

    Spoiler: Am Schluss des verbietet das Militär all diese Dinge: Die Beatles und Beckett ebenso wie „Gorki (und alle Russen)“ und „die Friedensbewegung“. Rechte: Valoria Films und andere.

    Als diverse Innenminister neulich verkündeten, den Buchstaben Z jenen verbieten zu wollen, die die falsche Geschmacksrichtung des Patriotismus bevorzugen, ging im Fediverse der Film Z – Anatomie eines politischen Mordes herum. Nun muss ich sagen, dass Patriotismus jeder Geschmacksrichtung mein entschlossenes Eintreten für die Redefreiheit schon etwas herausfordert, um so mehr, wenn er sich auf kriegsführende Parteien bezieht. Andererseits ist der Gedanke, Buchstaben in Abhängigkeit der Gesinnung der Schreibenden verbieten zu wollen, schon besonders wüst, und drum bin ich dem Filmtipp gefolgt (via dem youtube-Anonymisierer invidious).

    Und was soll ich sagen: Ich war hingerissen. Der Film entstand unter dem Eindruck der griechischen Militärregierung (1967-1974) im Wesentlichen unter exilgriechischen KünstlerInnen in Frankreich (die Musik etwa hat der kürzlich verstorbene Mikis Theodorakis beigesteuert), unterstützt von Großkulturellen wie Jorge Semprún und Superstars wie Yves Montand. Es ging – „Eventuelle Ähnlichkeiten zu wirklichen Ereignissen oder lebenden oder toten Personen sind nicht rein zufällig. Sie sind Absicht.“ – um die Genese einer offen autoritären Regierung im freien Westen, unter Beteiligung einer stramm autoritären Polizei, einer Stay-behind-Organisation und natürlich des Militärs.

    Und so wirkt nicht nur der abschließende Satz „Gleichzeitig verboten die Militärs […] den Buchstaben Z“ eigenartig prophetisch. Es gibt zum Beispiel bemerkenswerte Schnitte vom Bolschoi-Ballett für die Würdenträger gegen Einsätze von Prügelpolizei, die geradezu visionär die Bilder des G20-Gipfels von 2017 vorwegnehmen, als nämlich die Polizei rund ums Schanzenviertel und und die „rote Zone“ wasserwerferte, pfefferte und prügelte, während sich Putin, Trump, Xi, Temer, Macri, Peña Nieto, Zuma, Abe, Erdoğan, Juncker, Widodo und all die anderen „Verantwortungsträger“ in der Elbphilharmonie beschallen ließen.

    Auch der Kontrast zwischen äußerster Indifferenz der Polizei gegenüber rechter Gewalt und raschem Einsatz von „unmittelbarem Zwang“ gegen Linke kennt jedeR, der/die in der Vor-Lübcke-Bundesrepublik im weiteren Antifa-Umfeld unterwegs war (zugegeben hat der Lübcke-Mord da zumindest vorübergehend etwas bewegt). Die dauernden Behinderungen der Ermittlungsarbeit im Film durch Verfahrenshindernisse oder überraschend verscheidende ZeugInnen geben wiederum ein Bild ab, das stark an die NSU-Aufklärung (oder ihr Unterbleiben) erinnert. Ebenfalls vertraut sind die rechten Netzwerke in Polizei und Justiz (vgl. Hannibal und Uniter), die sich unter Schlagwörtern wie „Abendland“ (das A in Pegida) versammeln .

    Ich spoilere noch etwas mehr: Der unerschrockene, wenn auch vielleicht etwas schmierige Journalist, der viel zur Aufklärung der Geschehnisse beiträgt, bekommt am Ende „drei Jahre Gefängnis wegen Besitz offizieller Dokumente“. Das zumindest ist, verglichen mit unserer Realität, eher milde. Julian Assange sitzt bereits deutlich länger, und für Edward Snowden sieht es nach lebenslänglich Russland aus, was – nein, ich bin ganz gewiss kein Putin-Fan – zumindest noch im gleichen Stadion spielt wie equadorianische Botschaften und britische Knäste.

    Schließlich will ich noch ganz kurz den Gender-Aspekt einbringen: Während damals auf der autoritären Seite ausschließlich Männer zu sehen und vor allem zu hören sind, sprechen auf der liberalen Seite immerhin vereinzelnt auch Frauen, und zwar nicht nur als für oder über ihre Männer; zumindest insofern haben wir die Welt schon etwas geändert.

  • Hatte Marc Aurel Bandwürmer?

    Foto: Konservierte Bandwürmer in hohen Glasbehältern

    Bandwürmer im großartigen Naturhistorischen Museum in Wien: Den besonders lange in der Mitte soll sich der Arzt wohl so zur k.u.k.Zeit selbst gezogen haben. Auch „bei uns“ hatten also selbst wohlhabende Menschen noch vor recht kurzer Zeit beeindruckende Würmer.

    In den DLF-Wissenschaftsmeldungen vom 15. Februar ging es ab Sekunde 50 um römische Archäologie mit Bandwürmern. Ich gestehe ja einen gewissen Römerfimmel ein, und ich fand zudem die Passage

    In römerzeitlichen Fundstätten auf Sizilien wurden mehrfach konische Tongefäße ausgegraben. Bisherigen Interpretationen zufolge wurden darin Lebensmittel gelagert.

    vielversprechend im Hinblick auf mein Projekt interessanter Selbstkorrekturen von Wissenschaft, denn die neuen Erkenntnisse zeigen recht deutlich, dass zumindest eines dieser Gefäße in Wahrheit als Nachttopf genutzt wurde. Und deshalb habe ich mir die Arbeit besorgt, auf der die Kurzmeldung basiert.

    Es handelt sich dabei um „Using parasite analysis to identify ancient chamber pots: An example of the fifth century CE from Gerace, Sicily, Italy“ der Archäologin Sophie Rabinow (Cambridge, UK) und ihrer KollegInnen (DOI 10.1016/j.jasrep.2022.103349), erschienen leider im Elsevier-Journal of Archeological Science. Ich linke nicht gerne auf die, zumal der Artikel auch nicht open access ist, aber leider gibts das Paper derzeit nicht bei der Libgen.

    Publikationsethische Erwägungen beiseite: Diese Leute haben einen der erwähnten „konischen Tongefäße” aus einer spätrömischen Ruine im sizilianischen Enna hergenommen und den „sehr harten, weißlichen Rückstand von schuppigem Kalk“ („very hard whitish lime-scale deposit“) am Boden des Gefäßes untersucht. Vor allem anderen: Ich hätte wirklich nicht damit gerechnet, dass, was in einem lange genutzten Nachttopf zurückbleibt, schließlich diese Konsistenz bekommt.

    Nie wieder Sandalenfilme ohne Wurmgedanken

    Aber so ist es wohl, denn nachdem die Leute das Zeug in Salzsäure aufgelöst und gereinigt hatten, waren durch schlichte Lichtmikroskopie (mein Kompliment an die AutorInnen, dass sie der Versuchung widerstanden haben, coole und drittmittelträchtige DNA-Analysen zu machen) haufenweise Eier von Peitschenwürmern zu sehen – und das halte auch ich für ein starkes Zeichen, dass reichlich menschlicher Kot in diesem Pott gewesen sein dürfte. Auch wenn, wie die AutorInnen einräumen, keine Kontrollprobe der umgebenden Erde zur Verfügung stand, ist es nicht plausibel, wie Eier in dieser Menge durch nachträgliche Kontamination in den „harten, weißen Rückstand“ kommen sollten.

    Römer hatten – das war schon vor dieser Arbeit klar – nicht zu knapp Würmer. Alles andere wäre trotz der relativ ordentlichen Kanalisation in größeren römischen Siedlungen höchst erstaunlich, da auch in unserer modernen Welt die (arme) Hälfte der Menschheit Würmer hat (vgl. z.B. Stepek et al 2006, DOI 10.1111/j.1365-2613.2006.00495.x). Dennoch guckt sich so ein zünftiger Sandalenfilm (sagen wir, der immer noch hinreißende Ben Hur) ganz anders an, wenn mensch sich klar macht, dass die feschen Soldaten und fetten Senatoren alle des öfteren mal Würmer hatten. Und auch Caesars Gallischer Krieg oder Mark Aurels Selbstbetrachtungen erhalten, finde ich, eine zusätzliche Tiefe, wenn mensch sich vorstellt, dass in den Gedärmen jener, die da Kriegspropaganda oder stoische Philosophie betrieben, parasitische Würmer mitaßen.

    Forschungsprojekt: Wurmbefall in Köln vor und nach 260

    Nun schätzen Rabinow et al allerdings, dass ihre Rückstände wohl in der Mitte des fünften Jahrhunderts entstanden. Damals hatte die römische Zivilisation und damit auch ihre Kanalisation wahrscheinlich auch in Sizilien schon etwas gelitten. Die Kölner Eifelwasserleitung etwa – die eingestandenermaßen technisch besonders anspruchsvoll war und in einem besonders unruhigen Teil des Imperiums lag – haben „Germanen“ schon im Jahr 260 zerstört, und sie wurde danach nicht mehr in Betrieb genommen, obwohl Köln bis weit ins 5. Jahrhundert hinein eine römische Verwaltung hatte.

    Ich persönlich wäre überzeugt, dass, wer mit der Rabinow-Methode an entsprechend datierbare Überreste heranginge, mit dem Jahr 260 eine sprunghafte Erhöhung der Verwurmung in Köln feststellen würde. Insofern: Vielleicht hatten Caesar und Mark Aurel, zu deren Zeiten der römlische Wasserbau noch blühte, ja doch nicht viel mehr Würmer als wir im kanalisierten Westen?

    Ach so: Das mit dem Irrtum – „nee, die Teile hatten sie für Essen“ – war so wild in Wirklichkeit nicht. Wie üblich in der Wissenschaft waren die Antworten auch vorher nicht so klar. Rabinow et al schreiben:

    A recent study of material at the town of Viminacium in Serbia, where over 350 identically deep-shaped vessels are known, was able to confirm at least 3 potential uses: storage for cereals or water, burial urns, and chamber pots […]. Chamber pots clearly were also sometimes put to secondary use, for example as a container for builder’s lime […], while vessels initially destined for other purposes may have been turned into chamber pots.

    Nun, dann und wann kommen sogar Wissenschaft und „gesunder“ Menschenverstand zu recht vergleichbaren Ergebnissen.

  • Giving in to Network Effects

    In my first Fediverse notes, I mused that I'd choose a larger community if I had to choose again.

    Well, after watching the Fediverse for a little while, I figured that while I may not actually have to choose again, I really want to. My old community, social.dev-wiki.de, had about 650 profiles that had posted 4500 toots between them. This undoubtedely counts as small, and that has the double effect that not terribly many toots are coming in on the federated feed (I can't bring myself to write “timeline”) because people on the instance don't follow too many others, and that toots I produce don't get distributed very far because there are not many instances with people following someone on that small instance. A double negative network effect.

    This is particularly unwelcome when globally searching for hashtags (as I did last Sunday when I thought the local elections in Saarland might reflect in the Fediverse). Sure, I can help fix that by starting to follow accounts from other instances, but that's a bit of a chicken-and-egg thing, since in my own instance's feeds I don't even see those other accounts. Perhaps sitting on the public feed of the “flagship” instance (mastodon.social has about 640'000 profiles) for a while might have helped.

    Fediverse relays are a honking great idea.

    But it also felt odd to be behind the most active profile on that instance, and so I decided to compromise. That is, I don't give in to the pressures of the network effect altogether. I am therefore not switching to the flagship instance (which does feel a bit central-ish). But I am switching to troet.cafe, which boasts 2600 users (a factor of 4 over my old instance) with 150'000 posts (a factor of 30) between them. Plus, it uses a “relay“ that somewhat mitigates the problem outlined above by essentially creating a sub-federation of smaller instances exchanging public toots regardless of whether people on them follow each other.

    So, I made the move today.

    It is nice that Mastodon has built-in support for moving; there is an “Import and Export” item in the settings menu that guides one reasonably clearly through the process and transfers the followers (small deal on my profile at the moment). It is then that it gets a little lame.

    You see, I'd have expected that when I get an archive of my profile under “Export” I ought to be able to import it again under the new profile's “Import”. But that is not how it works; it seems the downloaded archive cannot be uploaded, and whatever is in there is either lost (the toots) or needs to be manually restored (profile pictures). Instead, what can be uploaded are CSVs of followed people, block lists and the like. And these are not in the archive one downloads but need to be downloaded from the old profile and re-uploaded to the new profile one by one.

    Is this really the way it's supposed to be? Have I missed something?

    Ok, one doesn't move every day, but if I keep being a Fedinaut, I will probably move again one day – to my own instance. It would be nice if by then there were smoother migration paths.

  • Jede vierte Stimme nicht im Parlament vertreten

    Balkendiagramm mit Wahlergebnis

    Stimmenanteile der verschiedenen Listen bei der Wahl im Saarland gestern. Wahlbeteiligung: 61.4%. Rechte beim Saarland.

    Mensch muss meine informationstheoretischen Bedenken vom letzten Oktober im Hinblick auf die repräsentative Demokratie nicht teilen, um die 5%-Hürde wirklich befremdlich zu finden: Warum genau sollten „Minderheiten“, denen deutlich mehr als jedeR zwanzigste StaatsbürgerIn angehören kann[1], nicht im Parlament vertreten sein?

    Dies ist eine sehr ernste Frage, wenn wer „die Bevölkerung“ im Parlament „abgebildet“ sehen will. Hinter diesem Bild von der Abbildung steht die (sicher zutreffende) Prämisse, dass da eben nicht ein „Volk“ einen Willen hätte und per Wahl eine Art kollektive Sprecherin gefunden hätte. Nein, dieses Bild erkennt an, dass die Regierten ein mehr oder minder buntes Häufchen Leute sind, die sich über allerlei Fragen ziemlich uneins sind. Sollen zumindest die wesentlichsten ihrer Perspektiven im Parlament reflektiert sein (an der Stelle kommt übrigens der Einspruch der Informationstheorie, denn es wird sicherlich mehr als 20 relevantere Perspektiven geben), fällt mir wirklich keine plausible Begründung mehr ein, warum eine Initiative, zu der sich schon mal fünf von hundert Menschen verabreden können, nicht nur nicht an Regierung beteiligt sein, sondern nicht mal eine Stimme im Parlament haben soll.

    26% der Bevölkerung machen die absolute Mehrheit im Parlament.

    Ein weiterer Seiteneffekt der 5%-Hürde hat gestern im Saarland besonders zugeschlagen. Wer nämlich die Stimmen aller von ihr aus dem Parlament gekickten Parteien zusammenzählt, kommt auf 23% (es sei denn, die Grünen rutschen doch noch rein). Wie in der Überschrift gesagt: Fast jede vierte Stimme ist damit nicht im Parlament vertreten. Das ist mehr als die Hälfte des Stimmenanteils der SPD (26% der Bevölkerung, 43.5% der abgegebenen Stimmen) und damit einer (unter diesen Umständen) sehr komfortablen absoluten Mehrheit. Dieses Viertel der WählerInnen sehen die, von denen sie sich vertreten lassen wollten – die z.B. für sie Parlamentsanfragen hätten stellen können – nicht im Parlament.

    Das ist bitter, denn bei aller Kritik an der Sorte Parlamentarismus, bei der die Exekutive bei Strafe ihres Untergangs die Legislative immer an der kurzen Kandare halten muss, sind gerade die Mittel der Opposition – die Anfragen ganz besonders – ein wichtiges Mittel politischer Einflussnahme. Hier in Baden-Württemberg z.B. fehlt die Linke im Landtag schon, weil auf diese Weise bis heute unklar ist, welche Bomben und Panzerfäuste die Polizei gekauft (und gar eingesetzt?) hat, nachdem ihr das die vorletzte Verschärfung des Polizeigesetzes erlaubt hat; die SPD, die die Verschärfung damals mit den Grünen zu verantworten hatte, geriert sich in dieser Angelenheit immer noch auffallend exekutiv.

    Zum praktischen Ärger tritt, dass selbst bei der – eigentlich im Sinne der Partizipation ausgegangenen – letzten Prüfung von Sperrklausen vor dem Bundesverfassungsgericht (2BvE 2/13 u.a., 2014-02-26) in der Urteilsbegründung noch die reaktionäre Klamotte durchschien, die Parteienvielfalt in der Weimarer Republik habe den Faschismus ermöglicht. In Randnummer 54 schreibt das Gericht verklausulierend:

    Eine große Zahl kleiner Parteien und Wählervereinigungen in einer Volksvertretung kann zu ernsthaften Beeinträchtigungen ihrer Handlungsfähigkeit führen.

    Die darunterliegende Erzählung war schon bei der Einführung der 5%-Hürde in den 1950er Jahren eine ebenso abwegige Schutzbehauptung wie entsprechende Behauptungen zur Inflation: Wer das Paktieren des SPD-Reichspräsidenten mit den reaktionärsten Elementen einer ohnehin in weiten Bereichen noch vormodernen Gesellschaft bereits in der Gründungsphase des Staates ansieht, wird sich eher fragen, wie es die halbwegs liberalen Institutionen überhaupt bis zur Machtübergabe 1933 geschafft haben.

    Weniger und besser regieren ohne die 5%-Hürde.

    Klar dürfte „das Regieren“ etwas mühsamer werden, wenn die Bevölkerung im Parlament feinkörniger vertreten ist. Aber die ganze Geschichte mit Demokratie und Volkssouveränität wurde auch nicht gemacht, damit es eine konkrete Regierung einfacher hat. Entstanden ist sie als Reaktion auf Rabatz, der wiederum Folge war von regelmäßig katastrophalem Agieren von Regierungen, die autoritären Versuchungen zu sehr nachgegeben haben.

    Dass mehr Partizipation (oder, wenn ihr wollt, Demokratie) es Regierungen schwerer macht, über Einwände signifikanter Teile der Regierten hinwegzuregieren: das ist kein Bug, das ist ein Feature. Und wenn ihr mal darüber nachdenkt, was z.B. die Bundesregierungen der letzten 20 Jahre so beschlossen haben – mal angenommen, es wären nur die 10% konsensfähigsten Gesetze durchgekommen: Wäre das nicht eine viel bessere Welt?

    Immerhin öffnet das oben zitierte Karlsruher Urteil die Tür für Verbesserungen recht weit, wenn es in RN 57 heißt:

    Eine einmal als zulässig angesehene Sperrklausel darf daher nicht als für alle Zeiten verfassungsrechtlich unbedenklich eingeschätzt werden. Eine abweichende verfassungsrechtliche Beurteilung kann sich ergeben, wenn sich die Verhältnisse wesentlich ändern. Findet der Wahlgesetzgeber in diesem Sinne veränderte Umstände vor, so muss er ihnen Rechnung tragen.

    Zum Abschluss doch nochmal Informationstheorie: die 5%-Hürde beschränkt ja die Zahl der maximal im Parlament vertretenen Parteien auf 20 (und das auch nur theoretisch, denn die Bevölkerung müsste schon extrem gut geplant abstimmen, um jeder Partei gerade genau 5% der Stimmen zukommen zu lassen). Der Zweierlogarithmus von 20 ist 4.322. Zu deutsch: Mit der Hürde ist der Informationsgehalt der Wahlentscheidung hart auf gut 4 bit gedeckelt. Aua.

    [1]Bei 100% Wahlbeteiligung und universellem Wahlrecht sind 5% ein Mensch von 20. Bei 60% Wahlbeteiligung wie im Saarland und gleichmäßiger Wahlausübung wären es eineR von 12, der/die nach der 5%-Logik vernachlässigbar wäre. Da die Wahlausübung stark mit der Zugehörigkeit zu Interessengruppen (z.B. bei Kindern: 0% Wahlbeteiligung…) korreliert, können aber noch weit größere Teile der Bevölkerung durch die 5%-Hürde ausgeschlossen sein.
  • 'Failed to reset ACL' with elogind: Why?

    As I've blogged the other day, I like having my machine's syslog on the screen background so I notice when the machine is unwell and generally have some idea what it thinks it is doing. That also makes me spot milder distress signals like:

    logind-uaccess-command[30337]: Failed to reset ACL on /dev/bus/usb/002/061: Operation not supported
    

    I've ignored those for a long time since, for all I can see, logind-like software does nothing that on a normal machine sudo and a few judicious udev rules couldn't do just as well – and are doing on my box. The only reason there's elogind (a logind replacement that can live without systemd) on my box is because in Debian, kio – which in bullseye 270 packages depend upon – depends upon something like logind. The complaints in the syslog thus came from software I consider superfluous and I'd rather not have at all, which I felt was justification enough to look the other way.

    But then today curiosity sneaked in: What is going on there? Why would whatever elogind tries break on my box?

    Well, the usual technique of pasting relevant parts of the error message into some search engine leads to elogind PR #47 (caution: github will run analytics on your request). This mentions that the message results from a udev rule that tries to match hotplugged devices with users occupying a “seat”[1]. The rule calls some binary that would make sure that the user on the “seat” has full access to the device without clobbering system defaults (e.g., that members of the audio group can directly access the sound hardware) – and to keep the others out[2]. The Unix user/group system is not quite rich enough for this plan, and hence a thing called POSIX ACLs would be used for it, a much more complicated and fine-grained way of managing file system access rights.

    Well, the udev rules mentioned in the bug indeed live on my box, too, namely in /lib/udev/rules.d/73-seat-late.rules, which has the slightly esoteric:

    TAG=="uaccess", ENV{MAJOR}!="", RUN{program}+="/lib/elogind/elogind-uaccess-command %N $env{ID_SEAT}"
    

    I frankly have not researched what exactly adds the uaccess tag that this rule fires on, and when it does that, but clearly it does happen in Debian bullseye. Hence, this rule fires, and thus the failing elogind-uaccess-command is started.

    But why does it fail? Well, let's see what it is trying to do. The great thing about Debian is that as long as you have a (proper) deb-src line in your /etc/apt/sources.list, you can quickly fetch the source code of anything on your box:

    cd /usr/src  # well, that's really old-school.  These days, you'll
                 # probably have your sources somewhere else
    mkdir elogind # apt-get source produces a few files
    cd elongind   # -- keep them out of /usr/src proper
    apt-get source elogind
    cd <TAB>  # there's just one child directory
    

    To see where the source of the elongind-uaccess-command would be, I could have used a plain find, but in cases like these I'm usually lazy and just recursively grep for sufficiently specific message fragments, as in:

    find . -name "*.c" | xargs grep "reset ACL"
    

    This brings up src/uaccess-command/uaccess-command.c, where you'll find:

    k = devnode_acl(path, true, false, 0, false, 0);
    if (k < 0) {
             log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_ERR, k, "Failed to reset ACL on %s: %m", path);
             if (r >= 0)
                     r = k;
     }
    

    Diversion: I like the use of the C ternary operator to emit a debug or error message depending on whether or not things failed because the device file that should have its ACL adapted does not exist.

    So, what fails is a function called devnode_acl, which does not have a manpage but can be found in login/logind-acl.c. There, it calls a function acl_get_file, and that has a man page. Quickly skimming it would suggest the prime suspect for failures would be the file system, as that may simply not support POSIX ACLs (which, as I just learned, aren't really properly standardised). Well, does it?

    An apropos acl brings up the chacl command that would let me try acls out from the shell. And indeed:

    $ chacl -l /dev/bus/usb/001/003
    chacl: cannot get access ACL on '/dev/bus/usb/001/003': Operation not supported
    

    Ah. That in fact fails. To remind myself what file system we are talking about, I ran mount | grep "/dev " (the trailing blank on the search pattern is important), which corrected my memory from “it's a tmpfs” to “it's a devtmpfs”; while it turns out that the difference between the two does not matter for the problem at hand, your average search engine will bring up the vintage 2009 patch at https://lwn.net/Articles/345480/ (also from the abysses from which systemd came) when asked for “devtmpfs acl”, and a quick skim of that patch made me notice:

    #ifdef CONFIG_TMPFS_POSIX_ACL
    (something)
    

    This macro comes from the kernel configuration. Now, I'm still building the kernel on my main machine myself, and looking at the .config in my checkout of the kernel sources confirms that I have been too cheap to enable POSIX ACLs on my tmpfses (for a machine with, in effect, just a single user who's only had contact with something like POSIX ACLs ages ago on an AFS, that may be understandable).

    Well, I've enabled it and re-built my kernel, and I'm confident that after the next reboot the elogind messages will be gone. And who knows, perhaps the thing may actually save me a custom udev rule or two in the future because it automagically grants me access to whatever I plug in.

    Then again: Given there's now an API for Javascript from the web to read USB devices (I'm not making this up) and at least so far I'm too lazy to patch that out of my browsers… perhaps giving me (and hence these browsers) that sort of low-level access is not such a good idea after all?

    [1]See Multiseat on Wikipedia if you have no idea what I'm talking about. If you've read that you can probably see why I consider logind silly for “normal” computers with either a single user or lots of users coming in through the network.
    [2]Mind you, that in itself is totally reasonable: it would suck if everyone on a machine could read the USB key you've just plugged into a terminal; except that it's a rare configuration these days to have multiple persons share a machine that anyone but an administrator could plug anything into.
  • Klarsprache: Abwägungen

    Foto: Mahnwache in Boston, Umhängeschild: Stop Bombing Iraq

    Im September 2000, kurz vor dem Ende von Albrights Amtszeit und der Wahl von George W. Bush: Eine Mahnwache gegen das Embargo gegen den und das „Flugverbot“ (mit regelmäßigen Bombardements, daher das Plakat) über dem Irak an der Park Street Station in Boston, Massachussetts.

    In der Nachricht über den Tod der ehemaligen US-Außenministerin Albright am DLF heißt es, Joe Biden habe sie gewürdigt als „Vorkämpferin für Demokratie und Menschenrechte“. Das ist auf den ersten Blick bemerkenswert, weil sich doch noch viele Menschen an Albrights Interview im US-Politmagazin 60 Minutes aus dem Jahr 1996 erinnern, in dem der Interviewer fragte:

    Wir haben gehört, dass eine halbe Million [irakische] Kinder [infolge der westlichen Sanktionen] gestorben sind. Sehen sie, das sind mehr Kinder als in Hiroshima gestorben sind. Und, na ja, war es diesen Preis wert?

    In einem klassischen Fall von Klarsprache hat Albright geantwortet:

    Ich denke, das war eine sehr schwere Entscheidung. Aber wir glauben, dass es den Preis wert ist.

    (Übersetzung ich; Original z.B. bei der newsweek). In meiner Zeit in den USA – Albright war damals „meine“ Außenministerin –, war dieses „the price is worth it“ ein geflügeltes Wort, um bei Demonstrationen und Mahnwachen wie der oben im Bild die mörderische, zynische und verlogene Realpolitik zu kommentieren und Zweifel zu äußern, wenn Kriege mit „aber die Menschenrechte“ (Kosovo, Albright und Bundeswehr dabei) oder „wir verteidigen uns“ (Irak, Bundeswehr noch nicht und Albright nicht mehr dabei) rechtfertigt wurden.

    Im Rückblick würde ich die Bestürzung über das „it was worth it“ gerne relativieren. Albright war wahrscheinlich nach Maßstäben ihrer Zunft wirklich relativ deutlich orientiert auf Menschenrechte und Demokratie, denn sonst hätte sie diese Antwort vermutlich nicht gegeben und stattdessen dem Industriestandard folgend in eine andere Richtung losgeschwafelt[1]. Insofern verdient sie Anerkennung dafür, die Maßstäbe der Zunft der äußeren Sicherheit klar zu benennen, denn die erlauben nun mal, zur Durchsetzung von „nationalen“ Interessen massenhaft Menschen zu töten. Das einzugestehen ist, so glaube ich heute, ethisch gegenüber dem sonst üblichen Fast Talk deutlich zu bevorzugen.

    Albrights Klarsprache mahnt uns, dass auch Saktionen fürchterliche Folgen haben können und wir daher gute Gründe für sie einfordern sollen („nationale Interessen“ sollten für nette Menschen nicht in die Kategorie „gut“ gehören), und dass „unsere“ Regierungen ebenso bereit sind, für ihre Interessen zu töten wie alle anderen auch.

    Deshalb, um kurz in die Gegenwart zu schalten, muss der Schluss aus dem Ukrainekrieg eben radikale Abrüstung sein und jedenfalls nicht mehr Gewaltmittel für Menschen, die sich gegentlich „schwere Entscheidungen“ abringen, die Tote im Millionenmaßstab – es starben ja in den 90ern auch nicht nur die Kinder im Irak, ganz zu schweigen von der Hinführung auf den dritten Golfkrieg, an dem im Irak immer noch viele Menschen sterben – nach sich ziehen.

    [1]Damit sind Dinge gemeint wie „das sagen die Russen“, „Handelswege sichern“, „Verlässlichkeit im Bündnis“ oder viele ähnliche Platitüden, die längst auswendig kann, wer regelmäßig die Interviews in den DLF-Informationen am Morgen hört.
  • Jost Bürgi, der Sinus und Umberto Eco

    Kryptische, leicht mathematisch aussehende Zeicnung

    „Reimers' Diagramm“: Für 400 Jahre der einzige Hinweis darauf, wie Jost Bürgi wohl seine Sinustabelle berechnet hat. Nicht mal Kepler hat das Rätsel lösen können.

    Ein Geheimnis, das im antiken Griechenland ein wenig angekratzt wurde, über das dann Gelehrte in Indien und Arabien nachgedacht haben, für das in der zweiten Hälfte des 16. Jahrhunderts ein wandernder Schweizer Uhrmacher eine genial einfache Lösung fand, von der aber die Nachwelt nur ein paar kryptische Referenzen hat, bis ein unerschrockener Wissenschaftler in den Tiefen längst vergessener Bibliotheken ein Manuskript entdeckt, das des Rätsels Lösung enthält: Es gibt Geschichten, die klingen nach einem Roman von Umberto Eco (oder, je nach Temperament und/oder Geschmack, Dan Brown) und sind doch wahr.

    Auf die Geschichte von Jost Bürgis Sinusberechnung bin ich über die DLF-Sternzeit vom 27.2.2022 gekommen, und sie geht ungefähr so: Nachdem Hipparchos von Nicäa so um die 150 vdcE[1] nicht nur den ersten brauchbaren Sternkatalog vorgelegt, sondern auch die ersten ordentlichen Rezepte angegeben hatte, wie mensch für jede Menge Winkel den zugehörigen Sinus[2] ausrechnet, gab es zur Berechnung trigonometrischer Funktionen sehr lange nicht viel Neues.

    Klar, der große Ptolomaios, genau, der mit dem Weltbild, hat Hipparchos' Methode zur Berechnung des Sinus über regelmäßige Vielecke kanonisiert. In Indien gab es einige Fortschritte – etwa den Übergang von der Sehne zum Sinus –, in Arabien wurden verschiedene Ergebnisse zusammengetragen und systematisiert, aber immer war es eine mühsame, geometrisch insprierte, endlose Rechnerei.

    Und dann kommen wir in die frühe Neuzeit in Europa, genauer die zweite Hälfte des 16. Jahrhunderts. Kopernikus hat noch einmal ganz klassisch den Sinus mit Vielecken berechnet, während er die Konflikte zwischen Ptolomaios und der Realität untersuchte. In Italien macht sich allmählich Galileo bereit, die Physik als experimentelle Naturwissenschaft zu etablieren. Und in Kassel, beim wissenschaftsbegeisterten hessischen Landgraf Wilhelm IV, sammeln sich ein paar Mathe- und Astro-Nerds, die beim ebenso berühmten wie fiesen Tycho gelernt haben, unter ihnen Nicolaus Reimers, der das kryptische Bild über diesem Post veröffentlicht hat, vermutlich, weil er versprochen hatte, nicht mehr zu verraten.

    Bürgis geniale Methode

    Es weist auf ein Verfahren zur Berechnung von Werten der Sinusfunktion hin, das nichts mehr mit den umschriebenen Polygonen des Hipparchos zu tun hat. Sein Erfinder, der Toggenburger Uhrmacher-Astronom-Erfinder Jost Bürgi, hatte zu dieser Zeit ein großes Tabellenwerk vorgelegt, mit dem mensch auch ohne Taschenrechner rausbekommen konnte, wie viel wohl sin(27 32’ 16’’) sei[3]. Offensichtlich funktionierte die Methode. Doch hat Bürgi – Autodidakt und vielleicht etwas verschroben – die Methode nie richtig veröffentlicht, und so brüteten MathematikerInnen, unter ihnen wie gesagt Johannes Kepler, der immerhin die Sache mit den Ellipsenbahnen im Planetensystem rausbekommen hat, lang über der eigenartigen Grafik. Und kamen und kamen nicht weiter.

    Das war der Stand der Dinge bis ungefähr 2014, als der (emeritierte) Münchner Wissenschaftshistoriker Menso Folkerts im Regal IV Qu. 38ª der Universitätsbibliothek in Wrocław auf eine lange übersehene gebundene Handschrift stieß. Ein wenig konnte er ihre Geschichte nachvollziehen: Jost Bürgi persönlich hatte das Werk Kaiser Rudolf II – dem Mäzen von Tycho und Kepler – am 22. Juli 1592 (gregorianisch) in Prag übergeben, was ihm eine Zuwendung von 3000 Talern eingebracht hat. Ich habe leider nicht die Spur eines Gefühls, wie sich der Betrag mit modernen Drittmittelanträgen vergleicht. Die Form des Antrags jedenfalls ist aus heutiger Sicht als unkonventionell einzustufen.

    Das Werk fand seinen Weg in das Augustinerkloster im unterschlesischen Sagan (heute Żagań). Wie es dort hinkam, ist nicht überliefert, aber mensch mag durchaus eine Verbindung sehen zu Keplers Aufenthalt in Sagan in den Jahren von 1628 bis 1630. Vielleicht hat er das Buch ja nach seinen Diensten in Prag mitgenommen, auf seinen verschiedenen Wanderungen mitgenommen und schließlich selbst im Kloster gelassen? Aber warum hätte er dann über Bürgis Methode gerätselt?

    Wie auch immer: Im Gefolge des Reichsdeputationshauptschlusses wurde das Kloster 1810 aufgelöst – ich stelle mir das ein wenig vor wie in Poes „Die Grube und das Pendel“ –, und der Bestand der Bibliothek fiel an die Universität Breslau, die wiederum nach dem zweiten Weltkrieg zur polnischen Uni Wrocław wurde.

    In diesem geschichtsträchtigen Manuskript erklärt Bürgi seinen Algorithmus. Dargestellt ist das in der Abhandlung von Folkerts et al (arXiv:1510.03180), in der sich auf den Seiten 11 und 12 auch die Auflösung für Reimers' Rätsel findet. Etwas schöner beschreibt das Verfahren Denis Roegel in seinem Aufsatz Jost Bürgi's skillful computation of sines. Dort wird auch Bürgis mutmaßliche Grundeinsicht besser erläutert, nach der der Sinus einfach das Ding ist, das, modern gesprochen, nach zweifacher Ableitung sich selbst (mal minus eins) ergibt. Das ist der mathematische Hintergrund dafür, dass folgendes Stück Python tatsächlich relativ schnell zu einer Tabelle der Sinuswerte von n im ersten Quadranten gleichverteilten Winkeln konvergiert:

    tot_sines = list(range(n+1))
    for iter_index in range(n_iter):
    
      intermediates = [tot_sines[-1]//2]
      for tot in reversed(tot_sines[1:-1]):
        intermediates.append(intermediates[-1]+tot)
    
      tot_sines = [0]
      for diff in reversed(intermediates):
        tot_sines.append(tot_sines[-1]+diff)
    
    return dict((k*math.pi/2/n,  v/tot_sines[-1])
      for k, v in enumerate(tot_sines))
    

    – es ist, glaube ich, unmöglich, zu verstehen, was hier passiert (und warum), ohne den Roegel oder zumindest den Folkerts gelesen zu haben. Aber ich könnte andächtig werden angesichts so simpler Manipulationen, die so schnell zu richtig vielen Stellen einer transzendenten Funktion wie des Sinus führen.

    Ein numerischer Traum

    Wie schnell das mit den vielen Stellen bei Bürgis Algorithmus geht, zeigt folgende Grafik:

    Heatmap, die recht gleichmäßig von Gelb nach Schwarz übergeht

    Hier läuft horizontal der Winkel – und der Algorithmus funktioniert wirklich nur, wenn das einen rechten Winkel einschließt –, vertikal die Iterationen von Bürgis Algorithmus. Die Farben entsprechen dem dekadischen Logarithmus der Abweichung der Bürgi-Ergebnisse von dem, was die Python-Standardbibliothek gibt, im Groben also die Zahl der Stellen, die der Algorithmus richtig hinbekommt. Mehr als 18 geht da schon mal nicht, weil die Zahlen von Python in 64-bittigen IEEE-Fließkommazahlen („double precision“) kommen, und mehr als 18 Dezimalstellen sind da nicht drin (in der Grafik steckt die Zusatzannahme, dass wir von Zahlen in der Größenordnung von eins sprechen).

    Mithin gewinnt der Algorithmus pro Iteration ungefähr eine Dezimalstelle, und das gleichmäßig über den ganzen Quadranten. DemoprogrammiererInnen: billiger kommt ihr, glaube ich, nicht an eine beliebig präzise Sinustabelle ran.

    Spannend fand ich noch die kleinen dunkelblauen Klötzchen ganz unten in der Grafik: Hier werden sich Bürgi und Python offenbar auf Dauer nicht einig. So, wie ich das geschrieben habe, würde ich fast eher Bürgi vertrauen, denn bei den Ganzzahlen, die da verwendet werden, kann eigentlich nichts schief gehen. Andererseits sind Fließkommazahlen eine heikle Angelegenheit, insbesondere, wenn es ums letzte Bit geht. Um mich zu überzeugen, dass es nur um genau jenes unheimliche letzte Bit geht, habe ich mir geschwind eine Funktion geschrieben, die die Fließkommazahlen vinär ausgibt, und der Code gefällt mir so gut, dass ich sie hier kurz zeigen will:

    import struct
    
    _BYTE_LUT = dict((v, "{:08b}".format(v)) for v in range(256))
    def float_to_bits(val):
      return "".join(_BYTE_LUT[v] for v in struct.pack(">d", val))
    

    Mit anderen Worten lasse ich mir geschwind ausrechnen, wie jedes Byte in binär aussehen soll (_BYTE_LUT), wobei die Python-Bibliothek mit dem 08b-Format die eigentliche Arbeit macht, und dann lasse ich mir die Bytes der Fließkommazahl vom struct-Modul ausrechnen. Der einzige Trick ist, dass ich das Big-end-first bestellen muss, also mit dem signfikantesten Byte am „linken“ Ende. Tue ich das nicht, ist z.B. auf Intel-Geräten alles durcheinander, weil die Bits in der konventionellen Schreibweise daherkommen, die Bytes aber (wie bei Intel üblich) umgedreht, was ein furchtbares Durcheinander gibt.

    Jedenfalls: Tatsächlich unterscheiden sich die Werte schon nach 20 Iterationen nur noch im letzten bit, was für 45 Grad alias π/4 z.B. so aussieht:

    45
      0011111111100110101000001001111001100110011111110011101111001101
      0011111111100110101000001001111001100110011111110011101111001100
    

    Ich lege mich jetzt mal nicht fest, was das „bessere“ Ergebnis ist; ich hatte kurz überlegt, ob ich z.B. mit gmpy2 einfach noch ein paar Stellen mehr ausrechnen sollte und sehen, welches Ergebnis näher dran ist, aber dann hat mich meine abergläubische Scheu vor dem letzten Bit von Fließkommazahlen davon abgehalten.

    Wer selbst spielen will: Meine Implementation des Bürgi-Algorithmus, der Code zur Erzeugung der Grafik und die Bitvergleicherei sind alle enthalten in buergi.py.

    [1]Das vdcE bringe ich hiermit als Übertragung von BCE, before the Christian era, in Gebrauch. Und zwar, weil v.Chr völlig albern ist (es ist ja nicht mal klar, ob es irgendeine konkrete Figur „Christus“ eigentlich gab; wenn, ist sie jedenfalls ganz sicher nicht zur aktuellen Epoche – also dem 1. Januar 1 – geboren) und „vor unserer Zeitrechnung“ ist auch Quatsch, denn natürlich geht Zeitrechnung (wenn auch mangels Jahr 0 etwas mühsam) auch vor der Epoche. „Vor der christlichen Epoche“ hingegen bringt ganz schön auf den Punkt, was das ist, denn die „Epoche“ ist in der Zeitrechnung einfach deren Nullpunkt (oder halt, vergurkt wie das alles ist, hier der Einspunkt).
    [2]Na ja, in Wirklichkeit hat er mit der Länge der Sehne gerechnet, die ein Winkel in einem Kreis aufspannt, aber das ist im Wesentlichen das Gleiche wie der Sinus, der ja gerade der Hälfte dieser Sehne entspricht.
    [3]Ich bleibe natürlich bei meiner Verurteilung …
  • Bienen wollen SaZu

    Foto: Blüte mit darauf rumlaufender Biene

    Diese Biene würde vielleicht schon zwischen den Staubbeuteln rumrüsseln, wenn die Blume sich nur etwas mehr Mühe beim Würzen gegeben hätte.

    In Marc-Uwe Klings Qualityland (helle Ausgabe in der Imperial Library) gibt es das großartige Konzept der FeSaZus, eines Nahrungsmittels, das zu je einem Drittel aus Fett, Salz und Zucker besteht und zumindest für das Proletariat von Qualityland in einigen – nicht zu vielen! – Darreichungsformen (FeSaZus im Cornflakesmantel, Muffins mit FeSaZu-Füllung, Schmalz-FeSaZus mit Speckgeschmack) eine wichtige Ernährungsgrundlage darstellt.

    Via den Wissenschaftsmeldungen vom 3.2.2022 in DLF Forschung aktuell bin ich nun auf den Artikel „Sodium-enriched floral nectar increases pollinator visitation rate and diversity“ von Carrie Finkelstein und KollegInnen (Biology Letters 18 (3), 2022, DOI 10.1098/rsbl.2022.0016) gestoßen, der recht überzeugend belegt, dass Insekten im Schnitt einen Geschmack haben, der sich vom Qualityländer Durchschnittsgeschmack gar nicht so arg unterscheidet.

    Finkelstein et al haben an der Uni von Vermont mindestens je zwölf Exemplare von fünf örtlich üblichen Blumenarten blühen lassen. Je Experiment (und davon gab es einige) haben sie sich pro Art sechs Individuen ausgesucht und mit Kunstnektar versehen. Bei dreien war das einfach eine 35%-ige Zuckerlösung, bei den anderen drei kam dazu noch 1% Kochsalz. In Wasser aufgelöst ist 1% Salz schon ziemlich schmeckbar. Ich habe darauf verzichtet, im Selbstversuch zu überprüfen, ob 1% Salz in so konzentriertem Sirup menschlichen Zungen überhaupt auffällt.

    Und dann haben sie gewartet, bis bestäubende Insekten kamen und diese gezählt. Das zentrale (und jedenfalls von außen betrachtet trotz etwas Voodoo bei der Auswertung auch robuste) Ergebnis: An den Pflanzen, die Salz anboten, waren doppelt so viele Insekten – am stärksten vertreten übrigens allerlei Sorten von Bienen – wie an denen, die das nicht taten, und zwar ziemlich egal, um welche Blume es nun gerade ging. Mit anderen Worten: Insekten sind nicht wild auf faden Nektar.

    Allerdings: So ein Faktor zwei in der Präferenz ist gar nicht so viel. Zwischen den BesucherInnenzahlen bei Schafgarbe (laut Paper 54.1 ± 6.3) und dem blutroten Storchschnabel (16.6 ± 3.5) liegt eher ein Faktor drei. Dennoch ist recht deutlich, dass die Insekten eher wenig Verständnis haben für Lauterbachs salzarme Ernährung. Dabei will ich nicht argumentieren, dass ein Durchschnittsmensch auf Dauer 150 mg Salz pro Kilogramm Körpergewicht und Tag essen könnte, ohne schließlich mit Hypertonie und Nierenversagen kämpfen zu müssen. Aber 10 oder 15 Gramm Salz am Tag kriegt mensch, wie Samin Nosrat in ihrem wunderbaren Kochbuch Salt, Fat, Acid, Heat (auch in der Imperial Library) ausführt, durch selbstsalzen oder auch den Salzgebrauch in selbstkochender Gastronomie, kaum hin[1]; salzarms Kochen und fades Essen mag mithin positive gesundheitliche Folgen haben, aber vermutlich kaum mehr als etwa der Einsatz von Himalayasalz, Voodoopuppen oder anderen potenten Placebos.

    Erfreulich fand ich im Paper noch die Aussage „All analyses were performed in R (v. 4.0.2)“ – dass auch in weniger technologieaffinen Wissenschaftsbereichen proprietäre Software (in diesem Fall ganz vornedran SAS und SPSS) auf dem Weg nach draußen ist, halte ich für eine ausgezeichnete Nachricht.

    Weniger schön fand ich das Bekenntnis, dass es in Anwesenheit von BiologInnen ganz offenbar gefährlich ist, einer unüblichen Spezies anzugehören:

    If we were unable to identify a floral visitor in the field, we collected it and stored it in 75% ethanol.

    Arme kleine Fliegen und arme VertreterInnen ungewöhnlicher Bienenarten. Wären sie stinknormale Honigbienen gewesen, hätten sie ihren Ausflug zu den verlockenden Blüten mit dem fein gesalzenen Nektar überlebt.

    [1]Nosrat argumentiert in ihrem Buch für mich zumindest plausibel (und durch meine eigene Kochpraxis bestätigt), dass Lauterbauchs Kritik am „Salzgeschmack“ zumeist am Thema vorbeigeht – in aller Regel vermittelt Kochsalz etwa durch Kontrolle von Osmolaritäten ziemlich nichttriviale Prozesse beim Garen und Verarbeiten von Lebensmitteln, und diese sind für den Geschmack der fertigen Speisen viel wichtiger als das Salz selbst. Aber das ist dann wirklich eine andere Geschichte.
  • Kopfzahlen: Plastikproduktion

    Ein großer Haufen Plastikbecher auf einer gepflasterten Straße

    2014 in Lissabon: nach einer Nacht im Barrio Alto hat sich an der Straße ein Pfund Plastik gesammelt. Ihr guckt auf etwa ein Millardstel der gegenwärtigen Weltjahresproduktion.

    In der Deutschlandfunk-Sendung Forschung aktuell gab es am 2. März ein Segment mit einer Zahl, die ich im Kopf haben sollte: Die Weltproduktion von Kunststoffen liegt derzeit bei 460 Millionen Tonnen oder einer halben Gigatonne pro Jahr und hat seit dem Jahr 2000 um ziemlich genau den Faktor 2 zugenommen.

    In den Größenordnungen von Naturkatastrophen gesprochen braucht es 5⋅108  t ⁄ (25  t/Container), also 20 Millionen TEU-Container, um den ganzen Mist (von der Masse her) bewegt zu kriegen. Wenn das alles durch einen Hafen ginge, müsste da öfter als alle zwei Sekunden so ein Container randvoll mit Plastik rein bzw. raus.

    Mit der Annahme, dass Rohöl 1:1 in Kunststoff umgesetzt wird – (wahrscheinlich eher konservativ) – hat es 5⋅108  t ⁄ (5⋅105  t/Tanker), also überraschende 1000 große Supertanker gebraucht, um das Öl für das Zeug zu den Chemiefabriken zu bringen. Das sind sowas wie drei am Tag. Ganz ehrlich kommt mir diese Zahl enorm, fast unglaublich groß vor. Wahrscheinlich werden doch ganz schön viele der Fabriken durch Pipelines beliefert, zumal wohl auch Gas ein beliebter Ausgangsstoff für viele Kunststoffe ist.

    Mit den Kopfzahlen für Flächen geht noch eine andere Veranschaulichung, denn zufällig ist ja die Fläche der Erde auch so etwa 450 Millionen Quadratkilometer. Mithin produzieren wir für jeden Quadratkilometer Erdoberfläche ziemlich genau eine Tonne Plastik,für jeden Quadratkilometer Land gar drei Tonnen. Wiederum scheint mir das unglaublich viel.

    Um das weiter in Relation zu setzen: Kunststoffe wie Polyethylen haben ungefähr die Dichte von Wasser, also 1000  kg ⁄ m3, und Folie daraus ist etwas wie 0.01 mm oder 10 − 5  m dick (ich nehme mal dieses Angebot als repräsentativ). Weil die Dichte ρ gleich Masse m pro Volumen V und Volumen Fläche A mal Dicke b ist, kann mensch die mit einer Tonne PE-Folie bedeckbare Fläche zu

    A = (m)/(ρb) = (1000  kg)/(1000  kg/m3⋅10 − 5  m)

    und also 100'000 Quadratmetern ausrechnen (Gegenrechnung: ein Kilo Folie könnte so 100 Quadratmeter oder eine größere Wohnung abdecken; das klingt plausibel). Unsere Tonne Plastikfolie bedeckt von unserem Quadratkilometer immerhin ein Zehntel (bzw. zehn von den Hektaren aus den Flächen-Kopfzahlen, die mensch in zwei Minuten durchqueren konnte).

    Ist es tröstlich, dass wir auch bei der gegenwärtigen Plastikproduktion immer noch 10 Jahre bräuchten, bis wir den Planeten ganz in Frischhaltefolie eingewickelt hätten? Na gut, wenn wir das Meer unverpackt ließen, würden wir es auch in drei Jahren schaffen. Wir müssten nur den ganzen anderen Plastikquatsch für drei Jahre weiterwenden, um die Produktion für das große Verpackungsprojekt freizukriegen.

  • Cat Content für die Aufrüstung

    Zwei Kriegsfotos mit Katzen, montiert

    Bilder aus der Tagesschau vom 9.3.2022 und (Inset) aus der taz vom 14.3.2022: Cat content geht immer – leider offenbar auch, wenn patriotische Emotion Tötungshemmung überwinden helfen soll (Rechte bei der ARD bzw. der taz)

    Einem militanten Pazifist wie mir geht das Herz derzeit natürlich oft auf, da ja allenthalben Wladimir Putin heftig gescholten wird dafür, dass er für seine (und damit bis auf Weiteres auch die nationalen russischen) Interessen Menschen töten lässt – die Monströsität entsprechender Ideen hatte ich ja schon im letzten September und davor im Januar angeprangert.

    Leider schließt sich mein Herz dann allzu oft zumindest gegenüber weiten Teilen der öffentlichen Meinung wieder, denn fast immer geht der Ausdruck von Abscheu gegenüber dem Putin'schen Morden über in die Forderung, „wir“ (sc.[1] „unsere“ Regierung) müssten nun aber viel mehr tun, damit „wir“ dann auch besser für „unsere“ (sc. der Regierung) Interessen töten können. Und es sei nicht hinnehmbar, dass „wir“ (sc. die Bundeswehr) gerade nicht hinreichend gut töten könnten. Nur vorsorglich und nebenbei möchte ich zur Erzählung von der kaputten Bundeswehr gehöriges Misstrauen anmelden: if only it were true.

    Immerhin kommen diese Appelle an Wehr- und Tötungsbereitschaft derzeit noch oft im Flauschkostüm daher: es ist wirklich auffällig, wie viele Hunde und Katzen aus den aktuellen Kriegsbildern äugen. Die beiden Kitschbeispiele im Titelfoto sind wirklich nur zufällig aus einem großen Korpus gegriffen, auch heute sind in der taz wieder Bilder von ukrainischen Frauen, die Katzen tragen.

    Klar: Das ist mir viel lieber als harte Männer mit großen Knarren. Das Narrativ von „wir müssen die Tiere vor Putins Grausamkeit retten“ (und deshalb 100 Milliarden Sondervermögen fürs Töten einstellen) relativiert sich allerdings schon deshalb, weil ein jedenfalls vom Flauschfaktor her bemerkenswerter, in Wahrrheit aber sowohl menschen- als auch tierrechtlich ernster Skandal in den Cat Content-Medien im Wesentlichen untergegangen ist. Ich zitiere aus der Zeitung der Roten Hilfe 1/2022 (S. 23):

    Weil die Tierschutz-Hundeverordnung seit Jahresbeginn den Einsatz so genannter Zug- und Stachelhalsbänder verbietet, fürchten die Polizeien des Bundes und der Länder um ihre bei Demonstrationen, Fußballspielen usw. eingesetzten „Schutzhunde“ – sie werden sowohl in der Ausbildung als auch bei jährlichen Trainings mit solchen Halsbändern gequält, um im Einsatz auch beim Anziehen eines normalen Halsbandes in Erinnerung der Schmerzen Befehle auszuführen. Stellten einige Länder ihre Hunde kurzzeitig außer Dienst, suchen sie nun Wege, die Tiere weiter als Waffen abzurichten und einzusetzen. Berlin etwa sieht die Verordnung als nur Ausbildung und Training, nicht aber den Einsatz betreffend, Niedersachsen will im Bundesrat eine Tierquäl-Ausnahme-Erlaubnis für die Polizei erreichen. Brandenburg ignoriert die Verordnung komplett: Es sei nur verboten, Tieren „ohne vernünftigen Grund“ Schmerzen zuzufügen. Die Gewerkschaft der Polizei (GdP) fürchtet ohne Stachelhalsbänder gar „fatale Auswirkungen auf die innere Sicherheit“.

    Das Thema Rüstung für den Tierschutz hat Aspekte, die überraschen mögen. Ich bin auf einen Artikel aus dem lokalen Boulevardmedium hingewiesen worden, in dem steht:

    Unter dem schrecklichen Krieg in der Ukraine leidet nicht nur die dortige Zivilbevölkerung. Viele der Millionen flüchtenden Menschen haben ihre geliebten Haustiere wie Hunde, Katzen oder Frettchen dabei.

    Öhm… Frettchen? Stellt sich jedenfalls raus, dass das auch anderweitig ein Thema ist:

    Ukrainische Haustiere sind in bayerischen Flüchtlingsunterkunft neuerdings willkommen. […] Die Regierungen und Kreisverwaltungsbehörden wurden angewiesen, bei der Aufnahme von Haustieren ukrainischer Geflüchteter großzügig zu sein.

    […] Eigentlich seien die Unterkünfte nicht auf Haltung von Haustieren ausgelegt, erklärt das Ministerium. Aber ein Haustier könne eine wichtige Stütze nach Kriegserfahrung und Flucht sein. Man wolle Trennungen vermeiden.

    BR-Nachrichten

    Zu vergleichen ist das mit einem Urteil des VG Ansbach, AN 15 K 19.30225 vom (ausgerechnet) 20. April 2021, in dem das BAMF wie folgt paraphrasiert wird:

    In den Gründen zum ablehnenden Teil ist zusammengefasst ausgeführt, der Klägerin [eine Frau aus Syrien] stehe kein originärer Anspruch auf Zuerkennung der Flüchtlingseigenschaft aus § 3 Abs. 1 AsylG zu. Sie habe keine drohende oder bereits erlittene Verfolgung in ihrem Herkunftsland glaubhaft gemacht. Die Klägerin sei wegen der Kriegssituation ausgereist.

    Das Gericht (Ansbach ist übrigens seit Napoleon bayrisch) hat die Klage abgewiesen.

    [1]Für den Fall, dass die schöne Abkürzung „sc.“ nicht allen geläufig ist (ich musste auch über 30 werden, bis ich ihr endlich begegnet bin): Das steht für scilicet, und das wiederum für scire licet, was ich verwendungsgeschichtlich inspiriert und frei als „wie jedeR wissen dürfte” übersetzen würde. Mit anderen Worten ist das einsetzbar wie „d.h.“, nur vielleicht mit einem Unterton von „selbstverständlich“ oder so, und noch mit dem Bonus von „Latein, das nicht jede_r kennt“. Also: In jeder Richtung der Jackpot für bildungsbürgerliche Nerds.
  • Now on the Fediverse

    Mastodon logo

    AGPL (copyright)

    While I believe that RSS (or rather Atom a.k.a. RFC 4287) is a great standard for subscribing to media like blogs[1], I strongly suspect that virtually nobody pulls my RSS feed. I'm almost tempted to log for a while to ascertain that. Then again, just based on how few people still run RSS aggregators (me, I'm using a quick self-written hack based on python3-feedparser) I am already quite confident the RSS mainly sits idly on my server.

    At least outside of my bubble, I guess what RSS was designed for has been superceded by the timelines of Facebook, Twitter, and their less shopworn ilk. As a DIY zealot, of course none of that is an option for me. What is an option in this field (and what certainly can do with a bit more public attention) is what these days is commonly called the Fediverse, that is, various sites, servers and client programs in the rough vicinity of microblogging, held together by W3C's ActivityPub protocol.

    What this technobabble means in practice: If you already are in the Fediverse, you can follow @Anselm@social.dev-wiki.de and get a toot whenever I post something here (note, however, that most posts will be in German).

    If you're not in the Fediverse yet, well, choose a community[2] – if I had to choose again, I'd probably take a larger community, as that increases one's initial audience: other communities will, for all I understand, only carry your public toots (i.e., messages) if someone in them has subscribed someone from your community –, get a client – I'm using tootle as a GUI and toot for the CLI – and add my Fediverse id.

    To accomodate tooting about new posts, I have made two changes to by pelican tooling: For one, post.py3 now writes a skeleton toot for the new post, like this:

    with open("next-toot", "w", encoding="utf-8") as f:
      f.write(f"{headline} – https://blog.tfiu.de/{slug}.html\n#zuengeln\n")
    

    And I have a new Makefile target:

    toot:
      (cat next-toot; echo "Post?"; read x)
      toot post < next-toot
    

    In that way, when I have an idea what the toot for the article should contain while I'm writing the post, I edit next-toot, and after I've run my make install, I'm doing make toot to notify the Fediverse.

    A side benefit: if you'd like to comment publicly and don't want do use the mail contact below: you can now do that through Mastodon and company.

    [1]That it is a great standard is already betrayed by the fact that its machine-readable specification is in Relax NG rather than XML schema.
    [2]This article is tagged DIY although I'm not running a Mastodon (or other AcitivityPub server) instance myself because, well, I could do that. I don't, for now, because Mastodon is not packaged for Debian (and for all I can tell neither are alternative ActivityPub servers). Looking at Mastodon's source I can understand why. Also, I won't rule out that the whole Fediverse thing will be a fad for me (as was identi.ca around 2009), and if I bother to set up unpackaged infrastructure, I need to be dead sure it's worth it.
  • Alle Vöglein sind schon da

    Es ist Frühling! Ganz deutlich war das am Mittwoch, als ich im noch kahlen Wald unterhalb der Schauenburg stand und ganz hingerissen war von Zahl, Lautstärke und Veriantenreichtum der Äußerungen der dort ansässigen Vögel. Leider hatte ich nicht die Geistesgegenwart, das gleich aufzunehmen, und gestern war es schon nicht mehr ganz so aufregend. Dennoch mag das folgende einen Eindruck geben, wie es in dem Wald gerade tönt kurz vor Sonnenuntergang:

    Das starke Rauschen, das dem unterliegt, ist übrigens zu guten Teilen nichttechnisch: in der Nähe meines Aufnahmeorts rauscht gerade der Mantelbach, der, ebenfalls ganz in Frühlingsstimmung, im Augenblick richtig viel Wasser führt.

    Das Audio-Element sollte endlos laufen. Leider loopt jedoch zumindest der aktuelle Webkit nicht nahtlos, und beim Übergang auf die nächste Wiederholung ist ein deutliches Ploppen zu hören. Lokal habe ich ein shell-alias, mit dem ich die Nahstelle (jedenfalls bei Wiedergabe über die lausigen Lautsprecher in meinem Computer) nicht erkennen kann:

    alias ambient-voegel='mpv --quiet --loop-file=inf /pfad-zum/vogelkonzert.ogg'
    

    Erwähnen möchte ich noch, dass die Aufnahme alles andere als leicht war. Nicht etwa, weil es mit dem Gerät Probleme gegeben hätte, abgesehen davon, dass das ein einfaches Telefon ohne Windschutz war und deshalb auf externe Beschirmung angewiesen war:

    Foto: Altes Mobiltelefon in verrottendem Restbaumstamm

    Nein, das Problem war Zivilsationslärm, der die Vogelstimmen störte oder gar übertönte. Zuerst ist ein Hubschrauber durchgebrummt, dann klapperten die Hufe eines Freizeitpferdes auf dem asphaltierten Waldweg, und als die allmählich verklungen waren, dröhnte schon das nächste Flugzeug minutenlang durch den Himmel. Dabei ist das Tal gegenüber seiner näheren Umgebung sehr bevorzugt, weil es vom dauernden Lärm von A5, B3 und all den Ortsstraßen recht gut abgeschirmt ist.

    Dass mir all das Dröhnen – das ja sonst auch da ist – gestern auffiel, das muss wohl diese Achtsamkeit sein, von der ich in den letzten Jahren viel zu viel gehört habe. Und alles, was ich dafür gebraucht habe, waren zwei Mikrofone, ein Programm und der Wille, singende Vögel für trübere Zeiten zu konservieren. Ist das eine Marktlücke: Tagesseminar für nur 4000 Euro „Achtsamkeit lernen mit audacity“?

  • Neurasthenie und Post-Covid

    Neulich hatte ich es schon von der Russischen Grippe, einer Pandemie, deren große Wellen zwischen 1889 und 1895 rollten und die plausiblerweise die jüngste große Coronapandemie vor SARS-2 gewesen sein könnte (Forschung aktuell dazu). Zwischenzeitlich ist mir nun aufgefallen, dass es einen weiteren Datenpunkt für Parallelen zwischen der Russischen Gruppe und SARS-2 geben könnte: Die Neurasthenie.

    Bis zu dieser Einsicht hatte ich die aktuelle Einschätzung der Wikipedia geteilt:

    Neurasthenie gehörte im ausgehenden 19. und beginnenden 20. Jahrhundert zu den Modekrankheiten einer gehobenen Gesellschaftsschicht.

    Im Fin de Siécle schien es in der Tat zum guten Ton zu gehören,

    Erschöpfung und Ermüdung, die entweder durch eine zu geringe Belastbarkeit durch äußere Reize und Anstrengungen oder auch durch zu geringe oder zu monotone Reize selbst verursacht sein kann

    an den Tag zu legen. Florian Illies schreibt dazu in seinem Zeitportrait „1913 – der Sommer des Jahrhunderts“:

    1913 fasste man das zusammen unter dem Begriff: »Neurasthenie«. Spötter sangen: »Raste nie und haste nie, sonst haste die Neurasthenie«.

    Was aber, wenn „wir“ (also die, die sich in der Einschätzung „Modekrankheit“ gefielen) den Betroffenen unrecht getan haben? Was, wenn das in Wirklichkeit das Äquivalent von Long Covid, sagen wir Long Russische Grippe, also die neurologischen oder immunologischen Spätfolge einer im höheren Alter ersterworbenen Coronainfektionen war? Wenn, dann sollten wir nicht die Luft anhalten, bis das alles wieder vorbei ist, denn die Neurastheniewelle ebbte, soweit ich erkennen kann, ähnlich wie Thomas Manns Zauberberg[1] erst mit dem ersten Weltkrieg, zwanzig Jahre nach den großen Wellen, ab.

    Ich bereite mich jedenfalls schon mal vor, mal wieder meinen Hut essen zu müssen. Hat wer Hinweise auf ordentliche Literatur zu dem Thema?

    [1]Ich habe aus gegebenem Anlass nachgesehen: Mann erwähnt im ganzen Zauberberg keine Neurasthenie, obwohl das Topos eigentlich das ganze Buch durchzieht. Ob es daran liegt, dass das Buch zehn Jahre nach dem Ende seiner Handlung erschien und es nichts Anrüchigeres gibt als die Mode von gestern?
  • Lang lebe Small Data

    Zu den unerfreulicheren Begleiterscheinungen der Coronapandemie gehörte die vielstimmige und lautstarke Forderung nach „mehr Daten“, selbst aus Kreisen, die es eigentlich besser wissen[1]. Wie und warum diese Forderung gleich mehrfach falsch ist, illustriert schön ein Graph, der seit ein paar Wochen im RKI-Wochenbericht auftaucht:

    Dargestellt sind die Zahlen von „im Zusammenhang mit“ SARS-2 in deutsche Krankenhäuser aufgenommenen PatientInnen. Die orange Kurve entspricht dabei den „Big Data“-Zahlen aus der versuchten Totalerfassung – d.h., Krankenhäuser melden einfach, wie viele Menschen bei der Aufnahme SARS-2-positiv waren (oder vielleicht auch etwas anderes, wenn sie das anders verstanden haben oder es nicht hinkriegen). Die blaue Kurve hingegen kommt aus der ICOSARI-Surveillance, also aus spezifischen Meldungen über Behandlungen akuter Atemwegsinfektionen aus 71 Kliniken, die für Meldung und Diagnose qualifiziert wurden.

    Wären beide Systeme perfekt, müssten die Kurven im Rahmen der jeweiligen Fehlerbalken (die das RKI leider nicht mitliefert; natürlich zählt keines von beiden ganz genau) übereinanderlaufen. Es ist offensichtlich, dass dies gerade dann nicht der Fall ist, wenn es darauf ankommt, nämlich während der Ausbrüche.

    Eher noch schlimmer ist, dass die Abweichungen systematisch sind – die Entsprechung zu halbwegs vertrauten Messungen wäre, wenn mensch mit einem Meterstab messen würde, dessen Länge eben nicht ein Meter ist, sondern vielleicht 1.50 m. Nochmal schlimmer: seine Länge ändert sich im Laufe der Zeit, und auch abhängig davon, ob mensch Häuser oder Giraffen vermisst. Wäre der Meterstab wenigstens konstant falsch lang, könnte mensch die Messergebnisse im Nachhinein jedenfalls in gewissem Umfang reparieren („die Systematik entfernen“). Bei der Hospitalisierung jedoch wird keine plausible Methode die Kurven zur Deckung bringen.

    Das RKI schreibt dazu:

    Im Vergleich zum Meldesystem wurden hierbei in den Hochinzidenzphasen - wie der zweiten, dritten und vierten COVID-19-Welle - höhere Werte ermittelt. In der aktuellen fünften Welle übersteigt die Hospitalisierungsinzidenz der Meldedaten die COVID- SARI-Hospitalisierungsinzidenz, weil zunehmend auch Fälle an das RKI übermittelt werden, bei denen die SARS-CoV-2-Infektionen nicht ursächlich für die Krankenhauseinweisung ist.

    Die Frage ist nun: Welche Kurve „stimmt“, gibt also das bessere Bild der tatsächlichen Gefährdungssituation für das Gesundheitssystem und die Bevölkerung?

    Meine feste Überzeugung ist, dass die blaue Kurve weit besser geeignet ist für diese Zwecke, und zwar weil es beim Messen und Schätzen keinen Ersatz für Erfahrung, Sachkenntnis und Motivation gibt. In der Vollerfassung stecken jede Menge Unwägbarkeiten. Um ein paar zu nennen:

    • Wie gut sind die Eingangstests?
    • Wie konsequent werden sie durchgeführt?
    • Wie viele Testergebnisse gehen in der Hektik des Notfallbetriebs verloren?
    • Wie viele Fehlbedienungen der Erfassungssysteme gibt es?
    • Haben die Zuständigen vor Ort die Doku gelesen und überhaupt verstanden, was sie erfassen sollen und was nicht?
    • Wie viele Doppelmeldungen gibt es, etwa bei Verlegungen – und wie oft unterbleibt die Meldung ganz, weil das verlegende Krankenhaus meint, das Zielkrankenhaus würde melden und umgekehrt?

    Und ich fange hier noch gar nicht mit Fragen von Sabotage und Ausweichen an. In diesem speziellen Fall – in dem die Erfassten bei der Aufnahme normalerweise nicht viel tun können – wird beides vermutlich eher unwichtig sein. Bei Datensammelprojekten, die mehr Kooperation der Verdateten erfordern, können die Auswahleffekte hingegen durchaus auch andere Fehler dominieren.

    Erfasst mensch demgegenüber Daten an wenigen Stellen, die sich ihrer Verantwortung zudem bewusst sind und in denen es jahrelange Erfahrung mit dem Meldesystem gibt, sind diese Probleme schon von vorneherein kleiner. Vor allem aber lassen sie sich statistisch untersuchen. Damit hat ein statistisch wohldefiniertes Sample – anders als Vollerfassungen in der realen Welt – tendenziell über die Jahre abnehmende Systematiken. Jedenfalls, solange der Kram nicht alle paar Jahre „regelauncht“ wird, was in der heutigen Wissenschaftslandschaft eingestandenermaßen zunehmend Seltenheitswert hat.

    Wenn also wieder wer jammert, er/sie brauche mehr Daten und es dabei um Menschen geht, fragt immer erstmal: Wozu? Und würde es nicht viel mehr helfen, besser definierte Daten zu haben statt mehr Daten? Nichts anderes ist die klassische Datenschutzprüfung:

    • Was ist dein Zweck?
    • Taugen die Daten, die du haben willst, überhaupt dafür? („Eignung“)
    • Ginge es nicht auch mit weniger tiefen Eingriffen? („Notwendigkeit“)
    • Und ist dein Zweck wirklich so großartig, dass er die Eingriffe, die dann noch übrig bleiben, rechtfertigt? („Angemessenheit“)

    Ich muss nach dieser Überlegung einfach mal als steile Thesen formulieren: Datenschutz macht bessere Wissenschaft.

    Nachtrag (2022-05-16)

    Ein weiteres schönes Beispiel für die Vergeblichkeit von Vollerfassungen ergab sich wiederum bei Coronazahlen Mitte Mai 2022. In dieser Zeit (z.B. RKI-Bericht von heute) sticht der bis dahin weitgehend unauffällige Rhein-Hunsrück-Kreis mit Inzidenzen um die 2000 heraus, rund das Doppelte gegenüber dem Nächstplatzierten. Ist dort ein besonders fieser Virusstamm? Gab es große Gottesdienste? Ein Chortreffen gar? Weit gefehlt. Das Gesundheitsamt hat nur retrospektiv Fälle aus den vergangenen Monaten aufgearbeitet und ans RKI gemeldet. Dadurch tauchen all die längst Genesenen jetzt in der Inzidenz auf – als sie wirklich krank waren, war die Inzidenz zu niedrig „gemessen“, und jetzt halt zu hoch.

    So wurden übrigens schon die ganze Zeit die Inzidenzen berechnet: Meldungen, nicht Infektionen. Das geht in dieser Kadenz auch nicht viel anders, denn bei den allermeisten Fällen sind die Infektionsdaten anfänglich unbekannt (und bei richtig vielen bleibt das auch so). Wieder wären weniger, aber dafür sorgfältig und kenntnisreich gewonnene Zahlen (ich sag mal: PCR über Abwässern), hilfreicher gewesen als vollerfassende Big Data.

    [1]Vom Totalausfall der Vernunft etwa bei der Luca-App will ich gar nicht anfangen. Der verlinkte Rant von Fefe spricht mir ganz aus der Seele.

    Nachtrag (2023-02-08): Das sehe übrigens nicht nur ich so.

  • Menschliche Leistung: Hundertfünfzig Watt

    Ich bin gerade über einen Artikel in Spektrum der Wissenschaft 11/17 (leider Paywall) an das Paper „Hunter-Gatherer Energetics and Human Obesity” von Herman Pontzer und KollegInnen geraten (DOI 10.1371/journal.pone.0040503, open access). Darin geht es grob darum, dass JägerInnen, SammlerInnen und BäuerInnen ungefähr genauso viel Kohlenstoff verstoffwechseln wie StadtbewohnerInnen, und das, obwohl sich letztere natürlich deutlich weniger bewegen als die anderen. Diese Erkenntnis hätte mich jetzt noch nicht sehr begeistert, doch die folgende Grafik verdient jede Aufmerksamkeit:

    Punktwolke mit großer Streuung und nicht stark ausgeprägter Korrelation

    Energieaufwand pro Tag für westliche Menschen (grau), bolivianische BäuerInnen (blau) und afrikanische Jäger/Sammlerinnen (rot), aufgetragen über eine Art normiertes Körpergewicht. CC-BY Pontzer et al.

    Dieser Plot nimmt – nicht ganz absichtlich – meine Frage zur thermischen Leistung von Menschen auf. Damals war ich ja aufgrund der Messungen meines CO₂-Messgeräts im Büro darauf gekommen, dass ich für ungefähr 16 Watt CO₂ ausatme – das stellt sich, wie erwartet, als kräftige Unterschätzung heraus. Ich sollte das wirklich mal neu ausrechen, zumal ich die wirkliche Stoffwechselrate inzwischen auch besser einschätzen kann, weil mir der CO₂-Verlust durch Fenster, Türen und Blumen dank vieler Daten für den leeren Raum inzwischen gut zugänglich sein sollte.

    Aber das ist für einen anderen Tag. Heute lese ich aus der Grafik von Pontzer et al ab, dass ein Mensch wie ich (70 Kilo alles zusammen, davon vielleicht 20% Fett, also in der Grafik bei log(56) ≈ 1.75 zu suchen) so zwischen 3.3 und 3.6 auf der y-Achse liegt. Nach Delogarithmierung (also: Zehn hoch) würde ich demnach zwischen 2000 und 4000 Kilokalorien am Tag umsetzen. Mensch ahnt erstens, dass Fehlerbalken unter Logarithmierung zusammenschrumpfen – dass „3.3 bis 3.6“ in Wahrheit „innerhalb eines Faktors 2“ heißt, mag für logarithmenferne Bevölkerungsschichten überraschend sein – und zweitens, dass große Teile der Wissenschaft immer noch Einheiten aus der ersten Hälfte des letzten Jahrhunderts verwenden. Seit dessen zweiter Hälfte nämlich kommen Arbeit und Energie bei anständigen Leuten in Joule (einer Kalorie entsprechen 4.2 davon).

    Das führt auf meine Kopfzahlen für heute: Ein Mensch wie ich leistet etwas zwischen 8000 und 16000 Kilojoule am Tag. Hier will sich mensch übrigens die Spannbreite ganz definitiv mitmerken, und zwar als Gegengift zum „Tagesbedarf“, der auf jeder Lebensmittelverpackung aufgedruckt ist[1].

    Unter vielen guten Gründen für die Verwendung des Joule (statt der Kalorie) steht weit oben die Tatsache, dass mensch gleich auf Leistungen in Watt kommt (das ist nämlich ein Joule pro Sekunde). Wer im Kopf hat, dass ein Tag 86400 Sekunden lang ist, erhält meine Leistung in üblichen Einheiten zwischen den 100 und 200 Watt, zwischen denen ich im November-Post bedingt durch DuckDuckGo und meine grobe Erinnerung schwankte.

    Bemerkenswert an der Pontzer-Grafik finde ich noch die beiden Ausgleichsgeraden für westliche Männer (durchgezogen) und Frauen (gestrichelt). Ich habe ja schon immer große Zweifel an Gender-Unterschieden in vielen „Normalbereichen“ gehabt, die es für Tagesbedarfe und allerlei Laborwerte gibt; so war z.B. in meiner Zivildienstzeit der Normalbereich des Kreatininspiegels für Frauen eine ganze Ecke höher als für Männer, und ich bin immer noch fest überzeugt, dass das einen rein sozialen (Frauen trinken im Schnitt weniger, weil sie es meist deutlich schwerer haben, unbelästigt zu pinkeln) und keinen vertretbar als biologisch zu bezeichnenden Grund hat.

    Warum nun der Energieumsatz von Frauen steiler mit ihrer Masse wachsen sollte als bei Männern, warum sie ab einer Masse von vielleicht 75 Kilo (da würde ich die Mit-Fett-Masse des Schnittpunkts der Geraden sehen) dann sogar mehr leisten sollten als gleichschwere Männer, das leuchtet mir nicht ein – wie mir auch nicht einleuchtet, warum leichtere Frauen praktisch einen Faktor zwei weniger leisten sollten als gleichschwere Männer. Aber wer die Punktwolken mal qualitativ auf sich wirken lässt, wird ohnehin Zweifel an den Ausgleichsgeraden entwickeln.

    Tja: Mal sehen, wie sich das entwickelt, wenn die Systematiken von Pontzers Methode zur Bestimmung des Energieumsatzes (Leute trinken einen Haufen D₂-18O-Wasser, und mensch verfolgt, wie über die nächsten Tage Deuterium und der 18er-Sauerstoff im Urin runtergehen) etwas besser verstanden sind.

    Pontzer scheint jedenfalls bereit zu sein, irrtümliche Dogmen über Bord zu werfen. So ist er Mitautor einer Arbeit von Anna Warrener et al (DOI 10.1371/journal.pone.0118903), die seinerzeit (2015) auch breit durch die Presse ging. Das Paper zerstörte (nach meinem Eindruck als Laie in dem Feld) die lange quasi konkurrenzlose These, der doch sehr grenzwertig enge Geburtskanal menschlicher Frauen sei ein physiologischer Kompromiss, denn ein breiteres Becken würde sie beim aufrechten Gang behindern. So ein „lass uns das mal nachrechnen, auch wenn es ganz plausibel klingt“ ist für mich ein recht gutes Zeichen für ordentliche Wissenschaft besonders dann, wenn die plausible Vermutung nachher nicht rauskommt.

    [1]Wobei der „Tagesbedarf“ bei den „Kalorien“ nochmal besonderer Mumpitz ist: der „Brennwert“, der dort angegeben ist, ist genau das, ein Brennwert. Das Futter wird getrocknet und verbrannt, um auf „die Kalorien“ zu kommen. Am Beispiel von Holz oder Rohöl ist, glaube ich, gut einsichtig, dass das nur in Ausnahmefällen viel zu tun hat mit dem, was der menschliche Körper daraus an Bewegung oder Fett machen könnte. Sprich: Kalorienzählen ist schon von der Datenbasis her Quatsch.
  • Vom Nutzen der Diversität

    Dafür, dass ich das Buch „SARS from East to West“ als „unfassbar langweilig“ beschrieben habe, gibt es schon ziemlich viel her, denn nach meiner ersten Besprechung hat es mit den bekannten Szenarien ja schon einen zweiten Post abgeworfen. Und jetzt gleich noch einen. Wenn ich kurz drüber nachdenke – eigentlich ist das ein Kennzeichen von Wissenschaft: Weite Strecken von mühsamer Langeweile unterbrochen von aufregenden Erkenntnissen, die mensch unbedingt gleich mitteilen möchte. Hm.

    Heute jedenfalls will ich auf eine Geschichte aus Kapitel 8 des Buchs hinweisen. In diesem beschäftigen sich Joan Deppa, Andrew Seaberg und Grace Han Yao (die die Arbeit an der „School of Public Communications“ in Syracuse, NY gemacht haben und danach Public Communications-Profin, Investmentheini und Marktforscherin geworden sind) mit dem öffentlichen Nachrichtenfluss im Verlauf der SARS-1-Pandemie von 2003. Während nämlich, wie neulich zusammengefasst, spätestens seit dem 1. März 2003 in Ostasien klar war, dass eine ungewöhnliche Krankheit umging, tauchten in „westlichen“ Medien (Deppa et al haben CNN, die New York Times und die Washington Post untersucht) die ersten „richtigen“ Geschichten zu SARS erst nach der weltweiten Warnung der WHO am 15. März auf, auf die Titelseite der NYT hat es SARS gar erst am 7. April geschafft.

    Als am 23.2.2003 die kanadische Touristin, die sich nahe dem Zimmer 911 angesteckt hatte, in Toronto landete, wussten aber dennoch KanadierInnen von SARS: In Vancouver und Toronto lebten schon damals viele Menschen, die sich mehr oder weniger als chinesische Expats verstanden und insbesondere chinesischsprachige Zeitungen mit chinesischen Meldungen lasen. Eine von ihnen war Agnes Wong, die in eben dem Krankenhaus arbeitete (dem Scarborough Grace), in das die Touristin eingeliefert worden war. Als sich deren Sohn am 7. März ebenfalls mit einer schlimmen Lungensymptomatik in der Notaufnahme vorstellte, erinnerte sich Wong an einen Artikel aus der in Toronto erscheinenden Sing Tao (eine der erwähnten Expat-Zeitungen), in dem über SARS-Fälle in Hong Kong berichtet worden war. Und dann ging es so weiter:

    Die ursprüngliche Diagnose des Patienten im Scarborough Grace-Krankenhaus war Tuberkulose gewesen [...] Wong jedoch verständigte die Nachtschwester und bat sie, die Reiseanamnese der Mutter des Patienten zu prüfen. Sie erfuhr bald, dass die Mutter in Hong Kong gewesen und krank zurückgekommen war. Wong drängte die Pflegekräfte, den ärztlichen Dienst zu verständigen. Und so, das jedenfalls ist die Darstellung des Fernsehsenders CBC und der Zeitung Toronto Star, wurde der erste Fall von SARS in Kanada gefunden.

    Sollte euch mal wer fragen, was die Sache mit der Diversität – die ja tatsächlich so oft in Reden von Marktradikalen vorkommt, dass mensch ins Grübeln kommen mag – soll: Vielleicht erinnert ihr euch an diese Geschichte.

    Und wo ich schon über das Buch schreibe, kann ich vielleicht noch einen schnellen Nachtrag zum bekannten Szenario-Post loswerden in dem ich ja spekuliert hatte, dass die Murdoch-Presse in Kanada ähnlich destruktiv agiert haben könnte wie Springer hier. In der Tat findet sich im siebten Kapitel des Buchs (das vor allem eine Verhältnismäßigkeitsabwägung der Isolationsmaßnahmen vornimmt) folgende Passage:

    Ganz besonders die konservative Presse spielte die Bedrohung durch SARS anfänglich herunter. Die Unterstellung war, alarmistische Berichterstattung über kleinere Probleme diene vor allem dazu, Zeitungen zu verkaufen und die Forschungsbudgets nordamerikanischer Universitäten zu erhöhen.

    Wie gesagt: Bekannte Szenarien.

  • Nicht schon wieder!

    Ich habe heute an einer Kundgebung, nun, gegen den Krieg in der Ukraine auf dem Heidelberger Uniplatz teilgenommen, und zwar so:

    DemoteilnehmerIn mit Schild: „1914 – 2022 – Nicht schon wieder Kriegskredite”

    Ich kann leider nicht sagen, dass ich mich in der großen Menge – es werden so um die 1000 Menschen gekommen sein – sonderlich wohl gefühlt hätte, schon, weil fast alle, die da waren, es im Januar 2020 nicht für nötig befunden hatten, gegen den unfassbaren, thematisch natheliegenden, jedoch die eigene Regierung angehenden Skandal auf die Straße zu gehen, dass „wir“ Nuklearwaffen einsetzen wollen. Jedenfalls waren wir bei der Demo damals vielleicht 20 Leute. Mir wäre schon etwas wohler, wenn zu beiden Anlässen je 500 gekommen wären.

    Unschön war aber vor allem, dass in den Redebeiträgen durchweg von der „Solidarität mit der Ukraine” die Rede war. „Solidarität” wird, auf Länder gerichtet, ein gefährliches Konzept, ganz genau wie bei einer Mischung mit „Volk“, zu dem Bertolt Brecht (der 1914 selbst noch patriotische, kriegsbegeisterte Gedichte geschrieben hatte – Besinnung ist wichtig) einst ausführte:

    Wer in unserer Zeit [ok, das war 1935] statt Volk Bevölkerung und statt Boden Landbesitz sagt unterstützt schon viele Lügen nicht. Er nimmt den Wörtern ihre faule Mystik. Das Wort Volk besagt eine gewisse Einheitlichkeit und deutet auf gemeinsame Interessen hin, sollte also nur benutzt werden, wenn von mehreren Völkern die Rede ist, da höchstens dann eine Gemeinsamkeit der Interessen vorstellbar ist. Die Bevölkerung eines Landstriches hat verschiedene, auch einander centgegengesetzte Interessen, und dies ist eine Wahrheit, die unterdrückt wird.

    Solidarisch will mensch also sein mit den Menschen in der Ukraine, und diese sollten im Augenblick vernünftigerweise mindestens ein gemeinsames Interesse haben: Der Krieg muss möglichst schnell aufhören. Ein im Wesentlichen unausweichliches Korollar davon ist: die Waffen müssen raus. Wer die Regierung stellt, ist demgegenüber ganz sicher sehr zweitrangig (und zudem Brechts entgegengesetzten Interessen unterworfen). In jedem Fall bleibe ich dabei, dass für eine Regierung kein einziger Mensch sterben sollte.

    Nur zur Klarheit, weil das Dementi des Putinverstehens ja derzeit zum guten Ton gehört: Mein Problem ist nicht das allgemeine Sentiment, dass Putin ein Schurke ist. Das ist er, und beileibe nicht nur, weil er einen Krieg angefangen hat. Um so mehr bleibt übrigens ein Imperativ, Edward Snowden die Rückkehr in eine etwas freiere Gesellschaft zu ermöglichen – dass „wir“ ihn in Russland verrotten lassen, ist niederschmetternde Undankbarkeit. Zum Krieg als Totalausfall der Zivilisation hatte ich mir in Töten und Massenschlachten schon einige Empörung von der Seele geschrieben, die ganz genau so natürlich auch russischen Potentaten und, igitt, Ex-Geheimdienstlern gilt.

    Mit dem durch die gegenwärtigen Medienlandschaft geprägten Gefühl, meine Pappe enthalte nicht genug derartiger Klarstellung, bin ich mit einigen Bedenken zur Kundgebung gegangen. Um so angenehmer war ich überrascht von der durchweg positiven Aufnahme meiner Parole vom „Nicht schon wieder Kriegskredite“: mehrere TeilnehmerInnen sind extra zu mir gekommen, um mir ihre Unterstützung auszusprechen, etliche haben Transpi-Portraits geschossen, einer hat sogar Szenenapplaus gegeben, nicht eineR hat nasegerümpft.

    Es ist beruhigend zu wissen, dass die Erinnerung an die Geschichte der Kriegskredite von 1914 noch vielfach wach ist, Und daran, wie sich SozialdemokratInnen (zu denen sich in der heutigen Wiederholung offenbar auch ziemlich viele LinksparteigängerInnen gesellt haben) diese damals durchaus nicht nur rein patriotisch zurechtlogen: „aber wir müssen uns doch wehren gegen das finstere, reaktionäre Zarenreich“, „…die Liberalen aus England, die uns unsere Sozialversicherungen wegnehmen wollen“. Das ist wieder ein Gesicht der autoritären Versuchung: „Wenns schon keine gute Lösung gibt, dann lasst uns wenigstens Gewalt versuchen“.

    Das ist, so viel lehrt die Geschichte, eigentlich immer falsch – Ausnahmen von dieser Regel sind so rar, dass sie wahrscheinlich niemand, der_die das hier liest, je erleben wird.

    [1]Ich kann der Beobachtung nicht widerstehen, dass sich „unsere“ und „ihre“ Operationen selbst im Timing ähneln. Wir: Separation des Kosovo mit dubiosen „Freiheitskämpfern“ 1999, diplomatische Anerkennung gegen den Willen der Gegenseite nach neun Jahren im Jahr 2008. Sie: Separation des Donbas mit dubiosen „Freiheitskämpfern“ 2014, diplomatische Anerkennung gegen den Willen der Gegenseite nach acht Jahren 2022.

« Seite 11 / 18 »

Letzte Ergänzungen