• Ökumenische Linke

    Ich bin bekennender Fan von David Rovics. Klar fühlen sich seine Palästinasoli-Songs in der postantideutschen Linken zumindest mal gewagt an, sein Lied vom besseren Anarchisten entschuldigt vielleicht etwas sehr viel, und mein antimilitaristisches Herz blutet an einigen Stellen vom Song for Hugh Thompson (der übrigens schon am Deutschlandfunk lief). Aber in allen Kämpfen, in denen es eine richtige Seite gibt, steht er konsequent auf dieser, und ich finde viele seiner Lieder ernsthaft mitreißend, angefangen wohl mit dem Bluegrass-Reißer When the Minimum Wage Workers Went on Strike, das eine (letztlich leider wenig erfolgreiche) Organisierung von MindestlöhnerInnen an der Harvard University begleitete, während ich so um 2000 rum in der Gegend gearbeitet habe. Damals wurde ich auf David aufmerksam, und es spricht für seine Umtriebigkeit, dass später ganz unabhängig davon Bekannte von mir Auftritte von ihm in Heidelberg organisiert haben.

    Nun, David hat jetzt einen Blogpost geschrieben, der mir in vielerlei Hinsicht aus der Seele spricht: Confessions of an Ecumenical Leftist. Wer hinreichend gut Englisch kann und sich für linke Politik interessiert, sollte das, finde ich, lesen.

  • Die Gewinne privatisieren, die Verluste sozialisieren

    Selbst die verbohrtesten Marktradikalen erinnern sich plötzlich an „die Gesellschaft“, wenn irgendwo Verluste drohen; die Privatisierung von Profiten (z.B. Mobiltelefonie oder Postdienst in Städten) bei Sozialisierung von Verlusten (z.B. Mobiltelefonie oder Postdienst auf dem Land) ist Grundpfeiler des „Neoliberalismus“[1].

    Ein schönes und halbwegs aktuelles (November 2019) Beispiel ist die „Mobilfunkstrategie“ des Bundes, der 1.1 Milliarden Euro ins Schließen von Funklöchern stecken will; vernünftig wäre ja, statt dreier löchriger privater ein flächendeckendes öffentliches Netz zu betreiben, bei dem die TelefoniererInnen in den Städten die am Land subventionieren würden. Aber das würde die religiösen Gefühle der Marktgläubigen verletzen. Das geht nicht.

    Das Prinzip der Sozialisierung von Verlusten hat heute morgen ein Jörg Asmussen, seines Zeichens „Hauptgeschäftsführer beim Gesamtverband der Deutschen Versicherungswirtschaft” (was tut eigentlich ein Hauptgeschäftsführer, das ein Geschäftsführer nicht tut?), in entwaffnender Ehrlichkeit illustriert, als er in einem Deutschlandfunk-Interview erklärte:

    Um von hinten anzufangen: Ein Prozent der Gebäude ist in der Tat nicht versicherbar gegen Elementarschäden. Da muss man sicher eine gesamtgesellschaftliche Lösung finden. 99 Prozent sind versicherbar und, ich glaube, auch zu akzeptablen Kosten. [...] Das Ein-prozent-Problem ist in der Tat existent.

    Im Klartext: Mit 99% der Häuser können wir ein Geschäft machen – zumal wir bei denen ohnehin nur sehr selten bezahlen müssen –, das restliche Prozent – die nämlich, bei denen erwartbar Schäden eintreten, die Einzelpersonen regelmäßig überfordern – lohnt sich nicht für uns, die soll der Staat übernehmen. Klingt das nur in meinen Ohren so dreist?

    Wobei Versicherungen natürlich insgesamt so ein Thema sind. Das Land Baden-Württemberg zum Beispiel hat sich, als ich das letzte Mal damit zu tun hatte, grundsätzlich nicht versichert, und die Argumentation ging etwa so: Wir sind so groß, dass jede Sorte Schadensfall fast sicher auftritt. Damit kann uns aber eine Versicherung gar keine Wette gegen dessen Eintreten[2] anbieten, die für uns vorteilhaft ist. Daher gleichen wir solche Schäden lieber gleich intern aus. Das spart Geld, weil zwischen Geldquelle (Land BaWü) und Geldsenke (Land BaWü) nicht noch die Versicherung ihre Kosten und ihren Profit abschöpft.

    Das ist (modulo Bürokratiedefizite) exakt richtig: Versicherungen sind ganz schlicht eine kostspielige Art, Mängel im gesellschaftlichen Solidarsystem auszugleichen. Wenn das Land den Solidargedanken von seinem Apparat auf alle BügerInnen ausweiten würde, könnten wir einen Haufen Arbeitsplätze einsparen: Die von VersicherungsvertreterInnen, von den Leuten, die deren Werbung designen, die vieler der Leute, die die „Schadensregulation“ behandeln, die der Leute, die die hässlichen Versicherungs-Hochhäuser bauen und so fort.

    Zugegeben: Dieser klare Gedanke wird bei, sagen wir, Haftpflicht-Versicherungen in der Realität an sinnlosen, aber bis zum Ausbau des Bildungswesens wahrscheinlich unvermeidlichen Neid- und Missgunstdebatten („was muss der Typ auch heimwerken?“) scheitern. Speziell bei Naturkatastrophen ist das jedoch ersichtlich kein (großes) Problem: Die generelle Hilfsbereitschaft ist eigentlich immer so groß, dass der Staat in diesen Fällen weit besser und billiger arbeiten wird als Versicherungen, während zwischen Katastrophen keine Grundkosten für den Verkauf und die Verwaltung von Policen anfallen.

    Tatsächlich ist aber die Ablehnung, die 1% zu versichern, die es wirklich bräuchten, nicht nur frech, sondern auch ganz realistisch. Denn angenommen, wir haben die Fluten der letzten Wochen und noch einen Faktor 10 drauf – sowas kommt ganz sicher irgendwann, und wenn es ein explodierendes Eifelmaar ist: Selbst eine Allianz würde damit nicht fertig. Das kann nur eine Gesellschaft als Ganzes schultern, und das Aufräumen und Wiederaufbauen ist nicht durch Sparen und Kapitalanlage hinzubekommen. Sowas geht nur durch aktuelle Arbeitskraft und mithin dem, was bei der Rente „Umlageverfahren“ heißt.

    Die Versicherer können also mit größeren Naturkatastrophen gar nicht wirklich umgehen. Verlangt ja auch niemand, der/die ganz bei Trost ist. Nur sollen sie dann bitte auch nicht daran (und der Angst vor ihnen) verdienen wollen.

    [1]Das steht hier in Anführungszeichen, weil der – ganz nebenbei von sehr autoritären HerrscherInnen wie Pinochet, Thatcher und Reagan durchgesetzte „Neoliberalismus“ dem zwar schon etwas ramponierten, aber an sich doch ganz akzeptablen „liberal“ einen wirklich hässlichen Klang gibt. Das ist übrigens eine interessante Sorte von missglückter Antisprache, die auch mal einer Untersuchung harrt.
    [2]Ja, eine Versicherungspolice kann sehr gut als Wette analysiert werden: Die Versicherung wettet, dass ein Ereignis nicht eintritt (z.B. ein Unfall bei einer Unfallversicherung; oder ein später Tod bei einer Rentenversicherung). Wenn sie gewinnt, streicht sie die Prämien ein. Verliert sie die Wette, muss sie die Versicherungssumme zahlen. In diesem Sinne wären Versicherungen, die einen großen Zirkus bei der Schadensregulierung machen, einfach schlechte Verlierer…
  • Sport ist rechts

    Die titelgebende These wirkt in dieser knappen und etwas apodiktischen Form vermutlich etwas steil, zumal blütenreine Linke wie Klaus Theweleit Fußballfieber gestehen und weniger prominente, aber nicht minder glaubhafte Linksradikale als Ultras hingebungsvoll Fahnen schwingen. Zwischen den sportlichen Großevents des Jahres – Männerfußball in Europa und Südamerika sowie die Olympiade – möchte ich dennoch gerne für sie argumentieren, engelszünglend eintretend für jedenfalls ein wenig ironische Distanz zu Leistungshunger und Hymnenkult.

    Zu meiner Untersuchung der These braucht es eigentlich nur eine Arbeitsdefinition von „links“ oder „fortschrittlich“. Spätestens seit der französischen Revolution hat sich da „den Grundwerten Freiheit, Gleichheit und Solidarität[1] zu gleichen Teilen verpflichtet“ bewährt. Vorsorglich: Natürlich gibt es vieles, das diese Grundwerte fast gar nicht berührt. Die Entscheidung zwischen Musik von Richard oder einem der Johann Sträuße zum Beispiel, oder die zwischen Toast- und Vollkornbrot. Das ist dann „unpolitisch“, jedenfalls, solange mensch nicht allzu tief bohrt.

    „Sport“ allerdings – im durch Sportfernsehen und -vereine bestimmten Sinn – kollidiert recht fundamental mit jedem einzelnen Grundwert. Das erklärt auch zwanglos, warum SportfunktionärInnen ziemlich durchweg rechts denken (Ausnahmen wie die Crew St. Pauli bestätigen die Regel eben durch ihre Exotik) und auch entsprechend organisiert sind. Mein Lieblingsbeispiel dafür bleibt Gerhard Mayer-Vorfelder, zu verschiedenen Zeiten seines Lebens DFB-Chef und persönlicher Referent des Nazirichters Filbinger.

    Gegen Freiheit

    Der erste Gedanke bei Sport vs. Freiheit könnten die vielen barocken Regeln der meisten Sportarten sein. Um mal eine Maßstäbe setzende Norm zu erwähnen: bis 2012 durften Frauen nur in Bikins mit auf ein paar Zentimeter begrenzter Breite des Beinstegs Beachvolleyball spielen (kein Scheiß). Aber nein, solange Menschen sich freiwillig auf Regeln einigen, wäre daran wenig zu kritisieren. Wo Menschen gezwungen werden, Sport zu treiben und die Regeln deshalb keine Gegenstände von Aushandlung mehr sind, ist das Problem nicht im Sport, sondern in den externen Zwangssystemen.

    Nein, wer über Freiheit und Sport nachdenken will, möge ans Heidelberger Neckarufer kommen, wenn gerade Rudertraining ist: Der Kasernenhofton der TrainerInnen lässt keinen Raum für Zweifel[2]. Das ist am Fußballplatz nicht anders als in der Gymnastikhalle oder im Schwimmbad: Der Ton ist immer der von Befehl und Gehorsam. Bei Mannschaftssportarten kommen auch mal zusätzliche Befehlsebenen hinzu, Kapitäne im Fußball etwa, die Gehorsam erwarten und im Zweifel durchsetzen müssen, wenn sie ihren Job behalten wollen.

    Der militärische Drill skaliert zu den bedrückenden Masseninzenierungen sich synchron bewegender TurnerInnen bei Feierlichkeiten autoritärer Regimes zwischen IOK und SED. Das hat, a propos Turnen, Methode; Turnvater Jahn war glühender Patriot und Militarist und verstand seine Turnerei durchaus als paramilitärisches Training mit dem Ziel der Ablösung der ja noch halbwegs fortschrittlichen Potentaten von Napoleons Gnaden durch – nun, de facto jedenfalls die erzreaktionären Regierungen des Vormärz.

    Gehorsam und Schleiferei als Antithesen zur Freiheit sind im Sport kein Einzelfall. Sie sind von Anfang an dabei und prägen das Geschehen um so mehr, je mehr etwas Sport (und nicht vielleicht Spiel, Spazierengehen, Wohinfahren, Beetumstechen, Staubwischen) ist.

    Gegen Gleichheit

    Zum Gegensatz von Sport und Gleichheit ist zunächst wegen Offensichtlichkeit nicht viel zu sagen: in praktisch jeder Sportart geht es darum, wer der/die „BessereN“ sind. Tatsächlich könnte der Wettkampf geradezu als Definition von Sport gelten: Es ist nicht sehr übertrieben, die Grenze zwischen auf Schlittschuhlaufen (kein Sport) und Eiskunstlauf (Sport) dort zu ziehen, wo RichterInnen mit ihren Zahlentäfelchen auftauchen und jedenfalls letztendliche AdressatInnen der Handlungen auf dem Eis sind.

    Wettbewerb charakterisiert Sport auch dann, wenn das private „Sport machen“ – joggen gehen, vielleicht auch mal in die Muckibude – davon eingestandenermaßen nur peripher betroffen sein mag. Selbst dabei scheint die Motivation allerdings oft genug in der Besserstellung in diversen Konkurrenzsituationen (im Zweifel bei der Brautwerbung) zu liegen.

    Sport als Verpackung für Wettbewerb hat übrigens Auswirkungen auf die Gesamtgesellschaft, beispielsweise wenn das positive Image von Sport über schräge Metaphern regelmäßig ansonsten offensichtlich schädliche Politiken („Exportweltmeister“ ist vielleicht das furchtbarste Beispiel) rechtfertigt.

    Die Übersteigerung von Ungleichheit ist der Heldenmythos, bei dem ein einzelner (meist) Mann alle anderen hinter sich lässt und breiteste Bewunderung erfährt. Selbst in China bin ich schon auf Franz Beckenbauer angesprochen wurden, und selbst wenn die Beatles nicht beliebter als Jesus sein sollten, Diego Maradona ist es garantiert. Diese Malaise des Sportbetriebs zumindest haben die ArbeitersportlerInnen während der Weimarer Republik erkannt. Diese betrieben damals im Fußballbereich eine breite alternative Liga gegen den bereits gewohnt rechtslastigen DFB und bemühten sich in der Berichterstattung um mehr Gleichheit:

    man lehnte den „Starkult“ ab, verweigerte „Rekordjagden“, wollte keine „Kanonenzuchtanstalt“ sein. Deshalb wurden viele Jahre gar keine Spielernamen veröffentlicht. In der Presse nannte man stattdessen z. B. „den Rechtsaußen“ oder „den Mittelstürmer“.

    Zu August Postler auf arbeitersport.de

    Empfehlen möchte ich in diesem Zusammenhang die SWR2 Wissen-Sendung vom 29.6.2012, aus der ich von der Existenz der Arbeiterfußball-Liga und ihren journalistischen Mindeststandards erfahren habe.

    All das hatte mit der Machtübergabe an die Nazis ein Ende, zumal sich der DFB bereitwillig gleichschaltete, wenn er schon 1933 erklärte:

    Wir haben mit den ganzen Sozialdemokraten und Kommunisten nichts zu tun und wir sorgen auch dafür, dass weder Juden noch Arbeiter-, ehemalige Arbeitersportler bei uns im Verband offiziell Mitglied werden.

    DLF vom 27.10.2018

    Dem Vorbild des Arbeitersports zu folgen wäre, so schlage ich engelszüngelnd vor, schon mal ein erster Schritt zur Entpolitisierung des Sports: Keine Namen, keine Nationen. Wer sich erinnert, wie Boris Becker quasi im Alleingang die Tennisclubs der Republik gerettet hat, mag sich fragen, wie viel „Breitensport“ ohne nationalen Enthusiasmus eigentlich übrig bleiben würde. Und was davon. Das dürfte dann der unpolitische Teil sein.

    Gegen Solidarität

    Was „Solidarität“ angeht, kann ich mir speziell von meinen Ultra-FreundInnen den empörten Einwand vorstellen: „Aber du hast ja gar keine Ahnung, wie toll der Zusammenhalt bei uns ist. Solidarischer gehts gar nicht.“

    Nun ja. In Abwandlung des Luxemburg-Klassikers ist dazu zunächst festzustellen, dass Solidarität immer die mit den anderen ist, also nicht mit den Leuten der eigenen Gruppe und schon gar nicht denen der eigenen „Nation“. Und dass Solidarität auf jeden Fall mal kritisch ist – Solidarität mit, sagen wir, Bahnchefs heißt eben nicht, bedingungslos zu rechtfertigen, was diese so tun, sondern zu kritisieren, wie sie, neben vieler anderer Menschenfresserei, Leute hinter Autotüren treiben. Das also, was Fangruppen zusammenhält, ist keine Solidarität, es ist Abgrenzung, es ist Gruppenidentität, also das, was so gut wie alle Massenverbrechen der Geschichte – Kriege, Pogrome, Unterdrückung – erst ermöglicht hat (vgl. in diesem Zusammenhang das Minimalgruppenparadigma).

    Solidarität ist genau das Gegenteil von der Bildung von Untergruppen, die sich zu be(wett)kämpfen haben, und sei es über die Ausdeutung von StellvertreterInnen wie in der Leichtathletik. Wer anfängt, Mannschaften zu bilden, wer anfängt, für, was weiß ich, Angelique Kerber zu fiebern, weil sie ja „zu uns“ gehört, hat angefangen, sich aus der Solidarität mit den „anderen“ zu verabschieden statt, wie es Gebot der Solidarität ist, weniger Othering (ist das noch ein populärer Begriff?) zu betreiben.

    Und nun?

    Nach all dem verwundert wohl nicht, dass sich so gut wie alle rechten Ideologeme recht direkt im Sport wiederfinden, von Nationalismus (die Hymnendebatten scheinen ja mal wirklich aus einem anderen Jahrhundert zu kommen) über Homophobie (eine kommerzielle Fußballseite dazu) bis Sexismus (selbst wenn mensch an zwei Geschlechter und das Wundermittel Testosteron glaubt, kann wohl niemand die Geschlechtertrennung beim Schießen plausibel machen).

    Heißt das, dass Linke besser nicht joggen sollten? Am besten jede Anstrengung meiden? Nö, sicher nicht. Es geht hier nicht um Fleißpunkte oder moralische Reinheit. Wer mag, darf ja auch an James Bond-Streifen Spaß haben, die vergleichbar viele rechte Ideologeme bedienen. Zumindest aber im Kopf sollte mensch schon haben, dass Sportkonsum schlüpfriger Boden ist – nicht umsonst fanden die ersten größeren Angriffe auf Geflüchtete in der „neuen“ BRD nach dem Endspiel der Männerfußball-WM 1990 statt.

    Wer selbst läuft oder tritt, ist vielleicht in geringerer Gefahr. Aber dennoch: im Hinblick auf die Welt nach uns wärs schon besser, die Alltagswege mit dem Fahrrad zurückzulegen und das Gemüsebeet zu hacken als mit dem Auto in den Wald oder die Muckibude zu fahren.

    Klar, die soziale Symbolik dabei muss mensch aushalten wollen: „Ist der so arm, dass er kein Auto hat?“ Dazu will ich abschließend kurz auf den Ursprung unseres modernen Sportbegriffs eingehen, soweit ich ihn überblicke. Die gehobenen britischen Kreise im 18. Jahrhundert nämlich kamen wohl zur Einsicht, es gehe nicht so ganz ohne Bewegung und Anstrengung. „Nützliche“ Bewegung, körperliche Arbeit zumal, würde aber den Verdacht erregen, mensch habe es nötig, sei also nicht wirtschaftlich erfolgreich, mit anderen Worten: arm.

    Sport wäre dann schon im Ursprung die Demonstration von Wohlstand, wichtiger: Nicht-Armut. Ich muss nicht körperlich arbeiten, ich habe immer noch genug Zeit, mich sinnlos auszutoben, aber auch die Disziplin, mich dabei klaren Regeln zu unterwerfen, und ich habe obendrein das Geld für die tollen Accessoires, die es für Sport X braucht. Wenn ich vor allem am Wochenende durch die Berge hier radele und die Ausrüstung vieler anderer RadlerInnen ansehe, gewinnt diese These massiv an Plausibilität, bis hin zu den Fahrrädern, die oft demonstrativ alltagsuntauglich sind. Die Nachricht scheint zu sein: „Ich habe natürlich wie jeder anständige Mensch ein Auto, dieses Ding hier ist für mich nur Sportgerät.“

    Die damit verbundene zusätzliche Warenproduktion schadet dann aber schon, der …

  • Adieu, RKI-Berichte

    Oh je! Im RKI-Bericht von heute heißt es:

    Ab Montag, 19.07.2021, wird die Berichterstattung umgestellt: Eine tägliche kürzere Berichterstattung wird ergänzt mit einer ausführlichen Berichterstattung donnerstags.

    Ich gestehe offen: ich finde das ein wenig bitter. Auch wenn die Berichte nie wirklich das sagten, was sich wohl alle gefragt haben („Wo stecken sich diese Leute denn nun an? Was für Ausbrüche gibts im Land?“), waren die Zahlen und Grafiken, die da jeden Tag kamen (na ja, seit ein paar Wochen schon nicht mehr am Wochenende) durchaus ein beruhigendes und strukturierendes Element der Coronazeit.

    Die RKI-Deutschlandkarte mit farbkodierten Inzidenzen

    Gerade, wo die Karte wieder bunter wird, strafft das RKI seinen täglichen Corona-Bericht. Hm.

    Die sich windenden Inzidenzlinien der Bundesländer, die bunt gefärbten Landkreise, bei denen Extreme oft gute und manchmal auch gar keine guten Erklärungen hatten, das Schwingen der R-Wert-Schätzungen und natürlich die nach Wochentag wechselnden Features vom Wochenvergleich am Dienstag bis zur Mortalitätsstatistik am Freitag: Mir wird das fehlen, jedenfalls, solange Corona rein ethisch nicht ignorierbar ist.

    Wann ich Corona ethisch ignorierbar finde, habe ich indes noch nicht ganz klar. Wahrscheinlich werde ich irgendwann im September finden, wer dann noch nicht geimpft ist, kann es entweder nicht (und dann hat Zuwarten auch keinen Wert) oder wollte es nicht (und kann dann von mir keine Rücksicht erwarten).

    Aber wie das wirklich aussieht, wenn die Inzidenzen irgendwo jenseits der 1000 liegen – und das würden sie, wenn die IgG-Spiegel der meisten Leute wieder halbwegs normal sind und Schulen, Büros, Kneipen und Discos offen – ach, wer weiß?

    Als Abschiedsbetrachtung zu den gewohnten RKI-Berichten noch etwas aus den Tabellen zu „Betreuung, Unterbringung und Tätigkeit in Einrichtungen“ (die ich eingestandenermaßen meist überblättert habe): Dort werden ja unter anderem nach §36 IfSG „Untergebrachte“ diskutiert, was Pflegeeinrichtungen, Obdachlosenunterkünfte, Lager für (oder gegen) Geflüchtete und auch Gefängnisse umfasst. Genau dabei überrascht mich die Zeile „Sonstige“, die nach Lage der Dinge insbesondere die Gefängnis-Zahlen enthalten müsste. Dort stehen heute 1512 Fälle (seit Pandemie-Anfang), von denen 210 älter waren als 60, 132 ins Krankenhaus mussten und 27 gestorben sind.

    Das kann, nach allem, was so aus den Gefängnissen zu hören ist, schlicht nicht sein; deutsche Haftanstalten haben wahrscheinlich keine Positivraten wie Townships in Südafrika, aber sehr weit dürften sie auch nicht davon entfernt sein. Das aber würde bedeuten, dass Fälle aus Gefängnissen fast durchweg unter die 138284-85924 = 52360 Fälle nach §36 ohne „differenzierte Angaben“ fallen müssen. Und das ist schon irgendwo auf dem Skandalspektrum: Wie schwierig kann es sein, Fälle aus Gefängnissen auch so zu labeln?

  • Impfpass ohne App, Apple und Google

    Morgen werden zwei Wochen seit meiner zweiten Corona-Impfung vergangen sein. Damit wird die Impfpassfrage für mich relevant: Mit so einem Ding könnte ich wieder in die Mensa gehen!

    Allerdings habe ich, soweit ich das sehe, keinen Zugang zur offiziellen Covpass-App, weil ich mich von Apples Appstore und Googles Playstore fernhalte und eigentlich auch die Toolchains der beiden nicht auf meinem Rechner haben will. Immerhin gibt es (es lebe der Datenschutz-Aktivismus, der für offene Entwicklung von dem Kram gesorgt hat) die Quellen der Apps (wenn auch leider auf github). Wie kompliziert kann es schon sein, das ohne den ganzen proprietären Zauber nachzubauen?

    Stellt sich raus: schon etwas, aber es ist ein wenig wie eine Kurzgeschichte von H.P. Lovecraft: Die Story entwickelt sich wie beim Schälen einer Zwiebel. Schale um Schale zeigt sich, dass die Wahrheit immer noch tiefer liegt.

    Bei Lovecraft sind nach dem Abpulen der letzten Schale meist alle ProtagonistInnen tot oder wahnsinnig. Im Fall der Covpass-App hingegen ist der Kram sogar dokumentiert: So finden sich die halbwegs lesbare Dokumentation des Datenstroms im QR-Code und das JSON-Schema – leider schon wieder auf github.

    Schale 1: QR-Code scannen

    Ich dachte mir, zum Nachbauen der Covpass-App sollte ich erstmal ihre Eingabe verstehen, also die Daten aus den beiden Impfzertifikaten lesbar darstellen. Der erste Schritt dazu ist etwas, das QR-Codes lesen kann. Ich hatte anderweitig schon mit zbar gespielt, für das es das Debian-Paket python3-zbar gibt. Damit (und mit der unverwüstlichen Python Imaging Library aus python3-pillow) geht das so, wenn das Foto mit dem Zertifikat in der Datei foto.jpeg liegt:

    def get_single_qr_payload(img):
      img = img.convert("L")
    
      scanner = zbar.ImageScanner()
      scanner.parse_config('enable')
      image = zbar.Image(img.size[0], img.size[1], 'Y800', data=img.tobytes())
      if not scanner.scan(image):
        raise ValueError("No QR code found")
    
      decoded = list(image)
      if len(decoded)>1:
        raise ValueError("Multiple QR codes found")
    
      return decoded[0].data
    
    encoded_cert = get_single_qr_payload(Image.open("foto.jpeg"))
    

    Im Groben wandele ich in der Funktion das Bild (das wahrscheinlich in Farbe sein wird) in Graustufen, denn nur damit kommt zbar zurecht. Dann baue ich eine Scanner-Instanz, also das Ding, das nachher in Bildern nach QR-Codes sucht. Die API hier ist nicht besonders pythonesk, und ich habe längst vergessen, was parse_config('enable') eigentlich tut – egal, das ist gut abgehangene Software mit einem C-Kern, da motze ich nicht, noch nicht mal über diesen fourcc-Unsinn, mit dem vor allem im Umfeld von MPEG allerlei Medienformate bezeichnet werden; bei der Konstruktion des zbar.Image heißt „8 bit-Graustufen“ drum "Y800". Na ja.

    Der Rest der Funktion ist dann nur etwas Robustheit und wirft ValueErrors, wenn im Foto nicht genau ein QR-Code gefunden wurde. Auch hier ist die zbar-API vielleicht nicht ganz preiswürdig schön, aber nach dem Scan kann mensch über zbar.Image iterieren, was die verschiedenen gefundenen Barcodes zurückgibt, zusammen mit (aus meiner Sicht eher knappen) Metadaten. Das .data-Attribut ist der gelesene Kram, hier als richtiger String (im Gegensatz zu bytes, was ich hier nach der python3-Migration eher erwartet hätte).

    Schale 2: base45-Kodierung

    Das Ergebnis sieht nach üblichem in ASCII übersetzten Binärkram aus. Bei mir fängt der etwa (ich habe etwas manipuliert, das dürfte so also nicht dekodieren) so an: HC1:6B-ORN*TS0BI$ZDFRH%. Insgesamt sind das fast 600 Zeichen.

    Als ich im Wikipedia-Artikel zum Digitalen Impfnachweis gelesen habe, das seien base45-kodierte Daten, habe ich erst an einen Tippfehler gedacht und es mit base85 versucht, das es in Pythons base64-Modul gibt. Aber nein, weit gefehlt, das wird nichts. War eigentlich klar: die Wahrscheinlichkeit, dass was halbwegs Zufälliges base85-kodiert keine Kleinbuchstaben enthält, ist echt überschaubar. Und base45 gibts wirklich, seit erstem Juli in einem neuen RFC-Entwurf, der sich explizit auf QR-Codes bezieht. Hintergrund ist, dass der QR-Standard eine Kodierungsform (0010, alphanumeric mode) vorsieht, die immer zwei Zeichen in 11 bit packt und dafür nur (lateinische) Großbuchstaben, Ziffern und ein paar Sonderzeichen kann. Extra dafür ist base45 erfunden worden. Fragt mich bloß nicht, warum die Leute nicht einfach binäre QR-Codes verwenden.

    Es gibt bereits ein Python-Modul für base45, aber das ist noch nicht in Debian bullseye, und so habe ich mir den Spaß gemacht, selbst einen Dekodierer zu schreiben. Technisch baue ich das als aufrufbares (also mit einer __call__-Methode) Objekt, weil ich die nötigen Tabellen aus dem globalen Namensraum des Skripts draußenhalten wollte. Das ist natürlich ein Problem, das verschwindet, wenn sowas korrekt in ein eigenes Modul geht.

    Aber so gehts eben auch:

    class _B45Decoder:
      chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:"
      code_for_char = dict((c, i) for i, c in enumerate(chars))
      sig_map = [1, 45, 45*45]
    
      def __call__(self, str):
        raw_bytes = [self.code_for_char[s] for s in str]
        cooked_bytes = []
    
        for offset in range(0, len(raw_bytes), 3):
          next_raw = raw_bytes[offset:offset+3]
          next_bytes = sum(w*v for w,v in
            zip(self.sig_map, next_raw))
          if len(next_raw)>2:
            cooked_bytes.append(next_bytes//256)
          cooked_bytes.append(next_bytes%256)
    
        return bytes(cooked_bytes)
    
    b45decode = _B45Decoder()
    

    Die b45decode-Funktion ist, wenn mensch so will, ein Singleton-Objekt der _B45Decoder-Klasse (so hätten das jedenfalls die IBMlerInnen der CovPass-App beschrieben, vgl. unten). Ansonsten bildet das den Grundgedanken von base45 ziemlich direkt ab: Immer drei Bytes werden zur Basis 45 interpretiert, wobei die Wertigkeit der verschiedenen Zeichen im Dictionary code_for_char liegt. Die resultierende Zahl lässt sich in zwei dekodierte Bytes aufteilen. Nur am Ende vom Bytestrom muss mensch aufpassen: Wenn die dekodierte Länge ungerade ist, stehen kodiert nur zwei Byte.

    Und ja: vielleicht wärs hübscher mit dem grouper-Rezept aus der itertools-Doku, aber die next_raw-Zuweisung schien mir klar genug.

    Schale 3: zlib

    Ein b45decode(encoded_cert) gibt erwartungsgemäß wilden Binärkram aus, etwas wie b'x\x9c\xbb\xd4\xe2\xbc\x90Qm!… Das sind, ganz wie die Wikipedia versprochen hat, zlib-komprimierte Daten. Ein zlib.decompress wirkt und führt auf etwas, in dem zum ersten Mal irgendetwas zu erkennen ist; neben viel Binärkram findet sich etwa:

    ...2bdtj2021-07-01bistRobert Koch-InstitutbmamOR...
    

    Keine Frage: Ich mache Fortschritte.

    Schale 4: CBOR/COSE

    An dieser Stelle bin ich auf mir unbekanntes Terrain vorgestoßen: CBOR, die Concise Binary Object Representation (Nerd-Humor: erfunden hat das Carsten Bormann, weshalb ich auch sicher bin, dass das Akronym vor der ausgeschriebenen Form kam) alias RFC 7049. Gedacht ist das als so eine Art binäres JSON; wo es auf die Größe so ankommt wie bei QR-Codes, habe ich schon Verständnis für diese Sorte Sparsamkeit. Dennoch: Sind Protocol Buffers eigentlich tot?

    Praktischerweise gibt es in bullseye das Paket python3-cbor2. Munter habe ich cbor2.loads(raw_payload) geschrieben und war doch etwas enttäuscht, als ich etwas wie:

    CBORTag(18, [b'\xa1\x01&',
      {4: b'^EVf\xa5\x1exW'},
      b'\xa4\x01bDE...',
      b'\xf9\xe9\x9f...'])
    

    zurückbekommen habe. Das ist deutlich mehr viel Binärrauschen als ich erhofft hatte. Aber richtig, das Zeug sollte ja signiert sein, damit die Leute sich ihre Impf- und Testzertifikate nicht einfach selbst schreiben. Die hier genutzte Norm heißt COSE (nämlich CBOR Object Signing and Encryption, RFC 8152 aus dem Jahr 2017). Ich habe das nicht wirklich gelesen, aber Abschnitt 2 verrät gleich mal, dass, wer an einer Signaturprüfung nicht interessiert ist (und das bin ich nicht, solange ich nicht vermuten muss, dass meine Apotheke mich betrogen hat), einfach nur aufs dritte Arrayelement schauen muss. Befriedigenderweise ist das auch das längste Element.

    Ein wenig neugierig war ich aber schon, was da noch so drinsteht. Die 18 aus dem CBORTag heißt nach Abschnitt 4.2, dass das eine Nachricht mit nur einer Unterschrift ist, und der letzte Binärkram ist eben diese eine Unterschrift. Das erste Array-Element sind Header, die mit unterschrieben werden, wieder CBOR-kodiert. Dekodiert ist das {1: -7}, und Überfliegen der COSE-Spezifikation (Tabellen 2 und 5) schlägt vor, dass das heißt: der Kram ist per ECDSA mit einem SHA-256-Hash unterschrieben.

    Tabelle 2 von COSE erklärt auch das nächste Element, die Header, die nicht unterschrieben werden (und über die mensch also Kram in die Nachrichten einfummeln könnte). Das sieht auch erstmal binär aus, ist aber ein „entpacktes“ Dictionary: In meiner Nachricht steht da nur ein Header 4, was der „Key Identifier“ ist. Der Binärkram ist schlicht eine 64-bit-Zahl, die angibt, mit welchem Schlüssel die Unterschrift gemacht wurde (bei PGP wären das die letzten 8 byte des Fingerabdrucks, viel anders wird das bei COSE auch nicht sein).

    Schale 5: CBOR lesbar machen

    Zurück zu den Zwiebelschalen. Wenn also die Nutzdaten im dritten Element des Array von oben sind, sage ich:

    cbor_payload = cbor2.loads(cose_payload.value[2])
    

    Heraus kommt dabei etwas wie:

    {1: 'DE', 4: 1657705736, 6: 1626169736,
    -260: {1: {'v': [{'co': 'DE', 'dn': 2, 'dt': '2021-07-01',
    'is': 'Robert Koch-Institut', 'ma': 'ORG-100030215',
    'mp': 'EU/1/20/1528', 'sd': 2, 'tg': '840539006',...}]}}}
    

    – das ist ziemlich offensichtlich die Datenstruktur, die der Zauber liefern sollte. Nur sind die Schlüssel wirklich unklar. v könnte wohl „Vaccination“ sein, is der Issuer, also der Herausgeber des Impfpasses; die Werte von 4 und 6 sehen verdächtig nach Unix-Timestamps in der nächsten Zeit aus (ja, es sind schon sowas wie 1,6 Milliarden Sekunden vergangen seit dem 1.1.1970).

    Aber Raten ist doof, wenn es Doku gibt. Wie komme ich also zu …

  • Javascript Local Storage

    Es gibt eine große Zahl gruseliger APIs (also: „Kram, den ein Programm tun kann“) in modernem Javascript, von Sensor APIs (zur Abfrage von Beschleunigung und Orientierung des Geräts und des Umgebungslichts) bis Websocket (mit dem weitgehend beliebige Server dauernd mit dem Client reden können, und das auch noch „im Hintergrund“ in Web Workers) – gruselig ist das, weil in aktuellen und nicht weiter modifizierten Browsern jede Webseite dieses Zeug nutzen kann, wobei eingestandenermaßen ein paar besonders dramatische APIs (Mikrofon und Kamera z.B.) noch durch Rückfragen abgesichert sind. Oh: Webseiten können das nicht nur nutzen, viel zu viele brauchen Javascript und gehen nicht, wenn mensch es abdreht.

    Der breite Zugriff auf fast alles von Javascript aus ist der Grund, warum ich des Öfteren ziemlich unwillig auf „please enable Javascript“-Banner (und noch mehr auf ihre Abwesenheit trotz Abhängigkeit von Javascript) reagiere. Javascript erlauben bedeutet spätestens seit XMLHTTPRequest (mit dem Javascript an der NutzerIn vorbei mit dem Ursprungsserver kommunizieren konnte; kam in der ersten Hälfte der Nullerjahre) und CORS (was XMLHTTPRequest und jetzt fetch auf beliebige Server ausweitete, solange die kooperieren; im Firefox tauchte das 2009 auf) einen recht weitgehenden Zugriff auf die eigene Maschine zu erlauben, und das noch ganz ohne Spectre und Freunde – die übrigens ohne ubiquitäres Javascript auf privaten Rechnern weitgehend bedeutungslos wären.

    Eine API, die ziemlich gruselig ist, weil sie Webseiten ein unendlich langes Gedächtnis in eurem Browser gibt, ist Local Storage; damit können Webseiten ernsthafte Datenmengen in eurem Browser speichern und sie wiederfinden, wenn sie das nächste Mal Javascript ausführen dürfen. Dass das zunächst lokal gespeichert wird, hilft nicht viel – per Websocket oder zur Not einem fetch mit Payload ist der Kram auch (wieder) auf jedem Server, der bereit ist, sich das anzuhören. Wohlgemerkt: ohne dass NutzerInnen irgendwas mitbekommen.

    Wenn ihr mein Gruseln nachfühlen wollt, könnt ihr hier mal Javascript einschalten (ihr lasst mich doch sonst kein Javascript ausführen, oder?). Ihr bekommt dann unter diesem Absatz ein Eingabefeld, in das ihr Kram tippen könnt. Wenn ihr einen hinreichend modernen Browser habt (technisch: er muss das storage-Signal schicken; Firefox 78 tut das z.B., Webkit 4.0.37 nicht), könnt ihr eure Nachricht in der Javascript-Warnung am Fuß der Seite sehen, schockierenderweise auch in anderen Fenstern, die ihr auf blog.tfiu.de offen habt. Auf allen halbwegs aktuellen Großbrowsern erscheint der Text jedenfalls nach dem nächsten Reload. Und bleibt auch da. Aufauf, schreibt eurem künftigen Selbst eine Nachricht in den Fuß dieser Seite:

    Gut. Du hast Javascript aus.

    Nennt mich paranoid, aber lustig ist das nicht.

    Und so ärgern mich noch viel mehr als Seiten, die Javascript fordern, Seiten, die ohne Local Storage leer bleiben oder sonst irgendwie undurchschaubar kaputt gehen.

    Was tun?

    Für die großen Browser gibt es allerlei Erweiterungen, die das Management von Local Storage erlauben; im Firefox sehe ich gerade Forget Me Not oder StoragErazor (was gleich noch die IndexedDB-API mit abdeckt, die ähnlich schrecklich ist, aber noch nicht viel genutzt wird); soweit ich erkennen kann, erlaubt das unverzichtbare noscript nicht, Javascript ohne Local Storage laufen zu lassen.

    Für meinen Haupt-Browser, den Luakit (verdammt, schon wieder ein Link von hier in github rein), habe ich eine kleine Erweiterung geschrieben, mit der ich mit der Tastenkombination ,tq schnell local storage ein- und ausschalten kann; auf die Weise kann ich normalerweise ohne Local Storage browsen, wenn dann aber mal wirklich eine Seite kaputt ist (gitlab ist da derzeit so ein ganz schlechtes Beispiel), braucht es nur ein paar Anschläge. Eine Anzeige in der Fußleiste (q/Q für Storage aus/an) kommt auch mit:

    -- Web storage control
    
    -- @module webstorage_control
    -- @copyright Public Domain
    
    local _M = {}
    
    local window = require("window")
    local theme = require("theme")
    local settings = require("settings")
    local modes = require("modes")
    local add_binds = modes.add_binds
    
    function update_webstorage_disp(w)
        if settings.get_setting("webview.enable_html5_database") then
            w.sbar.r.webstorage_d.text = "Q"
        else
            w.sbar.r.webstorage_d.text = "q"
        end
    end
    
    function toggle_local_storage(w)
        local local_storage_enabled =
            settings.get_setting("webview.enable_html5_database")
    
        settings.set_setting("webview.enable_html5_database",
            not local_storage_enabled)
        settings.set_setting("webview.enable_html5_local_storage",
            not local_storage_enabled)
        update_webstorage_disp(w)
    end
    
    window.add_signal("init", function (w)
        local r = w.sbar.r
        r.webstorage_d = widget{type="label"}
        r.layout:pack(r.webstorage_d)
        r.layout:reorder(r.webstorage_d, 1)
        r.webstorage_d.font = theme.font
        update_webstorage_disp(w)
    end)
    
    add_binds("normal", {
        { "^,tq$", "Enable/disable web local storage", toggle_local_storage},
    })
    
    return _M
    
    -- vim: et:sw=4:ts=8:sts=4:tw=80
    

    Wer auch den luakit verwendet, kann das nach .config/luakit/webstorage_control.lua packen und dann:

    require("webstorage_control")
    

    an geeigneter Stelle (z.B. in .config/luakit/rc.lua) unterbringen. Wenn dermaleinst so viele Seiten ohne Local Storage kaputtgehen wie derzeit ohne Javascript, müsste das wahrscheinlich eher wie in der noscript-Erweiterung automatisiert werden.

    Auch wenn ich mal Local Storage erlaube, will ich natürlich nicht, dass der Kram persistent bleibt. Deshalb habe ich noch folgendes kleine Python-Programm geschrieben:

    #!/usr/bin/python
    """
    Clear luakit web local storage and cookies
    
    There's a whitelist applied to both.
    """
    
    
    import fnmatch
    import glob
    import os
    import re
    import sqlite3
    
    
    class Whitelist:
        """A fnmatch-based whitelist.
    
        Test as in "domain in whitelist".  It's not fast, though.
        """
        def __init__(self,
                src_path=os.path.expanduser("~/.config/luakit/cookie.whitelist")):
            with open(src_path) as f:
                self.patterns = [s.strip() for s in f.read().split("\n")]
    
        def __contains__(self, domain):
            for pattern in self.patterns:
                if fnmatch.fnmatch(domain, pattern):
                    return True
            return False
    
    
    def clear_cookies(whitelist):
        """removes cookies from domains not in whitelist from luakit's
        cookies db.
        """
        conn = sqlite3.connect(
            os.path.expanduser("~/.local/share/luakit/cookies.db"))
    
        try:
            all_hosts = list(r[0]
                for r in conn.execute("select distinct host from moz_cookies"))
            for host in all_hosts:
                if host in whitelist:
                    continue
                conn.execute("delete from moz_cookies where host=?",
                    (host,))
        finally:
            conn.commit()
            conn.execute("VACUUM")
            conn.close()
    
    
    def try_unlink(f_name):
        """removes f_name if it exists.
        """
        if os.path.exists(f_name):
            os.unlink(f_name)
    
    
    def clear_local_storage(whitelist):
        """removes luakit's local storage files unless their source
        domains are whitelisted for cookies.
        """
        for f_name in glob.glob(os.path.expanduser(
                "~/.local/share/luakit/local_storage/*.localstorage")):
            mat = re.match("https?_(.*?)_\d+.localstorage",
                os.path.basename(f_name))
            if not mat:
                print("{}???".format(f_name))
                continue
    
            if mat.group(1) in whitelist:
                continue
    
            try_unlink(f_name)
            try_unlink(f_name+"-shm")
            try_unlink(f_name+"-wal")
    
    
    def main():
        whitelist = Whitelist()
        clear_cookies(whitelist)
        clear_local_storage(whitelist)
    
    
    if __name__=="__main__":
        main()
    

    Das Programm liest eine Liste von Shell-Patterns (also etwas wie *.xkcd.com) aus einer Datei ~/.config/luakit/cookie.whitelist und löscht dann alle Cookies und Local Storage-Einträge im Luakit, die nicht von Servern kommen, die in dieser Ausnahmeliste erwähnt sind. Das Ganze läuft bei mir jeden Morgen aus meiner Crontab:

    01 09 * * * ~/mybin/clear_luakit_cookies.py
    

    Aber: Besser wärs, das wäre alles nicht da. In einem Browser, also etwas, mit dem mensch Webseiten anschauen will, hat eine API wie Local Storage mit Persistenz und Signalisierung eigentlich nichts verloren.

    Oh: Der Javascript-Quellcode für den ganzen Spaß mit euren Notizen in der Fußzeile ist erschreckend klein. Für den Fall, dass ich das mal anders schreibe und das so nicht mehr im Seiten-Quellcode zu finden sein wird, hier zunächst der Code für das Eingabefeld oben:

    <div id="textarea-container">
      <p><em>Gut.  Du hast Javascript aus.
      </em></p>
    </div>
    
    <script deferred="deferred">
      function setUp() {
        document.querySelector("#textarea-container").innerHTML =
          `<textarea id="to-store" style="width:100%; height:6cm"
          placeholder="Tippt kram, den ihr im Fuß der Seite sehen wollt."
          ></textarea>`;
        let textSource = document.querySelector("#to-store");
        if (!window.localStorage) {
          textSource.value = "Ah, gut.  Du hast local storage aus.  Dann\n"
            +"geht das hier nicht.  Wie gesagt, das ist gut.";
           return;
        }
    
        if (window.localStorage.savedText) {
          textSource.value = window.localStorage.getItem("savedText");
        }
    
        textSource.addEventListener("input", () => {
          window.localStorage.setItem("savedText", textSource.value);
        });
    
        window.addEventListener("storage", (ev) => {
          textSource.value = ev.newValue;
        });
      }
    
      setUp();
    </script>
    

    Und dann noch der fürs Management der Fußzeile (der sitzt jetzt gerade im head-Element):

    if (window.localStorage) {
      target.innerHTML +=
        `<div id="ls-warning"><p><strong>Schlimmer noch:</strong>
        Dein Browser lässt mich
        auch local storage machen.  Wenn du dir in
        <a href="/javascript-local-storage.html">diesem Artikel</a>
        eine Nachricht hinterlässt, bekommst du sie bei deinem nächsten
        Besuch unten zu sehen; du kannst da sogar dein eigenes
        HTML und Javascript unterbringen und ausführen lassen.</p>
        <p id="user-message"/></div>`;
    
      if (window.localStorage.savedText) {
        document.querySelector("#user-message").innerHTML =
          window.localStorage.savedText;
      }
    
      window.addEventListener("storage", (ev) => {
        document.querySelector("#user-message").innerHTML = ev.newValue;
      });
    }
    
  • Geistesgegenwart um Mitternacht: Tut sie aber nicht

    Ich bin ja eigentlich niemand, der „Handarbeit“ als Qualitätsprädikat sonderlich schätzt, aber es ist gerade bei Radio schön, wenn sich zeigt, dass der Kram zwar aus dem Computer kommt, aber doch noch Menschen vor dem Computer sitzen.

    So ging das am letzten Samstag (3.7.), kurz nach Mitternacht. Mein Rechner schneidet da immer den Mitternachtskrimi aus dem Live-Programm des Deutschlandfunks mit und hat dabei dieses großartige Stolpern aufgenommen:

    (um die Bediengeräusche besser herauszubringen, habe ich das Audio etwas komprimiert). Ich muss sagen, dieses kurze Selbstgespräch fand ich sehr beeindruckend – und ich habe mich wiedererkannt, denn in dieser Sorte experimentellen Diskurses mit der Maschine versuche auch ich mich dann und wann.

    Zu diesem schönen Ausschnitt habe ich zwei Einwürfe zu bieten.

    Erstens war die dann doch noch folgende Sendung eine leicht expressionistische Hörspielfassung des Kleist-Klassikers Das Erdbeben in Chili, die ich hier liebend gerne verteilen würde, weil sie schön zeigt, was für ein garstiges Gift reaktionäre Hetzerei ist; ich kann mir nur schwer vorstellen, dass, wer das gehört hat, noch auf das Gift von, sagen wir, Innenminister Seehofer hereinfallen könnte.

    Aber nun, das Urheberrecht hindert mich daran, was mein Argument von neulich gegen das „geistige Eigentum“ schön illustriert: Das Hörspiel, vermutlich eine öffentlich-rechtliche Produktion, gäbe es natürlich auch, wenn ich es jetzt verteilen dürfte, und die Leute, die das damals gemacht haben, sind hoffentlich schon dabei ordentlich bezahlt worden und werden kaum auf ein paar Cent für einen Download durch euch angewiesen sein. Die Existenz des Textes hat offensichtlich nichts mit Urheberrecht zu tun, denn zu Kleists Zeiten gab es gar keins. Hier wirken die heutigen („Post-Micky-Maus“) Regelungen diametral gegen den ursprünglichen Zweck des Urheberrechts, nämlich, der Gesellschaft eine möglichst reichhaltige Kultur zur Verfügung zu stellen.

    Der zweite Einwurf: Über die vergangenen 20 Jahre hatte ich verschiedene Hacks, um Radio-Streams mitzuschneiden – ich schaudere, wenn ich an die schlimmen Tage von RealAudio und das Rausfummeln des Signals über preloaded libraries zurückdenke, die das write der libc überschrieben haben. Nun, der proprietäre Client wollte kein Speichern der Streams zulassen (schon wieder das Copyright-Gift!).

    Inzwischen ist das Mitschneiden dank ffmpeg und offener Standards auf der Seite der Radiostationen nur noch ein schlichtes Shellscript. Ich verwende seit ein paar Jahren das hier:

    #!/bin/bash
    
    if [ ! $# -eq 3 ]; then
            echo "Usage $0 time-to-record m3u-url output-file"
            exit 1
    fi
    
    
    case "$2" in
            dlfhq)
                    stream=https://st01.sslstream.dlf.de/dlf/01/high/opus/stream.opus
                    oopts=""
                    ;;
            dlf)
                    stream=https://st01.sslstream.dlf.de/dlf/01/low/opus/stream.opus
                    oopts="-ac 1 -ar 22500"
                    ;;
            dradio)
                    stream=`curl -s http://www.deutschlandradio.de/streaming/dkultur_lq_ogg.m3u | head`
                    ;;
            *)
                    stream="$2"
                    ;;
    esac
    
    ffmpeg -y -nostdin -loglevel error -i "$stream"  $oopts -start_at_zero -to $1  -c:a libvorbis "$3"
    

    (wahrscheinlich ist die dradio-Regel kaputt, aber das ist sicher leicht repariert). Das lege ich an eine passende Stelle, und cron sorgt für den Rest. Die crontab-Zeile, die mir schon viele Mitternachtskrimis und eben auch die Perle von oben mitgeschnitten hat, sieht so aus:

    05 00 * * sat /path/to/oggsnarf 1:00:00 dlf ~/media/incoming/mitternachtskrimi`date +\%Y\%m\%d`.ogg
    

    Nachtrag (2021-11-01)

    Nach ein paar Monaten fällt mir auf, dass nur ganz kurz nach diesem Post und meiner zustimmenden Erwähnung der Mitternachtskrimis (die allerdings schon damals zu „blue crime“ geworden waren) der Deutschlandfunk den seit mindestens meiner späten Kindheit den Krimis gehörenden Programmplatz am Samstag um 0:05 auf aktuelle Kulturberichterstattung („Fazit“) umgewidmet hat. Die Crontab-Zeile hat also nicht mehr viel Wert (und ist längst aus meiner crontab verschwunden). Ich glaube, die Idee der ProgrammplanerInnen wird gewesen sein, den Krimi Hörspiel-Podcast als Ersatz anzubieten.

  • Klarsprache: Private Gewaltanbieter

    Beim Fegen heute morgen habe ich die DLF-Hintergrund-Sendung vom 26.6. über die Verschiebung vor allem westlicher Kriegsführung in private Unternehmen gehört. Und dabei ist mir aufgefallen, dass ich vielleicht gelegentlich mal auch über „Klarsprache“ schreiben sollte. Wo Antisprache Bedeutung annihiliert, bringt Klarsprache die Dinge auf den Punkt. In diesem Fall:

    Derzeit gibt es auf internationaler Ebene zwei Ansätze, das Verhalten privater Gewaltanbieter zu regulieren: Eine Arbeitsgruppe der Vereinten Nationen bemüht sich schon länger um eine Konvention, die den Einsatz von Militärdienstleistern generell verbieten möchte. [Der andere ist das Montreux-Dokument]

    Mensch vergleiche: „privater Gewaltanbieter“ versus „Militärdienstleister“.

    Zugegeben, „Gewalt“ ist auch kein besonders klares Wort, es wird ja nun wirklich für alles und jedes eingesetzt, und insofern wäre etwas wie „Mordkommandovermittlung“ vielleicht noch etwas besser. Aber verglichen mit „Dienstleister“ – in dessen Wortfeld sich auch „haushaltsnahe Dienstleistung“ (wozu selbst Menschen in meinem Alter „Perle“ sagen und nicht peinlich finden, dass sie ihre Wohnung nicht selbst staubsaugen können) und „modernes Dienstleistungsunternehmen“ (so sah sich das Heidelberger Studierendenwerk) tummeln – doch von beeindruckender Deutlichkeit.

  • Bluetooth tethering with a 2021 Debian

    The other day the cage that holds the SIM card for the wireless modem of my Lenovo X240 rotted away. Fixing this (provided that's even reasonable, which I'm not sure about) requires digging quite a bit deeper into the machine than I consider proportional for something I use less than once a month. Plus, there's still my trusty N900 cellphone that I can use for the occasional GSM (or, where still available, UMTS) data connection.

    A SIM card cage on a table

    The underlying reason for mucking around tethering bluetooth in 2021: the cage for the SIM card in my computer rotted out. And re-attaching it to the mainboard looks like surgery to deep for summer.

    So, I revived the ancient scripts I used to use around 2005 with feature phones playing cell modem and tried to adapt them to the N900. Ouch.

    Well, full disclosure: I have only hazy notions about what's going on in bluetooth in general, and the Linux tooling for bluetooth I find badly confusing. Hence, rather than reading manpages I started asking duckduckgo for recipes for “bluetooth tethering linux“ or similar. And since what I found was either rather outdated or used various GUI and network management tools I prefer to not have to regularly run, let me write up what I ended up doing to thether my Debian box. Oh: it's using ifupdown and is Debian-specific in that sense, but otherwise I think it's fairly distribution-neutral, contrary to what you might expect after the headline.

    The bluetooth part

    The basic operation for bluetooth tethering is straightforward: Open a serial-like connection (“rfcomm”) to the phone, then start a pppd on top of it. It's the little details that make this tricky.

    The first detail for me is that I have a deep distrust of bluez (and even the bluetooth drivers). I hence keep bluetooth off and blocked most of the time, and before opening any bluetooth connection, I have to manage this bluetooth state, which I'm going to do in a plain shell script. I'm sure there's a very elegant way to do this in systemd, but then I'd say this is a case where the clarity of a shell script is hard to beat.

    So, I created a file /usr/local/sbin/bluenet containing this:

    #!/bin/sh
    # Configure/deconfigure an rfcomm bluetooth connection
    
    DEVICE_MAC=<YOUR PHONE'S BLUETOOTH ID>
    
    case $1 in
      start)
        /usr/sbin/rfkill unblock bluetooth
        /sbin/modprobe btusb
        /usr/sbin/service bluetooth start
        /usr/bin/rfcomm bind /dev/rfcomm0  $DEVICE_MAC
        sleep 2 # no idea what I should really be waiting for here, but
          # bluetooth clearly needs some time to shake out
        ;;
      stop)
        /usr/bin/rfcomm release /dev/rfcomm0
        /usr/sbin/service bluetooth stop
        /sbin/rmmod btusb
        /usr/sbin/rfkill block bluetooth
        ;;
      default)
        echo "$1 start|stop"
        exit 1
    esac
    

    All that you really need if you don't mind having bluetooth on are the two rfcomm command lines; the advantage of having this in a separate script (rather than just hack the rfcomm calls into the ifupdown stanza) is that you can say bluenet stop after a failed connection attempt and don't have to remember what exactly you started and what the stupid rfcomm command line was. Oh: Resist the temptation to keep this script in your home directory; it will be executed as root by ifupdown and should not be writable by your normal user.

    To figure out your phone's bluetooth id, I think what people generally use these days is bluetoothctl (and for interactive use, it's fairly nice, if scantily documented). Essentially, you say scan on in there and wait until you see something looking like your phone (you'll have to temporarily make it discoverable for that, of course). While you're in there, run pair <mac>, too – at least for me, that was really straightforward compared to the hoops you had to jump through to pair bluetooth devices in Linux in the mid-2000s.

    With this, you should be able to say:

    sudo /usr/local/sbin/bluenet start
    

    and then talk to a modem on /dev/rfcomm0. Try it with a terminal program:

    minicom -D /dev/rfcomm0
    

    In minicom, type AT and return, and try again if it doesn't work on the first attempt[1]; the phone should respond with OK. If it does, you're essentially in business. If it doesn't, try rfcomm -a – which should show something like:

    rfcomm0: DE:VI:CE:MA:CA:DD:RE channel 1 clean
    

    Oh, and bluetootctl may be your (slightly twisted) friend; in particular info <mac> has helped me figure out problems. I still don't understand why my N900 doesn't show the rfcomm capability in there, though – again, I'm not nearly enough of a bluetooth buff to tell if that's normal in any way.

    The PPP part

    Assuming, on the other hand, you have your rfcomm connection, the rest is standard pppd fare (which, of course, makes me feel young again). This means you have to give a provider-specific pppd configuration, conventionally in /etc/ppp/peers/bluez (replace bluez with whatever you like), which for me looks like this:

    /dev/rfcomm0
    115200
    debug
    noauth
    usepeerdns
    receive-all
    ipcp-accept-remote
    ipcp-accept-local
    local
    nocrtscts
    defaultroute
    noipdefault
    noipv6
    connect "/usr/sbin/chat -v -f /etc/ppp/chat-bluez"
    
    lcp-echo-interval 300
    lcp-echo-failure 10
    

    Some of this is a good idea whenever there's not actually a serial port in the game (local, noctsrts), some may break your setup (noauth, though I think that's fairly normal today), and the lcp-echo things I found useful to detect lost connections, which of course are rather common on cellular data. Oh, and then there's the noipv6 that you may object to.

    Anyway: you may need to gently adapt your pppd peers file. Use your common sense and browse the pppd man page if you can't help it.

    The chat script /etc/ppp/chat-bluez mentioned in the peers file for me (who's using a German E-Netz reseller) looks like this:

    TIMEOUT 5
    ECHO ON
    ABORT 'ERROR'
    ABORT 'NO ANSWER'
    ABORT 'NO CARRIER'
    ABORT 'NO DIALTONE'
    '' "ATZ"
    OK-ATZ-OK ATE1
    OK 'AT+CGDCONT=1,"IP","internet.eplus.de","0.0.0.0"'
    TIMEOUT 15
    OK "ATD*99***1#"
    CONNECT ""
    

    Essentially I'm doing a modem reset (ATZ), and (to accomodate for the swallowed initial characters mentioned above) I'm trying again if the first attempt failed. The ATE1 enables echo mode to help debugging, and then comes the magic in the CGDCONT (“Define packet data protocol (PDP) context”) AT command – you will have to adapt at least the string internet.eplus.de to your provider's APN (there are public lists of those). The rest you can probably keep as-is; nobody really uses more than one profile (the 1) or a PDP type other than IP (well, there IPV4V6 that might interest you if you've removed the noipv6 statement above), or uses the PDP address in the last argument.

    The final dial command (the ATD) is, I think, fairly standard (it says, essentially: Call the PDP context 1 set up in CGDCONT).

    All this assumes your provider does not require authentication; I think most don't these days. If they do, say hello to /etc/ppp/pap-secrets and the pppd manpage (you have my sympathy).

    Finally, the various components are assembled in a stanza in /etc/network/interfaces:

    iface n900 inet ppp
      pre-up /usr/local/sbin/bluenet start
      provider bluez
      post-down /usr/local/sbin/bluenet stop
    

    That's it – your tethered network should now come up with ifup n900, and you can take it down with ifdown n900. If the thing gets stuck, meaning the interface won't come up as far as Debian is concerned, the post-down action will not be run. Just run bluenet stop manually in that case.

    Amazing endurance

    One thing blew my mind when I did this: A good decade ago, the Nokia N900 didn't come with the profile rfcomm uses enabled (it's called “DUN” there; don't ask me why). It didn't need much to enable it, but you needed to drop some magic file for the upstart init system running in the N900's maemo into some strategic location, and some kind soul had packaged that up. Not expecting much I simply ran apt-get install bluetooth-dun – and it just worked. Whoever still keeps up these ancient maemo repositories: Thanks a lot, and I'm impressed. If we ever meet, remind be to buy you a $BEVERAGE.

    [1]In the communication with the N900 with its ancient bluetooth stack, for some reason the first character(s) tend to get swallowed somewhere on the way. I've not tried to ascertain who is to blame; perhaps it's the autoconnection of rfcomm?
  • Ich bin auch Hanna

    Seit ein paar Wochen schreiben zahlreiche Uni-Beschäftigte auf befristeten Verträgen über ihren alltäglichen Wahnsinn unter dem Twitter-Hashtag #ichbinhanna. Nun ist mir zwar ein offenes Netz wichtiger als diese eingestandenermaßen erfolgreiche Mobilisierung, und so werde ich nicht mittwittern. Aber ich finde es natürlich klasse, dass ein Thema, das mich seit Jahrzehnten umtreibt, mal wieder etwas Öffentlichkeit bekommt. Deshalb will ich hier ein paar vielleicht nicht ganz offensichtliche Aspekte beisteuern.

    Comic eines Beratungsgesprächs

    So stellt sich das BMBF den Umgang mit Befristungen vor. Links die „Hanna“, die im Befristungs-Werbevideo aus dem Hause Karliczek froh ihre „Karriere“ plant.

    Zunächst bin auch ich Hanna: meinen ersten Vertrag mit der Universität Heidelberg hatte ich 1993, damals als studentische Hilfskraft. Seit ich 2001 von meinen akademischen Wanderjahren zurückgekehrt bin, habe ich dort ununterbrochen jeweils dreijährige Arbeitsverträge als das, was heute in Baden-Württemberg akademischer Mitarbeiter heißt; zusammen komme ich auf ein gutes Vierteljahrhundert befristeter Verträge mit der Uni.

    Und auch wenn ich in all den Jahren mit wechselnder Intensität anstank dagegen, dass weniger als jedeR fünfte MitarbeiterIn in Forschung und Lehre an deutschen Unis einen ordentlichen (also unbefristeten) Arbeitsvertrag hat, versuche ich derzeit mit einiger Intensität, nicht verdauert zu werden. Klingt komisch, ist aber so, und Schuld hat: Der Rechnungshof von Baden-Württemberg, eine Festung von durch keinerlei Sachargumente zu erschütternden festen Glauben an das ganze Spektrum marktradikalen Unsinns.

    Dieser Rechnungshof hat nämlich vor Jahren festgestellt, dass an den Unis im Land viele akademische MitarbeiterInnen mit geringen Lehrverpflichtungen (oder, Gottseibeiuns, gar keinen) beschäftigt waren, während gleichzeitig Hilfskräfte aus den Reihen der Studierenden für Geld rekrutiert wurden, um Teile der Lehre – in Physik und Mathematik vor allem Übungsgruppen – abzudecken. Was ein gestandener Rechnungshöfer ist, kann da nicht zusehen, selbst wenn es nach Maßstäben der deutschen Akademia eigentlich ein prima System war: Die Übungsgruppen waren entspannte (weil normalerweise durch „Peers“ gehaltene) und produktive (weil die Leute, die den Kram erklärt haben, ihre eigenen Schwierigkeiten noch gut vor Augen hatten) Veranstaltungen, die engagierten Studis gleichzeitig die Möglichkeit gaben, erste Erfahrungen in der Lehre zu sammeln und ihr Studium fachnah zu finanzieren. Derweil konnten WissenschaftlerInnen auch an Unis relativ konzentriert forschen, wenn sie das wollten und es ansonsten mit der Lehre reichte (was in Heidelberg mit all den Forschungsinstitutionen in der Umgebung in vielen Fachbereichen nie ein Problem war).

    All das interessierte den Rechnungshof wenig, zumal ungefähr zu dieser Zeit die Urkatastrophe über die Unis hinwegrollte: Die autoritäre Umgestaltung, die reaktionäre WissenschaftspolitikerInnen gemeinsam mit den „Think Tanks“ diverser Content-Hersteller (allen voran natürlich Bertelsmann) unter dem Label „Bologna-Prozess“ vermarktet und durchgesetzt haben – ich habe damals so vergeblich wie eifrig dagegen gepredigt. Damit einher ging ein intensives Kontroll- und Prüfungsregime, dem auch die Übungsgruppen zum Opfer fielen: Was Studis darin tun, beeinflusst jetzt direkt ihre Abschlussnote (während es früher in der Praxis egal war; den Schein hat jedeR bekommen, der/die ihn wirklich wollte). Das hat die Veranstaltungen komplett umgedreht: Von realer und oft hocheffektiver Vermittlung von Wissen und Fertigkeiten zu einem Instrument schulhafter Büttelei und intensiven Feilschens um halbe Punkte.

    In dieser Situation hat der Rechnungshof dem Wissenschaftministerium sehr nahegelegt, doch all die Leute, die es (also: aus Landesmitteln) bezahlt, für die Büttelei einzusetzen, für die Studis – es geht ja um, wow, Noten! – nicht mehr gut genug waren. Weil ich aber nicht bütteln will, nicht umsetzen, was ich jahrelang bekämpft habe, muss ich sehen, dass ich von Bundes- oder Europamitteln lebe, und weil aus solchen immer noch niemand feste Verträge machen will, heißt das: ich muss die Verdauerung dringend vermeiden. Irre? Klar. Nur, finde ich, nicht von meiner Seite.

    Andererseits bilde ich mir ein, dass ich als Computer-Zauberer mit Rücklagen auch dann keine materiellen Probleme haben werde, wenn das mit den Drittmitteln mal nicht klappen sollte. Das ist für viele andere anders, insbesondere, wenn plötzlich weitere Menschen materiell von ihnen abhängen. Diese Leute werden nicht lange in meinen Projekten arbeiten. Das, zusammen mit wild fluktuierenden Mitteln, die mich immer wieder zwingen würden, Leute, die dennoch bleiben wollen, gerade dann zu feuern, wenn sie gerade richtig angekommen sind (was ich eigentlich nicht kann – und so muss ich aufpassen, dass ich immer gerade genug Drittmittel nur für mich bekomme), ist das eigentliche Problem, das ich mit der Befristeritis habe: Mensch arbeitet fast permanent mit AnfängerInnen, und das tut keinem Projekt im Wissenschaftsumfeld gut.

    Ich wünsche also den #ichbinhanna-Leuten alles Gute. Auf ein paar großväterliche Feststellungen kann ich aber dennoch nicht verzichten:

    • Ohne eine entscheidende Rückverlagerung von wettbewerblich vergebenen Mitteln in verlässliche Etats der Hochschulen und Wissenschaftseinrichtungen wirds nicht gehen. Aus nur temporär verfügbaren Mitteln entstehen auch nach TzBfG keine Dauerstellen; dieses Gift ist längst aus den Hochschulen in die Restgesellschaft durchgesickert.
    • Würde diese Grundfinanzierung einfach nur an „die Unis“ gehen wie sie jetzt sind, würde sie genau an die Profen gehen, die die derzeitige Misere recht weitgehend zu verantworten haben und das Gewäsch aus dem Hanna-Video in ihrer breiten Mehrheit exakt so vertreten. Mit anderen Worten: um die Befristeritis zurückzudrängen, braucht es auch eine grundlegende Hochschulreform, die insbesondere Profen aus den Leitungsfunktionen nimmt und durch Menschen ersetzt, die wenigstens basale arbeitsrechtliche Instinkte haben. Extrapunkte, wenn dabei auch etwas Demokratisierung (also: Abbau von Leitungsfunktionen an sich) rauskommt.
    • KeineR der OrganisatorInnen des bestehenden Systems dürfte sich viele Illusionen gemacht haben darüber, wie beschissen das für die Betroffenen aussieht und wie kontraproduktiv für die Wissenschaft das alles ist. Wenn sich etwas ändern soll, wird es also mit freundlichen Petitionen und Hinweisen über Twitter nicht getan sein.

    Dieser letzte Punkt verdient noch eine Handvoll Worte mehr: Die klassische Aktionsform abhängig Beschäftigter ist der Streik, und ich behaupte kühn, dass es auch für uns Uni-Prekariat kaum ohne gehen wird. Sage keineR, es merke sowieso niemand, wenn er/sie streike: Allein das entschiedene Nein, das eine organisierte Arbeitsverweigerung den Hochschulen vorhält, wird diese – und in der Folge auch die Ministerien – bereits in Gang setzen. Sicher nicht beim ersten Mal, aber wenn so eine Mobilisierung über ein paar Jahre nicht verschwindet, wird die Hierarchie das nicht ignorieren – es geht ja schließlich um relevante Teile ihres eigenen Nachwuchses.

    Ein Streik gegen das WissZeitVG, gegen die Drittmittelisierung der Wissenschaft, gegen die autoritär geführte Profenhochschule: Das wäre ein politischer Streik, der in Deutschland verboten ist (kein Scheiß). So ein Verbot (mit der Folge u.a. fehlender gewerkschaftlicher Unterstützung) muss natürlich kein Hindernis sein, aber angesichts der totalen politischen Agonie des Uni-Mittelbaus in den letzten dreißig Jahren wäre es schon ein ziemlich großer Sprung von Null auf wilden Streik („accountancy to lion taming“).

    Vielleicht wäre ein vernünftiger erster Schritt doch erstmal der Beitritt zur GEW (auch wenn die manchmal nervt) und dann ein ganz ordentlicher, amtlicher Streik in Tarifangelegenheiten. Schon seit Jahrzehnten gibt es den Gedanken, für befristet Beschäftigte eine tarifliche Risikozulage von 10% herauszuverhandeln, was verglichen mit Hochschulreform, Bologna-Ende und Umsturz der Wissenschaftsförderung ein ganz realistisches Ziel ist – und vermutlich die Zahl allzu obszöner Befristungen schon ein wenig reduzieren würde. Das einzige, was es dafür braucht: Hinreichend viele streikbereite Mitglieder an den Hochschulen. Ohne die lachen die TVL-VerhandlerInnen der Gegenseite unsere TarifunterhändlerInnen nur aus.

    Also: Unsere Kraft ist die Gewerkschaft. Ganz klassisch.

  • Gehorsam macht dumm

    Eine Kuh schert aus der Herde aus, um zu fressen.

    Nicht alle Rinder sind immer brav und gefügig. Ob diese Kuh wohl ein besonders schmales Maul hat? Das würde ihr nämlich, mit der Methode des Papers, ein größeres Hirn bescheinigen.

    Die zweite Tiergeschichte, die ich neulich angekündigt habe als, nun, interessant in der Forschung aktuell-Sendung vom 9.6. (in den Meldungen ab Minute 21:55), war die, dass gezähmte Rinder ein Viertel weniger Hirn haben als wilde; ein Traditionsanarcho wie ich kann bei so einem Faktoid natürlich dem „Gehorsam macht dumm und gewalttätig“ nicht widerstehen, und so habe ich mir den zugrundeliegenden Artikel genauer angesehen.

    Es handelt sich um https://doi.org/10.1098/rspb.2021.0813, „Intensive human contact correlates with smaller brains: differential brain size reduction in cattle types“ von Ana Balcarcel und KollegInnen; die Hauptautorin arbeitet am Paläontologischen Institut und Museum der Uni Zürich, was, in memoriam Tibatong und Zwengelmann, den Urmel-Fan in mir begeistert.

    Von der Hirnschrumpfung im Rahmen der Domestikation hatte ich spätestens in einer DLF-Sendung von 2009 („Beschleunigte Evolution“) von Michael Stang gehört. Dort hatte er über schnelle Zuchterfolge bei Damhirschen[1] berichtet:

    Das Zuchtziel war klar. Der domestizierte Damhirsch musste seine natürliche Schreckhaftigkeit verlieren und die Nähe des Menschen nicht als störend empfinden. Zugleich sollte die Fleischleistung erhöht werden. Durch Probeschlachtungen konnte Helmut Hemmer feststellen, ob bereits einige Tiere ein verkleinertes Gehirn hatten - eines der entscheidenden Merkmale beim Übergang vom Wildtier zum Nutztier. [...] Heute grasen über 1000 domestizierte Damhirsche auf Wiesen in Deutschland.

    Im vorliegenden Artikel wird das deutlich quantitativer:

    Domestic cattle have 25.6% smaller brains than wild cattle, according to regressions of EV [Endocranial volume, Gehirnvolumen] versus MZW [Muzzle width, Breite des Mundes, als Stellvertreter für die Körpermasse ...]. The difference between beef and dairy breeds is also significant (ANCOVA, p = 0.010).

    Das ist natürlich weit weg von „Gehorsam macht dumm“, aber „25.4%“ weniger Hirn ist, mit drei signifikant aussehenden Stellen, schon eine Ansage.

    Eine Ansage allerdings, die ich in Summe nicht so richtig überzeugend belegt finde, nicht mal mit nur einer signifikanten Stelle. Wobei, full disclosure, ich war gleich voreingenommen, denn die Methode von Balcarcel et al waren Schädelmessungen. Nennt mich irrational, aber ich werde ernsthaft nervös, wenn jemand an Schädeln herummisst. Das war schon bei Lavater schlimm, und nach dem durch Pseudowissenschaft gestützten völligen Zivilisationsbruch der Nazi-Phrenologie kann ich auf sowas nicht mehr entspannt, sagen wir sine ira et studio, blicken.

    Aber ok, es scheint in dem Fach Konsens zu sein, die Breite des Mundes (ich vermute, der im Deutschen übliche Begriff wird Maulbreite sein, aber lasst mir mal etwas Antispeziezismus) als Maß für das Körpergewicht zu nehmen. Das Hirnvolumen hingegen schätzen die AutorInnen unter Verweis auf John Finarelli über ln(Hirnvolumen) = 1.3143 ⋅ ln(Länge der Schädelhöhle) + 0.8934 ⋅ ln(Breite der Schädelhöhle) - 5.2313. Das ist – von den fantastischen Genauigkeitsbehauptungen abgesehen – so unplausibel nicht: Proportionalität zwischen Logarithmen heißt, dass es da ein Potenzgesetz gibt, was bei der Relation zwischen linearen Größen und einem Volumen naheliegt; Fingerübung im Rechnen mit Logarithmen: bei Kugeln gilt 3 ln(r) + C = ln(V) mit einer Konstanten C.

    Dennoch: Sowohl Hirnvolumen als auch die Körpermasse als Bezugsgröße werden in der Arbeit durchweg über Proxies geschätzt. Das mag ok sein – und nein, ich habe nicht versucht, mich von den zur Unterstützung dieser Proxies angeführten Arbeiten überzeugen zu lassen –, aber wer Claims wie

    Bullfighting cattle, which are bred for fighting and aggressive temperament, have much larger brains than dairy breeds, which are intensively selected for docility.

    ins Abstract schreibt, sollte da, finde ich, schon sagen, dass für die Studie weder Rinder noch ihre Hirne gewogen wurden.

    Gesetzt jedoch, die Korrelationen zwischen den Schädelmaßen auf der einen und Körpermasse und Hirnvolumen auf der anderen Seite hauen wirklich hin[2]: Ganz laienhaft finde ich ja schon die Metrik „Hirnvolumen zu Körpermasse“ nicht ganz so überzeugend. Immerhin dürfte ja „relativ mehr Fleisch“ bei Nutzrindern auch ein Zuchtziel gewesen sein, und so kann das Verhältnis nicht nur wegen weniger Hirn, sondern genauso gut wegen mehr sonstiger Masse kleiner ausfallen. Das wäre übrigens auch plausibel im Hinblick auf größere Hirn-zu-Körper-Verhältnisse bei Kampfstieren (die Balcarcel et al finden), denn fette Kampfstiere erfüllen ihren Zweck vermutlich eher weniger gut.

    Ähnlich wenig überzeugt haben mich die Grafiken der Arbeit. Die zentralen Aussagen werden mit Punktwolken mit reingemalten Regressionsgeraden belegt. In dieser Darstellung fällt alles Mögliche in Auge (z.B. „alle Wildrinder sind rechts oben“, einfach weil diese größer sind, oder „die Geraden der Kampfrinder sind steiler“, was, wenn ich das richtig sehe, das Paper weder nutzt noch erklärt), während die eigentlich in den Tests verwendeten Achsenabschnitte (entsprechend Faktoren nach Delogarithmierung) durch eigene Rechnung bestimmt werden müssten und jedenfalls optisch unauffällig sind.

    Deshalb wollte ich probieren, mir geeignetere Plots auszudenken und habe versucht, die laut Artikel auf figshare bereitgestellten Rohdaten zu ziehen.

    Ach weh. Das ist schon wieder so ein Schmerz. Zunächst figshare: Nichts geht ohne Javascript (wie schwer kann es sein, ein paar Dateien zu verbreiten? Wozu könnte Javascript da überhaupt nur nützlich, geschweige denn notwendig sein?) und das CSS versteckt völlig unnötigerweise die Seitengröße. Dazu: Google analytics, Fonts von googleapis.com gezogen; ich bin ja kein Freund von institutional repositories, bei denen jede Uni-Bibliothek ihren eigenen Stiefel macht, aber mal ehrlich: so ein Mist muss jetzt auch nicht sein, nur um ein paar Dateien zu verteilen. Dann doch lieber Murks der lokalen Bibliothek.

    Die Datei mit den Daten sorgt nicht für Trost: Ich hatte mich schon auf so ein blödes Office Open XML-Ding („Excel“) eingestellt, aber es kam in gewisser Weise noch schlimmer: Was mensch bei figshare bekommt, ist ein PDF mit einigen formatierten Tabellen drin. An der Stelle habe ich dann aufgehört. Screen Scraping mache ich nur in Notfällen.

    Dabei will ich an der Grundaussage („Domestikation macht Hirne relativ kleiner“) nicht mal zweifeln; das mit dem „dümmer“ allerdings (was meine Sprache ist, nicht die der AutorInnen) ist natürlich gemeine Polemik, und das Paper zitiert Dritte, die vermuten, die Reduktion des Hirnvolumens gehe vor allem aufs limibische System, „a composite of brain regions responsible for the processing of fear, reactivity and aggression“. Aber das Paper hat, soweit ich als interessierter Laie das erkennen kann, keine sehr starken Argumente für diese Grundaussage.

    Dennoch habe ich nicht bereut, in das Paper reingeschaut zu haben, denn ich habe so erfahren, dass es Rinder gibt, deren Zweck es ist „to decorate the landscape“, vor allem die halbwilden Chillingham-Rinder. Die Idee, Rinder zu halten, damit der Park etwas hübscher aussieht: das finde ich hinreißend.

    [1]Hauskatzen, so hieß es irgendwo anders, haben Hirne wie ihre waldlebenden Verwandten. Damit wären sie Wildtiere, deren Habitat zufällig unsere Wohnungen sind. Das würde manches erklären…
    [2]Der Physiker in mir würde bei sowas gerne die Schätzungen für die systematischen Fehler vergrößern, und so eine ganz grobe Fehlerbetrachtung hätte diesem Paper sicher gut getan.
  • Arme als Fühler

    Ameise mit Marsianeraugen

    Ameise? Spinne? Marsianer? Tatsächlich hat das, was ich an Warnsystem für „lege dich nicht mit dieser Sorte Tier an“ habe, bei diesen tropischen Ameisen schon angeschlagen.

    In Forschung aktuell am Deutschlandfunk gab es am 9.6. gleich zwei Tiergeschichten, die mich inspiriert haben, mal in die Papers hinter den Geschichten zu schauen. Die erste war die Geschichte von Spinnen, die sich als Ameisen tarnen. Ganz klar wird aus der DLF-Story nicht, worum es aktuell ging; die letzte einschlägige Publikation des Interviewten ist „Insincere flattery? Understanding the evolution of imperfect deceptive mimicry“ von Donald McLean und KollegInnen und ist bereits 2019 im Quarterly Review of Biology erschienen (http://doi.org/10.1086/706769; wie üblich bei Bedarf auf scihub ausweichen). Das ist zwar erkennbar nicht das, worum im Bericht ging (Computersimulation der Erkennung durch die Fressfeinde), aber es stellt die Fragen, um die es hier geht, und vor allem begründet er, warum Mimikry von Ameisen ein besonders geeignetes Modell zur Untersuchung des Phänomens ist: Sie findet nach Aussehen, Geruch und Verhalten statt, es gibt jede Menge Spezies, die sich in der Imitation von Ameisen versuchen, und die meisten davon sind relativ unproblematisch im Umgang.

    Der Autor arbeitet übrigens an der Macquarie University in Sydney, Australien, und ich kann diese Gelegenheit zum zitieren des großartigen Bill Bryson nicht vorübergehen lassen:

    You really cannot move in Australia without bumping into some reminder of his [des Ex-Gouverneurs Lachlan Macquarie, der offensichtlich eine Tendenz hatte, alles Mögliche und Unmögliche nach sich zu benennen] tenure. Run your eye over the map and you will find a Macquarie Harbour, Macquarie Island, Macquarie Marsh, Macquarie River, Macquarie Fields, Macquarie Pass, Macquarie Plains, Lake Macquarie, Port Macquarie, Mrs. Macquarie’s Chair (a lookout point over Sydney Harbour), Macquarie’s Point, and a Macquarie town. I always imagine him sitting at his desk, poring over maps and charts with a magnifying glass, and calling out from time to time to his first assistant, “Hae we no’ got a Macquarie Swamp yet, laddie? And look here at this wee copse. It has nae name. What shall we call it, do ye think?”

    —Bill Bryson: In a Sunburned Country, New York, 2000

    Aber zurück zu den Spinnen, die das Interesse der Leute von der Macquarie University geweckt haben. Hingerissen hat mich ja die Vorstellung, wie da Spinnen rumlaufen, die ihr vorderes Beinpaar neben den Kopf halten und hoffen, damit als Ameise durchzugehen, ganz wie Kinder, die mit ihren Zeigefingern die Antennen von Aliens markieren, wobei nicht klar ist, ob die Zeigefinger oder der Gedanke von Antennen auf Alienköpfen alberner sind.

    Nun, es stellt sich heraus, dass sie damit ganz gut durchkommen, und zwar, weil ihre Fressfeinde eher darauf schauen, wie sie sich bewegen als wie sie jetzt im Einzelnen aussehen – und für den Bewegungseindruck sind die wippenden Fühler wohl recht relevant. Das wiederum hat mich an eine gute Bekannte erinnert, die seit frühester Jugend ziemlich kurzsichtig ist, jedoch versucht, so unabhängig von Brillen zu bleiben wie es halt geht. Sie hat immer angegeben, sie identifiziere Menschen vor allem anhand ihres Bewegungsstils oder vielleicht auch ihrer Gestik. Das funktioniere auch ohne scharfe Sicht aus großen Entfernungen, letztlich würden auch Strichmännchen reichen, wenn sie sich nur bewegen.

    Die Frage, welche Mimikry die Fressfeinde überzeugt, war schon Thema des oben zitierten Artikels von McLean et al, der leider im Hauptteil mehr um evolutionäre Kostenfunktionen geht, und ganz ehrlich: ich glaube an nicht viel davon, denn die entsprechenden Modelle sind gewiss einige Größenordnungen zu schlicht. Echte Ökosysteme haben unzählige Parameter, und wenn mensch zu viele davon weglässt, kommt am Schluss Mumpitz wie das „egoistische Gen“ heraus; ganz so schlimm kommt es hier nicht, aber das Abstandsgebot von ökonomistischer Argumentation befolgen die AutorInnen eben auch nicht so recht. Dafür sind sie wohl auch an der falschen Uni, denn bei Macquarie haben klar die Metriker und Wettbewerbs-Taliban das sagen. Wer bei der Uni nach dem Autor sucht, kommt auf sowas hier als „Profil“:

    Zitationszählung, Histogramme und h-Werte.

    Metrikwahn destilliert: Noch bevor irgendein Wort fällt, womit sich Herr McLean so beschäftigt, kommen Zitationszahlen und zur Krönung ein h-Wert. Wenn unter solchen Bedingungen ordentliche Wissenschaft und nicht Metrikdienerei entsteht, zeigt sich wieder die unendliche Robustheit des Systems Wissenschaft. Aber: Warum baut jemand überhaupt solche Webseiten? (Herkunft, 22.6.2021)

    Ach Mist, jetzt bin ich schon wieder von den Spinnen abgeschweift. Was auch deshalb unfair ist, weil McLean einen gewissen Metrikrealismus an den Tag legt: „Underlying the idea of imperfect mimicry is the assumption that mimetic accuracy can be quantified“ [Hervorhebung von mir]. Und weil das Paper eine, zumindest für Laien wie mich, wirklich ganz schöne Übersicht gibt, wie sich EvolutionsbiologInnen dem Problem nähern, warum wohl Mimikry manchmal richtig schlecht ist. Von „die Täuschenden probieren es gar nicht“ bis „für die Fressfeinde reichts“ ist da viel dabei – und klar, in verschiedenen System werden wahrscheinlich verschiedene Mechanismen am Werk sein.

    Worum es neulich im DLF ging, war nun offenbar die „für die Fressfeinde reichts“-Hypthese, die wiederum in ein paar Varianten aufgedröselt wird; in einer Fassung, die ich für viele Zwecke recht überzeugend finde, wäre das etwa: Wenn Fressfeinde mal böse Erfahrungen mit Form V gemacht haben, werden sie vielleicht auch ähnliche Formen meiden, sagen wir W, zumal, wenn sie auch W nicht dringend zum Überleben brauchen. Ziemlich offensichtlich funktioniert das sogar im genetischen Gedächtnis. Jedenfalls glaube ich nicht, dass viele Menschen in meinem Umfeld böse Erfahrungen mit Spinnen und Schlangen gemacht haben, doch haben überraschend viele wirklich ernsthafte Ängste vor Tieren, die aussehen wie Schlangen oder Spinnen.

    Und das war dann schon die Geschichte, soweit sie jetzt publiziert ist: Es gibt einen Haufen Varianten von Mimikry, und Spinnen, die ihre Vorderbeine halten, als wären sie Fühler, kommen damit durch, solange die Ameisen, die sie imitieren, nur garstig genug schmecken.

  • Antisprache: Extremismus

    „Extremismus“ ist sozusagen die Mutter aller Antisprache, Sprache also, die entworfen ist für Kommunikation, die bei gelungenem Sprechakt bei den EmpfängerInnen Information zerstört statt bildet.

    Entsprechend viele haben sich um Abrüstung des Begriffs (und der verwandten „Hufeisentheorie“) bemüht. Schon 2007 etwa schloss sich die Grüne Jugend der damals populären Strömung „gegen jede Extremismustheorie“ an (Abschnitt 9.1 im damaligen Selbstverständnis) – gerade bei denen bemerkenswert, denn 14 Jahre später werden die Leute, die das damals geschrieben haben, allmählich in die Parlamente gekommen sein, die die Etats der Inlandsgeheimdienste („Verfassungsschutz“, VS) abnicken.

    Das ist relevant, denn ohne den VS gäbe es ziemlich sicher gar keinen „Extremismus“. Diese These ist weniger steil als sie klingt. Als ersten Hinweis biete ich mal, dass zu keiner Zeit mehr Gerede über „Extremismus“ im Blätterwald raunt als gerade jetzt, wo der Bundes-VS mal wieder seinen „Bericht“ (ich wollte nicht „Kampfschrift“ schreiben, aber Bericht ohne Anführungszeichen fand ich jetzt auch nicht treffend) vorgestellt hat.

    Tatsächlich haben mich schon neulich zwei Nachrichten inspiriert, endlich mal einen Antisprache-Post über das E-Wort zu schreiben. Erstens hatte der Deutschlandfunk am 9. Juni:

    Die russische Justiz hat mehrere Organisationen des inhaftierten Kremlkritikers Nawalny endgültig verboten. Ein Gericht in Moskau stufte die Vereinigungen als extremistisch ein.

    und dann, am 10. Juni:

    Das [hessische] Landeskriminalamt durchsuchte die Wohnungen und Arbeitsplätze von sechs Mitgliedern des Spezialeinsatzkommandos. [...] Ermittler waren den Angaben zufolge im Rahmen einer anderen Untersuchung zufällig auf die rechtsextremen Handynachrichten gestoßen.

    Was haben Nawalny und die hessischen Polizisten mit Nazineigungen gemeinsam? Gemeinsam mit, sagen wir, den Leuten, die den Weiterbau des offensichtlichen Irrsinnsprojekts A49 im Dannenröder Forst verhindern wollten und die auch unter dem Label „Extremismus“ in den Fokus der Geheimdienste wie unter Polizeiknüppel kamen?

    Nur eines: Sie sind den jeweiligen Regierungen ernsthaft unangenehm. Das, und nichts anderes, ist die eigentliche (für weiter unten: „wissenschaftliche“) Bedeutung von „Extremismus“.

    Gut, die meisten Leute, die von „Extremismus“ reden, geben sich große Mühe, von dieser Bedeutung abzulenken. Die sinnzerstörende Wirkung entfaltet das Wort tatsächlich nur, wenn das diffuse Grauen im Angesicht von Nazi-Polizisten, die quälen, wen sie als „Ausländer“ oder Linke einschätzen gegen die netten Leute vom Danni eingesetzt werden kann (oder halt, wenn ihr Putin seid, gegen Querulanten wie Nawalny). Und das ist wichtig, denn gerade die Danni-Leute (und in Russland wahrscheinlich eben auch eine Figur wie Nawalny) werden von allen außer den betonköpfigsten Schurken geliebt. Ohne den Aufruf von Bildern blindwütig mordender IS-Gläubischer (oder muttermordender Nazispinner aus Hanau) ist robuste staatliche Reaktion – sagen wir, wochen- (Danni), monate- (auch Danni) oder jahrelanges (Nawalny, nochmal Danni) Wegsperren – in solchen Situationen in der Öffentlichkeit schwierig zu verkaufen.

    Nettes und Fortschrittliches mit Fiesem und Reaktionärem verrühren und damit diskreditieren: Das ist die Nettowirkung des Extremismusbegriffs. Wenig überraschend kommt er genau aus der fiesen und reaktionären Ecke, nämlich aus den damals noch intensiv von Altnazis durchsetzten Verfassungsschutzbehörden. Anfang der 1970er Jahre machten sie sich erkennbar Sorgen, weil die allgemeine Sympathie für die unter anderem durch die aufkommenden Berufsverbote gepeinigten „Radikalen“ (so hießen die damals; vgl. Radikalenerlass) in dem Maß zunahm, wie die Avantgarde von 68 gesellschaftlicher Mainstream wurde. Da musste was Neues her, zumal der ähnlich verrührende „Totalitarismus“, der gegen realsozialistische Umtriebe noch prima – und noch dazu mit erheblicher Plausiblität – zog, für kiffende Blumenkinder und wenig später bunte HausbesetzerInnen offensichtlich nicht passte.

    Und so wurde der „Extremismus“ im Bericht des BfV von 1973 geboren – wobei ich vermute, dass es international Vorbilder gegeben haben wird. Wenn nicht, würde inzwischen sogar Wladimir Putin dem deutschen Inlandsgeheimdienst nachplappern. Ich kann gar nicht so genau sagen, warum ich diesen Gedanken besonders furchtbar finde.

    Bis heute wird „Extremismus“ als Konzept wie als Wort vom VS genährt. Die scheinbare Glaubwürdigkeit eines so eindeutig antisprachlichen und breit kritisierten Begriffs in der heutigen Zeit wird erzeugt von Männern wie Armin Pfahl-Traughber, Eckhard Jesse und Uwe Backes, die aus dem Umfeld von Geheimdienst und politischer Polizei in die Akademia aufgestiegen sind und dort VS-Berichte durch Zitate adeln – VS-Berichte, deren krudes politisches Gerüst sich umgekehrt auf die aggressive Scheinwissenschaft der genannten Herren (und noch einer Handvoll weiterer) aufbaut. Diese zirkuläre Legitimation funktioniert immerhin so gut, dass taz-Autor Volkan Ağar in der taz von heute dem Bundesinnenministerium vorwirft, der Bundeszentrale für politische Bildung vorgeschrieben zu haben, eine „wissenschaftliche Linksextremismusdefinition“ durch eine des VS zu ersetzen. Der „Wissenschaftler“, zu dessen Produkten übrigens BMI und Bildzeitung selbst die bpb zuvor genötigt hatten: Armin Pfahl-Traughber. Au weia.

    Wie geht es besser? Nun, wie immer: Hinschauen und sagen, worum es wirklich geht. Die PolizistInnen des Frankfurter SEK sind eklig nicht, weil sie der Regierung peinlich sind, sondern weil sie RassistInnen sind, autoritäre Positionen vertreten, vielleicht AntisemitInnen sind – wer weiß, nachdem ja statt konkreter Information bisher nur „Rechtsextremismus“ im Raum steht? Wäre es nicht wirklich hilfreich, wenn klar wäre, ob es da auch groben Sexismus geht, ob nur um den üblichen Autoritarismus („die Polizei sind die Guten“) oder ob dort auch preppermäßige Putschpläne ausgeheckt wurden?

    Fängt mensch an, solche Fragen zu stellen, zeigt sich auch bald, warum das autoritäre Establishment den „Extremismus“ so sehr präferiert gegenüber dieser Sorte von Hinschauen: Jemand wie Seehofer vertritt offensichtlich erznationalistische Positionen (wenn er sich etwa über Abschiebungen zum Geburtstag freut), Leute, die 2% des Bruttoinlandsprodukts fürs organisierte Töten ausgeben wollen, sind klar MilitaristInnen („Lasst uns Menschen töten, um meine Interessen durchzusetzen“), und wer meint, „Hasskriminalität“ durch mehr Befugnisse für die Polizei beikommen zu können, dürfte sehr offen für autoritäre Gedankengänge sein (eine wirksamere Alternative wäre z.B., die Bildzeitung unrentabel zu machen, die, soweit ich als Vertreter offener Standards das sehe, weit mehr für die Verbreitung von Hass tut als alle Facebook-Trolle zusammen). All diese Dinge sind kritikabel, sogar unappatitlich, führen bei konsequenter Umsetzung in gefährliche Nähe von Faschismus – und nichts davon bewegt sich irgendwo dort, wo der VS „Extremismus“ sieht.

    Die Leute im Danni hingegen wollen glaubhaft größtmögliche Befreiung vom Auto. Sowohl Befreiung als auch weniger Autos sehe wohl nicht nur ich sehr gerne. Und so geht das auch mit vielen anderen „Linksextremismen“: Von Deutsche Wohnen-Enteignung über die Auflösung von NATO und VS über entschlossenere Schritte gegen den Klimawandel und das Massensterben im globalen Süden bis zu grundsätzlicherer Kritik an unseren Produktionsweisen sind die meisten Anliegen sehr gut nachvollziehbar, immer mit dem Herz, sehr oft auch mit dem Hirn. Ohne „Extremismus“ bräuchte es Argumente gegen diese Anliegen. Und die sind entweder schwer zu ersinnen oder entlarvend für die Anliegen der Gegner.

    Ohne „Extremismus“ leben heißt mithin zu fragen, was Leute wirklich wollen und nachzudenken, wie weit das Freiheit, Gleichheit und Solidarität (oder was immer mensch nun als Leitplanken annimmt) voranbringt – oder die jeweiligen Gegenteile.

    Klar, das ist im Regelfall viel mehr Arbeit (insbesondere auch als der schlichte Verweis „vom VS beobachtet“), aber so ist das mit der intellektuellen Ehrlichkeit. Und genauso klar, häufig sind die Ergebnisse nicht so ganz eindeutig, wie etwa bei Alexei Nawalny. An sich mag mensch ja Sympathien hegen für Menschen, die Herr Putin anstrengend findet; ich fürchte aber, angesichts von Nawalnys tatsächlichen Überzeugungen, die kaum weniger autoritär wirken als die der KremlparteigängerInnen, bleibt allenfalls generelle Solidarität gegen Repression übrig als Motivation, ihm irgendwie beizuspringen.

    Nach diesen Worten ist ein Blick in die DLF-Presseschau von heute besonders ernüchternd: Selbst der Süddeutsche, deren Heribert Prantl sich nach dem Auffliegen des NSU den Forderungen nach Auflösung des VS angeschlossen hatte, gelingt allenfalls milder Spott im Angesicht überkritschen Masse von Antisprache im „Bericht“ des Inlandsgeheimdienstes. Alle anderen extremisieren („rechts wie links“ die beim Verbreiten von VS-Material unvermeidliche NOZ, „die Demokratie [und natürlich nicht wie schon seit Jahrzehnten Nichtkartoffeln, Punker und Penner] angegriffen“ beim Tagesspiegel, „Facebook, Telegram & Co [und selbstverständlich nicht Bildzeitung und VS selbst]“ als Jaucheschleudern bei der Südwest-Presse, „Militanz nimmt auch in der linksextremistischen Szene zu“ bei der Mitteldeutschen Zeitung) als gäbe es kein Morgen. Seufz.

  • Zu vollgefressen zum Abheben

    Ein Eichhörnchen turnt durch Zweige

    Keine Zikaden in Weinheim: das Eichhörnchen im dortigen Arboretum konnte noch munter turnen.

    Wieder mal eine Tier-Geschichte aus Forschung aktuell am Deutschlandfunk: In der Sendung vom 25.5. gab es ein Interview mit Zoe Getman-Pickering, die derzeit eine Massenvermehrung von Zikaden an der US-Ostküste beobachtet. Im Gegensatz zu so mancher Heuschreckenplage kam die nicht unerwartet, denn ziemlich verlässlich alle 17 Jahre schlüpfen erstaunliche Mengen dieser Insekten und verwandeln das Land in ein

    All-You-Can-Eat-Buffet. Es gibt schon Berichte von Eichhörnchen und Vögeln, die so fett sind, dass sie nicht mehr richtig laufen können. Die sitzen dann einfach nur herum und fressen eine Zikade nach der anderen.

    Es war dieses Bild von pandaähnlich herumhockenden Eichhörnchen, die Zikaden in sich reinstopfen eine einE Couch Potato Kartoffelchips, das meine Fantasie angeregt hat.

    Gut: Gereizt hat mich auch die Frage, wo auf der Fiesheitssakala ich eigentlich einen intervenierenden Teil der Untersuchung ansiedeln würde, der im Inverview angesprochen wird: Um

    herauszufinden [ob die Vögel noch Raupen fressen, wenn sie Zikaden in beliebigen Mengen haben können], haben wir auch künstliche Raupen aus einem weichen Kunststoff. Die setzen wir auf die Bäume. Und wenn sich dann Vögel für die künstlichen Raupen interessieren, dann picken sie danach

    und sind bestimmt sehr enttäuscht, wenn sie statt saftiger Raupen nur ekliges Plastik schmecken. Na ja: verglichen mit den abstürzenden Fledermäuse von neulich ist das sicher nochmal eine Stufe harmloser. Balsam für die Ethikkommission, denke ich. Das Ergebnis übrigens: Ja, die Zikadenschwemme könnte durchaus eine Raupenplage nach sich ziehen.

    Die Geschichte hat ein Zuckerl für Mathe-Nerds, denn es ist ja erstmal etwas seltsam, dass sich die Zikaden ausgerechnet alle 17 Jahre verabreden zu ihren Reproduktionsorgien. Warum 17? Bis zu diesem Interview war ich überzeugt, es sei in ÖkologInnenkreisen Konsens, das sei, um synchronen Massenvermehrungen von Fressfeinden auszuweichen, doch Getman-Pickering hat mich da eines Besseren belehrt:

    Aber es gibt auch Theorien, nach denen es nichts mit den Fressfeinden zu tun hat. Sondern eher mit anderen Zikaden. Der Vorteil wäre dann, dass die Primzahlen verhindern, dass unterschiedliche Zikaden zur gleichen Zeit auftreten, was dann schlecht für die Zikaden sein könnte. Und dann gibt es auch noch einige Leute, die es einfach nur für einen Zufall halten.

    Das mit dem Zufall fände ich überzeugend, wenn bei entsprechenden Zyklen in nennenswerter Zahl auch nichtprime Perioden vorkämen. Und das mag durchaus sein. Zum Maikäfer zum Beispiel schreibt die Wikipedia: „Maikäfer haben eine Zykluszeit von drei bis fünf, meist vier Jahren.“

    Aua. Vier Jahre würden mir eine beliebig schlechte Zykluszeit erscheinen, denn da würde ich rein instinktiv Resonanzen mit allem und jedem erwarten. Beim Versuch, diesen Instinkt zu quantifizien, bin ich auf etwas gestoßen, das, würde ich noch Programmierkurse geben, meine Studis als Übungsaufgabe abbekommen würden.

    Die Fragestellung ist ganz grob: Wenn alle n Jahre besonders viele Fressfeinde auftreten und alle m Jahre besonders viele Beutetiere, wie oft werden sich die Massenauftreten überschneiden und so den (vermutlichen) Zweck der Zyklen, dem Ausweichen massenhafter Fressfeinde, zunichte machen? Ein gutes Maß dafür ist: Haben die beiden Zyklen gemeinsame Teiler? Wenn ja, gibt es in relativ kurzen Intervallen Jahre, in denen sich sowohl Fressfeinde als auch Beutetiere massenhaft vermehren. Haben, sagen wir, die Eichhörnchen alle 10 Jahre und die Zikaden alle 15 Jahre Massenvermehrungen, würden die Eichhärnchen alle drei Massenvermehrungen einen gut gedeckten Tisch und die Zikaden jedes zweite Mal mit großen Eichhörnchenmengen zu kämpfen haben.

    Formaler ist das Problem also: berechne für jede Zahl von 2 bis N die Zahl der Zahlen aus dieser Menge, mit denen sie gemeinsame Teiler hat. Das Ergebnis:

    Balkendiagramm: Gemeinsame Teiler für 2 bis 20

    Mithin: wenn ihr Zikaden seid, verabredet euch besser nicht alle sechs, zwölf oder achtzehn Jahre. Die vier Jahre der Maikäfer hingegen sind nicht so viel schlechter als drei oder fünf Jahre wie mir mein Instinkt suggeriert hat.

    Ob die Verteilung von Zyklen von Massenvermehrungen wohl irgendeine Ähnlichkeit mit dieser Grafik hat? Das hat bestimmt schon mal wer geprüft – wenn es so wäre, wäre zumindest die These vom reinen Zufall in Schwierigkeiten.

    Den Kern des Programms, das das ausrechnet, finde ich ganz hübsch:

    def get_divisors(n):
      return {d for d in range(2, n//2+1) if not n%d} | {n}
    
    
    def get_n_resonances(max_period):
      candidates = list(range(2, max_period+1))
      divisors = dict((n, get_divisors(n)) for n in candidates)
    
      return candidates, [
          sum(1 for others in divisors.values()
            if divisors[period] & others)
        for period in candidates]
    

    get_divisors ist dabei eine set comprehension, eine relativ neue Einrichtung von Python entlang der altbekannten list comprehension: „Berechne die Menge aller Zahlen zwischen 2 und N/2, die N ohne Rest teilen – und vereinige das dann mit der Menge, in der nur N ist, denn N teilt N trivial. Die eins als Teiler lasse ich hier raus, denn die steht ohnehin in jeder solchen Menge, weshalb sie die Balken in der Grafik oben nur um jeweils eins nach oben drücken würde – und sie würde, weit schlimmer, die elegante Bedingung divisors[period] & others weiter unten kaputt machen. Wie es ist, gefällt mir sehr gut, wie direkt sich die mathematische Formulierung hier in Code abbildet.

    Die zweite Funktion, get_n_resonances (vielleicht nicht der beste Name; sich hier einen besseren auszudenken wäre auch eine wertvolle Übungsaufgabe) berechnet zunächt eine Abbildung (divisors) der Zahlen von 2 bis N (candidates) zu den Mengen der Teiler, und dann für jeden Kandidaten die Zahl dieser Mengen, die gemeinsame Elemente mit der eigenen Teilermenge haben. Das macht eine vielleicht etwas dicht geratene generator expression. Generator expressions funktionieren auch wie list comprehensions, nur, dass nicht wirklich eine Liste erzeugt wird, sondern ein Iterator. Hier spuckt der Iterator Einsen aus, wenn die berechneten Teilermengen (divisors.values()) gemeinsame Elemente haben mit den Teilern der gerade betrachteten Menge (divisors[period]). Die Summe dieser Einsen ist gerade die gesuchte Zahl der Zahlen mit gemeinsamen Teilern.

    Obfuscated? Ich finde nicht.

    Das Ergebnis ist übrigens ökologisch bemerkenswert, weil kleine Primzahlen (3, 5 und 7) „schlechter“ sind als größere (11, 13 und 17). Das liegt daran, dass bei einem, sagen wir, dreijährigen Zyklus dann eben doch Resonanzen auftauchen, nämlich mit Fressfeindzyklen, die Vielfache von drei sind. Dass 11 hier so gut aussieht, folgt natürlich nur aus meiner Wahl von 20 Jahren als längsten vertretbaren Zyklus. Ganz künstlich ist diese Wahl allerdings nicht, denn ich würde erwarten, dass allzu lange Zyklen evolutionär auch wieder ungünstig sind, einerseits, weil dann Anpassungen auf sich ändernde Umweltbedingungen zu langsam stattfinden, andererseits, weil so lange Entwicklungszeiten rein biologisch schwierig zu realisieren sein könnten.

    Für richtig langlebige Organismen – Bäume zum Beispiel – könnte diese Überlegung durchaus anders ausgehen. Und das mag eine Spur sein im Hinblick auf die längeren Zyklen im Maikäfer-Artikel der Wikipedia:

    Diesem Zyklus ist ein über 30- bis 45-jähriger Rhythmus überlagert. Die Gründe hierfür sind nicht im Detail bekannt.

    Nur: 30 und 45 sehen aus der Resonanz-Betrachtung jetzt so richtig schlecht aus…

  • Ach, Sparda!

    Werbeschriften der Sparda-Bank

    Bin ich komisch, weil ich nicht gerne Geld geboten bekomme fürs Ausliefern von Bekannten an Banken?

    Ich bin leider Kunde der Sparda-Bank Baden-Württemberg. „Leider“ beispielsweise, weil mich die Bank dann und wann mit 75 Euro dazu bringen will, als Makler für sie tätig zu werden. Fände ich das Konzept Ehre nicht kreuzdoof, müsste ich wegen Betrag und Inhalt des Angebots Satisfaktion fordern.

    Lästiger im Alltag ist das Online-Banking, zumal es mit jedem „Relaunch“ schlimmer wird. Die utopische Hoffnung, ich könnte Kontoauszüge per PGP-verschlüsselter Mail bekommen und Überweisungen per signierter Mail in einem einfachen, maschinenlesbaren Format einreichen, habe ich dabei schon längst aufgegeben. Wahrscheinlich zwingen die diversen Zahlungsdiensterichtlinien die Bank wirklich zu (aus Sicht EDV-kompetenter Menschen) unsinnigen Schnittstellen.

    Aber wenn es schon hakelige Webseiten sein müssen, sollten sie wenigstens technisch so halbwegs in Ordnung sein. Fantastische Maximalforderung: die elementaren Funktionen sollten ohne Javascript gehen; das würde viel mehr für die Sicherheit tun als alle Zweifaktorauthentifizierungen des Universums. I have a dream.

    Die Sparda jedoch geht, wie gesagt, mit großen Schritten in die entgegengesetzte Richtung, kürzlich zu einem Laden namens TEO, mit dem sich einige Sparda-Genossenschaften, wie es aussieht, eine Art Fintech leisten wollten. Um damit nicht gleich bauchzulanden, ziehen sie ihre Kunden aus ihren alten (eingestandenermaßen auch unangenehmen) Systemen dorthin um.

    Schon, dass die KundInnen beim Umzug ein manuelles „onboarding“ samt Neueinrichtung der Konten sowie der (Nicht-) Zustellung von Kontoauszügen duchlaufen müssen, wirkt unnötig umständlich, so sehr ich verstehen kann, dass TEO nicht unbedingt die (vermutlich eher bescheidenen) Passwort-Hashes des alten Sparda-Eigenbaus übernehmen wollten. Bei den Investitionssummen, um die es hier vermutlich geht, wären jedoch elegantere Migrationspfade („bitte ändern sie jetzt ihr Passwort“) schon denkbar gewesen.

    Das um so mehr, als das onboarding richtig schlecht gemacht ist: Es erscheint erstmal ein leerer Bildschirm, und das ändert sich auch dann nicht, wenn mensch den Browser Javascript ausführen lässt. Kein Fallback, nichts, immer nur ein weißes Fenster. Das Javascript von TEO nämlich wirft eine Exception, wenn es kein local storage bekommt, und niemand fängt diese Exception. Ganz im Stil der neuen Zeit gibt es nicht mal ein minimales HTML ohne Skripting – nur weiß. Au weia.

    Zwei Zeilen Javascript würden reichen, um nicht verfügbare local storage zu diagnostizieren und das etwas weniger murksig zu machen (ordentliches HTML wäre natürlich immer noch nett). Etwas mehr Arbeit ist es, dann zu erklären, was da wie lang gespeichert wird und warum es ohne nicht gehen soll. Das jedoch würde ohnehin in die Datenschutzerklärung gehören, viel zusätzliche Arbeit wäre es also nicht. Wenn die Datenschutzerklärung etwas taugen würde, heißt das. Aber dazu gleich.

    Ich könnte jetzt weitermachen mit Punkten, an denen der Kram an allen möglichen und unmöglichen Stellen kaputt geht, ohne dass es irgendeine Sorte Fehlermeldung außerhalb der Javascript-Konsole (und welche Muggels kennen die schon?) gibt. Aber selbst wenn mensch den Browser – was bei Bank-Geschäften schon als schlechte Idee gelten kann – nach und nach immer unvorsichtiger konfiguriert, sind noch schwer verstehbare Schnitzer im Programm, etwa, dass der Flickercode die falsche Größe hat. Die meisten Clients haben inzwischen eine recht zuverlässige Idee von der physikalischen Größe der Anzeige; ein width: 6.5cm im CSS ist doch wirklich nicht zu viel verlangt.

    Ähnliche WTF-Momente ergeben sich in der Datenschutzerklärung der TEOs. Derzeit heißt es dort in 2.3:

    Zur Erhöhung der Kundensicherheit nutzen wir in TEO den Service reCAPTCHA der Google Ireland Limited, Gordon House, 4 Barrow St, Dublin, D04 E5W5, Irland. Im Rahmen der Registrierung in TEO wird das reCAPTCHA zur Erkennung und Unterscheidung zwischen missbräuchlicher Nutzung personenbezogener Daten durch Maschinen und menschliche Eingaben eingesetzt.

    Als ich das gelesen habe, habe ich erstmal mit dem „onboarding“ aufgehört, denn wer mir was verkaufen will, sollte nicht verlangen, dass ich Schaufenster oder Verkehrsschlider auf Zuruf von google abklicke, und mich schon gar nicht zum Ausführen von googles Code nötigen (ebay, hörst du mich?). Sparda beruft sich für diese Frechheit auf Art. 6 1(f) DSGVO, also berechtigte Interessen des Betreibers. Das ist offensichtlich Quatsch; Textchas oder selbst hostbare Tests funktionieren besser und unter weniger Kundenverprellung.

    Am Ende musste ich aber dringend überweisen und war entschlossen, den reCaptcha-Mist zur Not doch durchzustehen. Musste ich am Ende nicht nicht, google hielt meinen Browser offenbar wirklich für menschengesteuert – wer weiß, warum. Aber TEO lädt tatsächlich eine Datei recaptcha__de.js von google-Servern, und zwar dort aus einem Pfad wie /recaptcha/releases/CdDdhZfPbLLrfYLBdThNS0-Y/recaptcha__de.js – da könnte ich schon allein bei der URL ins Grübeln kommen, was für Informationen google da wohl aus dem Banking ausleiten mag (ok: ja, ich vermute in Wirklichkeit auch, dass die Buchstabensuppe eher etwas wie einen git-Commit auf google-Seite identifiziert – aber wenn die googles wollten, könnten sie über Pfade dieser Art fast beliebige Mengen an Information exfiltrieren, was erst dann auffallen würde, wenn mal wer Pfade verschiedener Clients vergliche).

    Was denken sich Leute, wenn sie ohne Not reCaptcha auf ihre Seiten packen? Diese Frage stellt sich fast noch mehr beim nächsten Punkt:

    2.4 Google Web Fonts

    Um Inhalte browserübergreifend korrekt und grafisch ansprechend darzustellen, werden in TEO Web Schriften von Google Fonts verwendet. Die Einbindung dieser Web Fonts erfolgt nicht über Google. Die Schriften liegen lokal auf Servern. Es erfolgt kein externer Serveraufruf bei Google. Es findet keine Informationsübermittlung an Google statt.

    Wenn ich recht verstehe, was die da sagen wollen, dann wäre das: Wir nehmen Fonts von google, aber ziehen sie nicht von google. Dann stellt sich die Frage, was diese Information hier soll – wenn die anfangen, aufzuzählen, wer alles irgendwie an der Software beteiligt war, die auf ihren Servern läuft, sind sie lang beschäftigt.

    Um das noch absurder zu machen: sie lügen (jedenfalls im Effekt). Zumindest gestern und heute versucht die Seite für mich, die URL https://fonts.gstatic.com/s/roboto/v18/KFOmCnqEu92Fr1Mu4mxP.ttf (und noch zwei weitere; ich hoffe, die Buchstabensuppe erhält nicht allzu viel Kompromittierendes über mich) zu dereferenzieren. Damit hat google die IP, via Referrer den Umstand, dass gerade wer überweist, und vermutlich auch die Muggel-Identität, da mich wundern würde, wenn nicht normal der google-Cookie auch an gstatic gehen würde (ich muss gestehen, das nicht näher untersucht zu haben, zumal fonts.gstatic.com auf meinen Maschinen zu localhost auflöst).

    Was soll das? Wenn TEO schon Geld in die Hand nimmt und meint, mir die Wahl des Fonts vorschreiben zu müssen (was ich übrigens lästig finde), dann sollen sie wenigstens irgendwas kaufen statt die vergifteten Geschenke von google zu nehmen und dann noch in ihrer Datenschutzerklärung zu lügen.

    Für eine teilweise Erklärung für die, na ja, Lüge (ich will gnädig sein: „das Versehen“) mit den google-Fonts hilft ein Blick auf die 107 (!) Requests, die mein Browser macht, um die Wurzelseite des Online-Bankings aufzubauen. Dabei zeigt sich, dass immerhin die meisten Daten von TEO-Servern kommen. Es bleiben aber, nach der Vorrede kaum überraschend, doch einige Cross-Site-Requests.

    • die erwähnten Google-Fonts
    • ein CSS, ein Logo, das Captcha-Javascript (von www.gstatic.com)
    • eine bizarre Datei „anchor“, die offenbar im Zusammenhang mit Captcha steht (und die den Browser vermutlich dazu bringt, die Fonts von fonts.gstatic.com zu ziehen)
    • Und dann noch Ressourcen list und logoutWeb von prod-teo.itmr.de, beides JSON, ersteres mit Zeug, was erstmal nach Werbequatsch aussieht, aber vermutlich Identitäsinformation ist.

    Die Suche nach ITMR in der Datenschutzerklärung ist vergeblich, www.itmr.de zeigt ohne Javascript nur einen Spinner:

    Ein Warte-Spinner

    Wenn dieses Ding genug Schöpfungshöhe für Copyright hat, liegt dieses vermutlich bei itmr. Hier verwendet unter der, klar, Satireklausel.

    Der Spinner ist schon mal deutlich mehr als die leere Seite von TEO. Mit Javascript kommt sogar ein Titel: „ITM Research GmbH – Smart Cloud Computing”, ansonsten bleibt es beim Spinner. ITM Research… nichts, was Wikipedia kennen würde. Smart? Na ja. Zieht auch erstmal fünf Pfund Zeug von Google, Fonts und eine Familienpackung Javascript von maps.googleapis.com, einen Haufen PNGs von www.google.com. Ziemlich viel Kram für einen rotierenden Spinner.

    Wenn ich der Seite obendrauf local storage erlaube, kommt endlich das heiß erwartete Cookie-Banner, und zwar so:

    Cookie-Banner mit vor-abgeklickten Trackingcookies

    Echt jetzt? Per default angeklickte Tracking-Cookies? Wie smart muss mensch wohl sein, um für so ein bisschen Überwachungsmehrwert ein fettes Bußgeld zu riskieren?

    Zurück zur Ausgangsfrage: Was für Daten tauscht die Sparda eigentlich mit diesen etwas anrüchigen Gesellen aus? „ITM-ation – unser Synonym für digitale Transformation und Innovation“ schreiben sie, wenn ihnen der Browser gut genug ist. Diese Leute bekommen mit, wenn ich mit der Sparda-Bank rede? Uh.

    Ich klicke auf „Mehr Erfahren”. Beim Bullshit Bingo hätte ich gleich gewonnen:

    Wir realisieren Projekte der digitalen Transformation und Innovation, um Ihnen durch die Digitalisierung von Geschäftsmodellen, Wertschöpfungsketten und Prozessen mehr Wachstum in einem immer stärkeren Wettbewerbsumfeld zu ermöglichen. [...] Wir entwickeln Apps und Web-Apps, um Geschäftsprozesse in digitale Ökosysteme zu transferieren. Wir entwickeln dabei Ihre Datenveredelungsstrategie, setzen aber auch externe Echtzeit-Dienste der künstlichen Intelligenz (KI) wie zum Beispiel Cognitive Services und Watson ein. [...] Eine positive User Experience ist unabdingbar in der Digitalisierung Ihrer Prozesse. Um das jederzeit und von überall zu erzielen, brauchen Sie zwischen Ihrer Anwendung und Ihren Kunden über alle Kanäle und Anwendungsoptionen hinweg funktionale und ansprechende Benutzeroberflächen und Schnittstellen.

    Der Bullshit gegen Ende suggeriert (ebenso wie der konsistente Totalausfall ohne …

  • Immer auf die Linken

    In ihrem Engagement „gegen Rechts“ beschränkt sich die Regierung im Wesentlichen auf autoritäre Maßnahmen, also Verbote und Drohungen. Das ist schade, denn das Runtertönen des regierungsamtlichen Nationalismus („deutsche Interessen wahren“), Militarismus („Fähigkeit zur Machtprojektion“), Autoritarismus (§114 StGB, um mal was besonders Schlagendes zu erwähnen; die Rote Hilfe Berlin dazu) und der vielen anderen rechten Versatzstücke („Flüchtlingskrise“, „wegsperren, und zwar für immer“ usf) könnte erstens vielleicht wirklich was bringen und würde zweitens nicht am Ende in aller Regel menschenfreundliche Anliegen treffen.

    Für die Beobachtung, nach der „Gesetze gegen Rechts“ (aktuell z.B. das verschärfte Hassgesetz) am Ende in aller Regel Linke treffen, habe ich gerade ein Beispiel gefunden, das ich gar nicht in diese Kategorie gepackt hatte: Den Entzug der Gemeinnützigkeit der VVN/BdA. Dabei hatte das Berliner Finanzamt der Antifa-Organisation eine dicke Steuernachforderung geschickt unter Hinweis auf erstens den Bericht des bayrischen Inlandsgeheimdienstes („Verfassungsschutz”, VS), der die VVN/BdA als staatsfeindlich listet.

    Der Eintrag als solcher wäre ja nicht schlimm, denn dass der VS aus Schurken besteht und aufgelöst werden muss, ist nicht erst seit Maaßen klar. Jedoch hat der Gesetzgeber zweitens 2009 dem §51 Abgabenordnung (AO) – der Einleitung zur Regelung von Steuerbegünstigung und Gemeinnützigkeit – einen Absatz 3 hinzugefügt, in dem es heißt:

    Bei Körperschaften, die im Verfassungsschutzbericht des Bundes oder eines Landes als extremistische Organisation aufgeführt sind, ist widerlegbar davon auszugehen, dass die Voraussetzungen des Satzes 1 [ausschließlich und unmittelbar gemeinnützige, mildtätige oder kirchliche Zwecke] nicht erfüllt sind.

    – der VS hat mithin ein effektives Vetorecht für die Anerkennung steuerlicher Begünstigung, was nicht weit weg ist von der Methode der Klassifikation als ausländischer Agent durch das Justizministerium in Russland[1]. Wie das die beschließenden ParlamentarierInnen mit einem transparenten, gewaltengeteilten Staatsmodell zusammenbekommen haben, ist mir schleierhaft.

    Aber stellt sich raus: sie haben sich wohl als antifaschistisch bewegt gewähnt, denn §51 (3) AO entstand als Folge des gescheiterten Verbotsprozesses gegen die NPD. Zur Erinnerung: 2001 bis 2003 hatten Bund und Länder versucht, die NPD vor dem Bundesverfassungsgericht verbieten zu lassen. Das scheiterte 2003, weil die diversen Inlandsgeheimdienste sich weigerten, ihre MitarbeiterInnen abzuziehen und Vertrauenspersonen abzuschalten, so dass klar hätte werden können, wie viel der Organisation tatsächlich nicht nur aus Geheimdienst besteht. Wo auf dem Spektrum von „NPD decken“, „die eigene Existenzgrundlage aufbauen“ und „unfähig sein“ das anzusiedeln war, bleibt bis auf Weiteres dem eigenen Geschmack überlassen (vgl. auch Wikipedia zum ersten NPD-Verbotsverfahren).

    Tatsäche ist jedenfalls: Der VS hat die NPD gerettet, und nun dachten sich vermutlich nicht ganz übelmeinende Personen aus der Restpolitik, der Laden sollte zumindest nicht noch anders als über den VS in großen Mengen staatliches Geld bekommen. Dazu hätte eine Änderung im Parteiengesetz gereicht (und selbst das hätte ich als schlechte Idee klassifiziert). Dass auch die ganz normale Vereine regulierende Abgabenordnung geändert wurde, nun, das könnten weniger wohlmeinende Menschen auf den Fluren der Ministerien angeleiert haben. Vielleicht war es aber auch wirklich nur der Versuch, proaktiv Schlupflöcher zu stopfen.

    Nun, zehn Jahre später wandte das Finanzamt Berlin das in sogar halbwegs glaubhaftem antifaschistischem Furor geänderte Gesetz gegen die größte antifaschistische Organisation der BRD.

    Das hat letztes Jahr für einige Mobilisierung und viele Eintritte in die VVN/BdA gesorgt, nicht jedoch für eine Änderung des anrüchigen §51 (3) AO. Stattdessen haben sich Finanzamt Berlin und VS Bayern elegant aus der öffentlichen Schusslinie genommen, indem der VS Bayern seine Einschätzungen nur noch auf den bayrischen Landesverband der VVN beschränkt und das Finanzamt Berlin daher die Bundesorganisation nicht mehr als unerwünscht einstufen muss.

    Was aber heißt: Der nächste VS, der einen Laden plattmachen will, der sich auf Steuerbegünstigung verlässt, kann das immer noch tun.

    [1]In Russland sind im Laufe der Jahre eine Art Trucker-Gewerkschaft und eine Selbsthilfe-Organisation von Diabetiker_innen in den Fokus des ausländische-Agenten-Apparats gekommen. Dass VS und Finanzamt immerhin auf die VVN-BdA und nicht etwa auf Männergesangsvereine losgehen: das macht Hoffnung im Hinblick auf die Funktionsfähigkeit der deutschen Bürokratie jedenfalls im Vergleich zur russischen.
  • Offene Haftbefehle, politisch

    Mit einiger Verspätung habe ich gerade Bundestagsdrucksache 19/15346 durchgelesen, hauptsächlich, um herauszufinden, wie es wohl mit PIAV weitergegangen ist, dem dystopischen Projekt des BKA, dem Wildwuchs der Polizeidatenbanken ausgerechnet dadurch ein Ende zu machen, dass im Wesentlichen alle alles finden und lesen können (gut, das ist jetzt etwas vereinfachend, aber aus allen Erfahrungen mit dem bestehenden BKA nicht sehr weit extrapoliert).

    Der Lerneffekt der Lektüre in Sachen PIAV war überschaubar, aber dafür bin ich auf eine beim BKA betriebene Datei „Übersicht offener Haftbefehle PMK“ gestoßen, die so beschrieben wird:

    Tabellenausschnitt mit Dateizweck: „Tabellarische Übersicht von Grundinformationen (Personalien/letzter Aufenthaltsort/Angaben zum Haftbefehl) zu Fahndungen von Peronen, die mindestens den Status eines Verdächtigen im Bereich PMK haben und zu denen ein offener Haftbefehl besteht.

    Wenn ich die Spalte 6 (vom Innenministerium etwas unzutreffend „Zweck“ überschrieben) richtig interpretiere, lässt das BKA bei jedem Haftbefehl (die kommen vermutlich wegen der ebenfalls beim BKA liegenden Haftdatei bei ihnen vorbei) eine Abfrage gegen ihre verschiedenen Datenbanken laufen. Dabei wäre schon mal interessant, welche das konkret sind: Nur der KAN? Die Gewalttäter-Dateien? Auch die Top-Secret-Amtsdateien?

    Sofern sich bei dieser Suche an der zu verhaftenden Person ein personengebundener Hinweis (PHW) wie LIMO, REMO oder AUMO zeigt, wird offenbar ein neuer Eintrag in dieser Haftbefehl-PMK-Datei generiert, und zwar ganz egal, ob die der Haftstrafe zugrundeliegende Straftat irgendwas mit mutmaßlichen Gesinnungen zu tun haben könnte oder nicht.

    Ich hätte dazu ein paar Fragen:

    • Hat da jemals jemand einen tatsächlichen Zweck formuliert? Also anfangend mit: „Wenn jemand wegen eines Waffendelikts einfahren soll und es ist ein Fascho, dann ist es gut™, wenn wir wissen, dass ein Fascho und nicht nur irgendwer wegen eines Waffendelikts einfahren soll.“
    • Hat dann wer gesagt, wie „dann ist es gut“ zu irgendeinem Nutzen werden könnte, der dem doch recht drastischen Eingriff in die Menschenrechte der Betroffenen proportional sein könnte?
    • Warum brauchts dann dazu, Schwarzfahrende mit und ohne Protesthintergrund verschieden zu behandeln? Ich biete übrigens eine 1:1-Wette an, dass von den Leuten, deren politischer PHW irgendeine Wurzel in der Realität hat, die breite Mehrheit Linke sind, die wegen entweder Dope oder Schwarzfahren einfahren sollen; meine Fantasie reicht nicht, für so eine Speicherung auch nur irgendeine Rechtfertigung zu finden jenseits von „lass uns die Zecken noch etwas ärgern“.
    • Hat da jemals jemand von einer Datenschutzbehörde draufgeschaut? Meine Arbeitshypothese: Die Prüfenden hat der Schlag getroffen, weshalb sie das nicht gleich laut im Datenschutzbericht angeprangert haben (dem BKA untersagen können sie ja leider in der Praxis nicht viel).

    Als schwacher Trost bleibt, dass die PHWs, die in den verschiedenen Datenbanken so vergeben sind, selbst weitgehend beliebig sind und Datenschutzprüfungen nur in Ausnahmefällen überstehen. Das setzt zumindest mal große Fragezeichen hinter die Eignung dieser Datei für eigentlich alles, denn Leute im Wesentlichen nach dem Zufallsprinzip in eine Datei stecken mag beim BKA Routine sein, für alle anderen ist es schlicht fieser Quatsch.

    Das tröstet ein wenig, denn menschenrechtsfeindlicher Quatsch schlägt immerhin nur nach dem Zufallsprinzip ein. Das ist immer noch besser als zielgerichtete Spezialunterdrückung für politisch aktive Menschen.

    Nachtrag (2021-06-05)

    Stellt sich raus: Das ist in Wirklichkeit relativ harmlos und jedenfalls nicht die Idee der Polizei. Die Datei wurde eingerichtet, um Bundestagsanfragen zu offenen Haftbefehlen gegen vermutliche FaschistInnen beantworten zu können, und weil das BKA extremistisch der Extremismustheorie anhängt, haben sie dann gleich alles, was sie in PMK einordnen, in eine Datei gekippt. Warum sie nicht einfach ein bisschen SQL laufen lassen zur Beantwortung der Anfragen, verstehe ich nicht ganz; freie Anfragen über so kitzligen Beständen sind zwar vom Datenschutz her ziemlich kritisch, aber wenn die Ausgabe so stark aggregiert ist wie hier, wäre das sicher milder gegenüber einer eigenen und dauerhaften Datenbank-Tabelle (einem View?).

    Auf der anderen Seite: Wenn die Polizei diese Tabelle gar nicht wollte, bleibt als Haupt-Ärger vor allem die völlig unklare Zweckbestimmung. Hätten sie gleich gesagt, worum es geht, hätte ich mir den ganzen Post sparen können.

  • Fledermäuse und die Schallgeschwindigkeit

    Via Forschung aktuell vom 5. Mai (ab 18:35) bin ich über ein weiteres Beispiel für vielleicht nicht mehr ganz vertretbare, aber leider doch sehr spannende Experimente an Tieren gestolpert: Eran Amichai und Yossi Yovel von der Uni Tel Aviv und dem Dartmouth College haben festgestellt, dass (jedenfalls) Weißrandfledermäuse eine angeborene Vorstellung von der Schallgeschwindigkeit haben („Echolocating bats rely on innate speed-of-sound reference“, https://doi.org/10.1073/pnas.2024352118; ich glaube, den Volltext gibts außerhalb von Uninetzen nur über scihub).

    Flughunde vor Abendhimmel

    Die beeindruckendsten Fledertiere, die ich je gesehen habe: Große Flughunde, die abends in großen Mengen am Abendhimmel von Pune ihre Runden drehen. Im Hinblick auf die Verwendung dieses Fotos bei diesem Artikel etwas blöd: Diese Tiere machen gar keine Echoortung.

    Das ist zunächst mal überraschend, weil die Schallgeschwindigkeit in Gasen und Flüssigkeiten von deren Dichte abhängig ist und sie damit für Fledermäuse je nach Habitat, Wetter und Höhe schwankt. Für ideale Gase lässt sie sich sogar recht leicht ableiten, und das Ergebnis ist: c = (κ p/ρ)½, wo c die Schallgeschwindigkeit, p der Druck und ρ die Dichte ist. Den Adiabatenexponent κ erklärt bei Bedarf die Wikipedia, er ändert sich jedenfalls nur, wenn die Chemie des Gases sich ändert. Luft ist, wenn ihr nicht gerade in Hochdruckkammern steht (und da würdet ihr nicht lange stehen), ideal genug, und so ist die Schallgeschwindigkeit bei konstantem Luftdruck in unserer Realität in guter Näherung umgekehrt proportional zur Wurzel der Dichte der Luft.

    Nun hat Helium bei Normalbedingungen eine Dichte von rund 0.18 kg auf den Kubikmeter, während Luft bei ungefähr 1.25 kg/m³ liegt (Faustregel: 1 m³ Wasser ist rund eine Tonne, 1 m³ Luft ist rund ein Kilo; das hat die Natur ganz merkfreundlich eingerichtet). Der Adiabatenexponent für Helium (das keine Moleküle bildet) ist zwar etwas anders als der von Stickstoff und Sauerstoff, aber so genau geht es hier nicht, und deshalb habe ich 1/math.sqrt(0.18/1.25) in mein Python getippt; das Ergebnis ist 2.6: grob so viel schneller ist Schall in Helium als in Luft (wo es rund 300 m/s oder 1000 km/h sind; wegen des anderen κ sind es in Helium bei Normalbedingungen in Wahrheit 970 m/s).

    Flattern in Heliox

    Das hat für Fledermäuse eine ziemlich ärgerliche Konsequenz: Da sich die Tiere ja vor allem durch Sonar orientieren und in Helium die Echos 3.2 mal schneller zurückkommen würden als in Luft, würden an Luft gewöhnte Fledermäuse glauben, all die Wände, Wanzen und Libellen wären 3.2-mal näher als sie wirklich sind. Immerhin ist das die sichere Richtung, denn in einer Schwefelhexaflourid-Atmosphäre (um mal ein Gas mit einer sehr hohen Dichte zu nehmen, ρ = 6.6 kg/m³) ist die Schallgeschwindigkeit nur 44% von der in Luft (wieder ignorierend, dass das Zeug einen noch anderen Adiabatenexponenten hat als He, O2 oder N2), und die Tiere würden sich noch zwanzig Zentimeter von der Wand weg wähnen, wenn sie in Wirklichkeit schon mit den Flügeln an sie anschlagen könnten – die Weißrandfledermäuse, mit denen die Leute hier experimentiert haben, haben eine Flügelspannweite von rund 20 Zentimetern (bei 10 Gramm Gewicht!). Wer mal Fledermäuse hat fliegen sehen, ahnt, dass das wohl nicht gut ausgehen würde.

    Aber das ist natürlich Unsinn: In Schwefelhexaflourid ist die Trägheit des Mediums erheblich größer, und das wird die Strömungseigenschaften und damit den dynamischen Auftrieb der Fledermausflügel drastisch ändern[1]. Was auch umgekehrt ein Problem ist, denn in einer Helium-Atmosphäre mit der um fast einen Faktor 10 geringeren spezifischen Trägheit funktionieren die Fledermausflügel auch nicht ordentlich. Ganz zu schweigen davon natürlich, dass die Tiere darin mangels Sauerstoff ersticken würden.

    Deshalb haben Amichal und Co mit Luft-Helium-Mischungen („Heliox“) experimentiert. Dabei haben sie die Schallgeschwindigkeit in einigen Experimenten um 27% erhöht, in der Regel aber nur um 15%[2]. Dass die beiden zwei Helioxmischungen am Start hatten, wird wohl einerseits daran liegen, dass die 15% allenfalls knapp über der natürlichen Schwankungsbreite der Schallgeschwindigket durch Temperatur, Luftdruck und Luftfeuchtigkeit (die gehen ja auch alle auf die Dichte) liegen. Mit 27% aber hatten die Fledermäuse doch zu große Probleme mit dem Fliegen, und das wäre keine Umwelt, in der kleine Fledermäuse aufwachsen sollten.

    Im Artikel schreiben die Leute dazu etwas hartherzig:

    “Category I” [von Fehlflügen] included flights in which the bat clearly did not adjust motor responses to the lessened lift and landed on the floor less than 50 cm from takeoff.

    – was eine recht zurückhaltende Umschreibung von „Absturz“ ist. Einige Tiere hatten davon schnell die Nase voll:

    Treatments [nennt mich pingelig, aber die Bezeichnung der Experimente als „Behandlung“ ist für mich schon auch irgendwo am Euphemismus-Spektrum] were completed in one session with several exceptions: two individuals refused to fly at 27% SOS after 2 d, and those treatments were therefore done in two sessions each, separated by 1 d in normal air.

    Unter diesen Umständen liegt auf der Hand, dass „Köder gefangen und gefressen“ kein gutes Kriterium ist dafür, ob sich die Fledermäuse auf Änderungen der Schallgeschwindigkeit einstellen können – viel wahrscheinlicher waren sie einfach mit ihren Flugkünsten am Ende.

    Tschilpen und Fiepen

    Es gibt aber einen Trick, um die Effekte von Wahrnehmung und Fluggeschick zu trennen. Jagende Fledermäuse haben nämlich zwei Modi der Echoortung: Auf der Suche und aus der Ferne orten sie mit relativ lang auseinanderliegenden, längeren Pulsen, also etwa Tschilp – Tschilp – Tschilp. In der unmittelbaren Umgebung der Beute (in diesem Fall so ab 40 cm wahrgenommener Entfernung) verringern sie den Abstand zwischen den Pulsen, also etwa auf ein Fipfipfipfip. Auf diese Weise lässt sich recht einfach nachvollziehen, welchen Abstand die Tiere selbst messen, wobei „recht einfach“ hier ein Aufnahmegerät für Ultraschall voraussetzt. Wenn sie in zu großer Entfernung mit dem Fipfipfip anfangen, nehmen sie die falsche Schallgeschwindigkeit an.

    Bei der Auswertung von Beuteflügen mit und ohne Helium stellt sich, für mich sehr glaubhaft, heraus, dass Fledermäuse auch nach längerem Aufenhalt in Heliox immer noch unter Annahme der Schallgeschwindigkeit in (reiner) Luft messen: Diese muss ihnen also entweder angeboren sein, oder sie haben sie in ihrer Kindheit fürs Leben gelernt.

    Das Hauptthema der Arbeit ist die Entscheidung zwischen diesen beiden Thesen – nature or nurture, wenn mensch so will. Deshalb haben Amichal und Co 24 Fledermausfrauen aus der Wildnis gefangen, von denen 16 schwanger waren und die schließlich 18 Kinder zur Welt gebracht haben. Mütter und Kinder mussten für ein paar Wochen im Labor leben, wo sie per Kunstlicht auf einen für die Wissenschaftler_innen bequemen Tagesrhythmus gebracht wurden: 16 Stunden Tag, 8 Stunden Nacht, wobei die Nacht, also die Aktivitätszeit der Tiere, zwischen 10 und 17 Uhr lag. Offenbar haben BiologInnen nicht nennenswert andere Bürozeiten als AstronomInnen.

    Mit allerlei Mikrofonen wurde überprüft, dass die Tiere während ihres Tages auch brav schliefen; auf die Weise musste die Heliox-Mischung nur während der Arbeitszeit aufrechterhalten werden, während die Käfige in der Nacht lüften konnten, ohne dass die Heliox-Fledermäuse sich wieder an richtige Luft hätten gewöhnen können.

    Jeweils acht Fledermausbabys wuchsen in normaler Luft bzw. Heliox-15 auf, den doch recht argen Heliox-27-Bedingungen wurden sie nur für spätere Einzelexperimente ausgesetzt. Dabei hat sich gezeigt, dass die Kinder unabhängig von ihrer Kindheitsatmosphäre in gleicher Weise orten: Der Umschlag von Tschilp-Tschip nach Fipfip passierte jeweils bei gleichen Schall-Laufzeiten unabhängig von der wirklichen Distanz.

    Warum tun sie das?

    Diese Befunde sind (aus meiner Sicht leider) nur recht schwer wegzudiskutieren, das wirkt alles recht wasserdicht gemacht. Was die Frage aufwirft, warum die Tiere so hinevolutioniert sind. Amichal und Yovel spekulieren, ein Einlernen der Schallgeschwindigkeit habe sich deshalb nicht herausgebildet, weil Weißrandfledermäuse in der Wildnis sehr schnell erwachsen werden und selbst jagen müssen, weshalb es nicht genug Zeit zum Üben und Lernen gebe.

    Das wäre wohl testbar: Ich rate jetzt mal, dass größere (oder andere) Fledermäuse längere Kindheiten haben. Vielleicht lernen ja die das? Oder vielleicht hängt die festverdrahtete Physik auch daran, dass Weißrandfledermäuse eigentlich durchweg mit ziemlich konstanter Schallgeschwindigkeit leben? Dann müsste das etwa bei mexikanischen Bulldoggfledermäusen (die aus dem Bacardi-Logo) anders sein, für die der Artikel Flughöhen von 3 km zitiert.

    Auch wenn die Sache mit dem Einsperren und Abstürzenlassen von Fledermäusen schon ein wenig gruselig ist: die Wortschöpfungen „Luftwelpen“ und „Helioxwelpen“ haben mich beim Lesen schon angerührt – wobei „Welpe“ für das Original „pup“ eingestandermaßen meine Übersetzung ist. Gibt es eigentlich einen deutsches Spezialausdruck für „Mauskind“?

    Abschließend doch noch ein Schwachpunkt: In der Studie habe ich nichts zum Einfluss des Mediums auf die Tonhöhe der Rufe gelesen[3]. Den muss es aber geben – die Demo von PhysiklehrerInnen, die Helium einatmen und dann mit Micky Maus-Stimme reden, hat wohl jedeR durchmachen müssen. Die Schallgeschwindigkeit ist ja einfach das Produkt von Frequenz und Wellenlänge, c = λ ν, und da λ hier durch die Länge der Stimmbänder (bei entsprechender Anspannung des Kehlkopfs) festliegen sollte, müsste die Frequenz der Töne in 27%-Heliox eben um einen Faktor 1.27, also ungefähr 5/4, niediger liegen. In der Musik ist das die große Terz, etwa das Lalülala einer deutschen Polizeisirene. Und jetzt frage mich mich natürlich, ob das die Fledermäuse nicht merken …

  • udev, thinkpad docks, sawfish

    The other day someone gave me another dock for my thinkpad, and I eventually decided to use it at home. I've had a dock at the office for a long time, and docking there involved running a complex script configuring the network environment, running a window manager on some display on a desktop machine, and only exiting when the dock was supposed to end; its execution was triggered when the wake-up script noticed a dock was present.

    Now, when there are two docks and one is for rather conventional at-home use (essentially, simply configuring a different monitor and network adapter), I decided to do it properly and go through udev. Which turned out to be tricky enough that I'll turn this note to my future self into a blog post.

    udev

    What turned out to be the most complicated part was figuring out the udev rules. That's because for ages I have been using:

    udevadm info -a -p some/sysfs/path
    

    to work out matchable attributes for a device. That's more or less fine if all you're after is rules for attaching devices. For the dock, however, the removal event is important, too. But when the removal event comes in, udev has forgotten essentially all of the attributes that come from info -a, and rules that work with add simply won't fire with remove.

    So, here's my new policy: I'll use:

    udevadm monitor --environment --udev
    

    (where the udev option restricts events to udev rather than kernel events, which for the deluge of events coming from the dock seemed smart; I may want to revisit that). When you then plug in or out things, you'll directly see what events you can match against. Nice.

    Except of course for the deluge of events just mentioned: A dock just has quite a few devices. The event for the device I consider most characteristic, however, makes two add events, and I've not found a good way to tell the two of them apart. Still, this is what I've put into /etc/udev/rules.d/95-docking.rules:

    ACTION=="add", SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="17ef", \
      ENV{ID_MODEL_ID}=="1010",  ENV{DEVTYPE}=="usb_device", \
      RUN+="/bin/su <your user id> -c '/full-path-to-dock-script start'"
    
    ACTION=="remove",  ENV{SUBSYSTEM}=="usb", ENV{PRODUCT}=="17ef/1010/5040", \
      ENV{DEVTYPE}=="usb_device", \
      RUN+="/bin/su <your user id> -c '/full-path-to-dock-script stop'"
    

    Important (and having forgotten about it again gave me quite a bit of frustration): Rather sensibly, udev has no idea of the shell path and will just fail silently when it cannot execute what's in RUN. Hence you must (essentially) always give full path names in udev RUN actions. In case of doubt, try RUN+="/usr/bin/logger 'rule fires'" in a rule and watch the syslog.

    For this kind of thing, by the way, you'll rather certainly want to use su (or go through policykit, but I can't bring mayself to like it). You see, I want the dock script in my home directory and owned by me; having such a thing be executed as root (which udev does) would be a nice backdoor for emergencies, but will generally count as a bad idea.

    On the double dock event… well, we're dealing with shell scripts here, so we'll hack around it.

    Dock script: sawfish to the rescue

    udev only lets you execute short scripts these days and rigorously kills everything spawned from udev rules when it has finished processing the events. I suppose that's a good policy for general system stability and reducing unpleasant surprises. But for little hacks like the one I'm after here, it seems to be a bit of a pain at first.

    What it means in practice is that you need something else to execute the actual dock script. In my case, that thing is my window manager, sawfish, and having the window manager do this is rather satisfying, which reinforces my positive feeling towards udev's kill policy (although, truth be told, the actual implemenation is in shell rather than in sawfish's scheme).

    To keep everything nicely together, the docking script at its core is a bash case statement, in essence:

    !/bin/bash
    # bookkeeping: we need to undock if that file is present
    UNDOCK_FILE=~/.do-undock
    
    # display for the window manager we talk to
    export DISPLAY=:0
    
    case $1 in
      start)
        sawfish-client -c "(system \"urxvt -geometry -0+0 -e $0 on &\")"
        ;;
      stop)
        sawfish-client -c "(system \"urxvt -geometry -0+0 -e $0 off &\")"
        ;;
      on)
        if [[ -f $UNDOCK_FILE &&
          $((`date +"%s"` - `date -r $UNDOCK_FILE +"%s"`)) -lt 20 ]]; then
            # debounce multiple dock requests
           exit 1
        fi
        touch $UNDOCK_FILE
    
        # let udev do its thing first; we're no longer running from udev
        # when we're here.
        udevadm settle
    
        # Commands to dock follow here
        ;;
      off)
        if [ -f ~/.do-undock ]; then
          rm ~/.do-undock
          # Commands to undock in here.
        fi
        ;;
      *)
        echo "Usage $0 (start|stop|on|off)"
        ;;
    esac
    

    The plan is: Udev calls the script with start and stop, which then arranges for sawfish to call the script from sawfish with the on and off arguments.

    There's a bit of bookkeeping with a file in home I keep to see whether we need to undock (in my setup, that's not necessary at work), and which I use to unbounce the duplicate dock request from udev. That part could be improved by using lockfile(1), because the way it is written right now there are race conditions (between the -f, the date, and the touch) – perhaps I'll do it when next I have time budgeted for OS fiddling.

    One think I like a lot is the udevadm settle; this basically lets my script rely on a defined state where all the devices it may want to talk to are guaranteed to be initialised as far as udev goes. This is so much nicer than that sleep 3 you can see in too many places.

    What I do when docking

    Why go into all this trouble and not let whatever automagic is active pick up the screen and the new network interface and be done with it? Well, partly because I don't run most of the software that does that magic. But of course having a shell script lets me say what I actually want:

    • disable sleep on lid closing (that's special to my own ACPI hacks from the depths of time)
    • configure the the external screen as primary (that's something like xrandr --output DP2-1 --off ; xrandr --fb 2048x1152 --output DP2-1 --auto for me; don't ask why I first need to switch off the display, but without it the --auto will get confused).
    • switch to an empty (“dock-only” if you will) page on the desktop (that's wmctrl -o 4096,1152 for me).
    • sure enough, switch on some desktop glitz that I'm too stingy for when off the grid.

    One thing I'm currently doing in the dock script that I shouldn't be doing there: I'm now using a wacom bamboo pad I've inherited as a mouse replacement at home and was suprised that no middle mouse button (Button2) was configured automatically on it. Perhaps some search engine will pick this up and save a poor soul looking for a quick solution reading man pages and xsetwacom output:

    xsetwacom set "Wacom BambooPT 2FG 4x5 Pad pad" Button 8 2
    xsetwacom set "Wacom BambooPT 2FG 4x5 Pad pad" Button 9 2
    

    (this makes both buttons in the middle middle mouse buttons; I'll see if I like that on the long run). Of course, in the end, these lines belong into a udev rule for the wacom tablet rather than a dock script. See above on these.

  • Antisprache: gesperrt, parken, Unfall

    "Autos raus"-Graffiti auf Verteilerkasten

    Juni 2001 im Berliner Tiergarten: Visionäre Ansagen.

    Ich bilde mir ja ein, dass ich eine gewisse Sensibilität für Antisprache habe, also Wörtern und Fomulierungen, die Bedeutung annihiliern statt transportieren. Aber das schöne Interview mit Dirk Schneidemesser vom IASS in der taz von heute hat mich eines Besseren belehrt. Dass „parken“ eine rücksichtslose Okkupation öffentlichen Raumes verschleiert, „Unfall“ völlig gegen die Realität so tut, als sei Verkehrsgewalt (Schneidemessers Terminologie) Ausnahme und nicht Regel und „gesperrt“ bei einer Straße, die gerade für die Nutzung durch Menschen geöffnet wurde, komplett sinnwidrig ist: Das alles ist mir erst beim Lesen des Interviews klar geworden.

    Das ist für einen passionierten Autofeind und Antisprach-Beobachter wie mich schon ziemlich peinlich.

    Da hilft traditionell nur eins: öffentliche Selbstkritik!

  • Erbliche Hypomagnesiämie

    Wenn PhysikerInnen Bücher über Molekularbiologie lesen (so wie ich derzeit dann und wann), sollten sie sich wahrscheinlich öfter mal schämen, weil sie Dinge faszinieren, die Menschen krankmachen. Aber andererseits weht ein Geist der Einsicht, wenn makroskopische, fast alltägliche Phänomene atomare Grundlagen haben.

    Gerade habe ich etwas über erbliche Hypomagnesiämie gelesen, also einen genetisch bedingten Magnesiummangel, speziell das Meier-Blumberg-Imahorn-Syndrom (und wieder mal haut mich um, dass in der Wikipedia über fast alles etwas steht, auch wenn dieser spezielle Artikel mich gewiss nicht fasziniert hätte).

    Wesentliches Symptom dieser Krankheit sind Krämpfe, wie vielleicht erwartbar bei Magnesiummangel; doch können die Betroffenen Magnesium zu sich nehmen, so viel sie wollen, die Krämpfe bleiben. Das liegt daran, dass die Niere ohne weitere Maßnahmen endlos Magnesium verliert und es deshalb im Normalbetrieb fleißig rückresorbiert, es also aus dem in der Produktion befindlichen Urin wieder in den Körper zurückdiffundieren lässt. Ein klarer Hinweis auf eine Störung in dem System: Bei den Betroffenen geht der sehr niedrige Magnesiumspiegel im Blut mit einem sehr hohen Magnesiumspiegel im Urin einher.

    Die Rückresorption nun funktioniert bei der erblichen Hypomagnisiämie nicht, weil die Zellen im Nieren-Epithel – also so einer Art innerer Haut, die Blut und Urin trennt – zu fest zusammenkleben. Zellen solcher Epithelien nämlich kleben sich ziemlich weit an der Außenseite („apikal“ – allein die Terminologie begeistert mich ja immer) fest zusammen. „Tight Junction“ heißt das im Englischen und wohl im Wesentlichen auch im Deutschen.

    Diese Tight Junctions sehen in verschiedenen Hauttypen jeweils leicht anders aus und können sozusagen gezielt Lücken lassen, je nach dem, wo das Epithel ist und was die Epithelzellen noch so alles tun können und wollen. Im Magen z.B. sollte die apikal (Ha!) schwappende starke Säure wohl besser gar nicht durchkommen, im Darm gehen Natriumionen auch mal an den sortierenden Zellen vorbei direkt ins Blut.

    Drei Sorten tight junction-Moleküle

    Karikaturen der drei Sorten von Bindungsmolekülen von Tight Junctions. Die dicken grauen Striche sind die Zellmembran, die Klebemoleküle sind als tief in den jeweiligen Zellen verankert, damit das auch ordentlich hält. Aus: Lodish, H. et al: Molecular Cell Biology, 5. Auflage.

    In normal funktionierenden Nieren geht die Rückresorption des Magnesiums durch die Tight Junctions, die dafür natürlich die passenden Lücken lassen müssen. Mein Physikherz schließlich schlug höher weil „wir“ (also… „die Menschheit“) ganz gut verstehen, was da molekular passiert. Im Groben machen drei Gruppen von Proteinen das Montagematerial an den Tight Junctions aus: Occludine und Claudine (die im Wesentlichen Schlaufen aus der Zellmembran heraus bilden) sowie antikörperähnliche JAMs („junction adhesion molecules“; ich glaube, die haben es noch nicht in die deutsche Wikipedia geschafft), die im Gegensatz dazu eher lange hakenartige Strukturen bilden.

    Die spezifischen Formen dieser Moleküle bestimmen, was durch die Tight Junctions durchkann, wenn sie sich erstmal mit ihren Gegenstücken der Nachbarzellen gefunden haben. Im Fall der erblichen Hypomagnesiämie nun ist sogar klar, welches Molekül genau die Löcher für die Magnesiumionen lässt. Es trägt den vielleicht etwas enttäuschenden Namen Claudin-19, und wir wissen auch, wo das kodierende Gen liegt: Chromosom 1, p34.2. Eine ungünstige Mutation dort, und ihr habt in einem Fort Krämpfe.

    Von Muskelkrämpfen zu Atomphysik in ein paar relativ kleinen Schritten: Ich sollte Molekularbiologe werden.

    Allerdings: Die Rolle der Claudine wurde mit Knock-out-Mäusen geklärt. Bäh. Das ist ja so schon schlimm genug, aber die Vorstellung, was für Wesen herauskommen, wenn jemand den Zusammenhalt von Epithelien ausschaltet: Oh Grusel. Für mich: Dann doch lieber zurück zu den Sternen.

  • Antisprache: Geistiges Eigentum

    taz-titelbild

    Der taz-Titel von gestern hat einen guten Teil der aktuellen Diskussion um „geistiges Eigentum“ nicht schlecht subsumiert.

    Ich mag ja hartherzig sein, aber mein größter Schmerz an der derzeit laufenden Diskussion um eine Aussetzung des Patentschutzes für SARS-2-Impfstoffe ist, dass mal wieder alle über „geistiges Eigentum“ (GE) reden. Das ist bitter, weil das Antisprache – also Sprache, die Bedeutung verschluckt statt trägt – ist, die selbst nach Maßstäben von Antisprache großflächig Schaden anrichtet, beginnend bei der Exklusion von Rechnerplattformen via DRM oder der Strom- und Bandbreitenverschwendung durch Streaming. Weit relevanter: ohne die durch den GE-Begriff angerichtete Verwirrung wäre das Massaker kaum vorstellbar, das unsere private Medikamentenproduktion vor allem außerhalb von Pandemiezeiten (ich erinnere nur kurz an den endlosen Skandal Tuberkulosetherapie) anrichtet.

    GE ist Antisprache, weil es so in etwa drei Rechtssysteme, die aus ganz unterschiedlichen Gründen geschaffen wurden, unter einem allgemein bekannten, aber unpassenden Begriff („Eigentum“) zusammenfasst und so zum Verschwinden bringt, wozu die drei Konzepte jeweils geschaffen wurden. Das wiederum ruiniert diese ursprünglich zumindest nachvollziehbaren Zwecke, bis praktisch nur noch „na ja, einer muss halt reich werden dabei“ übrig bleibt.

    Die drei Rechtsbegriffe sind Urheberrecht, Patentschutz und Markenschutz. Zumindest bei zwei davon fällt sofort auf, dass das mit dem „Eigentum“ nicht hinkommen kann, denn sie sind zeitlich befristet, während BGB-konformes Eigentum nur unter recht extremen Umständen verlorengeht, sondern per Erbrecht in gewissem Sinn perpetuiert wird (wozu auch einiges zu sagen wäre – aber es geht hier ja nicht um Eigentum). Beim Markenschutz sieht das anders aus – aber den können sie meinetwegen auch behalten, jedenfalls solange culture jamming nicht gleich ins Gefängnis führt.

    Urheberrecht

    Das Urheberrecht hat seine Wurzeln im 18. Jahrhundert, als sich Gesellschaften allmählich darüber verständigten, dass Kunst auch mal unabhängig von kirchlichen oder adligen MäzenInnen entstehen können soll. Dazu musste die Arbeit der KünstlerInnen in den damaligen (ja, na ja, leider auch den heutigen) Gesellschaften irgendwie entlohnt werden, was letztlich heißt: sie muss handelbare Waren hervorbringen. Bei Kultur, die in aller Regel mit relativ wenig Aufwand vervielfältigt werden kann, ist der übliche Weg zur Warenform die enge Kontrolle öffentlichen Zugangs. Das Urheberrecht ist nichts anderes als die staatliche Garantie auf die Durchsetzbarkeit so einer Kontrolle obwohl es einfach wäre, den Kram breiter verfügbar zu machen.

    Weil im 18. Jahrhunder noch keine Antisprache des Typs GE verwirrte, kam niemand auf die Idee, diese Garantie mit dem Eigentumsbegriff zu belasten. Im Gegenteil: Eben weil das Urheberrecht die Verfügbarkeit von Literatur, Musik und anderen Kulturgütern ohne physischen Grund beschränkt, war seine Befristung ganz zentral. Wenn der Zweck des Urheberrechts – die KünstlerInnen zu füttern – glaubhaft erfüllt war, wurden die Werke in die Gemeinfreiheit entlassen.

    Relativ klar sagt das die wohl älteste Urheberrechtsregelung, die noch in Kraft ist, nämlich Artikel 1, Abschnitt 8, Satz 8 der US-Verfassung. Danach hat das Parlament die Macht,

    To promote the Progress of Science and useful Arts, by securing for limited Times to Authors and Inventors the exclusive Right to their respective Writings and Discoveries.

    Die Antisprache GE versteckt, dass der Sinn des Urheberrechts einzig und allein war, den, na ja, „Fortschritt von Wissenschaft und nützlichen Künsten“ zu fördern, und dass sich die Zeit der Zugangsbeschränktung genau an der Erfüllung dieses Zwecks zu messen hatte.

    Dieser Gedanke ändert viel: Glaubt wirklich jemand, relevante Literatur würde geschrieben, hörbare Musik gemacht, weil jemand auf Gewinn in, sagen wir, fünf Jahren hofft? Hat Ray Davies das schöne Lied von der Village Green Preservation Society (das mir seit Tagen im Kopf herumspukt) aufgenommen, weil seine Töchter (und vor allem spotify) noch 70 Jahre nach seinem Tod die Einnahmen aus Zugangsbeschränkungen erhalten werden?

    Wer solche Fragen stellt, wird vermutlich auf vernünftige Schutzzeiten von fünf oder zehn Jahren kommen, aber ganz gewiss nicht auf die 70 Jahre nach dem Tod des/der SchöpferIn aus dem Micky-Maus-Schutzgesetz. Es ist dieser Diskurs, gegen den sich die Rechteverwerter und ihre ApologetInnen mit der Rede von GE immunisieren wollen.

    Patente

    Während Urheberrechte das Bruttosozialprodukt im Groben steigern (weil Leute Geld ausgeben müssen für Kram, den sie zumindest in Zeiten des Internet praktisch umsonst haben könnten), sind Patente in der Regel schlecht für die Möglichkeiten des individuellen Reichwerdens: wenn einE PatentinhaberIn auf den Rechten sitzt, wird irgendwas im Zweifel nur sehr eingeschränkt hergestellt und nur eine Person wird reich. Das mag diese Person beim Erfindungsprozess motivieren, aber langfristig geht das böse auf die Produktions- und damit Akkumulationsmöglichkeiten.

    Bei komplexen Produkten und Produktionsverfahren wären außerdem bei Schutzzeiten wie beim Urheberrecht so viele Patente zu berücksichtigen (heute noch etwa ein guter Teil dessen, was während des zweiten Weltkriegs erfunden worden ist – die ErfinderInnen sind ja oft noch keine 70 Jahre tot), dass der Kapitalismus zu einem knirschenden Halt kommen würde.

    Und so überrascht es nicht, dass Patente nur für 20 Jahre ab Anmeldung gelten. Warum das Copyright-„Eigentum“ viel heiliger sein soll als das Patent-„Eigentum“, ist nur durch Rekurs darauf erklärbar, dass es sich in keinem Fall um „Eigentum“ handelt, und ihre Grundlage ist genau nicht – wie beim Eigentum – ein staatlicher Schutz für die private Verfügungsgewalt über Gegenstände, die nicht einfach vermehrt werden können. Geht es beim Urheberrecht ums Füttern der AutorInnen, gehts es beim Patentschutz in erster Linie um die Veröffentlichung von Erfindungen, deren breiterer Einsatz sinnvoll sein könnte.

    Während aber viele (beileibe aber nicht alle) InhaberInnen von Urheberrechten diese befürworten, ist das bei Patenten ganz anders: Eigentlich alle, die mit Technik herumfuhrwerken und Dinge basteln, sind von Patenten schwer genervt. Und während das Urheberrecht mit dem Einkommen einiger der SchöpferInnen immer noch zumindest entfernt etwas zu tun hat, sind Patente jedenfalls in meinem Bereich heute klar schädlich für den „Progress of Science“ (oder meinetwegen „Technology“). Das mag im Kernbereichs des Maschinenbaus vielleicht etwas anders sein, aber generell wäre ohne die Antisprache über GE doch recht schnell die Frage nach einer massiven Einschränkung des Patentunwesens auf dem Tisch.

    So danke ich allen verfügbaren GöttInnen, dass meine Universität darauf verzichtet, „Erfindungen“ von mir patentieren zu wollen – das wäre nämlich ihr Recht, und gemessen an dem, was im Software- und Rechnerbereich patentiert wird, gäbe es da ganz gewiss auch genug (na gut: wenn nicht schon wer anders die naheliegende Idee des Tages mit einem breiten Patent erschlagen hätte). Diese Patentverfahren würden Unmengen an Zeit und Energie binden, ohne dass das irgendeinen (gesellschaftlichen) Nutzen hätte, ganz zu schweigen von der Mühe, die ich eigentlich auf die Prüfung verwenden müsste, ob irgendwas, das ich gerade schreibe, von irgendwem patentgeschützt ist; wenn Fortschrittsbalken und One-Click-Shopping patentfähig sind, könnte ich keine nichttriviale Funktion schreiben, ohne eine solche Prüfung durchzuführen.

    Was ich natürlich nicht tue, und daher kommt dann auch mein Dank an höhere Wesen sowie mein weites Umfeld für ihr Desinteresse an Patenten, ganz speziell den Leuten, die in den Ministerien über meine Projektförderung entscheiden. Die Zeitersparnis, den Patentquatsch komplett ignorieren zu können, wäre sicher allen Software-Menschen zu wünschen, und entsprechend ist mir keineE ProgrammierIn bekannt, der/die nicht z.B. die Kampagne gegen Softwarepatente der FSFE wenigstens wohlwollend zur Kenntnis nehmen würde.

    Im Pharmabereich ist der Schaden durch Patente vielleicht nicht ganz so gut erkennbar, wenn auch das Missverhältnis zwischen hunderten von Statinzubereitungen, die westliche KundInnen mit aller Gewalt übergeholfen bekommen, und dem oben erwähnten Massensterben an Tuberkulose ohne nennenswerte private Anstrengungen zu dessen Milderung nicht nur mich zornig macht.

    Da hilft die Gebetsmühle des Verbands Forschender Arzneimittelhersteller, der Patentschutz sei notwendig zur Entwicklung neuer Medikamente, wirklich nicht. Zunächst lehrt ein kurzer Blick in PubMed – was zweifellos die Forschung im medizinischen Bereich besser abbildet als irgendetwas anderes –, dass publikationswürdige Forschung zu Krankheiten und ihrer Heilung fast ausschließlich mit öffentlichem Geld stattfindet. Sucht nach irgendeiner Krankheit und schaut euch die Affiliations der ersten paar Arbeiten an: Wenn da überhaupt irgendwo privates Geld vorkommt, sind es gemeinnützige Stifungen wie der Wellcome Trust, die die Forschungen ganz sicher nicht wegen der Aussicht auf künftige Patenteinnahmen finanzieren – oder vielleicht noch Leute, die aus der Privatindustrie über ihre letzten Forschungen an Unis und Instituten berichten.

    Erst bei den klinischen Studien kommen die Unternehmen ins Spiel, und auch dann wird in aller Regel noch reichlich öffentliches Geld zugeschossen, etwa über die Kliniken, die die Studien mittragen. Aber gerade dieses System ist besonders kaputt, da trotz öffentlich finanzierter Beteiligung (die dann nicht selten durch Schweigeabkommen – Non-Disclosure Agreements – gebunden ist) fast nur positive Studien veröffentlicht wurden (und eigentlich immer noch werden), was wiederum die Grundlagen der Testtheorie aushebelt und so selbst die gut gemachten Studien entwertet.

    Innerhalb des gegenwürtigen Systems versprechen Studienregister ein wenig Abhilfe. Viel besser wäre jedoch eine staatlich finanzierte Zentralstelle, die solche Studien mit gleichbleibender Abdeckung, Sorgfalt und Publikationsdichte durchführt. Und das gilt selbst dann, wenn diese Zentralstelle am Ende nach dem Vorbild von RKI oder PEI eher nur so halb funktionieren würde. Dann würde natürlich auch noch das letzte irgendwie glaubhafte Argument für die Alimentation der Pharma-Unternehmen durch Patente wegfallen.

    Die Antisprache vom GE ist eine Immunisierung der Industrie gegen solche wirklich nicht fernliegenden Ideen. Was für ein historischen Unglück, dass die Piratenpartei weiland mit dem Thema „geistiges Eigentum ist ein ekliger Kampfbegriff“ überhaupt nicht in die Öffentlichkeit gekommen ist. Das könnte natürlich durchaus mit dem Geschäftsmodell großer …

  • Schulkinder sind gruselig

    Die Überschrift hätte ich mich nicht getraut, wenn sie nicht schon im Deutschlandfunk gelaufen wäre, in einer Sendung über einen Lauschangriff auf Lachse.

    Aber wo Christine Westerhaus es in dem Beitrag schon gesagt hat, konnte ich einer neuen Tiergeschichte nicht widerstehen: Von Lachsen und Eltern. Aktualität gewinnt das, weil ich klar nicht der Einzige bin, dem es etwas merkwürdig vorkommt, wie fast alle Eltern auf der einen Seite ostentativ darauf bestehen, ihre Kinder seien ihr Ein und Alles, auf der anderen Seite aber die Große Kinderverdrossenheit von Corona ganz öffentlich zelebrieren. Mal ehrlich: Wäre ich jetzt Kind, wäre ich angesichts des herrschenden Diskurses von geschlossenen Schulen als etwas zwischen Menschenrechtsverletzung und Katastrophe schon etwas eingeschnappt.

    Allerdings: vielleicht ist das ja gar keine Kinderverdrossenheit, sondern Verdrossenheit mit der Lohnarbeit, auf die mensch aber noch weniger schimpfen darf als auf die Kinder?

    Wie auch immer, ernsthaft beunruhigt waren Lachse am NINA in Trondheim, als eine Klasse lärmender Kinder um ihr Aquarium herumtobte. Und dieses Mal sind sie belauscht worden. So klingen vergnügte Lachse:

    Und so welche mit tobenden Kindern:

    Wie es in der Sendung heißt: „They think school kids are scary.“ Sie. Die Lachse.

    PSA: Wenn euer Browser keine Lachstöne abspielt, beschwert euch bei dessen Macher_innen: Ogg Vorbis sollte im 3. Jahrtausend wirklich alles dekodieren können, was Töne ausgibt.

  • Wenig Neues unter der Sonne

    Eine Hebamme bringt ein Neugeborenes mit Hörnern

    Fantasien zu Impfwirkungen aus dem frühen 19. Jahrhundert (Quelle).

    Im immer wieder großartigen Public Domain Review – den ich schon deshalb mag, weil fast alles ohne Javascript geht – war neulich ein Essay über das Georgian Britain’s Anti-Vaxxer Movement von Erica Eisen; es geht um frühe ImpfskeptikerInnen, und ich fand schon bemerkenswert, wie sehr sich die Motive damalis und der heute ähneln.

    Teils ist das ganz verständlich, weil etwa die Funktionsweisen von Religion historisch ziemlich konstant sind. Insofern wundert die Konstanz des Arguments über Impfen als Interferenz mit Gottes Plan nicht:

    The Small Pox is a visitation from God, but the Cow Pox is produced by presumptuous man: the former was what heaven ordained, the latter is, perhaps, a daring violation of our holy religion.

    —William Rowley, Cow-Pox Inoculation: No Security Against Small-Pox Infection (London: J. Barfield, 1805), 11.

    Umgekehrt ist erschütternd, dass die (zumindest im Fall von SARS-2) offensichtliche Abwägung zwischen möglichem Schaden und manifestem Nutzen häufig immer noch so auszugehen scheint wie unter Verhältnissen, die Eisen so beschreibt und in denen das tatsächlich ganz anders hätte sein können:

    These concerns were not allayed by the poor sanitation and medical standards that sometimes characterized the public vaccination hospitals created to serve Britain’s urban poor: at such places, the vaccines made available to patients often came not directly from cows but from the pustules of vaccinated children in the area, who may or may not have received a thorough medical check before being lanced for their “donation”. As a result, parents were not wholly unjustified in their fears that an injection meant to ward off one deadly disease might simply lead to their child being infected with another one.

    Keine Überraschung ist dabei natürlich die Beständigkeit von Armut als größtem Risikofaktor; zur der modernen Form berichtete neulich der Deutschlandfunk:

    Wo Menschen in beengten Wohnverhältnissen lebten, sei die Gefahr sich anzustecken größer als im großzügig angelegten Einfamilienhaus, sagte er in einer Landtagsdebatte in Düsseldorf. Der CDU-Chef und Unions-Kanzlerkandidat verwies dabei auf das Beispiel Köln, wo im Stadtteil Chorweiler die Inzidenz bei 500 und in Hahnwald dagegen bei 0 liege.

    Aber die wirklich beeindruckenden Parallelen liegen in völlig abseitigen Fantasien über mögliche Impfwirkungen und die Motivationen dahinter: Die gehörnten Neugeborenen aus dem Eingangsbild treffen sich da gut mit den Chips von Bill Gates, und die Angriffe aufs klare Denken gehen auch ganz regelmäßig über imaginierte Bedrohngen von Kindern, etwa im Eingangsbild oder wenn pockennarbige Monstren sie in kleine Minotauren verwandeln

    Insofern: Ein wirklich lohnender Artikel mit, wie üblich beim PDR, vielen schönen Bildern.

« Seite 15 / 17 »

Letzte Ergänzungen