• Worse is manchmal better

    TL;DR: Radikalität ist wichtig, aber Freundlichkeit ist wichtiger.

    Seit einiger Zeit blättere ich öfter mal in Shoshana Zuboffs Age of Surveillence Capitalism und finde es immer wieder nützlich und gleichzeitig verkehrt. Dazu will ich etwas mehr schreiben, wenn ich es ganz gelesen habe, aber jetzt gerade hat mich ihr Generalangriff auf den Behaviorismus – auch der gleichzeitig richtig und falsch – wieder an einen Gedanken aus Bertrand Russells A History of Western Philosophy erinnert, der mich immer wieder beschäftigt – und den ich sehr profund finde. Im Groben: „In politischen Theorien ist Menschlichkeit wichtiger als Stringenz”. Oder: das „worse is better“ der Unix-Philosophie, das mensch trefflich kritisieren kann, ist zumindest fürs politische Denken in der Regel angemessen.

    Was ist eigentlich eine Menge?

    Foto eines Computers

    Gegenstück zu worse is better: Eine LISP-Maschine im MIT-Museum.

    Dabei konnte Russell beeindruckend stringent denken, etwa auf den paar hundert Seiten, die er in den Principia Mathematica füllte, um sich der Richtigkeit von 1+1=2 zu versichern.

    Oder auch in der Russell'schen Antinomie, die ich in meinen Einführungsvorlesungen in die formalen Grundlagen der Linguisitk immer zur Warnung vor der naiven Mengendefinition – eine Menge sei ein Haufen von „Objekten unserer Anschauung oder unseres Denkens“ – gebracht habe. Wäre diese Definition nämlich ok, müsste es auch die Menge aller Mengen geben, die sich nicht selbst enthalten. Nennen wir sie mal Ξ (ich finde, das große Xi ist in Mathematik und Physik deutlich unterverwendet). Die wesentliche Frage, die mensch einer Menge stellen kann ist: Ist irgendwas in dir drin, also: „x ∈ Ξ“?

    Und damit kommt Russells geniale Frage: Ist Ξ ∈ Ξ oder nicht? Schauen wir mal:

    • Wenn Ξ ∈ Ξ gälte, enthält Ξ sich selbst, ist also nicht in der Mengen aller Mengen, die sich nicht selbst enthalten, entgegen der Annahme in diesem Spiegelstrich.
    • Ist aber Ξ ∉ Ξ, so enthält sich Ξ nicht selbst, wäre es also in der Menge aller Mengen, die sich nicht selbst enthalten und müsste sich also selbst enthalten. Passt wieder nicht.

    Brilliant, oder? Die Lösung dieser „Russell'schen Antinomie“ ist übrigens, sich bei der Definition von „Menge“ etwas mehr Mühe zu geben.

    Wer das nachvollzogen hat, wird wohl die Weisheit von Russells Entscheidung erkennen, nach den Principia Mathematica eher konventionelle Philosophie zu betreiben. In diesem Rahmen hat er 1945 seine überaus lesbare Darstellung der „westlichen“ Philosophie veröffentlicht, in der er sich deutlich als Fan von John Locke outet, den „apostle of the Revolution of 1688, the most moderate and the most successful of all revolutions“, erfolgreichst, denn „no subsequent revolution has hitherto been found necessary in England.“ Über das „found necessary“ könnte mensch angesichts des Elends, das noch in den Werken von George Orwell – geschrieben, während Russell in den 1940ern an seiner History arbeitete – deutlich wird, sicher streiten, aber vielleicht ist das durch „most moderate“ noch hinreichend abgedeckt.

    Vernünftig vs. Widerspruchsfrei in der politischen Doktrin

    Viel wichtiger ist mir aber Russells Beobachtung: „Pragmatically, the theory was useful, however mistaken it may have been theoretically. This is typical of Locke's doctrines.“ Etwas später sagt er: „No one has yet succeeded in inventing a philosophy at once credible and self-consistent. Locke aimed at credibility, and achieved it at the expense of consistency. Most of the great philosophers have done the opposite.“

    Also in etwa: in der Philosophie – und da würde ich etwas hinter Russell zurückgehen wollen und sagen: Politik und Soziologie – gibt es nicht gleichzeitig „glaubwürdig“ (sagen wir lieber: menschlich) und widerspruchsfrei. Ich glaube, Russell kam zu diesem desillusionierten Einsichten aus Enttäuschung mit der russischen Revolution, deren Scheitern, jedenfalls im Sinne von Freiheit, Gleichheit und Solidarität für die Bürger_innen der Sowjetunion, er wahrscheinlich mit übermäßiger ideologischer Strenge erklärte; jedenfalls führte er Lockes gedankliche Geschmeidigkeit zurück auf dessen Erfahrungen des britischen Bürgerkriegs der 1640er Jahre.

    Immer wieder spottet Russell freundlich über Lockes, nun, Liberalität, so etwa, wenn Hume einen schlimmen Irrtum beging, weil er „a better intellect than Locke's, a greater acuteness in analysis, and a smaller capacity for accepting comfortable inconsistencies“ hat. Oder wenn er Lockes Methode so umschreibt:

    [Er ist] always willing to sacrifice logic rather than become paradoxical. He enunciates general principles which, as the reader can hardly fail to perceive, are capable of leading to strange consequences; but whenever the strange consequences seem about to appear, Locke blandly refrains from drawing them. To a logician this is irritating; to a practical man, it is a proof of sound judgement.

    Was ich daraus mache: Wenn du über die Gesellschaft nachdenkst und du kommst auf Menschenfresserei, müssen deine Ausgangsgedanken nicht unbedingt Quatsch sein – das kann schon mal passieren, wenn ein Haufen Leute sich streiten. Du solltest aber trotzdem nicht Menschenfresser_in werden.

    Freundlichkeit vs. Radikalität in der politischen Praxis

    Eine derzeit ganz naheliegende Anwendung: So sehr es scheiße ist, wenn Leute an eigentlich vermeidbaren Krankheiten sterben: Die autoritäre Fantasie, einfach alle einzusperren, bis die SARS-2-Pandemie vorbei ist, ist schon deshalb nicht menschenfreundlich, weil so ein Präzedenzfall zu inflationären Forderungen nach ähnlich autoritären Maßnahmen führen wird (alles andere mal beiseitegelassen). Umgekehrt führt das unbedingte Bestehen auf Grundrechten wie Freizügigkeit, die Zurückweisung staatlicher Autorität, auch wo diese nicht immer so richtig wissenschaftlich unterfüttert ist, zu einem schlimmen Gemetzel. Es bleibt, sich da irgendwie durchzumogeln (und das, ich gebs immer noch nicht gerne zu, hat die Regierung recht ordentlich gemacht), und das ist wohl, was was Russell an Locke mag.

    Also: Im realen Umgang mit Menschen ist Freundlichkeit oft wichtiger als Konsequenz. Dass Russell, obwohl er fast jeden Gedanken von Locke widerlegt, seine gesamte Lehre sehr wohlwollend betrachtet, ist eine sozusagen rekursive Anwendung dieses Prinzips.

    Leider, und da kommen wir beinahe auf die Russell'sche Antinomie zurück, bin ich aber überzeugt, dass auch die Mahnung, es mit den Prinzipien nicht zu weit zu treiben, dieser Mahnung selbst unterliegt. Folterverbot oder Ausschluss der Todesstrafe etwa würde ich gerne unverhandelbar sehen.

    Locke hätte mit dieser fast-paradoxen Selbstanwendung von Nicht-Doktrinen auf Nicht-Doktrinen bestimmt keine Probleme gehabt. Bei mir bin ich mir noch nicht ganz sicher.

    Aber ich versuche, Zuboff mit der Sorte von Wohlwollen zu lesen, die Russell für Locke hatte.

    Nachtrag (2021-04-10)

    Weil ich gerade über irgendeinen Twitter-Aktivismus nachdenken musste (bei dem jedenfalls für mein Verständnis allzu oft gute Absichten zu böser Tat werden), ist mir aufgefallen, dass meine Russell-Interpretation eigentlich zusammenzufassen ist mit: „Radikalität ist wichtig, aber Freundlichkeit ist wichtiger“. Das hat mir auf Anhieb gefallen, weshalb ich es auch gleich als TL;DR über den Artikel gesetzt habe.

    Dann habe ich geschaut, ob duckduckgo diesen Satz kennt. Erstaunlicherweise nein. Auch bei google: Fehlanzeige. Ha!

    Und je mehr ich darüber nachdenke, gerade auch im Hinblick auf ein paar Jahrzehnte linker Politik: RiwaFiw hätte vieles besser gemacht, und, soweit ich sehen kann, fast nichts schlechter.

  • Die Viren loben

    „Jetzt ist aber wirklich höchste Zeit, dass Corona endlich mal weggeht“ ist inzwischen ein universelles Sentiment, und auch mich lockt gelegentlich die autoritäre Versuchung, einen „harten Lockdown“ zu wünschen, damit das Ding weggeht (was es natürlich nicht täte). Der Hass auf SARS-2 steigt, und damit womöglich auf Viren allgemein.

    In der Tat scheinen Viren erstmal richtig doof, eklig und widerwärtig. Wie scheiße ist das eigentlich, sich von den Zellen vertrauensvoll aufnehmen zu lassen und dann den Laden zu übernehmen mit dem einzigen Ziel, neues Virus zu machen? Und dann die Ähnlichkeit von z.B. der T2-Bakteriophage mit Invasoren vom Mars...

    Andererseits bin ich überzeugt, dass eine gewisse Anfälligkeit gegen Viren wahrscheinlich ein evolutionärer Vorteil ist. Da gibts bestimmt jede Menge echte Wissenschaft dazu, aber ich denke, eine einfache Intiution geht auch ohne: Praktisch alle Viren nämlich wirken nur auf kurze Distanz in Zeit und Raum (verglichen etwa mit Pflanzenpollen, aber sogar mit vielen Bakterien), werden also im Wesentlichen bei Begegnungen übertragen. Da die Wahrscheinlichkeit von Begegnungen mit dem Quadrat der Bevölkerungsdichte geht, sollten Viren explodierende Populationen „weicher“ begrenzen als leergefressene Ressourcen und so wahrscheinlich katastrophalen Aussterbeereignissen vorbeugen.

    Vorneweg: Ja, das klingt alles erstmal wild nach Thomas Malthus. Dessen Rechtfertigung massenhaften Sterbenlassens ist natürlich unakzeptabel (ebenso allerdings wie das fortgesetzte Weggucken von den Meadows-Prognosen, die in der Regel auch katastrophale Zusammenbrüche erwarten lassen).

    Dies aber nicht, weil falsch wäre, dass in endlichen Systemen der Ressourcengebrauch nicht endlos steigen kann; das ist nahe an einer Tautologie. Nein, Malthus' Fehler ist der der Soziobiologie, nämlich menschliche Gesellschaft und menschliches Verhalten an Funktionsweisen der Natur auszurichten. Wer das will, wird recht notwendig zum Schlächter, während umgekehrt die Geschichte der letzten 100 Jahre überdeutlich zeigt, wie (sagen wir) Wachstumszwänge diverser Art durch mehr Bildung, mehr Gleichheit und vor allem durch reproduktive Selbstbestimmung von Frauen ganz ohne Blutbad und unter deutlicher Hebung der generellen Wohlfahrt zu beseitigen sind.

    Bei Kaninchen ist das aber, da muss ich mich leider etwas als Speziezist outen, anders. Und daher habe ich mir Modellkaninchen für ein weiteres meiner Computerexperimente herausgesucht, ganz analog zu den Schurken und Engeln.

    Die Fragestellung ist: Werden Ausschläge in Populationen wirklich weniger wild, wenn Viren (also irgendwas, das Individuen nach Begegnungen mit einer gewissen Wahrscheinlichkeit umbringt) im Spiel sind?

    Um das zu untersuchen, baue ich mir eine Spielwelt (wer mag, kann auch „modifiziertes Lotka-Volterra-Modell“ dazu sagen) wie folgt:

    • Es gibt 1000 Felder, auf denen Gras wachsen kann oder nicht.
    • In der Welt leben Kaninchen, die pro Periode ein Grasfeld leerfressen müssen, damit sie glücklich sind.
    • Haben Kaninchen mehr Gras als sie brauchen, vermehren sie sich, und zwar um so mehr, je mehr Extrafutter sie haben (so machen das zumindest Rehe).
    • Haben Kaninchen zu wenig Gras, sterben ein paar.
    • In jeder Periode verdoppelt sich die Zahl der Grasfelder (sagen wir: durch Aussaat), bis alle 1000 Felder voll sind.

    In Code sieht die Berechnung der Vermehrungsrate der Kaninchen so aus:

    def get_growth_factor(self):
      grass_per_rabbits = self.grass/self.rabbits
      if grass_per_rabbits<1:
        return grass_per_rabbits**2
      else:
        return 1+math.sqrt(grass_per_rabbits-1)
    

    Wer den Verlauf der Vermehrungsrate mit dem Gras/Kaninchenverhältnis γ auf der Abszisse sehen will:

    Um dieses Modell zu rechnen, habe ich ein kleines Python-Programm geschrieben, lv.py, das, mit anfänglichen Zahlen von Gras und Kaninchen aufgerufen, den Verlauf der jeweiligen Populationen im Modell ausgibt (nachdem es die Anfangsbedingungen etwas rausevolvieren hat lassen).

    Wie bei dieser Sorte von Modell zu erwarten, schwanken die Populationen ziemlich (außer im Fixpunkt Kaninchen=Gras). So sieht das z.B. für python3 lv.py 400 410 (also: anfänglich ziemlich nah am Gleichgewicht) aus:

    Das sieht nicht viel anders aus, wenn ich mit einem Kaninchen-Überschuss anfange (python3 lv.py 400 800):

    oder mit einem Gras-Paradies (python3 lv.py 800 150):

    Aus Modellsicht ist das schon mal fein: Recht unabhängig von den Anfangsbedingungen (solange sie im Rahmen bleiben) kommen zwar verschiedene, aber qualitativ doch recht ähnliche Dinge raus: die Kaninchenpopulationen liegen so zwischen 250 und 600 – im anfänglichen Gras-Paradies auch mal etwas weiter auseinander – und schwanken wild von Schritt zu Schritt.

    Jetzt baue ich einen Virus dazu. Im lv.py geht das durch Erben vom LV-Modell, was auf die LVWithVirus-Klasse führt. Diese hat einen zusätzlichen Parameter, deadliness, der grob sagt, wie wahrscheinlich es ist, dass ein Kaninchen nach einer Begegnung mit einem anderen Kaninchen stirbt. Die Mathematik in der propagate-Methode,

    def propagate(self):
      LV.propagate(self)
      self.rabbits = max(1, self.rabbits-self.rabbits**2*self.deadliness)
    

    würde etwa einem Bau entsprechen, in dem sich alle Kaninchen ein Mal pro Periode sehen. Das ist jetzt sicher kein gutes Modell für irgendwas, aber es würde mich sehr überraschen, wenn die Details der Krankheitsmodellierung viel an den qualitativen Ergebnissen ändern würden. Wichtig dürfte nur sein, dass die Todesrate irgendwie überlinear mit der Population geht.

    lv.py lässt das Modell mit Virus laufen, wenn es ein drittes Argument, also die Tödlichkeit, bekommt. Allzu tödliche Viren löschen die Population aus (python3 lv.py 800 150 0.05):

    Zu harmlose Viren ändern das Verhalten nicht nennenswert (python3 lv.py 800 150 1e-6):

    Interessant wird es dazwischen, zum Beispiel python3 lv.py 800 150 2.1e-4 (also: rund jede fünftausendste Begegnung bringt ein Kaninchen um):

    – wer an die Beschriftung der Ordinate schaut, wird feststellen, dass die Schwankungen tatsächlich (relativ) kleiner geworden sind. Das Virus wirkt offenbar wirklich regularisierend.

    Wir befinden uns aber im Traditionsgebiet der Chaostheorie, und so überrascht nicht, dass es Bereiche der Tödlichkeit gibt, in denen plötzlich eine starke Abhängigkeit von den Anfangsbedingungen entsteht und sich die Verhältnisse weit in die Entwicklung rein nochmal grundsätzlich ändern können („nicht-ergodisch“). So etwa python3 lv.py 802 300 0.0012:

    gegen python3 lv.py 803 300 0.0012:

    Ein Kaninchen weniger am Anfang macht hundert Schritte später plötzlich so ein gedrängeltes, langsames Wachstum.

    Warum ich gerade bei 0.0012 geschaut habe? Nun ich wollte einen Überblick über das Verhalten bei verschiedenen Tödlichkeiten und habe darum stability_by_deadliness.py geschrieben, das einfach ein paar interessante Tödlichkeiten durchprobiert und dann die relative Schwankung (in Wirklichkeit: Standardabweichung durch Mittelwert) und den Mittelwert der Population über der Virustödlichkeit aufträgt:

    – das sieht sehr gut aus für meine These: Mit wachsender Tödlichkeit des Virus nimmt die relative Streuung der Population ab, irgendwann allerdings auch die Population selbst. Ganz links im Graphen gehts durcheinander, weil sich dort chaotisches Systemverhalten mit kleinen Zahlen tifft, und dazwischen scheint es noch ein, zwei Phasenübergänge zu geben.

    Leider ist dieses Bild nicht wirklich robust. Wenn ich z.B. die Anfangsbedingungen auf 600 Gras und 250 Kaninchen ändere, kommt sowas raus:

    – die meisten der Effekte, die mich gefreut haben, sind schwach oder gar ganz weg – wohlgemerkt, ohne Modelländerung, nur, weil ich zwei (letztlich) Zufallszahlen geändert habe.

    Mit etwas Buddeln findet mensch auch das Umgekehrte: wer immer mit 170 Gras und 760 Kaninchen anfängt, bekommt einen Bereich, in dem die Populationen mit Virus größer sind als ohne, während gleichzeitig die relative Schwankung nur noch halb so groß ist wie ohne Virus. Dazwischen liegt ein 1a Phasenübergang:

    Mensch ahnt: da steckt viel Rauschen drin, und auf der anderen Seite höchst stabiles Verhalten, wo mensch es vielleicht nicht erwarten würde (bei den hohen Tödlichkeiten und mithin kleinen Zahlen). Wissenschaft wäre jetzt, das systematisch anzusehen (a.k.a. „Arbeit“). Das aber ist für sehr ähnliche Modelle garantiert schon etliche Male gemacht worden, so dass der wirklich erste Schritt im Jahr 51 nach PDP-11 erstmal Literatur-Recherche wäre.

    Dazu bin ich natürlich zu faul – das hier ist ja nicht mein Job.

    Aber das kleine Spiel hat meine Ahnung – Viren stabilisieren Ökosysteme – weit genug gestützt, dass ich weiter dran glauben kann. Und doch wäre ich ein wenig neugierig, was die Dynamische-Systeme-Leute an harter Wissenschaft zum Thema zu bieten haben. Einsendungen?

  • Quatsch + Quatsch = Nichtzuglauben

    Ich mache die Kasse unserer Selbsthilfe-Fahrradwerkstatt URRmEL schon länger als ich mir das eingestehen will. Etwas vergleichbar Absurdes wie heute jedoch habe ich in dieser Eigenschaft noch nicht erlebt: 13,01 Euro für die Hochzeit von Terrorquatsch und Privatisierungswahn.

    Genauer hat der Bundesanzeiger-Verlag dem Verein vor einer Weile eine Rechnung geschickt, und da ich zu Coronazeiten nicht sehr oft zu unserem Postfach komme, habe ich das erst heute gesehen:

    Scan einer Rechnung

    Zunächst hatte ich ja an eine mäßig gelungene Bauernfängerei gedacht, aber es stellt sich raus: Das Transparenzregister gibt es wirklich. Es ist im Zuge des Sicherheitsgesetz-Tsunamis 2017 zusammen mit Netzwerkdurchsetzungsgesetz, Videoüberwachungsverbesserungsgesetz, dem „Bullenschubsparagraphen“ 114 StGB und noch einem runden Dutzend weiterer schlecht gemachter Gesetze zur Einschränkung von Bürgerrechten durch den Bundestag gerutscht.

    Wir wirklich will, kann sich diesen spezifischen Unsinn bei der Wikipedia erklären lassen. Aber viel mehr als die Umschreibung „Terrorquatsch heiratet Privatisierungswahn“ von oben braucht mensch dazu eigentlich nicht zu wissen: Er ist wahrscheinlich immerhin nicht sehr schädlich, jedenfalls verglichen mit den anderen Gesetzen dieses Jahrgangs.

    Exkurs: „Terrorismus“ als Antisprache

    Das Wort „Terrorismus“, diese Gelegenheit kann ich mir nach der Vorlage neulich nicht entgehen lassen[1], ist natürlich destillierte Antisprache, also Sprache, die Informationen verstecken und nicht transportieren will. „Terrorismus“ hat nämlich aus Sicht der Obrigkeit schon immer bedeutet: „wir dürfen auf andere Leute schießen, weil hinreichend viele von unseren Leuten die hassen“. Nicht mehr und nicht weniger.

    Das ist die Bedeutung des Wortes für die Putschisten in Myanmar genauso wie für Lukaschenko in Belarus, ist sie gegenüber „Islamisten“, ob nun Taliban in Afghanistan oder Uiguren in Westchina, gegenüber der UCK (jedenfalls aus Sicht der serbischen Obrigkeit von 1999), landlosen Bauern in Brasilien oder fabrikbesetzenden Arbeiter_innen in Argentinien. Und natürlich sowieso für all die „Innenpolitiker_innen“, die Scheibe um Scheibe von der Menschenrechtssalami absäbeln.

    Was das Wort versteckt: Auch die „Terroristen“ haben meist Gründe für das, was sie tun, und diese Gründe sind oft gar nicht so verschieden von denen, die die Obrigkeiten selbst antreiben: Patriotismus, Frömmigkeit, Streben nach Reichtum dürften ganz vorne dabei sein. Aus dieser Symmetrie folgt dann ziemlich unmittelbar auch, dass Versuche, die zugrundeliegenden Konflikte mit Gewalt zu beseitigen, meist weitgehend aussichtslos sind – und so eine Schlussfolgerung will mensch natürlich weder als Obrigkeit noch als, na ja, Terrorist_in halt ziehen, so sehr sie nach 20 Jahren „Krieg gegen den Terror“ eigentlich unvermeidlich ist.

    Nur zur Sicherheit: Nichts davon will, klar, staatliche oder private Akteure rechtfertigen, die von Patriotismus pp. getrieben werden, und noch weniger die, die deswegen rumballern oder -bomben (lassen). Es heißt nur, dass, solange wir Patriotismus, Religion und Reichtum nicht überwunden haben, die Klassifikation der der anderen Patriot_innen, Religiösen und Armen als „Terroristen“ ganz gewiss nicht weiterhilft.

    Ich kann diesen kurzen linguistischen Exkurs nicht schließen ohne eine Extraportion Befremden zu äußern über die Leichtigkeit, mit der selbst deutschen Regierungen das Wort „Terrorismus“ über die Lippen kommt. Mindestens angesichts der ebenfalls unter dem Label „Terrorismusbekämpfung“ gelaufenen Massakern im von der Wehrmacht besetzten Jugoslawien sollte doch zumindest da etwas mehr Bedacht walten. Sollte. Aber fragt mal eure_n Bundestagsabgeordnete_n, ob er_sie auch nur irgendwas mit Kraljevo oder Kragujevac anfangen kann.

    Verkaufen ohne Bestellung

    Aber zurück zum Thema: In der Gesetzgebung zum Geldwäschegesetz, das das Transparenzregister eingeführt hat, traf nun das semantische schwarze Loch „Terrorismus“ auf die offensichtlich widersinnige, aber erstaunlich vielen irgendwie einsichtige Idee, alles sei besser, wenn es ein Privatunternehmen mache.

    Und deswegen führt das Transparenzregister der Bundesanzeiger-Verlag, ein Laden, der zwar seine ersten 40 Jahre als so eine Art Bundes-Tochter fristete, aber im Rahmen des marktradikalen Rauschs um die Jahrtausendwende (in ein paar Stufen) ausgerechnet an den DuMont Schauberg-Verlag ging, einen der ganz großen Spieler im Kölschen Klüngel. Dass das ohne Ausschreibung passierte, verdient kaum Erwähnung – und klar hätte es eine Ausschreibung auch nicht besser gemacht: Entweder, etwas ist Obrigkeit, dann solls gefälligst auch der Staat machen, oder es ist es nicht, dann muss ich es aber auch nicht bezahlen, wenn ich es nicht bestellt habe. Meint mensch.

    Der Netto-Effekt jedenfalls: Der Terror-Zirkus Transparenzregister, den jedenfalls unsere Fahrradwerkstatt nicht bestellt hat, soll jetzt durch Gebühren finanziert werden von denen, die er transparent zu machen vorgibt.

    Und das sind rapide steigende Gebüren: es ging von 1.25 auf 4.80 Euro in vier Jahren. Sind wir großzügig, ist das eine Verdoppelungszeit von drei Jahren. Damit kostet der Eintrag in knapp dreißig Jahren 100 000 Euro. Auch wenn es nicht so weit kommt: Den Preis für etwas, das Leute zwangsweise kaufen müssen, in dieser Freiheit bestimmen zu können: das ist, soweit es mich betrifft, eine Lizenz zum Gelddrucken.

    Wobei, ehrlicherweise: von den 13 Euro wird wahrscheinlich erstmal nicht viel übrigbleiben, wenn Papier, Versand und Verrechnung bezahlt sind – aber das ist ja gerade der spezifische Wahnsinn: Mal angenommen, so ein Register hätte einen Nutzen, könnte mensch riesige Mengen Geld und Arbeit sparen, wenn dei Mittel nicht über Millionen von Briefen und Call Center und sonstwas eingetrieben werden müssten, sondern irgendwo aus dem BMI-Haushalt kämen. Das bisschen Zusammenführung verschiedener Register müsste dann eigentlich mit einer Million im Jahr drin sein – vermutlich vergleichbar mit den Portokosten des privaten Transparenzregisters.

    La-la-la Servicequalität

    Aber keine Sorge: Steuerbegünstigte Vereine wie unsere Fahrradwerkstatt „können gemäß §4 TrGebV bei der registerführenden Stelle eine Gebührenbefreiung ab dem Zeitpunkt der Antragstellung beantragen. Die Antragstellung kann nach Registrierung ausschließlich über die Internetseite des Transparenzregisters erfolgen.”

    Hab ich probiert.

    Ist nicht einfach.

    Immerhin geht die Webseite ohne Javascript. Das ist schon mal etwas, das ich mit all der Privatwirtschaft im Boot nicht erwartet hätte. Eine offensichtliche Möglichkeit, einen Verein als gemeinnützig zu melden, ist allerdings nicht erkennbar, und „steuerbegünstigt“ oder „gemeinnützig“ kommt bei den FAQ nicht vor.

    Ah: das ist eine Hotline. Ruf ich gleich mal an: „♪♪ ♪ ♪ Wir sind heute nur eingeschränkt für Sie da.“

    Das muss die Servicequalität (noch so ein Stück Antisprache: Qualität) im Privatsektor sein, von der mensch so viel hört.

    Ich habe mal eine Mail geschrieben. Wetten zu Dauer und Art der Antwort nehme ich an.

    [1]Auch wenn das Thema eigentlich schon oft behandelt wurde; vgl. etwa eine Abhandlung im Guardian von 2015
  • Tintenfische und der Erfolg im Leben

    Ein Oktopus im Porträt

    Gut: Es ist keine Sepie. Aber dieser Oktopus ist bestimmt noch viel schlauer.

    Mal wieder gab es in Forschung aktuell ein Verhaltensexperiment, das mich interessiert hat. Anders als neulich mit den Weißbüschelaffen sind dieses Mal glücklicherweise keine Primaten im Spiel, sondern Tintenfische, genauer Sepien – die mir aber auch nahegehen, schon, weil das „leerer Tab“-Bild in meinem Browser eine ausgesprochen putzige Sepie ist. Den Beitrag, der mich drauf gebraucht hat, gibt es nur als Audio (1:48 bis 2:28; Fluch auf die Zeitungsverleger), aber dafür ist die Original-Publikation von Alexandra Schnell et al (DOI 10.1098/rspb.2020.3161) offen.

    Grober Hintergrund ist der Marshmallow-Test. Bemerkenswerterweise zitiert der Wikipedia-Artikel bereits die Sepien-Publikation, nicht jedoch kritischere Studien wie etwa die auf den ersten Blick ganz gut gemachte von Watts et al (2018) (DOI: 10.1177/0956797618761661). Schon dessen Abstract nimmt etwas die Luft aus dem reaktionären Narrativ der undisziplinierten Unterschichten, die selbst an ihrem Elend Schuld sind:

    an additional minute waited at age 4 predicted a gain of approximately one tenth of a standard deviation in achievement at age 15. But this bivariate correlation was only half the size of those reported in the original studies and was reduced by two thirds in the presence of controls for family background, early cognitive ability, and the home environment. Most of the variation in adolescent achievement came from being able to wait at least 20 s. Associations between delay time and measures of behavioral outcomes at age 15 were much smaller and rarely statistically significant.

    Aber klar: „achievement“ in Zahlen fassen, aus denen mensch eine Standardabweichung ableiten kann, ist für Metrikskeptiker wie mich auch dann haarig, wenn mich die Ergebnisse nicht überraschen. Insofern würde ich die Watts-Studie jetzt auch nicht überwerten. Dennoch fühle ich mich angesichts der anderen, wahrscheinlich eher noch schwächeren, zitierten Quellen eigentlich schon aufgerufen, die Wikipedia an dieser Stelle etwas zu verbessern.

    Egal, die Tintenfische: Alexandra Schnell hat mit ein paar Kolleg_innen in Cambridge also festgestellt, dass Tintenfische bis zu zwei Minuten eine Beute ignorieren können, wenn sie damit rechnen, später etwas zu kriegen, das sie lieber haben – und wie üblich bei der Sorte Experimente ist der interessanteste Teil, wie sie es angestellt haben, die Tiere zu irgendeinem Handeln in ihrem Sinn zu bewegen.

    Süß ist erstmal, dass ihre ProbandInnen sechs Tintenfisch-Jugendliche im Alter von neun Monaten waren. Die haben sie vor einen Mechanismus (ebenfalls süß: Die Autor_innen finden den Umstand, dass sie den 3D-gedruckt haben, erwähnenswert genug für ihr Paper) mit zwei durchsichtigen Türen gesetzt, hinter denen die Sepien jeweils ihre Lieblingsspeise und eine Nicht-so-Lieblingsspeise (in beiden Fällen irgendwelche ziemlich ekligen Krebstiere) sehen konnten. Durch irgendwelche Sepien-erkennbaren Symbole wussten die Tiere, wie lange sie würden warten müssen, bis sie zur Leibspeise kommen würden, zum langweiligen Essen konnten sie gleich, und sie wussten auch, dass sie nur einen von beiden Ködern würden essen können; dazu gabs ein recht durchdachtes Trainingsprotokoll.

    Na ja, in Wirklichkeit wars schon etwas komplizierter mit dem Training, und ahnt mensch schon, dass nicht immer alles optimal lief:

    Preliminary trials in the control condition showed that Asian shore crabs were not a sufficiently tempting immediate reward as latencies to approach the crab, which was baited in the immediate-release chamber, were excessive (greater than 3 min) and some subjects refused to eat the crab altogether.

    Ich kann mir richtig vorstellen, wie die Gruppe vor dem Aquarium stand und fluchte, weil die doofen Viecher ihre Köder nicht schlucken wollten: „Wie zum Henker schreiben wir das nachher ins Paper?“ – um so mehr, als alle Sepien konsequent die gleichen Präferenzen hatten (was ich ja auch schon für ein bemerkenswertes Resultat halte, das bei n=6 und drei Auswahlmöglichkeiten kaum durch Zufall zu erklären ist – vielleicht aber natürlich durch das, was die Sepien sonst so essen).

    Und dann wieder Dinge in der Abteilung „was alles schiefgehen kann, wenn mensch mit Tieren arbeitet“:

    Subjects received one session of 6 trials per day at a specific delay. This number of trials was chosen to minimize satiety and its effects on eating behaviour.

    Schon die Abbildung 2 des Artikels finde ich wirklich erstaunlich: Alle Sepien bekommen es hin, 30 Sekunden auf ihre Lieblingsspeise zu warten – wow. Ok, kann natürlich sein, dass sie so lange brauchen, um sich zu orientieren, aber Schnell und Co scheinen mir schon viel getan zu haben, um das unwahrscheinlich zu machen.

    Was jedenfalls rauskommen sollte, war eine Korrelation der Wartezeit mit, na ja, der „Intelligenz“ (ich halte mich raus bei der genaueren Bestimmung, was das wohl sei), und um die zu messen, mussten die Sepien in ihren Aquarien zunächst lernen, das „richtige“ unter einem dunklen und einem hellen Stück Plastik aussuchen. Anschließend, das war der Intelligenztest, mussten sie mitbekommen, wenn die Versuchsleitung die Definition von „richtig“ verändert hat. Dazu haben sie laut Artikel im Mittel 46 Versuche gebraucht – gegenüber 27 Versuchen beim ersten Lernen. Nicht selbstverständlich auch: Sepien, die beim ersten Lernen schneller waren, waren auch schneller beim Begreifen der Regeländerung. Da ist Abbildung 3 schon ziemlich eindrücklich: einer der Tintenfische hat das Umkehrlernen in gut 20 Schritten bewältigt, ein anderer hat fast 70 Schritte gebraucht. Uiuiui – entweder haben die ziemlich schwankende Tagesform, oder die Gerissenheit von Sepien variiert ganz dramatisch zwischen Individuen.

    Die erwartete Korrelation kam selbstverständlich auch raus (Abbildung 4), und zwar in einer Klarheit, die mich schon etwas erschreckt angesichts der vielen Dinge, die beim Arbeiten mit Tieren schief gehen können; der Bayes-Faktor, den sie im Absatz drüber angeben („es ist 8.83-mal wahrscheinlicher, dass Intelligenz und Wartenkönnen korreliert sind als das Gegenteil“) ist bei diesem Bild ganz offensichtlich nur wegen der kleinen Zahl der ProbandInnen nicht gigantisch groß. Hm.

    Schön fand ich noch eine eher anekdotische Beobachtung:

    [Andere Tiere] have been shown to employ behavioural strategies such as looking away, closing their eyes or distracting themselves with other objects while waiting for a better reward. Interestingly, in our study, cuttlefish were observed turning their body away from the immediately available prey item, as if to distract themselves when they needed to delay immediate gratification.

    Ich bin vielleicht nach der Lektüre des Artikels nicht viel überzeugter von den verschiedenen Erzählungen rund um den Marshmallow-Test.

    Aber ich will auch mit Sepien spielen dürfen.

  • Wie aus dem 18. Jahrhundert

    Ich bin ja bekennender Leser von Fefes Blog, und ich gebe offen zu, dass ich dort schon das eine oder andere gelernt habe. Zu den für mich aufschlussreichsten Posts gehört dieser aus dem September 2015, der mir seitdem nicht mehr aus dem Sinn gegangen ist, und zwar wegen der Unterscheidung zwischen Kulturen der Ehre (die mensch sich verdienen und die mensch dann verteidigen muss) und denen der Würde (die mensch einfach hat).

    Der Rest des Posts ist vielleicht nicht der scharfsinnigste Beitrag zur Identitätsdebatte, und klar gilt auch Robert Gernhardts „Die Würde des Menschen ist ein Konjunktiv“ weiter, aber der zentrale Punkt ist: Artikel 1 Grundgesetz ist eine Befreiung von dem ganzen Unsinn von Ehre und insofern ein großer Schritt in die Moderne. Das ist mir so erst damals im September 2015 klar geworden.

    Und seitdem habe ich mich um so mehr gewundert über den Stellenwert, den „Gesicht nicht verlieren“ in „der Politik“ (und das schließt schon Bezirksvorsitzende von Gewerkschaften ein) immer noch hat. Wo außerhalb der Krawattenliga gibt es sonst noch „Ehrenerklärungen“ wie neulich bei der CDU (von vor 20 Jahren ganz zu schweigen) oder kräuseln sich nicht die Zehennägel, wenn jemand wie Westerwelle weiland verkündete: „Ihr kauft mir den Schneid nicht ab“?

    Um so mehr war ich angetan, als zumindest Angela Merkel diese Logik des 18. Jahrhunderts gestern durchbrochen hat und einfach mal „ich hab Scheiße gebaut“ gesagt hat. Und es tröstet etwas, dass zumindest die heutige Presseschau in weiten Teilen nicht das unsägliche Genöle von Vertrauensfragen aus dem Bundestag gestern reflektiert.

    Andererseits: Keine Presseschau ohne fassungsloses Kopfschütteln, wenn nämlich die Süddeutsche schreibt:

    Hätte die Bundesregierung stattdessen selber genug Impfdosen geordert, und zwar nicht zuletzt bei Biontech im eigenen Land, dem Erfinder des ersten Corona-Vakzins, befände sich Deutschland jetzt nicht am Rande der Hysterie.

    Hätte die Süddeutsche gesagt: „dafür gesorgt, dass so oder so alles, was an Abfüllkapazität da ist, anfängt, Impfstoff abzufüllen, sobald absehbar ist, dass es mit der Zulassung was wird“ – ok, das wäre ein Punkt. Das augenscheinlich auch im Ernstfall herrschende Vertrauen in „den Markt“ ist natürlich böser Quatsch. Aber auch überhaupt nichts Neues. Und die Süddeutsche sitzt in dem Punkt in einem Glashaus mit ganz dünnen Scheiben.

    Aber sie redet auch vom „ordern“, was im Klartext heißt: „wir wollen schneller geimpft sein als die anderen“ – das ist, noch klarerer Text, anderen Leuten den Impfstoff wegnehmen. Meinen die Süddeutschen das ernst?

    Ich bin ja ohnehin in den letzten Wochen in der unangenehmen Situation, meine Regierung zu verteidigen. Das habe ich, glaube ich, noch nie gemacht. Aber im schwierigen Lavieren zwischen autoritärem Durchgriff – etwa, alle Leute bei sich zu Hause einsperren – und einem Laissez-Faire, das vermutlich fast eine halbe Million Menschen in der BRD umgebracht hätte, sieht es fast so aus, als hätte der Gesamtstaat (zu dem ja auch Landesregierungen und vor allem Gerichte gehören) so ziemlich den Punkt erwischt hat, den „die Gesellschaft“ sonst auch akzeptiert.

    Warum ich das meine? Nun, so sehr ich gegen Metriken als Bestimmer politischen Handelns bin, gibt die Mortalitätskurve doch eine Idee davon, welche Kompromisse wir eingehen. Das RKI veröffentlicht jeden Freitag so eine, und die im Bericht vom letzten Freitag sieht so aus:

    Mortalitätskurven 2017-2021

    In Worten: Die Gesamtsterblichkeit war im Corona-Jahr nicht viel anders als sonst auch, nur kam der Grippe-Peak halt schon im November und Dezember statt erst im Januar und Februar. Und da wir ja wegen der Grippe in „normalen“ Jahren auch nicht alle das Winterende in Isolation verbringen, war das Level an Isolation und Shutdown, das wir am Ende hatten und das SARS-2 zur Vergleichbarkeit gezähmt hat, offenbar im Sinne „der Gesellschaft“ gewählt.

    Klar: Das hat so wohl niemand geplant. Dass es aber so rausgekommen ist, dürfte nicht einfach nur Zufall sein. „Schwarmintelligenz“ wird den Grund sicher nicht treffen. Aber irgendwas, das nicht furchtbar weit davon weg ist, dürfte die Ähnlichkeit der Kurven wohl schon erklären. Vielleicht: Das, was bei uns von Gewaltenteilung noch übrig ist?

    Ansonsten bereite ich mich schon mal aufs Verspeisen meines Hutes vor, wenn die „dritte Welle“ jetzt doch noch für einen schlimmen Mortalitätspeak sorgt.

  • Fortschritt des Monats: Neu-Eichenberg

    Bestimmt nur wegen durch Corona-Beratungen und Terrorgedenken in Brüssel anderweitig gefesselter Aufmerksamkeit lief die Nachricht des Tages nicht in der Tagesschau, sondern nur in der taz.

    Dort wird über die weise Wahl im hessischen Dorf Neu-Eichenberg berichtet, das sich nicht hat beirren lassen von der großen Verwirrung, dass zwar alle das Wochenende nicht erwarten können, aber „Arbeitsplätze“ im allgemeinen Bewusstsein das überragende Ziel privaten wie öffentlichen Handelns zu sein scheinen,

    In Neu-Eichenberg nämlich wollte eine Firma namens Dietz AG groß investieren und damit einem Haufen Menschen viel Arbeit machen. Und zwar wollte sie ein „Logistikzentrum“ bauen, in dem, so die taz, „Onlinefirmen und Paketzusteller“ wirken sollten. Die bisherigen Mehrheitsparteien SPD und CDU (bis vorhin gemeinsam 12 von 15 Sitzen) hatten das bejubelt. Sie verloren deshalb bei den Gemeinderatswahlen am vorletzten Wochenende je 17 und 20 Prozentpunkte. Damit ist die Mehrheit für das „Logistikzentrum“ weg. Weniger Lärm, weniger Arbeit, weniger hässliche Gewerbegebiete: die Bewohner_innen von Neu-Eichenberg bekommen den Engelszüngeln-Preis für den Fortschritt des Monats.

    Das um so mehr, als es ja wirklich ein Segen rundrum wäre, wenn die ganze Paketverschickerei wieder auf, sagen wir, 1% ihres aktuellen Umfangs einschrumpfen würde, denn selbst nach Maßstäben eines Landes, das irgendwas wie ein Siebtel seiner Arbeitskraft ausgerechnet auf die Produktion und den Betrieb von Autos verschwendet, ist die Paketfahrerei eine besonders sinnlose Art, menschliche Lebenskraft zu verschleudern: Erstmal, weil im Netz nach meiner anekdotischen Erfahrung noch mehr nutzloser Plunder vertickt wird als in echten Geschäften, und dann, weil bei der Einzelverschickung ein Haufen echt übler Jobs mitkommen.

    Klar ist jetzt auch der stationäre Handel nichts, wo ich eben mal Traumjobs vermuten würde, aber verglichen mit den Beschäftigungsverhältnissen in allen Kettengliedern der „Logistik“ ist das wirklich Gold (und das nicht nur im Hinblick auf den Tarif). Fast im Ernst: Eine Existenz als Buch- oder Wolle-und-Tee-Händler könnte möglicherweise selbst mir nicht ganz unattraktiv scheinen.

    Go Neu-Eichenberg.

  • Zum Tag der politischen Gefangenen

    Der 18.3. hat eine lange Tradition als Tag der politischen Gefangenen, anfänglich in Erinnerung an den Beginn der Pariser Commune vor 150 Jahren; die Erinnerungsfeierlichkeiten in diesem Zusammenhang waren in den Jahren der Weimarer Republik regelrechte politische Festivals. Das hatte nach der Machtübergabe an die NSDAP ein Ende, doch seit genau 25 Jahren begehen Menschen auch in der BRD wieder den Tag der politischen Gefangenen, vor allem im Umfeld der Roten Hilfe.

    In Heidelberg gab es dazu heute eine Kundgebung, deren Hauptziel war, den politischen Gefangenen in der BRD eine Stimme zu geben. Deshalb bestand ein großer Teil der Kundgebung auch schlicht draus, Briefe und andere Äußerungen der Gefangenen vorzulesen. Das wiederum schien den Veranstalter_innen wichtig, weil der_die durchschnittliche Passant_in in der Fußgängnerzone (die Kundgebung fand am Marktplatz statt) schon die Behauptung, in ihrem Staat gebe es politische Gefangene, für eine Zumutung hält. Tatsächlich erinnere ich mich an Gerichtsverfahren in den späten 1980er Jahren, in denen Menschen für die Forderung, die politischen Gefangenen in der BRD sollten freigelassen werden, mit schwerem strafrechtlichem Geschütz verfolgt wurden und zum Teil sogar Bewährungsstrafen kassierten. Das, immerhin, hat es nach meiner Kenntnis in den letzten Jahren nicht mehr gegeben.

    Aber dann würden vermutlich nicht viele Menschen glauben, dass es im Strafgesetzbuch im Jahr 2021 noch einen ganzen Abschnitt gibt zu „Hochverrat“, unterteilt in „gegen den Bund“ (§81), „gegen ein Land“ (§82) und „Vorbereitung“ (§83), wozu dann noch ein Kronzeugenparagraph §83a tritt. Und natürlich klingen auch etwa §90 und §90a („Verunglimpfung des Bundespräsidenten“ bzw. „des Staates und seiner Symbole“) oder §94 („Landesverrat“) durchaus nach ziemlich politischer Justiz.

    Die real exisitierenden politischen Gefangene in deutschen Knästen werden allerdings weit überwiegend verfolgt nach der 129er-Paragraphen-Familie, bestehend aus §129 (normale Banden, Provenienz: Kaiserreich), §129a (inländischer „Terrorismus“, Provenienz: Schmidt-Regierung) und §129b (ausländischer „Terrorismus“, Provenienz: Schröder-Regierung). Im Bereich der Antisprache „Terrorismus“ wirds natürlich immer etwas haarig mit den Vorwürfen, und drum nehme ich als Definition von „politische_r Gefangene_r” ganz pragmatisch: „hätten sie ohne politisch missliebigen Hintergrund gehandelt, wären sie nie eingefahren oder jedenfalls längst wieder draußen“.

    Um da mal das Spektrum aufzumachen zwischen „Fällen“, bei denen sich die bürgerliche Öffentlichkeit wahrscheinlich nur schwer wird empören können auf der einen und offensichtlichen moralischen Bankrotterklärungen des Staates auf der anderen, würde ich gerne kurz einen Blick auf die Gefangenen werfen, deren Kontaktadressen die RH in ihrer 18.3.-Zeitung auf Seite 15 druckt (zu den meisten sind auch Artikel in der Zeitung).

    Da hätten wir zunächst Yilmaz Acil, Hüseyin Açar, Gökmen Çakil, Mustafa Çelik, Salih Karaaslan, Agit Kulu, Veysel Satilmiş, Özkan Taş, Mazhar Turan und Mustafa Tuzak, die in verschiedenen Gefängnissen der Republik sitzen, weil... nun, weil sie mit der PKK in Verbindung gebracht werden. Soweit ersichtlich, wird keinem von ihnen irgendeine konkrete Straftat vorgeworfen – aber klar, die PKK als Organisation tut natürlich schon Sachen, die Menschen, die die türkische Obrigkeit als NATO-Verbündeten schon ok finden, für verwerflich halten könnten. Nach welchem Rechtsstaatsprinzip daraus abzuleiten ist, Leute mit schlichten Sympathien für PKK-Kämpfe sollten eingesperrt werden, ist natürlich noch eine andere Frage, zumal, wie Gökmen Çakıl richtig anmerkt, entsprechende „Aktivitäten [...] in der Schweiz oder in Belgien nicht sanktioniert“ werden.

    Ähnlich wird das Sentiment bei der Gefangenschaft von Musa Aşoğlu von der Einschätzung abhängen, von welcher Sorte Widerstand gegen verbündete Regierungen mensch sich dringend distanzieren muss, will mensch nicht ins Gefängnis kommen; in seinem Fall genügte die Mitgliedschaft in der DHKP-C (deren Erklärungen übrigens ein Fest sind für Liebhaber_innen realsozialistischer Prosa) für sechs Jahre und neun Monate Knast.

    Milde Empörung im Fall von Thomas Meyer-Falk dürfte weniger internationalistischen Furor brauchen. Er nämlich sitzt nach jahrelanger Gefängnisstrafe wegen Banküberfällen (mit denen er linke Jugendzentren finanzieren wollte) nun in Sicherungsverwahrung, die ja schon als solche ein menschenrechtlicher Skandal ist. In seinem Fall ist unbestreitbar: er wäre längst draußen, wenn es da nicht den politischen Hintergrund gäbe – von dem er sich auch nicht distanzieren will. Immerhin gibt derweil sein Blog wertvolle Einblicke in die Realität der Sicherungsverwahrung.

    Noch weiter im Spektrum klar politischer Justiz sind die Fälle von Lina, Jo und Dy – sie alle sind im Antifa-Bereich unterwegs und sind oder waren für Monate inhaftiert im Wesentlichen aufgrund vager Hinweise, sie könnten in, mal bewusst entpolitisierend gesprochen, Prügeleien mit Nazis verwickelt gewesen sein. Prügeleien dieser Art sind, weiter bewusst entpolitisierend, ohne SARS-2 Alltag auf jedem Volksfest und werden dann halt mit Strafbefehlen behandelt, die nur im Wiederholungsfall über dem Vorbestrafungs-Limit von 90 Tagessätzen liegen. Dass diese Leute monatelang im Knast schmoren, ist ausschließlich politisch bedingt. Was in diesem Fall angesichts des immer wieder hochblubbernden Faschismusproblems in Polizei und Staatsanwaltschaften nochmal ein ganz besonderes Hautgout hat.

    Bei der „militanten Zelle” von Nicole Grahlow und Martin Eickhoff – die seit Oktober 2020 in in Haft sind – liegen noch Sachbeschädungsvorwürde durch versuchte Brandstiftungen vor, aber keinerlei Gefährung von Menschen mehr. Die Ziele, nämlich die ehemalige Bundesanstalt für Arbeit in Nürnberg und das Schlachtimperium von Tönnies, sind allerdings so nachvollziehbar, dass das inzwischen durch rechte Hasspost-Praktiken ziemlich desavouierte Topos „Drohbriefe an diverse Politiker_innen“ in der staatlichen Kommunikation dominiert. Ich will hier bestimmt nichts gleichsetzen, aber ein ähnlicher Verfolgungseifer bei Nazis, die Menschen abfackeln, würde der Verfolgung der beiden einiges vom Eindruck von Willkür nehmen.

    Glasklar im Hinblick auf eine menschenrechtliche Bankrotterklärung ist schließlich der Fall von Ella („Unbekannte Person 1“): Ihr wird im Wesentlichen vorgeworfen, an der Besetzung des Dannenröder Walds teilgenommen zu haben und beharrlich die Aufklärung ihrer Identität zu verweigern. Ohne die Gewalttaten der Polizei bei der Räumung des Hüttendorfs, für deren wirklich empörendes Ausmaß der Staat rechtfertigende Narrative sucht, wäre sie ganz gewiss keinen Moment in Haft gekommen.

    Nach all dem: Wer will, kann die Grenze zwischen politischen und, nun ja, sozialen Gefangenen etwas anders ziehen als die Rote Hilfe. Um die Einsicht, dass es auch in Justizvollzugsanstalten (was für ein urdeutsches Wort!) politische Gefangene gibt, kommt mensch aber nicht herum.

  • Schurken und Engel, Teil 2

    Ich bin gestern nochmal der Sache mit den Schurken und Engeln von neulich nachgegangen, denn auch wenn die grundsätzliche Schlussfolgerung – wenn du Chefposten kompetetiv verteilst, kriegst du ziemlich wahrscheinlich Schurken als Chefs – robust ist und ja schon aus der dort gemachten qualitativen Abschätzung folgt, so gibt es natürlich doch jede Menge interessante offene Fragen: Setzen sich Schurken drastischer durch wenn die Engeligkeit steiler verteilt ist? Wie sehr wirkt sich der Vorteil für die Schurken wirklich aus, vor allem, wenn sie auch nur eine endliche Lebensdauer haben? Wie ändern sich die Ergebnisse, wenn Leute zweite und dritte Chancen bekommen, mal wie ein richtiger Schurke Karriere zu machen? Wie verändert sich das Bild, wenn mensch mehr Hierarchiestufen hinzufügt?

    Weil das alte Modell mit der einen Kohorte, die bei jedem Schritt um den Faktor 2 eindampft, für solche Fragen zu schlicht ist, muss ein neues her. Es hat den Nachteil, dass es viel mehr Code braucht als das alte – es hat aber der Vorteil, dass es im Prinzip beliebig lang laufen kann und über einen weiten Bereich von Parametern hinweg stationär werden dürfte, sich also der Zustand nach einer Weile (der „Relaxationszeit“) nicht mehr ändern sollte – natürlich vom Rauschen durch die diskrete Simulation abgesehen. Wem also das alte Modell zu schlicht und langweilig ist: Hier ist sunde2.py.

    Das Neue

    Wie sieht das Modell aus? Nun, wir haben jetzt simultan einen ganzen Haufen N von Hierarchiestufen, die auch immer alle besetzt sind; derzeit habe ich konstant N = 50. Von Stufe zu Stufe ändert sich jetzt die Population nicht mehr je um einen Faktor zwei, sondern so, dass die unterste Stufe 16-mal mehr Aktoren hat als die oberste und die Besetzungszahl dazwischen exponentiell geht. Diese Schicht-Statistik sollte keinen großen Einfluss auf die Ergebnisse haben, hält aber einerseits die Zahl der zu simulierenden Aktoren auch bei tiefen Hierarchien im Rahmen, ohne andererseits auf den oberen Ebenen die ganze Zeit mit allzu kleinen Zahlen kämpfen zu müssen.

    Aktoren haben jetzt auch ein Alter; sie sterben (meist) nach LN Runden; L kann interpretiert werden als die Zahl der Versuche pro Wettbewerb, die ein Aktor im Mittel hat, wenn er ganz nach oben will. Im Code heißt das lifetime_factor (hier: Lebenzeit-Faktor), und ich nehme den meist als 2 („vita brevis“).

    Es gibt eine Ausnahme auf der strikten Lebenszeitbegrenzung: Wenn ein Level sich schon um mehr als die Hälfte geleert hat, überleben die, die noch drin sind, auch wenn sie eigentlich schon sterben müssten. An sich ist diese künstliche Lebensverlängerung nur ein technischer Trick, damit mir der Kram mit ungünstigen Parametern und bei der Relaxation nicht auf interessante Weise um die Ohren fliegt; es kann nämlich durchaus sein, dass die oberen Ebenen „verhungern“, weil Aktoren schneller sterben als befördert werden. Er hat aber den interessanten Nebeneffekt, dass speziell in Modellen mit kleinem L wie in der Realität die Lebenserwartung der höheren Klassen höher ist als die der unteren.

    Um die Gesamtzahl der Aktoren konstant zu halten, werden in jeder Runde so viele Aktoren geboren wie gestorben sind, und zwar alle in die niedrigste Schicht.

    Das enspricht natürlich überhaupt nicht der Realität – schon die Zahlen zur Bildungsbeteiligung gegen Ende des Posts Immerhin gegen Ende zeigen ja, dass viele Menschen mitnichten bei Null anfangen in ihrem gesellschaftlichen Aufstieg. Insofern hätte mensch darüber nachdenken können, bestehende Aktoren irgendwie fortzupflanzen. Das aber hätte eine Theorie zum Erbgang von Schurkigkeit gebraucht (die auch dann nicht einfach ist, wenn mensch wie ich da wenig oder keine biologische Komponenten vermutet) und darüber hinaus den Einbau von Abstiegen in der Hierarchie erfordert.

    Die zusätzliche Komplexität davon wäre jetzt nicht dramatisch gewesen, aber das kontrafaktische „alle fangen bei Null an“ residiert als „Chancengleichheit“ auch im Kern der modernen Wettbewerbsreligion. Für ein Modell – das ohnehin in einer eher lockeren Beziehung zur Wirklichkeit steht – ist sie daher genau richtig. Sollten übrigens in der Realität Kinder von eher schurkigen Menschen auch tendenziell eher schurkig werden, würde das die Anreicherung von Schurkigkeit gegenüber dem chancengleichen Modell nur verstärken.

    Das Alte

    Der Rest ist wie beim einfachen Modell: da es gibt den Schurken-Vorteil, die Wahrscheinlichkeit, dass ein Aktor, der gerade schurkig ist, gegen einen, der gerade engelig ist, gewinnt. Dieser rogue_advantage ist bei mir in der Regel 0.66.

    Der letzte Parameter ist die Verteilung der Schurkigkeit (also der Wahrscheinlichkeit, dass sich ein Aktor in einem Wettbewerb als Schurke verhält). Dazu habe ich wie zuvor eine Gleichverteilung, Exponentialverteilungen der Schurkigkeit mit verschidenen λ (also: gegenüber der Gleichverteilung sind mehr Aktoren Engel, wobei die allerdings alle Schurkeigkeiten über 1 auf 1 beschnitten werden; für kleine λ wird das also schwer zu interpretieren) und Normalverteilungen reingebaut, dieses Mal aber viel expliziter als im einfachen Modell des letzten Posts.

    Ich hatte eigentlich vor, den Kram immer laufen zu lassen, bis er „stationär“ würde, also sagen wir, bis der Schurkigkeits-Gradient in den mittleren Schichten sich von Runde zu Runde nicht mehr wesentlich ändert. Stellt sich aber raus: durch die relativ überschaubaren Aktor-Zahlen und die Dynamik der Gesellschaft, in der ja per Design viel Aufstieg stattfindet, rauschen die Metriken, die ich da probiert habe, zu stark, um guten Gewissens sagen zu können, jetzt sei das Ding relaxiert (im Code: DiffingWatcher).

    Was passiert?

    Stattdessen lasse ich die Modelle jetzt erstmal laufen, bis die (gleichverteilte) Anfangspopulation weitgehend ausgestorben ist (nämlich NL Runden) und ziehe dann nochmal für NL Runden Statistiken, vor allem die mittlere Schurkigkeit in Abhängigkeit von der Hierarchieebene. Die kann ich dann übereinanderplotten, wobei ich die Zeit durch den Grauwert einfließen lasse (spätere, wahrscheinlich etwas relaxiertere, Zustände sind dunkler):

    Dabei ist auf der Abszisse die mittlere Hierarchieebene, auf der Ordinate die mittlere Schurkigkeit auf der entsprechenden Ebene; die Zeit ist, wie gesagt, durch den Grauwert der Punkte angedeutet und sorgt für die Streuung.

    Am auffälligsten ist wohl, dass Schurkigkeit auf den letzten paar Stufen am drastischsten ansteigt. Das hätte ich in dem Ausmaß nicht erwartet und deckt sich jedenfalls nach meiner Erfahrung nicht mit irgendwelchen Realitäten (in denen die Schurkigkeit schon auf nur moderat schwindelerregenden Ebenen rapide wächst). Ich komme gegen Ende nochmal etwas quantitativer auf die Steilheit des Anstiegs zurück.

    Hier, wie auch sonst, sind die Modelle bezeichnet durch einen String – sunde2.py verwendet ihn als Dateinamen –, der aus einer Bezeichnung der Verteilung (hier Exponential mit λ=4), der Zahl der Level N, dem Schurken-Vorteil und dem Lebenszeit-Faktor L besteht.

    Eine andere Art, diese Daten anzusehen, die insbesondere etwas mehr von der Dynamik erahnen lässt, ist eine Heatmap der Schurkigkeit; hier laufen die Hierarchieebenen auf der Ordinate, die Zeit auf der Abszisse; aus Bequemlichkeitsgründen hat hier die höchste Ebene mal die Bezeichnung 0 (so ist das übrigens auch im Programm gemacht, in den anderen Grafiken ist dagegen Ebene 50 das Nüßlein-Territorium):

    In-joke: Regenbogen-Palette. Ich habe gerade frei, ich darf das.

    Hier lässt sich ganz gut erkennen, dass der Kram nach einer maximalen Lebensdauer (da fängt die Grafik an) weitgehend relaxiert ist, und wieder, dass die letzten paar Hierarchieebenen die dramatischsten Schurken-Konzentrationen aufweisen. Die schrägen Strukturen, die überall sichtbar sind, sind zufällige Schurken-Konzentrationen auf der Karriereleiter. Intuitiv wäre wohl zu erwarten, dass sich Engel in Haifischbecken eher noch schwerer tun und so Schurkigkeitszonen selbstverstärkend sein könnten. Insofern ist die relativ geringe Streifigkeit der Grafik – die sagt, dass das wenigstens im Modell nicht so ist – erstmal eher beruhigend.

    Umgekehrt bilde mich mir ein, dass im unteren Bereich der Grafik einige blauere (also: engeligere) Strukturen deutlich flacher als 45 Grad laufen: Das könnten Engel-Konzentrationen sein, die gemeinsam langsamer die Karriereleiter besteigen. Fänd ich putzig (wenns die Karriereleiter denn schon gibt), kann aber auch nur überinterpretiertes Rauschen sein.

    Und noch eine Auswertung von diesem spezifischen Modell: Alter über Hierarchieebene, was angesichts des aktuellen Alte-weiße-Männer-Diskurses vielleicht interessant sein mag:

    Diese Abbildung funktioniert so wie die der mittleren Schurkigkeit, nur ist auf der Ordinate jetzt das Alter statt der Schurkigkeit. In dem Modell leben Aktoren ja zwei Mal die Zahl der Hierarchieebenen Runden, hier also 100 Runden. Die Aktoren ganz unten sind erkennbar deutlich jünger als der Schnitt (der bei 50 liegt), ganz oben sammeln sich alte Aktoren. Klingt speziell in dieser Ausprägung, in der oben wirklich nur Aktoren kurz vom Exitus sind, irgendwie nach später Sowjetunion, und klar ist das Modell viel zu einfach, um etwas wie die City of London zu erklären.

    Note to self: Beim nächsten Mal sollte ich mal sehen, wie sich das mittlere Alter von Schuken und Engeln in den unteren Schichten so verhält.

    Mal systematisch

    Weil Simulationen dieser Art schrecklich viele Parameter haben, ist das eigentlich Interessante, den Einfluss der Parameter auf die Ergebnisse zu untersuchen. Dazu habe ich mir mal ein paar Modelle herausgesucht, die verschiedene Parameter variieren (in der run_many-Funktion von sunde2); Ausgangspunkt sind dabei 50 Ebenen mit einem Lebenszeit-Faktor von zwei und einem Schurkenvorteil von 0.66. Das kombiniere ich mit:

    • einer Gleichverteilung von Schurkigkeiten
    • einer Exponentialverteilung mit λ = 2
    • einer Exponentialverteilung mit λ = 4
    • einer Exponentialverteilung mit λ = 4, aber einem Schurkenvorteil von 0.75
    • einer Exponentialverteilung mit λ = 4, aber einem Lebenszeit-Faktor von 4
    • einer Normalverteilung um 0.75 …
  • Fürchten lernen 3: Microsoft

    Nach dem zweiten Teil meiner Leidensgeschichte über den Betrieb eines Mailservers in der Postmoderne ist es ruhig geworden: Nachdem ich erstmal das DNS vertrauenswürdig gestaltet hatte, fanden eigentlich alle, bei denen mein Server Mails einliefern wollte, dessen Reputation reiche schon hin.

    Ich hegte also Hoffnung, dass das alles nicht so schlimm ist wie ich geglaubt hatte, dass SMTP noch nicht kaputt ist und mensch mit vernünftigem Aufwand selbst Mail verteilen kann. Bis heute morgen, als von meinen Mailserver das hier zurückkam:

    XXXXXXXXXXXXX@XXXXXXXXXX.de
       host XXXXXXXXXXXX01i.mail.protection.outlook.com [104.47.2.36]
       SMTP error from remote mail server after RCPT TO:<XXXXXXXXXXXXX@XXXXXXXXXX.de>:
       550 5.7.606 Access denied, banned sending IP [116.203.206.117]. To request
     removal from this list please visit https://sender.office.com/ and follow the
     directions. For more information please go to
     http://go.microsoft.com/fwlink/?LinkID=526655 AS(1430)
    

    Oh nein. Microsoft. Na, mal sehen.

    Ich schicke meinen Web-Browser zu sender.office.com, und es erscheint einen Dialog mit einem kreiselnden Wartedings, ein sicheres Zeichen, dass da mal wieder „Web-Programmier“ am Werk waren, die einfach so voraussetzen, dass sie Code auf allen Maschinen ausführen dürfen. Na super: Mails verschicken geht nicht, ohne Microsoft-Code laufen zu lassen.

    Aber egal, sollen sie halt auf meine CPU; das Javascript zieht ein Captcha ein (zum ersten Mal bin ich froh, dass das Microsoft ist, denn so ist es immerhin kein Google-Captcha und ich muss nicht deren „KI“ trainieren). Captcha gelöst, für ein paar Sekunden passiert nichts, dann eine Meldung:

    Step 1: Our messaging service has experienced a temporary issue,
    please resubmit your information below.
    

    Mach ich das mit dem resubmit, gleiche Reaktion. Hatte ich was anderes erwartet?

    Ok, kann ja sein, dass die einfach keine gute Fehlermeldung haben und das irgendsoein dämlicher CSRF-Schutz mit Referrern ist (auch wenn mir wirklich nicht klar wäre, wer auf diesem Zeug CSRF machen wollen könnte). Lasse ich meinen Browser also noch Referrer-Header schicken. Keine Änderung, immer noch kaputt.

    An der Stelle werde ich sauer und will irgendwem eine zornige Mail schicken. Aber: Keine Kontaktadresse, nirgends. Ich überlege, ob ich eine Telemediengesetz-Beschwerde auf den Weg schicken soll, denn zweifelsohne ist das ein kommerzielles Angebot unter deutschem Recht (der Empfänger ist eine hiesige Firma, für die Microsoft das bestimmt nicht umsonst macht). Vielleicht. Aber bevor ich mit einem Scheiß wie dem Telemediengesetz argumentiere, brauche ich noch mehr Verzweiflung.

    Aber gucken wir erstmal, was da „more information“ ist. Ich lasse meinen Browser also auf http://go.microsoft.com/fwlink/?LinkID=526655 los und bekomme ein Redirect auf:

    https://technet.microsoft.com/library/mt661881(v=exchg.150).aspx
    

    Sowohl auf luakit als auch per curl reagiert der Microsoft-Server darauf mit:

    Unable to process request
    

    Gratuliere. Was machen diese Leute eigentlich beruflich?

    Aber wurst, werfe ich halt meinen Browser für wüste, grob privatsphäreverletzende Seiten an – mein Leben ist zu kurz, um den Quatsch, den die Firma da auf die Menschheit loslässt, verstehen zu wollen. Mit dem Browser fürs Grobe kommt dann auch was: eine Seite mit viel Rede von „Defender”. Aber keine nützliche Information, und so probiere ich halt sender.office.com nochmal mit dem Kamikaze-Browser.

    Ergebnis: Our messaging service has experienced a temporary issue, please resubmit your information below.

    Immerhin hat ist auf der Info-Seite etwas, das nach einem Kontakt-Link aussieht. Aber nein, es ist eine Issue-Seite auf github, https://github.com/MicrosoftDocs/feedback/issues, 1630 Open Bugs. Jaklar, da schreibe ich meinen noch dazu. Was glauben diese Leute eigentlich?

    Stattdessen habe ich dann heute vormittag an postmaster@office.com geschrieben, und Mail ist nicht gleich zurückgewiesen worden. Entsprechend hatte ich da noch Hoffnung, Microsoft könnte sich immerhin an diesen Teil der Mail-RFCs halten. Jetzt, 18 Uhr, sieht es nicht danach aus, da kam genau keine Reaktion (im diesem Vergleich, es schmerzt mich, das zuzuzugeben, sieht die Telekom viel besser aus). Und die sender.office.com-Seite ist auch noch kaputt.

    Andererseits: Offensichtlich haben die Exchange-Leute gerade tatsächlich außergewöhnliche Probleme. Vielleicht habe ich einfach nur Pech gehabt und das ist sonst nicht so rekursiver Murks?

    Nachtrag (2021-03-12)

    (um 15:30) Immerhin weist Microsoft Mails an postmaster nicht so rüde ab wie andere Mails. Mein Mailserver schreibt mir gerade, dass er es 24 Stunden lang nicht geschafft hat, die Mail an postmaster@office.com auszuliefern, dass er es aber weiter probieren wird. Es bleibt spannend. Unterdessen findet aber yahoo.de, dass es mit meiner Reputation bergab geht. Oh je. Das sieht nach einem Alptraum mit Verzögerung aus.

    Nachtrag (2021-03-15)

    (mittags) Nee, natürlich ist nichts bei postmaster@office.com einzuliefern. Wo kämen wir da auch hin. Dafür macht inzwischen wenigstens die sender.office.com-Geschichte etwas, wenn auch von der Mail, die das verspricht, innerhalb von 10 Minuten nichts zu sehen ist.

    Nachtrag (2021-03-15)

    (abends) Nach noch einem Versuch mit der sender.office.com-Geschichte kam dann auch eine Mail mit einem Link, und dessen Derefenenzierung hat tatsächlich etwas produziert, das versprach, mein Server werde innerhalb von 30 Minuten von der Blacklist genommen. Schon frech, wie dieser Laden über die Zeit anderer Menschen verfügt. Auf der anderern Seite: jetzt will ich da gar niemandem mehr Mails schreiben. Pfft.

  • Wundern über Schurken

    Vor einer guten Woche habe ich inspiriert von dem, was inzwischen „Masken-Affäre“ heißt[1] gezeigt, wie eine ganz einfache Theorie sehr natürlich erklärt, warum die mittlere Schurkigkeit mit der Hierarchiestufe recht rapide steigt. Für mich eher unerwartet ist diese Masken-Affäre übers Wochenende richtig explodiert, bis hin zum puren Rock'n'Roll, dass Abgeordnete – und dann noch welche von CDU und CSU – wegen Selbstbedienung aus der Fraktion fliegen.

    Noch verdrehter fand ich allerdings heute morgen die Presseschau im Deutschlandfunk:

    • „untergräbt in schwerer Zeit das Vertrauen in die politisch Verantwortlichen” (Südkurier),
    • „trifft das pandemiemüde Land wie ein Donnerschlag” (Neue Osnabrücker Zeitung),
    • „kein kleiner Fehltritt“ (Badische Neueste Nachrichten),
    • „eine moralische Bankrotterklärung“ (Rheinische Post).

    Dieser Chor von Überraschung und Empörung ist deshalb zumindest bizarr, weil alle diese Medien normalerweise feiern, wenn sich „Fleiß und Einfallsreichtum aufs private Fortkommen richten“, wie die Hessische Niedersächsische Allgemeine zum gleichen Thema so schön formuliert – und sich mit dieser zutreffenden Beschreibung des Verhaltens von Nüßlein und Löbel zumindest mal den Preis für den am wenigsten verdrehten Kommentar an diesem Morgen verdient hat.

    Tatsächlich ist Vertreter_innen entsprechender Ideen zumeist mit etwas Mühe die Konzession abzuringen, natürlich sei eine Wirtschaft zu bevorzugen, die in einem gesellschaftlichen Prozess plant, welcher Kram produziert werden soll und wie das mit möglichst wenig Belastung für Mensch („Arbeit“) und Natur hinzukriegen sei. Aber, so ist dann das finale und kaum widerlegbare Argument, das sei nicht zu machen, weil der Mensch schlecht sei und egoistisch und drum, wenn die Wirtschaft nicht auf die Bedürfnisse von ehrgeizigen Schurken ausgerichtet sind, der Hungertod droht.

    Demgegenüber wandele ein moderat regulierter Kapitalismus die Niederträchtigkeit der Einzelnen in den größtmöglichen Nutzen des Staates und in der Folge der Gesellschaft – was unter der Bedingung, dass die Leute, von Mutter Theresa mal abgesehen, durchweg Gesindel sind, oberflächlich plausibel klingt[2].

    Und nun sind genau die Leute, die bei jeder Gelegenheit die Alternativlosigkeit von Markt und Wettbewerb für die Volkswirtschaft aus der Schurkigkeit des Menschen an sich ableiten, empört, weil ihre Vertreter_innen, und zumal die mit dem eklatantesten der-Mensch-ist-schlecht-Programm, bescheißen, so gut sie können. Hm.

    Es war schon lange meine Vermutung, dass die Fähigkeit, rechtzeitig mit den Ableitungen aus den eigenen Ideen aufzuhören, ganz entscheidend ist für die Erhaltung einer, nun ja, konservativen Gesinnung.

    [1]Montag 19:45 gibt es erstaunlicherweise noch keine Wikipedia-Seite „Masken-Affäre“, aber der Relevanzkriterien-Widerstand in der Sache dürfte innerhalb von Stunden bröckeln.
    [2]Jedenfalls solange, bis mensch sich klar macht, dass wir derzeit Jahr um Jahr fossile Kohlenwasserstoffe verbrauchen, die sich innerhalb von einigen 100000 Jahren gebildet haben (sprich: wir durch diese Ressourcen gehen, als hätten wir einige 105 Erden) und trotzdem noch Jahr um Jahr Milliionen von Menschen an Armut sterben.
  • Nerd des Monats: Friedrich Schmiedel

    Titel: Der einzige Artikel von Schmiedel im Internet

    Als großer Fan von der Deutschlandfunk-Sendung Forschung aktuell höre ich natürlich auch (wenn auch mit Verzögerung) jeden Tag die sehr empfehlenswerte Sternzeit.

    In der vom 2. Februar hat (denke ich mal) Dirk Lorenzen daran erinnert, dass vor 90 Jahren, am 2.2.1931, Friedrich Schmiedl die erste Postrakete hat fliegen lassen, und die Geschichte klang so irre, dass ich das mal genauer wissen wollte:

    Die erste Postrakete brachte rund hundert Briefe vom Schöckel, einem Berg bei Graz, ins nur wenige Kilometer entfernte Sankt Radegund. Die Raketen waren ferngesteuert und landeten sanft am Fallschirm – eine Meisterleistung des Ingenieurs.

    [...] Nach dem erfolgreichen Erstflug begann ein regelmäßiger Postraketendienst in der Umgebung von Graz.

    und vor allem:

    Nach dem Raketen-Aus vernichtete Friedrich Schmiedl seine Unterlagen, damit sie nicht für Rüstungszwecke genutzt werden konnten – und er lehnte etliche Stellenangebote von Militärs aus verschiedenen Ländern ab.
    Eingang des Instituts für Weltraumwissenschaften

    Das Grazer Institut für Weltraumwissenschaften ist leider nicht nach Schmiedel, sondern nach dem Entdecker der kosmischen Strahlung, Victor Hess, benannt. Immerhin hat auch er nicht mit den Nazis kollaboriert, ist nach dem Übergang vom Austrofaschismus zur Naziherrschaft in Österreich in die USA geflohen – und er war Lehrer von Schmiedel.

    Der Wikipedia-Artikel zur Raketenpost ist zwar bezüglich des „regelmäßigen Postraketendiestes“ doch etwas skeptischer, und klar ist das aus heutiger Sicht eine ziemlich irre Idee. Aber wahrscheinlich war sie in ihrer Zeit nicht viel irrer als die Idee eines globalen paketvermittelten Computer-Netzwerks in den Anfängen des ARPANet.

    Nach etwas Schmökern im Netz kann ich jedenfalls bestätigen: Schmiedl war ganz klar ein großer Bastler; allein die Raketen so zu starten bzw. zu steuern, dass sie die Briefe tatsächlich so grob dorthin brachten, wo sie hinsollten, ist mit der damaligen Technologie ein halbes Wunder. Und er war bewegt von Interesse an der Sache und natürlich dem Plan, irgendwann mal in den Weltraum zu kommen. Ein Nerd, kein Zweifel.

    Dass er jede Verwicklung in staatliches Töten („Militär“) konsequent und unter erheblichen zumindest materiellen Einbußen abgelehnt hat, macht ihn, so finde ich, noch dazu zu einem Vorbild. Und drum verleihe ich Schmiedl hiermit feierlich den Titel Nerd des Monats.

    Während ich im Netz rumgestöbert habe, um etwas etwas mehr über Schmiedel rauszukriegen (und viel scheint nicht online zu sein), ist mir irgendwann klar geworden, dass ich eine großartige Gelegenheit verpasst habe, Schmiedl näher zu kommen: Ich war nämlich vor ein paar Jahren mal Referent bei einer Konferenz im Institut für Weltraumwissenschaften der österreichischen Akademie der Wissenschaften, das bestimmt nicht ganz zufällig in Graz ist. Leider wusste ich nichts von der Geschichte und habe deshalb nicht im Institut nach Erinnerungen geforscht – er ist ja erst 1994 gestorben, es könnten also durchaus noch Leute dort arbeiten, die ihn gekannt haben – und auch sein Grab nicht besucht. Schade.

    Was mich beim Stöbern noch überrascht hat: Der Wikipedia-Artikel zur Raketenpost schreibt, erst nach einem Unfall, bei dem 1964 zwei Menschen gestorben waren, seien in der Bundesrepublik Experimente mit ernsthafteren Raketen für Privatpersonen verboten worden. So ein Verbot hätte ich genau angesichts der militärischen Interessen, die Schmiedel aus dem Gebiet gedrängt haben, viel früher erwartet.

    Schmiedels Geschichte finde ich jedenfalls inspirierend. Und siehe da: das ADS weist immerhin einen Artikel von ihm nach: Early postal rockets in Austria. Und siehe noch weiter: Das Web Archive hat einen Scan des Artikels (ganzer Band von archive.org; original kommt das vom NASA NRTS, aber deren Interface ist Mist), der vielleicht, wenn du das liest, schon am ADS verlinkt ist.

    Der Artikel ist alles, was ich von Schmiedel selbst have finden können. Daher hier noch ein paar Ausschnitte, die, finde ich, seine Art, visionären Ideenreichtum mit konkreten technischen Lösungen zu verbinden, ganz gut illustrieren:

    [Die hübsche und gar nicht tödliche Passage von P1/Halley im Jahr 1910] marked a new phase in human thought after it became evident that space was not that hostile; one could dare to explore it. [...]

    In the 1920s I started some preliminary rocket experiments towards space flight. But first of all I had to convince my professors, who considered my ideas on space flight as a scientific illusion because of my youthful eagerness to assume that space flight was possible. [...] under the hood of a vaccum pump I fired tiny rockets and tested their efficiency while the air was evacuated.

    [...Mein Stratosphärenballon] was furnished with magnetized steel wires to hold it in a predetermined east-west position [...] Furthermore, the steel wires had to hold an aluminum flag (300 cm x 7 cm) in a certain position relative to the Sun so that it could reflect the Sun's rays to an observation post on Earth. Thus one could pursue the position of the balloon despite its height.

    [...] my stratoballoon carried some silveracide which would explode at a high altitude [...so that] dispersed matter could be moved out of the Earth's gravitational field by solar light pressure.

    [Meine Test-Postrakete] V-5 carried letters where I stated “...it is theoretically possible to deliver mail from Europe to America via rockets within 40 minutes” [...]

    In April 1931 I launched three sounding rockets with home-made recording equipment: a spectrograph with Zeiss prisms, and instruments to record the pressure, height, and vibrations [...] One rocket was constructed like a Greek column with parallel grooves along the longitudinal axis that had been worked into the aluminum casing to prevent rotation during the flight [...] The second rocket, on the other hand, I provided with diagonal grooves in its casing for fast rotation. My purpose was to improve guiding accuracy [...]

    I launched the [V-8] rocket with a selen cell as an optical control which should have set its course toward a lighted balloon [...]

    Later, I destroyed nearly all of my research notes and photographs of rocket launches and proceedings, for fear they might be used by the military.

    Nee, wirklich: der Krieg ist mal ganz definitiv nicht der Vater aller Dinge.

  • Mailman3: "Cannot connect to SMTP server localhost on port 25"

    I've been a fairly happy mailman user for about 20 years, and I ran mailman installations for about a decade in the 2000s.

    Over the last week or so, I've spent more time setting up a mailman3 list off and on than I've spent with mailman guts in all the years before, which includes recovery form one or two bad spam attacks. Welcome to the brave new world of frameworks and microservices.

    Perhaps the following words of warning can help other mailman3 deployers to not waste quite as much time.

    Badly Misleading Error Messages

    Most importantly, whatever you do, never call mailman as root. This will mess up permissions and lead to situations really hard to debug. In particular, the error message from the post's title:

    Cannot connect to SMTP server localhost on port 25
    

    apparently can have many reasons (or so the recipes you find on the net suggest), few of which have anything to do with SMTP, but one clearly is when mailman can't read or write to queue files or templates or whatever and bombs out while trying to submit mail.

    Morale: Don't claim too much when writing error messages in your programs.

    Unfortunately, I've fixed the thing accidentally, so I can't say what exactly broke. The take away still is that, in Debian (other installations' mailman users might be called something else) you run mailman like this:

    sudo -u list mailman
    

    However, I can now say how to go about debugging problems like these, at least when you can afford a bit of mailman unavailability. First, stop the mailman3 daemon, because you want to run the thing in the foreground. Then set a breakpoint in deliver.py by inserting, right after def deliver(mlist, msg, msgdata), something like:

    import pdb; pdb.set_trace()
    

    Assuming Debian packaging, you will find that file in /usr/lib/python3/dist-packages/mailman/mta.

    Of course, you'll now need to talk to the debugger, so you'll have to run mailman in the foreground. To do that, call (perhaps adapting the path):

    sudo -u list /usr/lib/mailman3/bin/master
    

    From somewhere else, send the mail that should make it to the mail server, and you'll be dropped into the python debugger, where you can step until where the thing actually fails. Don't forget to remove the PDB call again, as it will itself cause funky errors when it triggers in the daemonised mailman. Of course, apt reinstall mailman3 will restore the original source, too.

    Template Management Half-Broken

    When I overrode the welcome message for a mailing list, the subscription notifications to the subscribing users came out empty.

    This time, there was at least something halfway sensible in the log:

    requests.exceptions.HTTPError: 404 Client Error: Not Found for url: http://localhost/postorius/api/templates/list/kal.sofo-hd.de/list:user:notice:welcome
    

    Until you read up on the mailman3 system of managing templates (which, roughly, is: store URIs from where to pull them), it's a bit mystifying why mailman should even try this URI. Eventually, one can work out that when you configure these templates from Postorius, it will take the URI at which mailman should see it, Postorius, from POSTORIUS_TEMPLATE_BASE_URL in /etc/mailman/mailman-web.py. This is preconfigured to the localhost URI, which proabably only rarely is right.

    To fix it, change that setting to:

    POSTORIUS_TEMPLATE_BASE_URL = 'http://<your postorious vserver>/postorius/api/templates/'
    

    Of course it'll still not work because the old, wrong, URI is still in mailman's configuration. So, you'll have to go back to the template configuration in Postorius and at least re-save the template. Interestingly, that didn't seem to fix it for me for reasons I've not bothered to fathom. What worked was deleting the template and re-adding it. Sigh.

    As soon as you have more than one template, I expect it's faster to change the URIs directly in mailman's database, which isn't hard, as seen in the next section.

    [Incidentally: does anyone know what the dire warnings in the docs about not using sqlite3 on “production” systems actually are about?]

    Disable Emergency Moderation After Moving

    Basically because I was hoping to get a more controlled migration, I had set one list on the old server to emergency moderation before pulling the config.pck. Don't do that, because at least as of now mailman3 has the notion of emergency moderation but makes it hard to switch it on or off. I eventually resorted to directly touching mailman's config database (if you've configured mailman to use something else than sqlite, the shell command is different, but the query should be the same):

    $ sudo -u list sqlite3 /var/lib/mailman3/data/mailman.db
    [on the sqlite prompt:]
    update mailinglist set emergency=0 where list_id='<your list id>';
    

    Note that <your list id> has a dot instead of the at, so if your list is mylist@example.org, its id is mylist.example.org.

    Oh No, CSRF Token

    The list I cared about most could be joined from an external web site, transparently posting to mailman2's cgi-bin/mailman/subscribe (oh! CGI! How am I missing you in the age of uwsgi and Django!). Looking at its counterpart for modern mailman3, the first thing I noted is that there's a CSRF token in it – if you've not encountered them before, it's a couple of bytes the originating server puts into a web form to prevent what Postorius' authors feels is Cross Site Request Forgery.

    Of course, what I wanted was exactly that: Post to Postorius from a different web site. I don't feel that's forgery, very frankly.

    I didn't see an obvious way to turn it off, and I was a bit curious about mailman3's own http API, so I wrote a few lines of code to do this; the API part itself was straightforward enough, something like:

    result = requests.post(
      getConfig("mailmanAPI")+"/members", {
        'list_id': getConfig("mailmanListname"),
        'subscriber': toSubscribe,
        'pre_verified': False,
        'pre_confirmed': False,
        'pre_approved': True,},
      auth=(getConfig("mailmanAPIUser"),
        getConfig("mailmanAPIPassword")),
      timeout=1)
    

    – but of course it sucks a bit that subscribing someone requires the same privilege level as, say, creating a mailing list or changing its description. And all that just to work around CSRF prevention. Sigh.

    On top of that, I've tried K-SAT on the pre_X booleans to try and see if anything gives me the tried and tested workflow of “let folks enter a mail address, send a confirmation link there, subscribe them when it's being clicked“. No luck. Well, let's hope the pranksters don't hit this server until I figure out how to do this.


    Hm. I think I'm a bit too locked in into mailman to migrate away, but I have to say I wish someone would port mailman2 to python3 and thus let mailman2 hang on essentially forever. It did all a mailing list manager needs to do as far as I am concerned, and while it wasn't pretty with the default browser stylesheets, even now, almost a decade into mailman3, it works a whole lot more smoothly.

    Or perhaps there's a space for a new mailing list manager with a trivially deployable web interface not requiring two separate database connections? Perhaps such a thing exists already?

    Well, summing up, the central migration advice again: Mind the sudo option in

    sudo -u list mailman import21 my-list@example.org config.pck
    
  • Fast alles Schurken

    Die gerade durch die Medien gehende Geschichte von Georg Nüßlein zeichnet, ganz egal, was an Steuerhinterziehung und Bestechung nachher übrig bleibt, jedenfalls das Bild von einem Menschen, der, während rundrum die Kacke am Dampfen ist, erstmal überlegt, wie er da noch den einen oder anderen Euro aus öffentlichen Kassen in seine Taschen wandern lassen kann.

    Die Unverfrorenheit mag verwundern, nicht aber, dass Schurken in die Fraktionsleitung der CSU aufsteigen. Im Gegenteil – seit ich gelegentlich mal mit wichtigen Leuten umgehe, fasziniert mich die Systematik, mit der die mittlere Schurkigkeit von Menschen mit ihrer Stellung in der Hierarchie steil zunimmt: Wo in meiner unmittelbaren Arbeitsumgebung eigentlich die meisten Leute recht nett sind, gibt es unter den Profen schon deutlich weniger Leute mit erkennbarem Herz. Im Rektorat wird es schon richtig eng, und im Wissenschaftsministerium verhalten sich oberhalb der Sekretariate eigentlich alle wie Schurken, egal ob nun früher unter Frankenberg oder jetzt unter Bauer.

    Tatsächlich ist das mehr oder minder zwangsläufig so in Systemen, die nach Wettbewerb befördern. Alles, was es für ein qualitatives Verständnis dieses Umstands braucht, sind zwei Annahmen, die vielleicht etwas holzschnittartig, aber, so würde ich behaupten, schwer zu bestreiten sind.

    1. Es gibt Schurken und Engel
    2. Wenn Schurken gegen Engel kämpfen (na ja, wettbewerben halt), haben die Schurken in der Regel bessere Chancen.

    Die zweite Annahme mag nach dem Konsum hinreichend vieler Hollywood-Filme kontrafaktisch wirken, aber eine gewisse moralische Flexibilität und die Bereitschaft, die Feinde (na ja, Wettbewerber halt) zu tunken und ihnen auch mal ein Bein zu stellen, dürfte unbestreitbar beim Gewinnen helfen.

    Um mal ein Gefühl dafür zu kriegen, was das bedeutet: nehmen wir an, der Vorteil für die Schurken würde sich so auswirken, dass pro Hierarchieebene der Schurkenanteil um 20% steigt, und wir fangen mit 90% Engeln an (das kommt für mein soziales Umfeld schon so in etwa hin, wenn mensch hinreichend großzügig mit dem Engelbegriff umgeht). Als Nerd fange ich beim Zählen mit Null an, das ist also die Ebene 0.

    Auf Ebene 1 sind damit noch 0.9⋅0.8, also 72% der Leute Engel, auf Ebene 2 0.9⋅0.8⋅0.8, als knapp 58% und so fort, in Summe also 0.9⋅0.8n auf Ebene n. Mit diesen Zahlen sind in Hierarchieebene 20 nur noch 1% der Leute Engel, und dieser Befund ist qualitativ robust gegenüber glaubhaften Änderungen in den Anfangszahlen der Engel oder der Vorteile für Schurken.

    Tatsächlich ist das Modell schon mathematisch grob vereinfacht, etwa weil die Chancen für Engel sinken, je mehr Schurken es gibt, ihr Anteil also schneller sinken sollte als hier abgeschätzt. Umgekehrt sind natürlich auch Leute wie Herr Nüßlein nicht immer nur Schurken, sondern haben manchmal (wettbewerbstechnisch) schwache Stunden und verhalten sich wie Engel. Auch Engel ergeben sich dann und wann dem Sachzwang und sind von außen von Schurken nicht zu unterscheiden. Schließlich ist wohl einzuräumen, dass wir alle eher so eine Mischung von Engeln und Schurken sind – wobei das Mischungsverhältnis individuell ganz offensichtlich stark schwankt.

    Eine Simulation

    All das in geschlossene mathematische Ausdrücke zu gießen, ist ein größeres Projekt. Als Computersimulation jedoch sind es nur ein paar Zeilen, und die würde ich hier gerne zur allgemeinen Unterhaltung und Kritik veröffentlichen (und ja, auch die sind unter CC-0).

    Ein Ergebnis vorneweg: in einem aus meiner Sicht recht plausiblen Modell verhält sich die Schurkigkeit (auf der Ordinate; 1 bedeutet, dass alle Leute sich immer wie Schurken verhalten) über der Hierarchiebene (auf der Abszisse, höhere Ebenen rechts) wie folgt (da sind jeweils mehrere Punkte pro Ebene, weil ich das öfter habe laufen lassen):

    Graph: Scatterplot von Schurkigkeit gegen Karriereschritt

    Ergebnis eines Laufs mit einem Schurken-Vorteil von 0.66, mittlere Schurkigkeit über der Hierarchieebene: Im mittleren Management ist demnach zur 75% mit schurkigem Verhalten zu rechnen. Nochmal ein paar Stufen drüber kanns auch mal besser sein. Die große Streuung auf den hohen Hierarchieebenen kommt aus den kleinen Zahlen, die es da noch gibt; in meinen Testläufen fange ich mit 220 (also ungefähr einer Million) Personen an und lasse die 16 Mal Karriere machen; mithin bleiben am Schluss 16 Oberchefs übrig, und da macht ein_e einzige_r Meistens-Engel schon ziemlich was aus.

    Das Programm, das das macht, habe ich Schurken und Engel getauft, sunde.py – und lade zu Experimenten damit ein.

    Zunächst das Grundmodell, in Python formuliert:

    ROGUE_ADVANTAGE = 0.66
    
    _WIN_PROB = {
        (False, False): 0.5,
        (False, True): 1-ROGUE_ADVANTAGE,
        (True, False): ROGUE_ADVANTAGE,
        (True, True): 0.5,}
    
    class Actor:
        def __init__(self, angelicity):
            self.angelicity = angelicity
    
        def is_rogue(self):
            return random.random()>self.angelicity
    
        def wins_against(self, other):
            return _WIN_PROB[self.is_rogue(), other.is_rogue()]>random.random()
    

    Es wird also festgelegt, dass, wenn ein Schurke gegen einen Engel wettbewerbt, der Schurke mit zu 66% gewinnt (und ich sage mal voraus, dass der konkrete Wert hier qualitativ nicht viel ändern wird), während es ansonsten 50/50 ausgeht. Das ist letztlich das, was in _WIN_PROB steht.

    Und dann gibt es das Menschenmodell: Die Person wird, wir befinden uns in gefährlicher Nähe zu Wirtschafts„wissenschaften“, durch einen Parameter bestimmt, nämlich die Engeligkeit (angelicity; das Wort gibts wirklich, meint aber eigentlich nicht wie hier irgendwas wie Unbestechlichkeit). Diese ist die Wahrscheinlichkeit, sich anständig zu verhalten, so, wie das in der is_rogue-Methode gemacht ist: Wenn eine Zufallszahl zwischen 0 und 1 (das Ergebnis von random.random()) großer als die Engeligkeit ist, ist die Person gerade schurkig.

    Das wird dann in der wins_against-Methode verwendet: sie bekommt eine weitere Actor-Instanz, fragt diese, ob sie gerade ein Schurke ist, fragt sich das auch selbst, und schaut dann in _WIN_PROB nach, was das für die Gewinnwahrscheinlichkeit bedeutet. Wieder wird das gegen random.random() verglichen, und das Ergebnis ist, ob self gegen other gewonnen hat.

    Der nächste Schritt ist die Kohorte; die Vorstellung ist mal so ganz in etwa, dass wir einem Abschlussjahrgang bei der Karriere folgen. Für jede Ebene gibt es eine Aufstiegsprüfung, und wer die verliert, fliegt aus dem Spiel. Ja, das ist harscher als die Realität, aber nicht arg viel. Mensch fängt mit vielen Leuten an, und je weiter es in Chef- oder Ministerialetage geht, desto dünner wird die Luft – oder eher, desto kleiner die actor-Menge:

    class Cohort:
        draw = random.random
    
        def __init__(self, init_size):
            self.actors = set(Actor(self.draw())
                for _ in range(init_size))
    
        def run_competition(self):
            new_actors = set()
            for a1, a2 in self.iter_pairs():
                if a1.wins_against(a2):
                    new_actors.add(a1)
                else:
                    new_actors.add(a2)
    
            self.actors = new_actors
    
        def get_meanness(self):
            return 1-sum(a.angelicity
              for a in self.actors)/len(self.actors)
    

    (ich habe eine technische Methode rausgenommen; für den vollen Code vgl. oben).

    Interessant hier ist vor allem das draw-Attribut: Das zieht nämlich Engeligkeiten. In dieser Basisfassung kommen die einfach aus einer Gleichverteilung zwischen 0 und 1, wozu unten noch mehr zu sagen sein wird. run_competition ist der Karriereschritt wie eben beschrieben, und get_meanness gibt die mittlere Schurkigkeit als eins minus der gemittelten Engeligkeit zurück. Diesem Wortspiel konnte ich nicht widerstehen.

    Es gäbe zusätzlich zu meanness noch interessante weitere Metriken, um auszudrücken, wie schlimm das Schurkenproblem jeweils ist, zum Beispiel: Wie groß ist der Anteil der Leute mit Engeligkeit unter 0.5 in der aktuellen Kohorte? Welcher Anteil von Friedrichs (Engeligkeit<0.1) ist übrig, welcher Anteil von Christas (Engeligkeit>0.9)? Aus wie vielen der 10% schurkgisten Personen „wird was“? Aus wie vielen der 10% Engeligsten? Der_die Leser_in ahnt schon, ich wünschte, ich würde noch Programmierkurse für Anfänger_innen geben: das wären lauter nette kleine Hausaufgaben. Andererseits sollte mensch wahrscheinlich gerade in so einem pädagogischen Kontext nicht suggerieren, dieser ganze Metrik-Quatsch sei unbestritten. Hm.

    Nun: Wer sunde.py laufen lässt, bekommt Paare von Zahlen ausgegeben, die jeweils Hierarchiestufe und meanness der Kohorte angeben. Die kann mensch dann in einer Datei sammeln, etwa so:

    $ python3 sunde.py >> results.txt
    $ python3 sunde.py >> results.txt
    

    und so fort. Und das Ganze lässt sich ganz oldschool mit gnuplot darstellen (das hat die Abbildung oben gemacht), z.B. durch:

    plot "results.txt" with dots notitle
    

    auf der gnuplot-Kommandozeile.

    Wenn mir wer ein ipython-Notebook schickt, das etwa durch matplotlib plottet, veröffentliche ich das gerne an dieser Stelle – aber ich persönlich finde shell und vi einfach eine viel angenehmere Umgebung...

    Anfangsverteilungen

    Eine spannende Spielmöglichkeit ist, die Gesellschaft anders zu modellieren, etwa durch eine Gaußverteilung der Engeligkeit, bei der die meisten Leute so zu 50% halb Engel und halb Schurken sind (notabene deckt sich das nicht mit meiner persönlichen Erfahrung, aber probieren kann mensch es ja mal).

    Dazu ersetze ich die draw-Zuweisung in Cohort durch:

    def draw(self):
         return min(1,
             max(0, random.normalvariate(0.5, 0.25)))
    

    Die „zwei Sigma“, also – eine der wichtigeren Faustformeln, die mensch im Kopf haben sollte – 95% der Fälle, liegen hier zwischen 0 und 1. Was drüber und drunter rausguckt, wird auf „immer Engel“ oder „immer Schurke“ abgeschnitten. Es gibt in diesem Modell also immerhin 2.5% Vollzeitschurken. Überraschenderweise sammeln sich die in den ersten 16 Wettbewerben nicht sehr drastisch in den hohen Chargen, eher im Gegenteil:

    Graph: Scatterplot wie oben, nur für gaussverteilte Aktoren

    Deutlich plausibler als die Normalverteilung finde ich in diesem Fall ja eine …

  • Michel Foucault vs. Corona

    Weil ich es neulich von der GEW hatte: ein weiterer Grund, warum ich 20 Jahre, nachdem es hip war, einen Blog angefangen habe, war eine Telecon im April letzten Jahres und die GEW.

    Na gut, es war nicht direkt die Telecon und eigentlich auch gar nicht die GEW.

    Tatsächlich hatte ich damals aber die erste Lehrsituation im engeren Sinne via Telecon, und kurz danach ich eine Epiphanie dazu, warum sich Lehre über Videokonferenzen so scheiße anfühlt. Dazu habe ich dann einen Artikel geschrieben, den ich, ermutigt von GEW-KollegInnen, gerne in der B&W (das ist die monatlich an alle Mitglieder in Baden-Württemberg verschickte Zeitschrift) untergebracht hätte – so brilliant fand ich ihn. Ahem.

    Nun, was soll ich sagen, die Redaktion war skeptisch, um das mal vorsichtig zu sagen. Ich habe da auch einiges Verständnis dafür, denn im letzten Juni gings bestimmt hoch her in Sachen computervermitteltem Unterricht, und da wären Einwürfe, die Videokonferenzen mit wüsten Folterszenen in Verbindung brachten, bestimmt nicht hilfreich gewesen.

    Aber schade fand ich es doch. Ich hatte aber nicht wirklich einen Platz, um sowas geeignet unterzubringen.

    Jetzt habe ich einen. Und damit: „Wider das Panopticon – Michel Foucault und der Unterricht via Videokonferenz“.

  • Wahlkampfkostenhilfe verdient

    Wahlkampfzeiten finde ich immer sehr anstrengend: Wenn diese Wahlplakate wirken, muss ich wirklich auswandern. Früher konnte ich ja wenigstens noch zum UNiMUT-Wahlplakateranking (2009, 2005, 2004, 2002, 2001, 1998) beitragen und so gleichzeitig Depressionen vorbeugen und ein (wirkungsloses) Fanal gegen den Ranking- und Rating-Unfug setzen.

    Seit es das nicht mehr gab, konnte ich nur noch weggucken, so gut ich konnte.

    Diese Misere ein wenig geändert hat die PARTEI, die es tatsächlich fertig gebracht hat, vor allen Alten- und Pflegeheimen hier „Kosten sparen – Pflege abschaffen“ zu plakatieren, und sie hatten ganz offensichtlich schon eine Ahnung, womit die FDP wohl plakatieren wird:

    Wahlplakate

    Kann ich dafür meine Wahlkampfkostenerstattung direkt der PARTEI zukommen lassen? Wählen muss ich, wenn ich denn mal wissen will, welche Bomben die Polizei in Baden-Württemberg nach §54a PolG BaWü [1] beschafft und was sie damit gemacht hat (und das will ich), leider wen anders...

  • Solidarität ist... charmant

    Ein Weißbüschelaffe

    Sucht nach netten Genoss_innen: ein Weißbüschelaffe – Raimond Spekking / CC BY-SA 4.0 (via Wikimedia Commons)

    An sich halte ich ja Soziobiologie für irgendwas zwischen Mumpitz und reaktionärer Zumutung, jedenfalls soweit sie verstanden wird als Versuch, menschliches Verhalten oder gar gesellschaftliche Verhältnisse durch biologische Befunde (oder das, was die jeweiligen Autor_innen dafür halten) zu erklären und in der Folge zu rechtfertigen.

    Hier ist aber eine Geschichte (DOI 10.1126/sciadv.abc8790), die so putzig ist, dass ich mir in der Beziehung etwas mehr Toleranz von mir wünschen würde. Und zwar hat eine Gruppe von Anthropolog_innen um Rahel Brügger aus Zürich das Kommunikationsverhalten von Weißbüschelaffen untersucht (Disclaimer: Nee, ich finde eigentlich nicht, dass mensch Affen in Gefangenschaft halten darf, aber in diesem Fall scheint zumindest das expermimentelle Protokoll halbwegs vertretbar).

    Dabei haben sie zunächst zwei Dialoge zwischen (den Proband_innen unbekannten) Affen aufgenommen: Ein Affenkind hat einen erwachsenen Affen um Futter angebettelt. Im einen Fall hat der erwachsene Affe abgelehnt, im anderen Fall wohl etwas wie „schon recht“ gemurmelt.

    Dann haben sie die Aufnahmen anderen Affen vorgespielt und haben dann geschaut, ob diese lieber weggehen oder lieber nachsehen, wer da geplaudert hat. Und siehe da: Die Tiere wollten viel lieber die netten Affen sehen als die doofen. Bei den netten Affen haben nach gut 10 Sekunden schon die Hälfte der Proband_innen nachgesehen, wer das wohl war, bei den doofen war das mehr so 30 Sekunden. Und bis zum Ende der jeweiligen Versuche nach zwei Minuten wollten immerhin ein Viertel der Proband_innen nichts von den doofen Affen sehen, aben nur ein Zehntel nichts von den netten.

    Moral: Seid nett, und die Leute mögen euch.

    Ja, ok, kann sein, dass die Äffchen nur gehofft haben, dass sie auch Essen kriegen, wenn schon das Kind was bekommen hat. Pfft. Ich sag ja, Soziobiologie stinkt.

    Nachbemerkung 1: Ich habe das auch nicht gleich in Science Advances gefunden (da gäbs andere Journals, die ich im Auge haben sollte), sondern in den Meldungen vom 4.2. des sehr empfehlenswerten Forschung aktuell im Deutschlandfunk.

    Nachbemerkung 2: Ich weiß, Literatur soll mensch nicht erklären, aber die Überschrift ist natürlich ein Einwand gegen einen der Wahlsprüche der Roten Hilfe: „Solidarität ist eine Waffe“. So klasse ich die Rote Hilfe finde, der entschlossene Pazifist in mir hat die Parole nie so recht gemocht. Mensch will ja eigentlich weniger Waffen haben, aber ganz bestimmt mehr Solidarität.

  • A Mail Server on Debian

    After decades of (essentially) using other people's smarthosts to send mail, I have recently needed to run a full-blown, deliver-to-the-world mail server (cf. Das Fürchten lernen; it's in German, though).

    While I had expected this to be a major nightmare, it turns out it's not so bad at all. Therefore I thought I'd write up a little how-to-like thing – perhaps it will help someone to set up their own mail server. Which would be a good thing. Don't leave mail to the bigshots, it's too important for that.

    Preparation

    You'll want to at least skim the exim4 page on the Debian wiki as well as /usr/share/doc/exim4/README.Debian.gz on your box. Don't worry if any of that talks about things you've never heard about at this point and come back here.

    The most important thing to work out in advance is to get your DNS to look attractive to the various spam estimators; I didn't have that (mostly because I moved “secondary” domains first), which caused a lot of headache (that article again is in German).

    How do you look attractive? Well, in your DNS make sure the PTR for your IP is to mail.<your-domain>, and make sure mail.<your-domain> exists and resolves to that IP or a CNAME pointing there. Note that this means that you can forget about running a mail server on a dynamic IP. But then dynamic IPs are a pain anyway.

    Before doing anything else, wait until the TTL of any previous records of this kind has expired. Don't take this lightly, and if you don't unterstand what I've been saying here, read up on DNS in the meantime. You won't have much joy with your mail server without a reasonable grasp of reverse DNS, DNS caching, and MX records.

    Use the opportunity to set the TTL of the MX record(s) for your domain(s) to a few minutes perhaps. Once you have configured your mail system, you can then quickly change where other hosts will deliver their mail for your domain(s) and raise the TTLs again.

    Exim4

    Debian has come with the mail transfer agent (MTA; the mail server proper if you will) exim4 installed by default for a long, long time, and I've been using it on many boxes to feed the smart hosts for as long as I've been using Debian. So, I'll not migrate to something else just because my mail server will talk to the world now. Still, you'll have to dpkg-reconfigure exim4-config. Much of what's being asked by that is well explained in the help texts. Just a few hints:

    • “General type of mail configuration” would obviously be “internet site“.
    • Mail name ought to be <your domain>; if you have multiple domains, choose the one you'd like to see if someone mails without choosing any.
    • Keep the IP addresses to listen on empty – you want other hosts to deliver mail on port 25. Technically, it would be enough to listen only on the address your MX record points to, but that's a complication that's rarely useful.
    • Relaying mail for non-local domains is what you want if you want to be a smart host yourself. You'll pretty certainly want to keep this empty as it's easy to mess it up, and it's easy to configure authenticated SMTP even on clients (also see client connections on avoiding authenticated SMTP on top).
    • Exim also is a mail delivery agent (MDA), i.e., something that will put mail for domains it handles into people's mail boxes. I'll assume below that you select Maildir format in home directory as the delivery method. Maildir is so much cooler than the ancient mboxes, and whoever wants something else can still use .forward or procmail.
    • And do split your configuration into small files. Sure, you'll have to remember to run update-exim4.conf after your edits, but that litte effort will be totally worth it after your next dist-upgrade, when you won't have to merge the (large) exim4 config file manually and figure out what changes you did where.

    DNS Edits

    With this, you should be in business for receiving mail. Hence, make your MX record point to your new mail server. In an NSD zone file (and NSD is my choice for running my DNS server), this could look like:

    <your domain>.  IN MX 10 <your domain>.
    

    (as usual in such files: Don't forget the trailing dots).

    A couple of years ago, it was all the craze to play games with having multiple MX records to fend off spam. It's definitely not worth it any more.

    While I personally think SPF is a really bad idea, some spam filters will regard your mail more kindly if they find an SPF record. So, unless you have stronger reasons to not have one than just “SPF is a bad concept and breaks sane mailing list practices, .forward files and simple mail bouncing”, add a record like this:

    <your domain>.                3600    IN      TXT     "v=spf1" "+mx" "+a" "+ip4:127.0.0.1" "-all"
    

    – where you have to replace the 127.0.0.1 with your IP and perhaps add a similar ip6 clause. What this means: Mail coming from senders in <your domain> ought to originate at the IP(s) given, and when it comes from somewhere else it's fishy. Which is why this breaks good mailing list practices. But forunately most spam filters know that and don't interpret these SPF clauses to narrow-mindedly.

    SSL

    I'm not a huge fan of SSL as a base for cryptography – X.509 alone is scary and a poor defense against state actors –, but since it's 2021, having non-SSL services doesn't look good. Since it's important to look good so people accept your mail, add SSL to your exim installation.

    Unless you can get longer-living, generally-trusted SSL certificates from somewhere else, use letsencrypt certificates. Since (possibly among others) the folks from t-online.de want to see some declaration who is behind a mail server on such a web site, set up a web server for mail.<your-domain> and obtain letsencrypt SSL certificates for them in whatever way you do that.

    Then, in the post-update script of your letsencrypt updater, run something like:

    /bin/cp mail.crt mail.key /etc/exim4/ssl/
    /usr/sbin/service exim4 restart
    

    (which of course assumes that script runs as root or at least with sufficient privileges). /etc/exim4/ssl you'll have to create yourself, and to keep your key material at least a bit secret, do a:

    chown root:Debian-exim /etc/exim4/ssl
    chmod 750 /etc/exim4/ssl
    

    – that way, exim can read it even if it's already dropped its privileges, but ordinary users on your box cannot.

    Then tell exim about your keys. For that, use some file in /etc/exim4/conf.d/main; such files are the main way of configuring the exim4 package in non-trivial ways. I have 00_localmacros, which contains:

    MAIN_TLS_ENABLE = yes
    MAIN_TLS_CERTIFICATE = /etc/exim4/ssl/mail.crt
    MAIN_TLS_PRIVATEKEY = /etc/exim4/ssl/mail.key
    

    – that ought to work for you, too.

    Then, do the usual update-exim4.conf && service exim4 restart, and you should be able to speak SSL with your exim. The easiest way to test this is to install the swaks package (which will come in useful when you want to run authenticated SMTP or similar, too) and then run:

    swaks -a -tls -q HELO -s mail.<your domain> -au test -ap '<>'
    

    This will spit out the dialogue with your mail server and at some point say 220 TLS go ahead or so if things work, some more or less helpful error message if not.

    Aliases

    Exim comes with the most important aliases (e.g., postmaster) pre-configured in /etc/aliases. If you want to accept mail for people not in your /etc/passwd, add them there.

    The way this is set up, exim ignores domains; if you told exim to accept mails for domain1.de and domain2.fi, then mail to both user@domain1.de and user@domain2.fi will end up in /home/user/Maildir (or be rejected if user doesn't exist and there's no alias either). If you want to have domain-specific handling, add a file /etc/exim4/forwards that contains pairs like:

    drjekyll@example.org: mrhyde@otherexample.org
    

    The standard Debian configuration of Exim will not evaluate this file; to make it do that, drop a file wil something like:

    # Route using a global incoming -> outgoing alias file
    
    global_aliases:
      debug_print = "R: global_aliases for $local_part@$domain"
      driver = redirect
      domains = +local_domains
      allow_fail
      allow_defer
      data = ${lookup{$local_part@$domain}lsearch{/etc/exim4/forwards}}
    

    into (say) /etc/exim4/conf.d/router/450_other-aliases. After the usual update-exim4.conf, you should be good to go.

    Client Connections

    This setup only accepts mail for transport locally, and it will only deliver locally. That is: This isn't a smarthost setup yet.

    For delivery from remote systems, we're using ssh because pubkey auth is cool. This even works from an exim on the remote system …

  • Immerhin gegen Ende

    Wer Mitglied einer DGB-Gewerkschaft ist – und trotz allem rät schon Immanuel Kant dazu –, wird es kennen: Zähneknirschen, wenn wieder mal ganz schlimm reaktionäre Äußerungen von DGB („für die Nation!“), IGM („für das Wachstum!“), BCE („Mehr Kohle!“) oder GdP („ohne Taser für uns seid ihr den Horden mit häufig wechselndem Aufenthaltsort ausgeliefert!“) durch die Öffentlichkeit gereicht werden – wobei die Auswahl nicht andeuten soll, andere Mitgliedsgewerkschaften seien ohne Schuld.

    Ich selbst bin in der GEW, und auch die treibt mir manchmal die Tränen in die Augen, so etwa schon beim Titel der Presseerklärung Solidarisch und verantwortungsbewusst prüfen vom vergangenen Dienstag.

    Da tun sich also GEW und fzs zusammen, um zentral an die Hochschulen zu appellieren,

    unter den derzeitigen Pandemiebedingungen grundsätzlich auf Präsenzprüfungen zu verzichten und stattdessen alternative Formate anzubieten.

    Der schwerste Anwurf folgt sogleich:

    Zu Beginn der Krise war es noch nachvollziehbar, doch dass ein Jahr später immer noch keine digitalen kompetenzorientierten Prüfkonzepte existieren [...] ist unverständlich und hochgradig gefährlich

    Bevor ich den letzten Absatz des Textes gelesen hatte, war ich entschlossen, einen wilden Verriss der Erklärung zu schreiben, doch immerhin fand ich dort, wenn auch recht verzagt, etwas, das in die richtige Richtung geht:

    Zukunftsorientierter wäre es, die Zahl der Prüfungen zu reduzieren [und was dann weiter kommt, tut schon wieder weh]

    Bei allem Verständnis für die Zwänge der wettbewerbs-infundierten Öffentlichkeit: Zumindest mit dieser zahmen Feststellung hätte die Erklärung anfangen müssen, und wenn es geht mit „Mindestforderung“ statt des wortklingeligen und inhaltsleeren „zukunftsorientierter“. Oder besser: „Es braucht Corona nicht, um den Bologna-Prozess als menschenfeindlichen Zirkus kenntlich zu machen, aber was normalerweise nur ärgerlich ist, bringt jetzt jedenfalls potenziell Oma um.“

    Nota bene: Auch das wäre eine zutiefst reformistische Position, verglichen mit dem eigentlich angesagten „Prüfungen sind insgesamt autoritärer Quatsch.“ Aber dass eine GEW sowas nicht sagen kann, erkenne ich gerne an; den sich an so eine Deklaration anschließenden Exodus der Lehrer_innen in den Beamtenbund will eingestandenermaßen niemand haben.

    Dennoch will ich hier ein wenig für eine wie ich glaube nicht-utopische, aber doch ansatzweise fortschrittliche Kritik an Bolognadingen argumentieren, die in etwa so aussieht: Die Prüfungsbulimie, bei der Studis Semester um Semester vor allem in Klausuren und ähnlich automatisierbaren, hust, Leistungskontrollen Punkte sammeln, bis sie ihren Abschluss haben, ist weder selbstverständlich noch sinnvoll. Der wirkliche Skandal ist, dass wir den Mumpitz in den 22 Jahren seit der Bologna-Erklärung vom – dies horribilis – 19.6.1999 nicht wenigstens haben erodieren können.

    Nicht selbstverständlich

    Überraschend viele Studis schütteln heute ungläubig den Kopf, wenn ich erwähne, dass ich in meinem ganzen Physikstudium nur vier abschlussrelevante Prüfungen hatte: Es gab vier mündliche Prüfungen zum Hauptdiplom. Dazu traten vier mündliche Prüfungen zum Vordiplom, aber die waren sozusagen zum Üben und spielten für die Abschlussnote keine Rolle. Keine einzige Klausur. Nicht eine. Im ganzen Studium. Und das war zwar im letzten Jahrtausend, ist aber noch keine 30 Jahre her.

    Im Vergleich dazu dürften inzwischen bis zum Master in Physik in Heidelberg um die 40 formale Prüfungen anfallen, von den in die Abschlussnote fließenden wöchentlichen Übungsblättern und Praktikumsgesprächen und Jodelwettbewerben ganz zu schweigen (eins davon habe ich erfunden).

    Das ist, so viel dürfte unstrittig sein, für Prüfende wie Geprüfte unschön. Dennoch wäre es vielleicht hinzunehmen, wenn daraus ein nennenswerter Nutzen entstünde. Jedoch: Weder anekdotisch noch vom Inhalt etwa von Abschlussarbeiten oder frühen Veröffentlichungen her gibt es auch nur den Hauch eines Hinweises, dass die Studis heute klüger (oder meinetwegen „kompetenter“) aus dem Studium rauskämen als damals.

    Wäre es also nicht vernünftiger, weit mehr der Zeit, die Lehrende und Lernende gemeinsam verbringen, für Vermittlung und Gespräch zuzulassen statt sie für tagelanges (bei den Lehrenden) und wochenlanges (bei den Lernenden) Bütteln, Betteln und Kontrollieren zu vergeuden?

    Ich sage nun nicht, dass das Diplom-System die Wucht in Tüten war. Klar, dass sich „das Schicksal [d.i. die Abschlussnote] in wenigen Stunden entscheidet“ ist auch Unfug, genauso wie schon die Grundidee, Leuten eine Zahl aufzudrücken, die ihre, ja was eigentlich, in diesem Fall vielleicht „Physizität“ (was immer das sein mag) bescheinigt. An dieser Idee hängt jedoch so viel, dass ihre Korrektur ein doch etwas größeres Projekt ist. Und so wärs doch schon mal ein Fortschritt, erstmal weniger zu prüfen und die Knute aufs letzte Vierteljahr des Studiums zu konzentrieren; immerhin ist dann dessen Rest deutlich freier.

    Im Übrigen stimmt bei einer halbwegs menschlichen Hochschulorganisation natürlich auch das mit den „entscheidenden Stunden“ nicht wirklich. Als jemand, der ein paar Dutzend Abschlussprüfungen abgenommen hat, kann ich versichern, dass zumindest an Läden, an denen die Lehrenden die tatsächlich studierenden Studis kennen, die Note einer mündlichen Prüfung in aller Regel eine Gesamtwürdigung der Person sein wird. Um das jetzt mal vorsichtig zu formulieren.

    Nicht sinnvoll

    Nun könnte mensch sagen: Andere Jobs stinken auch – sollen sich die Hochschullehrenden nicht so haben und halt die bescheuerte Prüferei machen. Die Studis haben eh nichts zu melden.

    Vielleicht. Aber es ist doch eine schreckliche Vergeudung von Lebenszeit und Kreativität, die Studis mit Dressur und Aufführung zu beschäftigen – und wiederum habe ich genug Klausuren selbst gestellt, um ein recht sicher sagen zu können: Mach eine Klausur, die nicht auf die Aufführung von Dressur rausläuft und du hast eine Durchfallquote, die du nicht haben willst.

    Dagegen hätte ich gewettet (und wie oben gesagt verloren), dass die notendruckbedingte Demontage der Übungsgruppen, die zumindest in Physik und Mathe letztlich Herz der Lehre waren, sich drastisch auf Habitus und meinethalben Kompetenzen der Studis in der Abschlussphase (da bekomme ich sie derzeit vor allem mit) hätte auswirken müssen. Vor Bologna konnten sich in solchen Übungsgruppen Studis, die Lust drauf hatten, ohne große Sorge um spätere Konsequenzen ausprobieren – und wer nicht wollte, hat halt abgeschrieben, was immerhin soziale Fertigkeiten trainierte.

    Nun hingegen, da jede Hausaufgabe sich irgendwo in der Abschlussnote wiederfindet, haben sich die Übungsgruppen zu bitterem Ernst gewandelt, Räume, in denen um jeden Punkt gefeilscht wird, denn er könnte ja den Unterschied zwischen 1.4 und 1.5 machen (oder was immer). Und das Gemeine ist: Das könnte er wirklich.

    Speziell dieser Aspekt von Bologna, die reale und permanente Drohung mit einer schlechten Abschlussnote, lässt sich mit noch so viel Open Book oder Take Home oder was immer nicht in Ordnung bringen, nicht mal durch die guten alten Hausarbeiten und Praktikumsgespräche. Solange die Abschlussnote zwischen Betreuer_in und Studi steht, ist die in der GEW-Erklärung beschworene „Solidarität“ nicht mal denkbar.

    Es wäre ein interessantes Forschungsprojekt, herauszufinden, warum hinreichend viele Studis aus diesem Prozess nicht als intellektuelle Regenwürmer – Schlucken, Klausur schreiben, hinter sich lassen – herauskommen, sondern doch ganz motiviert reizvolle Wissenschaft machen.

    Mir ewigem Optimisten scheint das ein starkes Zeichen für die Kraft von Wissenschaft zu sein: Es ist wahrscheinlich fast egal, wie der Kram vermittelt wird. Solange mensch den Leuten ein paar Bücher (in welcher konkreten Darreichung auch immer) in die Hand gibt und sie etwas Zeit mit ihnen verbringen lässt, solange mensch sie die Faszination empfinden lässt, durch Modelle und Theorien korrekt Verhalten von Menschen, Natur oder (inzwischen noch aufregender) Rechnern vorherzusagen oder wenigstens zu verstehen, finden sie schon ihren Weg.

    Warum dann?

    Nach diesen Beobachtungen stellt sich die Frage recht dringend, wie es überhaupt zu diesem komplett dysfunktionalen System kam. Im speziellen Fall von Bologna wäre es eine lange Geschichte, in der die Beteiligten – Profen, Bildungsminister, Bertelsmänner und leider auch Teile der GEW – ihre diversen Süppchen gegen die jeweils anderen kochen wollten. Niemand wollte die anderen in den eigenen Topf gucken lassen, und als endlich alle gemerkt hatten, dass alle anderen auch nur vor leeren Töpfen standen, könnte das auch niemand mehr zugeben.

    Es gibt aber ein viel allgemeineres Muster, auf das es mir hier ankommt: Die autoritäre Versuchung. Da ist ein Problem in einer Hierarchie, hier so in etwa „Meine Studis sind faul und hören mir nicht zu”. Eine Umgangsweise wäre, sich zu fragen, warum die Studis kein Interesse – oder hilfsweise Einsichten in Notwendigkeiten – haben und zu versuchen, Interesse oder Einsicht zu wecken. Das klingt gut und ist, davon bin ich überzeugt, auch gut.

    Aber dazu muss in der Hierarchie auf Augenhöhe geredet werden, und mensch entdeckt gerne auch eigene Fehler, eigene Faulheiten. Das ist für die Leute oben in der Hierarchie nicht sehr schön, was wiederum für die Popularität der Alternative sorgt: Der Ausübung von Zwang, sei es durch Drohung mit Noten, sei es durch Drohung mit Gewalt (was jetzt an der Uni schon sehr rar, im Strafrecht oder zwischen Staaten aber die Regel ist).

    Prüfungen sind aus dieser Perspektive nichts weiter als der Versuch, Aushandlung und auch Didaktik durch Zwang zu ersetzen – daran mag manches „digital“ (hmpf: Digitalisierung) sein, solidarisch ist jedenfalls nichts, und für eine Gewerkschaft gehören sich solche Methoden eigentlich auch nicht.

    Aber die Armen?

    Wenn ich Menschen – vor allem solche aus gewerkschaftsnahen Kreisen – in Diskussionen dazu gebracht habe, so viel zu konzedieren, kommt ziemlich verlässlich der Einwand, die Verschulung durch Bologna sei ja für Oberschicht-Kids vielleicht ärgerlich, für Leute aus „bildungsfernen Schichten“ hingegen ganz wichtig. Die hätten nie gelernt, selbstgesteuert Wissen zu erwerben, ihre Zeit zu managen, aus eigener Neugier zu handeln. Ohne Druck verkämen die vor der Playstation, und sie kämen spätestens …

  • OpenSSL: get_name: no start line?

    As part of my DIY mail server project, the other day I put a POP3 server on that box – solid-pop3d if you want to know –, and since that server doesn't have SSL built in, I configured stunnel to provide that, re-using a certificate I get for mail.tfiu.de's https server from letsencrypt. Trivial configuration:

    [spop3d]
    accept=995
    connect=110
    cert=/etc/stunnel/mail.pem
    

    And bang!, an error message from stunnel:

    [ ] Loading private key from file: /etc/stunnel/mail.pem
    [!] error queue: 140B0009: error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib
    [!] SSL_CTX_use_PrivateKey_file: 909006C: error:0909006C:PEM routines:get_name:no start line
    

    One of my least favourite pastimes is figuring out cryptic OpenSSL error messages, and so I immediately fed this to $SEARCH_ENGINE. The responses were, let's say, lacking rigour, and so I thought I might use this blog to give future message googlers an explanation of what the problem was in my case.

    What OpenSSL was saying here simply was: there's no private key in the PEM.

    Where would the fun be if OpenSSL had said that itself?

    In case this doesn't immediately tell you how to fix things: “PEM files” in today's computing [1] are typically bundles of a “key” (that's the pair of public and secret key in sensible language), a “certificate” (that's a signed public key in sensible language), and possibly intermediate certificates that user agents may need to figure out that the signature on the certificate is any good, based on what certificate authorities they trust.

    All these things almost always come in base64 encoded ASCII these days (that's the actual meaning of “PEM“), which is nice because you can create your “PEM file” with cat if you've got the other parts. For instance, in my dealings with letsencrypt, I'm creating the key using:

    openssl genrsa 4096 > $SERVERNAME.key
    

    Then I build a certificiate signing request in some way that's immaterial here, and finally call the great acme-tiny something like:

    acme-tiny --account-key ./account.key --csr ./"$SERVERNAME".csr \
            --acme-dir /var/www/acme-challenge\
             > ./"$SERVERNAME".crt
    

    Letsencrypt also hands out the the intermediate certificates at a well-known URI, so I pull that, too:

    curl https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem \
            > intermediate.pem
    

    With that, all I have to do to make the “PEM file” is:

    cat $SERVERNAME.crt intermediate.pem > $SERVERNAME.pem  # not
    

    That was basically what I had in my certificate updating script, and that is what caused the error in my case. Spot it? Right, I failed to cat the key file in. I should have written:

    cat $SERVERNAME.key $SERVERNAME.crt intermediate.pem > $SERVERNAME.pem
    

    So – if you're seeing this error message, while I can't say why your key pair is missing in the PEM, I'd strongly suspect it is. Diagnosis: look for

    -----BEGIN RSA PRIVATE KEY-----

    somewhere in the file (and make sure all the dashes are present if you see something that looks like that and you're still seeing the odd OpenSSL message).

    [1]

    I've had to look that up myself: PEM actually has nothing to do with all kinds of cryptographic material cat-ed together into one file. Rather, it stands for Privacy-Enhanced Mail, something the IETF tried to establish in the early 1990ies where today (regrettably) S/MIME sits and what we could all mercifully forget if people finally just adopted PGP already.

    RFC 1421 – where a good deal of PEM is defined – was published in 1993 and still talks about BITNET! Oh wow. While this sort of PEM is dead, it did pioneer the ASCII-armoring of X.509 material. Of course, ASCII-armoring as such had been around for many years at that time – let me just mention uuencode, the cornerstone of software distribution on Usenet –, and PGP had even used base64 for crypto stuff, but all these (sensibly) steered clear of X.509.

    And ASCII-armored X.509 is PEM's legacy, as acknowledged by RFC 7468 (published in 2015, more than 20 years after the original PEM). Of course, RFC 7468 doesn't mention the .pem extension, let alone anything about the practice of assembling multiple kinds of cryptographic material in files with that extension.

  • Perhaps I should be moving to gentoo

    I'm reading PDFs quite a bit, most of them in my beloved zathura. So, I was dismayed when today I paged through a book that showed in zathura as on the left side of this figure:

    Renderings of a PDF in poppler and mupdf.

    The metrics are off so badly that readability suffers.

    Rather than try to fix the PDF, I remembered I had for a long time wanted to look into using mupdf as a backend for zathura rather than its default poppler, if only because poppler used to have a shocking amount of rather serious bugs a couple of years ago (now that I think of it: It's been a while since I last heard of any – hm).

    Bringing up the PDF in mupdf looked a lot better (the right panel in the above figure). Which then led to a bout of yak shaving, because there is a plugin for zathura that promised to do what I wanted, zathura-pdf-mupdf, but of course nobody has bothered to package it up for Debian yet. So… let's try to build it.

    It's probably not a good sign that the package's README talks about make to build the thing, whereas the web page talks about a build system with commands meson and ninja (that, frankly, I had never heard about before, but at least it's in Debian). But, never mind, let's do meson build && cd build && ninjia (oh wow).

    Of course, building fails with something like:

    ../zathura-pdf-mupdf/index.c: In function ‘build_index’:
    ../zathura-pdf-mupdf/index.c:68:7: error: unknown type name ‘fz_location’; did you mean ‘fz_catch’?
           fz_location location = fz_resolve_link(ctx, document, outline->uri, &x, &y);
           ^~~~~~~~~~~
    

    A quick web search shows that this fz_location is part of the mupdf API and has indeed undergone an API change. So, I backported libmupdf from Debian testing (I'm on Debian stable almost always), and because that needs mujs, I backported that, too. Mujs sounds a lot like javascript in PDF, and that's where I first think gentoo: with its USE flags it would proabably make it easier to just keep javascript out of my PDF rendering engines altogether. Which is something I'd consider an excellent idea.

    Anyway, with a bit of hacking around – I don't have a libmupdf-third library that the meson build file mentions but perhaps doesn't need any more – I then got the plugin to build.

    Regrettably, zathura still would not use mupdf to render, saying:

    error: Could not load plugin '/usr/lib/i386-linux-gnu/zathura/libpdf-mupdf.so'
    (/usr/lib/i386-linux-gnu/zathura/libpdf-mupdf.so:
    undefined symbol: jpeg_resync_to_restart).
    

    Again asking a search engine about typical scenearios that would lead to this failure when loading a plugin, there's quite a bit of speculation, one of it being about using libjpeg-turbo instead of libjpeg. Which made me see what this plugin links again. Fasten your seat belts:

    $ ldd /usr/lib/i386-linux-gnu/zathura/libpdf-mupdf.so
            linux-gate.so.1 (0xf7fa7000)
            libgirara-gtk3.so.3 => /usr/lib/i386-linux-gnu/libgirara-gtk3.so.3 (0xf5d23000)
            libcairo.so.2 => /usr/lib/i386-linux-gnu/libcairo.so.2 (0xf5bd3000)
            libglib-2.0.so.0 => /usr/lib/i386-linux-gnu/libglib-2.0.so.0 (0xf5a9a000)
            libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf58bc000)
            libgtk-3.so.0 => /usr/lib/i386-linux-gnu/libgtk-3.so.0 (0xf50bc000)
            libgdk-3.so.0 => /usr/lib/i386-linux-gnu/libgdk-3.so.0 (0xf4fae000)
            libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xf4f5f000)
            libgio-2.0.so.0 => /usr/lib/i386-linux-gnu/libgio-2.0.so.0 (0xf4d57000)
            libgobject-2.0.so.0 => /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 (0xf4cf2000)
            libjson-c.so.3 => /usr/lib/i386-linux-gnu/libjson-c.so.3 (0xf4ce5000)
            libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf4cc2000)
            libpixman-1.so.0 => /usr/lib/i386-linux-gnu/libpixman-1.so.0 (0xf4c12000)
            libfontconfig.so.1 => /usr/lib/i386-linux-gnu/libfontconfig.so.1 (0xf4bc5000)
            libfreetype.so.6 => /usr/lib/i386-linux-gnu/libfreetype.so.6 (0xf4b02000)
            libpng16.so.16 => /usr/lib/i386-linux-gnu/libpng16.so.16 (0xf4ac3000)
            libxcb-shm.so.0 => /usr/lib/i386-linux-gnu/libxcb-shm.so.0 (0xf4abe000)
            libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xf4a90000)
            libxcb-render.so.0 => /usr/lib/i386-linux-gnu/libxcb-render.so.0 (0xf4a81000)
            libXrender.so.1 => /usr/lib/i386-linux-gnu/libXrender.so.1 (0xf4a75000)
            libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xf4926000)
            libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xf4911000)
            libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xf48f0000)
            librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf48e5000)
            libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf47df000)
            libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xf4766000)
            /lib/ld-linux.so.2 (0xf7fa9000)
            libgmodule-2.0.so.0 => /usr/lib/i386-linux-gnu/libgmodule-2.0.so.0 (0xf4760000)
            libpangocairo-1.0.so.0 => /usr/lib/i386-linux-gnu/libpangocairo-1.0.so.0 (0xf4750000)
            libXi.so.6 => /usr/lib/i386-linux-gnu/libXi.so.6 (0xf473d000)
            libXcomposite.so.1 => /usr/lib/i386-linux-gnu/libXcomposite.so.1 (0xf4739000)
            libXdamage.so.1 => /usr/lib/i386-linux-gnu/libXdamage.so.1 (0xf4734000)
            libXfixes.so.3 => /usr/lib/i386-linux-gnu/libXfixes.so.3 (0xf472d000)
            libcairo-gobject.so.2 => /usr/lib/i386-linux-gnu/libcairo-gobject.so.2 (0xf4721000)
            libgdk_pixbuf-2.0.so.0 => /usr/lib/i386-linux-gnu/libgdk_pixbuf-2.0.so.0 (0xf46f4000)
            libatk-1.0.so.0 => /usr/lib/i386-linux-gnu/libatk-1.0.so.0 (0xf46cb000)
            libatk-bridge-2.0.so.0 => /usr/lib/i386-linux-gnu/libatk-bridge-2.0.so.0 (0xf4693000)
            libxkbcommon.so.0 => /usr/lib/i386-linux-gnu/libxkbcommon.so.0 (0xf464d000)
            libwayland-cursor.so.0 => /usr/lib/i386-linux-gnu/libwayland-cursor.so.0 (0xf4644000)
            libwayland-egl.so.1 => /usr/lib/i386-linux-gnu/libwayland-egl.so.1 (0xf463f000)
            libwayland-client.so.0 => /usr/lib/i386-linux-gnu/libwayland-client.so.0 (0xf4630000)
            libepoxy.so.0 => /usr/lib/i386-linux-gnu/libepoxy.so.0 (0xf451e000)
            libharfbuzz.so.0 => /usr/lib/i386-linux-gnu/libharfbuzz.so.0 (0xf4407000)
            libpangoft2-1.0.so.0 => /usr/lib/i386-linux-gnu/libpangoft2-1.0.so.0 (0xf43ee000)
            libXinerama.so.1 => /usr/lib/i386-linux-gnu/libXinerama.so.1 (0xf43e7000)
            libXrandr.so.2 => /usr/lib/i386-linux-gnu/libXrandr.so.2 (0xf43da000)
            libXcursor.so.1 => /usr/lib/i386-linux-gnu/libXcursor.so.1 (0xf43cd000)
            libthai.so.0 => /usr/lib/i386-linux-gnu/libthai.so.0 (0xf43c1000)
            libfribidi.so.0 => /usr/lib/i386-linux-gnu/libfribidi.so.0 (0xf43a5000)
            libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf439f000)
            libmount.so.1 => /lib/i386-linux-gnu/libmount.so.1 (0xf4333000)
            libselinux.so.1 => /lib/i386-linux-gnu/libselinux.so.1 (0xf4306000)
            libresolv.so.2 => /lib/i386-linux-gnu/libresolv.so.2 (0xf42ec000)
            libffi.so.6 => /usr/lib/i386-linux-gnu/libffi.so.6 (0xf42e2000)
            libexpat.so.1 => /lib/i386-linux-gnu/libexpat.so.1 (0xf42a5000)
            libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xf429b000)
            libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xf4296000)
            libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xf428f000)
            libdbus-1.so.3 => /lib/i386-linux-gnu/libdbus-1.so.3 (0xf4230000)
            libatspi.so.0 => /usr/lib/i386-linux-gnu/libatspi.so.0 (0xf41fb000)
            libgraphite2.so.3 => /usr/lib/i386-linux-gnu/libgraphite2.so.3 (0xf41cd000)
            libdatrie.so.1 => /usr/lib/i386-linux-gnu/libdatrie.so.1 (0xf41c3000)
            libblkid.so.1 => /lib/i386-linux-gnu/libblkid.so.1 (0xf4163000)
            libbsd.so.0 => /usr/lib/i386-linux-gnu/libbsd.so.0 (0xf4144000)
            libsystemd.so.0 => /lib/i386-linux-gnu/libsystemd.so.0 (0xf4099000)
            liblzma.so.5 => /lib/i386-linux-gnu/liblzma.so.5 (0xf406d000)
            liblz4.so.1 => /usr/lib/i386-linux-gnu/liblz4.so.1 (0xf404d000)
            libgcrypt.so.20 => /lib/i386-linux-gnu/libgcrypt.so.20 (0xf3f6a000)
            libgpg-error.so.0 => /lib/i386-linux-gnu/libgpg-error.so.0 (0xf3f45000)
    

    Now, I appreciate that glueing two pieces of relatively complex code together can be a bit involved, but: 69 libraries!? Among them Xrandr, Xinerama, wayland (which I don't use), systemd (even if I used it: what would that plugin have to do with it?), gpg-error, selinux, and then some things I've never heard about.

    I'm sorry, but this is wrong. Which makes me think hard if gentoo's USE flags might not really be the way to go in this day and age of exploding dependencies.

    Holy cow.

    In case you came here from a search engine that hit on one of the error messages: After writing this, I was hungry and let it sit. The one thing I can tell you is that the elusive jpeg_resync_to_restart is in libjpeg, indeed. What I don't know yet is why that library hasn't made it into the heap of libraries that the plugin links to.

    I'd suspect that zathura and mupdf are built against different libjegs – but then I'd have to explain how that would have happened. Hm.

    Nachtrag (2021-02-13)

    Well, I couldn't let it sit, so here's what I needed to do (and I suspect I'd have found it in one of the upstream branches):

    1. The libjpeg thing really is that the libjpeg library needs to be linked into the plugin in Debian; the details I can't quite work out, because I'd say the linker should be able to work that out, but clearly it's not, because the situation is actually being cared for in the plugin's meson file. However, you need to manually flip a switch: this would be a ./configure run in autoconf, but here, the command line is:

      meson setup --wipe -D link-external=true  build
      
    2. However, one link-time dependency is missing with the mupdf from Debian bullseye, and that's the spooky mujs. To fix this, patch the build file like so:

      diff --git a/meson.build b/meson.build
      index 23cdc6a..24929ca 100644
      --- a/meson.build
      +++ b/meson.build
      @@ -19,8 +19,8 @@ zathura = dependency('zathura', version: '>=0.3.9')
       girara = dependency('girara-gtk3')
       glib = dependency('glib-2.0')
       cairo = dependency('cairo' …
  • Vielleicht doch ein wertvolles Experiment

    Noch vor einem Jahr hatte sich kaum jemand vorstellen können, wie schnell die Staaten die Grenzen im März 2020 geschlossen haben – aber, das lässt sich hier leider wirklich nicht wegdiskutieren, im Prinzip können Bewegungseinschränkungen bei so einer Pandemie je nach Verteilung und Entwicklung schon mal nicht einfach nur atavistische Reflexe sein, und so will ich einmal nicht allzu sehr die Zähne fletschen.

    Das nun „je nach Verteilung und Entwicklung“ hat das RKI im Epidemiologischen Bulletin 8/2021 (DOI 10.25646/7955) für die Folgen der Sommerferien etwas genauer betrachtet.

    Die Ergebnisse in der zentralen Frage – letztlich: Wärs besser gewesen, wir wären alle daheim geblieten? – sind wenig überraschend, wie auch das Fazit zur Frage der Massentests für Heimkehrer_innen:

    Ein längeres Angebot zur freiwilligen, kostenlosen Testung für Reiserückkehrer hätte vielleicht die Eintragungen vor und während der Herbstferien besser erfasst, die zweite Infektionswelle aber nicht verhindert.

    Richtig bemerkenswert fand ich hingegen folgende Abbildung in dem Artikel:

    Verlauf der Inzidenzen über relative Ferientage

    Sie entstand, indem die RKI-Leute erstmal als Zeiteinheit „Tage vor oder nach dem Beginn der Sommerferien im jeweiligen Bundesland“ gewählt haben. An der Ordinate stehen die üblichen Wocheninzidenzen pro 100000 Einwohner_innen, und zwar für Fälle, für die eine Exposition im Ausland bekannt ist. Insofern ist es kein Wunder, dass die Zahlen im Laufe der Zeit hochgehen. Das muss schon allein aufgrund der gestiegenen Reisetätigkeit so sein.

    Wertvoll wird die Abbildung aber als Mahnung, bei allen Metriken immer zu bedenken, was wie gemessen wurde. Denn richtig auffallend verhalten sich hier Bayern und Baden-Württemberg scheinbar anders als alle anderen: Ihre Kurven steigen erhebnlich früher und steiler als die der anderen Bundesländer.

    Es wäre jedoch unvernünftig, anzunehmen, die Dinge hätten sich in den anderen Bundesländern in der Realität wesentlich anders verhalten (jedenfalls, soweit es die westlichen Bundesländer betrifft). Und in der Tat liefert schon das RKI die Erklärung für den Unterschied: Die Südländer hatten einfach so spät Ferien, dass ihre Reiserückkehrenden in die allgemeine Testpflicht fielen sind und mithin die Erfassung Infizierter früher in deren Krankheitsverlauf und darüber hinaus bereits bei den Indexfällen passierte.

    Ob das jetzt eine weise Verwendung von Ressourcen war oder nicht, muss ich glücklicherweise nicht entscheiden. Zumindest für die nächsten Jahre aber – solange sich die Menschen noch an die Diskussion um die Massentests im Sommer 2020 erinnern – ist diese Grafik aber, glaube ich, eine wunderbare Art, den Einfluss von Messung (und in diesem Fall von Politik) auf scheinbar unumstößliche Grafiken und Metriken zu illustrieren.

    Ich werde das beim nächsten Mensen-Ranking auspacken. Oder, wenn wieder mal das Bruttoinlandsprodukt verkündet wird.

  • Fürchten lernen 2: Ihre Reputation ist nicht verfügbar

    In Teil 2 der Saga von einem, der Mails verschicken will geht es um mailbox.org – an sich ja einer eher sympatische Firma, gerade im Vergleich zu Telekom und Vodafone. Aber, beim Einliefern:

    2021-02-08 05:52:09 1l8yWu-0006Ry-EM ** (Adresse tut nichts zur Sache)
    R=dnslookup T=remote_smtp H=mxext2.mailbox.org [80.241.60.215]
    X=TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256 CV=yes DN="C=DE,ST=Berlin,
    L=Berlin,O=Heinlein Support GmbH,OU=MBO,CN=*.mailbox.org": SMTP error
    from remote mail server after RCPT TO:<Adresse tut nichts zur Sache>:
    554 5.7.1 Service unavailable; Client host [116.203.206.117] blocked
    by RBL; http://www.barracudanetworks.com/reputation/?pr=1&ip=116.203.206.117
    

    Mit anderen Worten: Eine „Real Time Black List“ RBL fand, dass die IP nach Spam riecht, und drum darf ich nicht einliefern.

    Hu? Von dieser IP kam seit mindestens einem Jahr (also seit ich sie habe) nicht eine Mail an öffentliche SMTP-Server (von meinem Smarthost abgesehen), und schon gar nichts, was auch nur entfernt nach Spam aussah. Wie kommt die Kiste dann auf diese Blacklist? Schaun wir mal und dereferenzieren die URL. Resultat: Weiße Seite. Ach nee, soll ich denen Javascript erlauben? Gibt immer noch eine weiße Seite. Local Storage? Weiße Seite. Curl anwerfen. Nach kurzer Wartezeit kommen genau null Bytes zurück.

    Echte Profis, die barracudas. Vertrauenswürdige Treuhänder unserer Mail-Infrastruktur.

    Also gut, tippe ich halt mal barracudanetworks.com in den Browser ein (na gut, in Wirklichkeit habe ich in luakit 2gu gesagt; so viel nerd cred muss an der Stelle sein). Kommt ein animierter Security-Salespitch (yikes! Habe ich denen gerade Javascript erlaubt?), den sich niemand antun müssen sollte – „It's time to protect your business“ my ass. Und klar, google analytics ist auch gleich mit drauf.

    Wie finde ich denn jetzt raus, warum der Laden mich für einen Spammer hält? Auch mit etwas Rumklicken: nichts außer dämlichen Testimonials („The intuitive interface makes deployment simple and the bundled features combine to create a comprehensive email security solution.“).

    Und das alles nur, damit ich Mail einliefern darf?

    Tatsächlich kann mensch sich irgendwie zu barracudacentral.org durchklicken. Und da gibts dann einen Removal Request, der eigentlich aussieht wie ein Phishing-Versuch:

    Screenshot Formular

    Wozu wollen die jetzt eine Telefonnummer haben? Wozu eigentlich eine Mailadresse? Wie kann das bei der Prüfung eine Rolle spielen? Rufen die wirklich zurück? Und wenn ja: wärs nicht freundlich, wenigstens nach der Zeitzone zu fragen?

    Wenn ich den mailbox.org-Leuten nicht ziemlich arg trauen würde, wäre ich jetzt weg. Aber ich probiers mal. „Removal requests are typically investigated and processed within 12 hours of submission“ sagen die. Ich bin ja mal neugierig.

  • Das Fürchten lernen

    Nachdem ich in einer Zeit, als es üblich war, einfach von überall her Mails anzunehmen, tatsächlich mal ein ganz klassisches Sendmail betrieben habe, hatte ich seit den späten 90er Jahren nur noch Mailserver, die bei Smart Hosts eingeliefert haben, also kurzerhand alle ausgehende Mail an den gleichen anderen Server weitergereicht haben. – und umgekehrt auch alle Mails von dort bezogen.

    Im letzten Jahr allerdings hat das immer weniger funktioniert. Irgendwie scheint es, als hätten mit Corona die diversen Mail-Betreiber immer gewagtere Politiken ausgerollt, die vielleicht ein wenig Spam, vor allem aber die Zuverlässigkeit von Mail bekämpften; gleichzeitig nimmt die Bereitschaft erkennbar ab, die Weisheit dieser Politiken nochmal zu überdenken und im Fall von Fehlfunktionen zu klären, was eigentlich kaputt ist.

    Gegen die Politiken kann ich nichts tun, gegen das stille Verschlucken von Mails gibts eine Lösung: Ich muss wieder selbst einen richtigen, direkt ausliefernden Mailserver betreiben. Denn das ist ja eigentlich das Schöne an offenen Standards: JedeR kanns selbst machen.

    Allerdings: einfach einen Server aufsetzen und los gehts, das ist im kommerzialisierten Internet nur noch selten möglich (Mumble sei hier mal als löbliche Ausnahme erwähnt). Im Web zum Beispiel gehts ohne https und die damit zusammenhängenden Verrenkungen kaum noch, von den mittlerweile üblichen Labyrinthen aus Reverse Proxies und Containerfarmen ganz zu schweigen.

    Bei Mail, so scheint es, ist es noch viel schlimmer; ich hatte ja schon damit gerechnet, dass es da und dort etwas fummelig würde in Zeiten von SPF, DKIM, DANE und so fort.

    Dass es aber so schlimm ist, hätte ich nicht gedacht. Und so glaube ich, dass dieses Blog mutieren wird zu einer Geschichte von einem, der auszog, das Fürchten zu lernen – und insbesondere, warum immer weniger Leute eigene Infrastruktur betreiben und sich das Internet immer weiter zentralisiert.

    Kapitel 1: t-online.de

    Einliefern bei t-online.de:

    2021-02-07 11:27:26 1l8hHU-00087u-Mk H=mx00.t-online.de [194.25.134.8]:
    SMTP error from remote mail server after initial connection:
    554 IP=116.203.206.117 - A problem occurred. (Ask your postmaster
    for help or to contact tosa@rx.t-online.de to clarify.)
    

    Na klasse. „A problem occurred“. Auch mit richtig viel Mühe kann ich mir keine weniger Informative Fehlermeldung vorstellen.

    Duckduckgo berichtet, dass das halt einfach so ein whitelisting der Telekom ist und dass mensch den Laden freundlich bitten muss. Wie bitte? Was machen die eigentlich, wenn irgendwer aus Singapur einliefert? Erwarten die ernsthaft, dass auch so ein Laden bei ihnen anklopft?

    So kann mensch Standards natürlich auch aushöhlen.

    Aber immerhin: selbst am Samstag abend um acht antwortet jemand auf Kontaktmails – es sieht ganz so aus, als hätte die Telekom das an irgendwelche Kontraktoren ausgelagert. Und die wollen, dass an dem Mailserver ein Webserver hängt, auf dem, so sieht es aus, ein Impressum nach Medienstaatsvertrag liegen soll. Wozu? Keine Ahnung. Ich habe gefragt und keine sinnvolle Antwort bekommen. Und mit welchem Recht ein doch recht großer Laden einfach anderen Leuten Vorschriften machen will, welche Daten sie zu publizieren haben, bleibt natürlich offen.

    Tatsächlich bin ich in dem Punkt auch etwas empfindlich, denn die Hartleibigkeit, mit der die Exekutive im Medienstaatsvertrag den erklärten Willen des Bundestags aus dem Telemediengesetz auszuhebeln versucht... nun, das ist Thema für einen anderen Post.

    Na ja, zumindest für t-online.de sollte es mein alter Smarthost noch eine Weile tun; kriege ich halt weiter nicht mit, wenn da was kaputt ist.

    Mein MTA, exim4, hat auf Debian-Systemen die praktische Datei /etc/exim4/hubbed.hosts. Da steht t-online.de jetzt erstmal drin. Ich werde ein andermal über unnötige Komplexität jammern.

    Kapitel 2: arcor.de

    Einliefern bei arcor.de:

    2021-02-07 17:41:20 1l8n7d-0001gH-Qj ** <elided>@arcor.de R=dnslookup
    T=remote_smtp H=mx2.vodafonemail.de [2.207.150.241]: SMTP error
    from remote mail server after initial connection:
    554 fra1frontrelay13.vodafonemail.de ESMTP not accepting messages
    

    Was ist das jetzt schon wieder für eine Teufelei? Duckduckgo führt auf eine Forendiskussion die ein Vodafon-Mitarbeiter wie folgt beendet:

    wir befinden uns mitten in dem Umzug zu einem anderen Mailbetreiber. Die Arbeiten sind ca bis Ende Janaur [aus dem Kontext ist 2021 abzuleiten – A.] abgeschlossen.

    Ich geh davon aus, dass die Emailadresse Deiner Homepage auf einer Blacklist steht und daher von unserem Spamfilter aussortiert wird.

    Dafür kann ich zum jetzigen Stand kein technisches Ticket aufnehmen.

    Wie bitte? „Kein technisches Ticket“? Für eine doch recht drastische Fehlfunktion eines wirklich fundamentalen Internetdiensts, nämlich E-Mail?

    Au weia. Nun, kommt arcor.de halt auch erstmal in die Hubbed Hosts. Vielleicht probiere ich es Anfang März nochmal, kann ja sein, dass dann die Zeit ist für ein „technisches Ticket aufnehmen“.

    Es sieht nicht gut aus für offene Standards.

  • Brahms war ein Schurke

    Im Kalenderblatt zum 18.1.2021 heißt es (möglicherweise in erster Linie zur Rechtfertigung eines Musikteppichs): »Johannes Brahms komponierte nach den Siegen preußisch-deutscher Truppen über das französische Heer im Jahr 1870 das „Triumphlied“ opus 55.«

    Mag sein, dass ich mich als Banause oute, weil mir das neu war, aber für mich war das die zentrale Nachricht des Beitrags: Brahms hat sich in Kriegsverherrlichung betätigt, in chauvinistischem Tschingdarassabumm. Will mensch Musik von so einem Schuft eigentlich noch hören?

    Und damit gehts direkt zur Frage der Relation zwischen Werk und Schöpfer_in, die ja letztlich hinter den sinnvolleren Teilen der „Cancel Culture“-Debatte steht. Darf ich Dinge mögen, obwohl sie von Leuten gemacht wurden, deren Handlungen jetzt mal wirklich unakzeptabel sind?

    Da hängt leider viel dran. Während mir Brahms' Schmachtfetzen vielleicht nicht so fehlen würden, wäre es für mich um die Gedanken von John Searle schon sehr schade (auch wenn ich sie zu guten Stücken für... unrichtig halte); allein der Chinese Room stellt ganz viele richtige Fragen, und seine beißende Kritik des Dualismus ist zumindest mal gut geschrieben.

    Nun: Searle hat offenbar recht routinemäßig zumindest im Graubereich der Vergewaltigung gehandelt, um das mal maximal freundlich für Searle zu formulieren.

    Kann ich mich jetzt nicht mehr am Chinese Room reiben? Ich würde sehr hoffen, dass die Abwägungen, die dahin führen, nicht zwingend sind. Umgekehrt gehts nun auch nicht, dass „wir“ (oder „die Gesellschaft“) einfach achselzuckend drüber hinweggehen, im üblichen „große Männer haben halt auch ihre Schwächen“-Duktus, schon, weil Militarismus, Chauvinismus und Vergewaltigung durch regelmäßige gesellschaftliche Ächtung tatsächlich bekämpft werden können, wie trotz aller Barbarei der Gegenwart der Vergleich zwischen heute und Brahms' Zeiten klar zeigt.

    Ich fürchte, das ist ein wenig wie oft in Fragen der Ethik: es gibt nichts, das immer „richtig“ wäre, und mensch muss in jedem Einzelfall wieder rauskriegen, wie weit Werk und Schöpfer_in zusammengehen (ich sag mal Leni Riefenstahl) oder halt nicht. Klingt nach Mesoteslehre. Und wer klingt wie Aristoteles hat ja meistens Unrecht... Ach Mist.

« Seite 16 / 17 »

Letzte Ergänzungen