• 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.

  • Das letzte Bild

    Pale Blue Dot, hochgezoomt

    Das Pale Blue Dot-Bild, mit Gimps Lens Distortion ordentlich verhackstückt, damit es auch wirklich blassblau wird.

    In meinem asynchronen Radio habe ich heute Voyager 3 gehört, ein Feature über... na ja, alles mögliche, insbesondere aber die kulturellen Implikationen der Golden Records an Bord der Voyagers. Streckenweise wars großartig; manchmal sind diese freistil-Features ja offensiv langweilig, aber dann lassen mich solche Highlights doch immer an meiner (na ja, der meines Computers) Mitschneideroutine am Sonntagabend festhalten.

    In dieser Sendung gab es erstmal ein paar Genau-mein-Humor-Witze zu den Platten, etwa:

    Warum ist da nicht mehr Bach drauf? – Wir wollten nicht so angeben.

    Gefakte Durchsage der (vielleicht der NASA): Es ist nicht viel, aber es ist die erste Nachricht einer fremden Zivilisation. Vier Worte: Send more Chuck Berry.

    Natürlich sind die Golden Records selbst schon zutiefst anrührend und romatisch. Aber dann kam gegen Ende der Sendung noch etwas, das ich, nennt mich einen irren Nerd, besonders anrührend fand. Sie haben nämlich die Geschichte vom Pale Blue Dot (PBD) erzählt, nach dem Voyager 1, bevor die Kamera endgültig abgeschaltet wurde, umgedreht wurde und aus gut 40 Astronmischen Einheiten Entfernung die Erde portraitiert hat.

    Diese Geschichte kannte ich als Carl-Sagan-Fan natürlich schon, aber in dieser Darstellung klang es so, als sei der PBD das letzte Bild der Kamera gewesen, und dabei kam mir der ergreifende Gedanke: oh wow, da haben sie das Bild der Erde sozusagen in die Netzhaut der sterbenden Kamera (ihr Band) eingebrannt, und wenn dann dermaleinst Aliens die Sonde bergen, würden sie das eben diese Erinnerung an die Ursprungswelt dort noch finden.

    Leider ist das natürlich alles Quatsch. Erstens war das PBD-Bild gar nicht das letzte, das die Kamera geschossen hat, schon, weil die Kamera (wie eigentlich immer noch alle wissenschaftlichen Kameras in der Astronomie) monochrom war und es drum schon mal drei Aufnahmen gewesen wäre, aber auch, weil Voyager als Teil der Rückschau einen ganzen Haufen anderer Aufnahmen machte und so zuletzt vielleicht die Sonne oder Neptun angeschaut hat, aber nicht die Erde.

    Aber selbst wenn die Erd-Bilder die letzten gewesen wären, wären sie wahrscheinlich nicht auf dem Bandlaufwerk geblieben, denn die Voyagers nehmen ja immer noch Daten, und ich habe bis eben angenommen, dass die immer noch auf dem Bandlaufwerk zwischengespeichert werden. Allerdings berichtet hackaday, dass zumindest Voyager 1 inzwischen offenbar kein übers RAM funktioniert (beeindruckend, denn alle drei Rechner an Bord kommen zusammen gerade so über 64kB).

    Leider würde es auch nichts helfen, wenn es das PBD-Bild irgendwie geschafft hätte, trotz der weiteren Aktivitäen von Voyager 1 auf dem Band zu bleiben: Selbst bei den tiefen Temperaturen dort draußen wird die Magnetisierung des Bandes allein schon wegen der kosmischen Strahlung bald verschwunden sein. Die Aliens werden eben leider doch nicht die Erde als letztes Bild der sterbenden Kamera verewigt sehen. Schade.

    Ach übrigens: Voyager 1 steht übrigens gerade im Schlangenträger. Ganz einsam. Was auch eine gewisse Romantik hat, denn im Schlangenträger steht auch der einsamste Stern am Himmel.

  • Reparaturgesetz zur Bestandsdatenauskunft

    Am Donnerstag hat der Bundestag die nächste Etappe im Marathon des Grundrechteabbaus genommen: ein Gesetz, das die Missachtung der Grundrechte aus diversen anderen Gesetzesvorhaben durch Weitertreiben zu heilen versucht. „Ich habe mir den Ringfinger abgesägt. Schneide ich mir noch den kleinen Finger ab, dann wird es bestimmt besser.”

    Konkret hatte das Bundesverfassungsgericht im vergangenen Mai bemängelt, wie nonchalant Behörden seit den 2013er Änderungen in Telekommunikationsgesetz (TKG) und Telemediengestz (TMG) allerlei Daten über Telekommunizierende – das umfasste durchaus auch PINs und PUKs, auch wenn das offenbar vielen Polizist_innen nicht klar war – von den Telekommunikationsunternehmen bestellen durften. Regierung und Parlament hatten nämlich befunden, es brauche dazu nicht mehr als im Wesentlichen einen Zuruf. Proponenten dieses dreisten Übergriffs hatten damals ernsthaft argumentiert, das sei ja im Groben wie im Telefonbuch nachsehen und brauche drum auch keinen stärkeren Schutz.

    Im Juni 2020 war sich der Bundestag dann nicht zu schade, nochmal dreistere Regeln – vor allem den ganz konkreten Anspruch aufs Rausrücken von Passwörtern – abzunicken, nämlich das „Gesetz zur Bekämpfung des Rechtsextremismus und der Hasskriminalität“. Wohlgemerkt: in Kenntnis der Argumentationen des Verfassungsgerichts, das genau diese Sorte von Generalermächtigung (aber leider auch nicht arg viel mehr) kritisiert hatte. Und offensichtlich ohne alle Bedenken wegen der semantischen Nähe von „Hasskriminalität“ zu „Gedankenverbrechen“.

    Das war sogar Bundespräsident Steinmeier, der als ehemaliger Dienstherr des BND sicher nicht als Aushängeschild menschenrechtlicher Prinzipientreue taugt, zu viel, und er verweigerte die Unterschrift unter die „Hasskriminalität“.

    Vor diesem Hintergrund kam nun dieses „Reparaturgesetz“, das die Spirale noch etwas weiter dreht; ein Muster, das von der „Anti-Terror“-Datei bekannt ist. Nach jedem Rüffel aus Karlsruhe genehmigt der Bundestag der Regierung eine noch krassere Version der verfassungswidrigen Regelung.

    Und das, finde ich, ist ein guter Anlass, nochmal den Stand der Dinge anzusehen, bevor er durch Dutzende Kilobyte Grundrechtsbarock (die am eigentlichen Verstoß natürlich fast nichts ändern) unkenntlich wird. Bevors losgeht, will ich kurz erwähnt haben, dass es noch reichlich Einzelgesetze gibt, die die Zugriffsrechte auf die Daten, um die es hier geht, nochmal speziell regeln, also etwa der Vorratsdatenspeicherungs- und Funkzellenabfrageparagraph §100g StPO oder Regelungen in den Polizeigesetzen der Länder, die nochmal betonen, dass die diskutierten Daten auch fair game sind, wenn noch gar nichts passiert ist („Gefahrenabwehr“). Deren Funktion ist aber nicht, die in TKG und TMG formulierten Zugriffsrechte einzuhegen. Fast immer versuchen diese Gesetze, Verhältnismäßigkeitserwägungen auszuhebeln, die ansonsten die Nutzung der Tk-Daten durch die Polizei verbieten würden – und das klappt ja in der Regel auch ganz gut, weil niemand so viele dieser autoritären Machwerke wegklagen kann wie die Parlemente durchwinken.

    Bestandsdaten

    ...werden in §14 Abs 1 TMG definiert als Daten, die für „die Begründung, inhaltliche Ausgestaltung oder Änderung eines Vertragsverhältnisses zwischen dem Diensteanbieter und dem Nutzer über die Nutzung von Telemedien erforderlich sind“.

    Absatz 2 erlaubt breit („Straftaten und Ordnungswidrigkeiten“) die Nutzung dieser Daten zu präventiven und repressiven Zwecken durch allerlei Polizeien und Geheimdienste. Darin ist auch das in seiner Komposition preiswürdige „zur Abwehr von Gefahren des internationalen Terrorismus oder zur Durchsetzung der Rechte am geistigen Eigentum“ enthalten.

    Während in dem Bereich die Abfrage auf Zuruf stattfand, war bei zivilrechtlichen Ansprüchen (insbesondere auch nach lex facebook, dem „Netzwerkdurchsetzungsgesetz“) eine Anordnung durch ein Landgericht vorgesehen.

    Mindeststandards für die Bestandsdaten werden in §111 TKG gesetzt [1]. Zu erfassen hat der Diensteanbieder (DA) nämlich:

    1. die Rufnummern und anderen Anschlusskennungen,
    2. den Namen und die Anschrift des Anschlussinhabers,
    3. bei natürlichen Personen deren Geburtsdatum,
    4. bei Festnetzanschlüssen auch die Anschrift des Anschlusses,
    5. in Fällen, in denen neben einem Mobilfunkanschluss auch ein Mobilfunkendgerät überlassen wird, die Gerätenummer dieses Gerätes sowie
    6. das Datum des Vertragsbeginns

    – und zwar auch dann, wenn er diese Daten gar nicht braucht. §111 TKG ist übrigens auch, was seit ein paar Jahren die unselige Ausweispflicht beim Kauf einer SIM-Karte begründet.

    Für den Zugriff auf diese Daten können Polizeien und Geheimdienste zwischen zwei Verfahren wählen.

    Erstens können sie (wie viele andere Behörden) den Umweg über die Bundesnetzagentur (BNetzA) gehen. Dazu schreibt §112 TKG („automatisiertes Auskunftsverfahren“) vor, dass die BNetzA in den Dateien des DA so recherchieren kann, dass der DA nicht merkt, was die BNetzA da so tut – ich wäre mal neugierig, ob es dazu wirklich technische Maßnahmen gibt oder ob diese Vertraulichkeit auf dem Erhebet-die-Herzen-Prinzip beruht.

    §112 Abs. 2 listet dann im Großen und Ganzen den gesamte Staatsapparat (insbesondere natürlich alle Polizeien und Geheimdienste) auf als anfrageberechtigt bei der BNetzA, und da der Abs. 1 erlaubt, auch mit unvollständigen Daten abzufragen, können all diese Behörden etwa „Daten von Leuten aus Wattenscheid, die 1982 geboren wurden“ bestellen; das ist ziemlich klar offiziell so gedacht, jedenfalls dem leicht verschämten „nicht benötigte Daten löscht [die anfragende Stelle] unverzüglich“ nach zu urteilen. Dass in irgendeinem Ministerium wer meinte, diese Datenschutz-Tautologie überhaupt ins TKG reinschreiben zu müssen, ist in ganz eigener Weise bezeichnend.

    Der andere Weg, um an Daten über Tk-Nutzer_innen zu kommen, ist das manuelle Auskunftsverfahren nach §113 TKG, das nur Polizeien und Geheimdiensten offen steht (und damit z.B. nicht der BaFin, die in §112 noch explizit eingeschlossen ist). Dabei reden die Behörden direkt mit den DAen. Erwähnenswert dabei, dass diese nach §113 Abs. 4 TKG ihren Kund_innen nicht sagen dürfen, was alles über sie, die Kund_innen, an die Behörden gegangen ist. Warum, so mögt ihr fragen, würde sich irgendwer die Arbeit machen, manuell anzufragen, wenn es doch auch das automatische Verfahren gibt? Nun, die automatischen Abfragen geben nicht mehr als die oben aufgeführten sechs Punkte. Im manuellen Verfahren kommen auch Bankverbindungen, Tarifdetails und überhaupt alles, was die DA so speichern dazu.

    Insbesondere, und das hat das BVerfG ganz wesentlich bewegt, die ganze Norm zu verwerfen, sieht der beanstandete 113er vor:

    Dies [Auskunftspflicht] gilt auch für Daten, mittels derer der Zugriff auf Endgeräte oder auf Speichereinrichtungen, die in diesen Endgeräten oder hiervon räumlich getrennt eingesetzt werden, geschützt wird. [...] Für die Auskunftserteilung nach Satz 3 sind sämtliche unternehmensinternen Datenquellen zu berücksichtigen.

    – beides Regelungen von atemberaubender Eingriffstiefe, an denen der Gesetzgeber, wenn auch mit kleinen Einschränkungen hinsichtlich der Anlässe, am Donnerstag festgehalten hat.

    Also: Die Regierung möchte gerne deine Passwörter bekommen können. Dass das technisch kompliziert ist, da nun hoffentlich in etwa jede_r Passwörter gar nicht mehr speichert (sondern nur deren Hashes), besorgt sie offenbar nicht.

    Der 113er spricht aber auch über Verkehrsdaten; die gehören zur zweiten Kategorie, die im TMG aufgemacht wird:

    Nutzungsdaten

    ...werden in §15 Abs. 1 TMG definiert das das, was es braucht um „die Inanspruchnahme von Telemedien zu ermöglichen und abzurechnen“. Im Gegensatz zu den Bestandsdaten, die erst im TKG konkretisiert werden, ist der Gesetzgeber bei diesen schon im TMG etwas präziser, denn er will „insbesondere“

    1. Merkmale zur Identifikation des Nutzers,
    2. Angaben über Beginn und Ende sowie des Umfangs der jeweiligen Nutzung und
    3. Angaben über die vom Nutzer in Anspruch genommenen Telemedien

    unter Nutzungsdaten verstanden wissen – das ist wohl Erbe des Furors um die Vorratsdatenspeicherung, zumal im Zeitalter von Flatrate oder Volumentarif von all dem normalerweise nicht mehr viel übrigbliebe.

    Eine spezielle Sorte Nutzungsdaten (und die eigentlich saftigen) sind Verkehrsdaten nach §96 TKG, nämlich:

    1. die Nummer oder Kennung der beteiligten Anschlüsse oder der Endeinrichtung, personenbezogene Berechtigungskennungen, bei Verwendung von Kundenkarten auch die Kartennummer, bei mobilen Anschlüssen auch die Standortdaten [zu denen in §98 TKG noch mehr zu lesen ist],
    2. den Beginn und das Ende der jeweiligen Verbindung nach Datum und Uhrzeit und, soweit die Entgelte davon abhängen, die übermittelten Datenmengen,
    3. den vom Nutzer in Anspruch genommenen Telekommunikationsdienst,
    4. die Endpunkte von festgeschalteten Verbindungen, ihren Beginn und ihr Ende nach Datum und Uhrzeit und, soweit die Entgelte davon abhängen, die übermittelten Datenmengen,
    5. sonstige zum Aufbau und zur Aufrechterhaltung der Telekommunikation sowie zur Entgeltabrechnung [die in §97 genauer geregelt ist] notwendige Verkehrsdaten.

    §96 Abs 1 TKG klingt dann ziemlich streng: „Im Übrigen sind Verkehrsdaten vom Diensteanbieter nach Beendigung der Verbindung unverzüglich zu löschen.“ Allerdings ist das Nicht-Übrige etwas wie Entgeltabrechnung – die nach §97 (3) TKG Speicherung bis zu sechs Monaten rechtfertigt –, Marketing bei entsprechender Einwilligung und insbesondere „andere gesetzliche Vorschriften“; gemeint ist natürlich die Vorratsdatenspeicherung, geregelt in §113b (der derzeit nicht angewandt wird, da ja die Vorratsdatenspeicherung mehrfach höchstrichterlich als groteske Missachtung von Grundrechten erkannt wurde).

    Jandl-Gedichte

    2021: Gesetze ähneln immer mehr konkreter Poesie.

    Und hier kommen wir zum vom BVerfG angemäkelten §113 TKG zurück, der nämlich vorsieht, dass sich Behörden in diesem manuellen Verfahren auch die 96er-Daten bei den DAen abholen können. Das gilt für alle Tk-Unternehmen, die mit über 100000 Kund_innen müssen sogar eine „gesicherte elektronische Schnittstelle“ bereitstellen. Immerhin: die Polizei kann noch nicht frei in den Datenbanken der DAen recherchieren: „Dabei ist dafür Sorge zu tragen, dass jedes Auskunftsverlangen durch eine verantwortliche Fachkraft auf Einhaltung der in Absatz 2 [im Wesentlichen: Textform, es geht um Straftaten oder Ordnungswidrigkeiten, und Absender ist Polizei oder Geheimdienst] genannten formalen Voraussetzungen geprüft und die weitere Bearbeitung des Verlangens erst nach einem positiven Prüfergebnis freigegeben wird“ (§113 Abs. 5 TKG).

    Und jetzt?

    Soweit erkennbar, tut das am Donnerstag abgenickte Gesetz alles, um den hier umrissenen (und vom BVerfG als unhaltbar erkannten) Zustand zu erhalten und zu vertiefen. Wer den Entwurf in Bundestagsdrucksache 19/25294 ansieht, erkennt das Muster: Ab Seite 5 wird über 30 Seiten genauer ausgeführt, was die alte Regelung „auf …

  • Es waren die Läden

    Na gut, und/oder die Schulen. Meine Vorhersage vom 16.1. jedenfalls, nach der sich der damas fast zwei Wochen alte Abwärtstrend bei der Intensivbelegung (als hierzulande einzige halbwegs zuverlässige Maßzahl fürs Infektionsgeschehen) in etwa in der Folgewoche nach oben wenden würde, war falsch. Die fallende Intensivbelegung setzt sich fort, plusminus exponentiell mit einer Halbierungszeit von gut sechs Wochen:

    Plot: Gerade in Log/log

    (die Achsen wären ähnlich wie am 16.1., aber darauf kommts mir hier nicht an).

    Nachdem vor drei oder vier Wochen zumindest anekdotisch und von hier aus gesehen nicht viel mehr Heimarbeit lief als vor Weihnachten, bleibt dann wohl nur der Schluss, dass meine Überzeugung, Ansteckungen fänden vor allem in den Betriebe und beim Berufspendeln statt, falsch war – während sich die Schätzung von einer Verzögerung von rund drei Wochen zwischen Ansteckungen und Intensivzahlen wohl als recht robust erweist.

    Denn dann reflektiert die Wende von wachsender zu fallender Intensivbelegung vom 4.1. ziemlich klar die weitgehende Schließung der Läden und Schulen rund um den 16.12. Schade, dass beides wieder so parallel lief, denn so bleibt es schwierig, rauszufinden, was dann was ausgemacht hat.

    Und: Dann war der große Ausbruch Anfang Dezember wirklich das Weihnachtsshopping? Tödlicher Konsum my ass.

  • Antisprache: Digitalisierung

    Wenn Menschen miteinander reden, kann das verschiedene Gründe haben. Sie können gemütlich plaudern, sie können sich beschimpfen, sie können versuchen, sich Kram zu verkaufen – sie können aber auch einen Diskurs führen, also Ideen austauschen, entwickeln oder kritisieren. Für die letztere Funktion ist eine Sprache sehr hilfreich, die klar und präzise ist, in der insbesondere Begriffe nachvollziehbare „Signifikate“ (also Mengen von bezeichneten „Objekten der Anschauung oder des Denkens”) in der wirklichen Welt haben.

    Oft genug aber haben Sprecher_innen genau an Klarheit und Präzision kein Interesse – ganz besonders, wenn von oben nach unten kommuniziert wird. Herrschaft funktioniert besser, wenn den Beherrschten nicht ganz so klar wird, dass ihr Wille, ihre Interessen, im Hintergrund stehen. Dann sind plötzlich Begriffe hilfreich, die Gedanken verwirren, nicht klären, die Informationen nicht übertragen, sondern zerstreuen. „Globalisierung“ ist ein Beispiel oder auch „Arbeitgeber“, „Verantwortung“ „Terrorismus“ oder „Lernzielkontrolle“ sind weitere.

    Für Begriffe, die so funktionieren, bin ich irgendwann mal auf den Begriff Antisprache gekommen: So wie Antimaterie und Materie, zusammengebracht, zu Strahlung reagieren, reagieren Antisprache und Sprache zu... ach, ich hätte jetzt gerne „Verstrahlung“ gesagt, weil es so gut passt, aber nein: letztlich Verwirrung.

    Das Stück Antisprache, das (vielleicht gemeinsam mit „Populismus“) in den letzten paar Jahren die steilste Karriere genommen hat, ist „Digitalisierung”. Der Begriff ist fast nicht kritisiert worden, jedenfalls nicht aus der Perspektive, was das eigentlich sei und ob das, was da alles drunter fallen soll, überhaupt irgendwie zusammengehört. Ich kann mal wieder nicht lügen: eine Motivation für dieses Blog war, mal öffentlich dazu zu ranten.

    Tatsächlich gehören die unzähligen Dinge, die unter „Digitalisierung” subsumiert werden (die „Extension des Konzepts“ sagt der Semantiker in mir) nämlich schlicht nicht zusammen. Noch nicht mal „halt was mit Computern“ umfasst, sagen wir, Automatisierung in der Industrie, Habituierung der Menschen an extern kontrollierte Ausspielkanäle von Medien und Waren („smartphones“, „smart TVs“), Rechnernutzung in Bildung und Ausbildung, Ausweitung des Netzzugangs, Sensoren aller Art in politischer und sozialer Repression, die Wikipedia, Dauererfassung von Herzfrequenz und Körpertemperatur, Open Access in der Wissenschaft und „autonome“ Autos (was wiederum nur ein kleiner Ausschnitt von dem ist, was mit „Digitalisierung“ schon so bemäntelt wurde. Weil ja da eben auch tatsächlich freundliche und nützliche Dinge dabei sind, taugt auch nicht mein zeitweiser Versuch einer Definition: „Digitalisierung ist, wenn wer will, dass andere Computer benutzen müssen“.

    Wenn das alles nichts miteinander zu tun hat, warum würde jemand all diese Dinge in einen Topf werfen wollen, einmal umrühren und dann „Digitalisierung“ draufschreiben? Und warum kommt das Wort eigentlich jetzt, wo eigentlich so gut wie alles, was von Rechnereinsatz ernsthaft profitiert, schon längst computerisiert ist?

    Wie häufig bei Antisprache verbinden sich da verschiedene Interessen, und am Anfang steht meist ein letztlich politisches Interesse an Tarnung. Wer „Digitalsierung“ sagt, definiert Rechnereinsatz als Sachzwang, und das ist saubequem, wenn mensch mit Leuten redet, deren Arbeit dabei verdichtet wird, die enger überwacht werden, ihr Einkommen verlieren oder ganz schlicht keinen Lust haben, noch ein Gerät um sich zu haben, von dem sie nichts verstehen. „Digitalisierung“ klingt wie etwas, das passiert, nicht wie etwas, das wer macht.

    Ein Hinweis darauf, dass „Digitalisierung“ etwas mit der Durchsetzung von EDV-Einsatz gegen unwillige Untergebene zu tun haben könnte, liefert übrigens auch, dass der Begriff im deutschen Sprachraum so groß ist (und warum es etwa auf Englisch kein „digitisation“ in vergleichbarer Rolle gibt): es gibt hier ein vergleichsweise breites Bewusstsein für Datenschutz (gelobt sei der Volkszählungsboykott der 1980er!), und je klarer jeweils ist, was Leute jetzt mit Computern machen sollen, desto mehr Widerstand gibt es.

    Die Rede von „Digitalisierung“ kann also auch verstanden werden als die Reaktion der verschiedenen Obrigkeiten auf das (vorübergehende?) Scheitern von elektronischen Gesundheitskarten und Personalausweisen, auf regelmäßige Rückschläge bei Kameraüberwachung an der Bäckereitheke und Tippzählerei im Bürocomputer.

    Die Erleichterung der Durchsetzung „unpopulärer Maßnahmen“ (mehr Überwachung, mehr Komplikation, abstürzende Kühlschränke) durch Vernebelung der tatsächlichen Gründe und Interessen ist ein generelles Kriterium von Antisprache. Wo scheinbar kein realer Akteur etwas durchsetzt, sondern ein unerklärbarer Zeitgeist weht, müssen auch diese „Maßnahmen” nicht mehr begründet werden. Ganz besonders drastisch ist das derzeit in den Schulen, denn eigentlich weiß niemand so recht, was dort mit Computern in der Schule anzufangen wäre – jenseits von „wir machen in Physik einen Zeitlupenfilm und berechnen aus den Einzelbildern Momentangeschwindigkeiten“ habe ich da bisher noch nicht viel Glaubhaftes gehört. Na ja, ok, und dann halt noch jetzt gerade als Videotelefone, aber das hat natürlich außerhalb einer Pandemie für keine_n der Beteiligten Sinn.

    „Digitalisierung“ hat, wie viele andere Antisprache auch, einen Booster, nämlich die trojanische Semantik. Dabei wird Kram, den wirklich keine_r will, mit einer Hülle von Populärem umgeben. Beispielsweise ist „Digitalisierung“ in den Hirnen vieler Menschen mit dem (für sie) positiven Gedanken an ihr Mobiltelefon und die vielen schönen Stunden, die sie mit ihm verbringen, assoziiert.

    Wer nun offensiv stromkundenfeindliche Technik wie zeitauflösende Stromzähler („smart meter“) durchsetzen will, kann auf weniger Widerstand bei den künftigen Opfern hoffen, wenn sie diese „smart meter“ in einer Wohlfühl-Bedeutungswolke von TikTok und Tinder einhergeschwebt kommen. Sie sind nicht ein Datenschutz-Disaster, die kommen mit der Digitalisierung, sie sind doch nur ein kleiner Preis, den du für die tollen Möglichkeiten zu bezahlen hast, die dein Smartphone dir bietet.

    Das gehört auch etwas zur oben gestellten Frage, warum das Gerede von „Digitalisierung“ gerade dann so anschwoll, als eigentlich alles, was Rechner sinnvoll tun können, schon von ihnen erledigt wurde: Wenn die Branche weiter wachsen will, dürfen ihre Kund_innen noch weniger als zuvor danach fragen, wozu der autonom nachbestellende Kühlschrank eigentlich gut ist. „Digitalisierung“ wäre dann die schlichte Ansprache: Frage nicht nach dem Warum, denn alle machen jetzt Digitalisierung, und wenn du das nicht machst, bist du ein Bedenkenträger, der bald ganz furchtbar abgehängt sein wird.

    Ganz falsch ist das bestimmt nicht. Aber auch nicht die ganze Wahrheit, wofür ich neulich einen wunderbaren Beleg gefunden habe. Und der ist so toll, der ist Material für einen anderen Post.

  • An Xlib-based Screen Ruler in Python

    In my bad prediction (in both senses of the word) on what we'll see in the intensive care stations I've mentioned a screen ruler I've written.

    Well, since I've still not properly published it and I doubt I'll ever do that without further encouragement, let me at least mention it here. It's pyscreenruler.

    Nachtrag (2024-02-24)

    Actually, I have put it on codeberg now: https://codeberg.org/AnselmF/pyscreenruler.

    I've written it because all the other screen rulers for X11 I found in Debian (and a bit beyond) would only let you measure either horizontal or vertical lines. I, however, needed to measure slopes, as in this part of the curve for the SARS-2 patient count in German critical care stations:

    Plot: curve with a ruler

    – which, by the way, shows that, surprisingly to me, our patient numbers still go down exponentially (if slowly, with a halving time of almost two months). Hm. But today's point is pyscreenruler, which is what has produced the ruler in that image.

    When I wrote this last November, I quickly found Tkinter (which is what I still usually use to write quick graphical hacks) doesn't really support shaped windows – and anything but shaped windows would, I figured, be extremely painful here. Plain Xlib would make the shaping part relatively straighforward. So, I based the thing directly on the Xlib even for the remaining code.

    That brought forth fond memories of programs I wrote on Atari ST's GEM in the late 1980ies. For instance, with the explicit event loop; on the left code from November 2021, on the right code I touched last in March 1993 (according to the time stamp):

    def loop(self):                     void event_loop(watch *clstr)
       drag_start = False               { [...]
       while 1:
           e = self.d.next_event()        do
                                           { event =  evnt_multi(
           if e.type==X.DestroyNotify:        MU_MESAG|(clstr->on?MU_TIMER:0),
               sys.exit(0)                      2,0x0,1, [...]
                                              if (event&MU_MESAG)
           elif e.type==X.Expose:               handle_message(pipe,clstr);
               [...]                          if (event&MU_TIMER)
           elif e.type==X.KeyPress:             updclck(clstr);
               [...]                       }
           elif e.type==X.ButtonPress:     while(1);
               [...]                    }
    

    I'd not indent C like on the right any more.

    For the record, Xlib's next_event call looks simpler that GEM's evnt_multi because you configure all the various parameters – what events to listen for, timeouts, and so forth – in other calls.

    Oh, the contortions one has to go through to have updates when a part of the window is exposed (I'm playing it simple and just use offscreen pixmaps)! Or the fact that the whole thing will (I think) not run on displays with 8 and 16 bits of colour. Or the (seemingly) odd behaviour of programs if you do not at least implicitly wait for the window to be mapped (in actual pyscreenrules, I sidestep the problem by deferring all painting to the screen to the expose handler). And X won't tell you about mapping unless you ask for it. And so on. Note to self: Next time you write an Xlib program, let Christophe Tronche remind you of the various little quirks before hacking off.

    Anyway: If you need a rotatable ruler, install the python3-xlib package (that's really all it needs), download pyscreenruler, make it executable and start it. If you click and drag in the inner half of the ruler, you can move it around, if you click and drag on the outer parts, you can rotate the thing (which you can also do by hitting + and -).

    What's missing: Well, I could imagine letting people change the length of the thing (shift-drag on the edges, perhaps?), then giving length and angle in text somewhere. And it's thoroughly pixel-based right now, which it shouldn't be when there's displays with 200 dpi and more out there.

    Send mails and/or patches to make me properly fix it up. Since I've really missed it, I could even imagine packing it up for Debian...

  • Monströse Drohungen

    Titelseite des TPNW

    Heute ist ein historischer Tag. Denn endlich – nach über drei Jahren Ratifizierungsprozessen in verschiedenen Ländern – tritt der Atomwaffenverbotsvertrag TPNW in Kraft. Ab heute bricht Völkerrecht, wer Nuklearwaffen baut, besitzt oder mit ihrem Einsatz droht.

    Da sich die Bundesregierung nicht nehmen lässt, Atombomen werfen zu können („Nukleare Teilhabe“), denkt sie natürlich nicht dran, das auch zu unterschreiben. Der viel beschworene „Multilateralismus“ bedeutet aber, dass der Deutschlandfunk gerade nicht recht hat, wenn er heute meldet der TPNW sei in Kraft, „aber nicht in Deutschland“. Klar gilt er. Der Regierung ist nur der Bruch des Völkerrechts opportun.

    Wie furchtbar das wirklich ist, ist mir neulich wieder klar geworden, als ich nämlich „The Doomsday Machine“ von Daniel Ellsberg gelesen habe. Ellsberg, der mit den Pentagon Papers Anfang der 70er das dichte Propagandagebäude rund um den Vietnamkrieg zum Einsturz gebracht hat, hat in den 1950er und 1960er Jahren bei der RAND Corporation (quasi der originale „Think Tank“) für die US-Luftwaffe Atomkriegsplanung gemacht, und allein die Einblicke in die Ränke rund ums Pentagon lassen es wie ein Wunder erscheinen, dass der Atomkrieg noch nicht stattgefunden hat. Andererseits macht die Charakterisierung des damaligen Ministers Robert McNamara als zumindest im Vergleich eher besonnen Hoffnung, dass die politische Kontrolle des Militärs vielleicht nicht ganz so kaputt ist, wie mensch seit Eisenhowers Warnung vor dem militärisch-industriellen Komplex hätte meinen können.

    Was Ellsberg aber auch sehr gut macht: Er zeichnet nach, wie es überhaupt zu der selbst für Militärverhältnisse monströsen Idee gekommen ist, Städte des Kriegsgegners mitsamt all den dort wohnenden Leuten zu zerstören – einerseits aus der Kriegsführung verschiedener faschistischer Mächte, angefangen von italienischen Kolonialkriegen über Guernica bis Coventry. Und andererseits aus kühlen Sachzwängen, denen sich im Groben niemand mit auch nur ein wenig Herz oder Ethik entgegengestellt hat, denn auch im zweiten Weltkrieg stellte sich schon bald heraus, dass Präzisionsschläge eine Mär sind.

    Klar, es ist nicht viel netter, im Machtkampf (und was anderes sind Kriege halt ganz schlicht nicht) Soldat_innen zu töten. Aber von denen gibts schon mal viel weniger als vom Rest der Menschen, und die Soldat_innen könnten ja immerhin davonlaufen (was übrigens das Problem von Kriegen auf die denkbar eleganteste Weise lösen würde). Jedenfalls: Die Bombardierung gegnerischer Städte gehört schon so zu den ganz großen Widerlichkeiten (und nein, ich bin da nicht sehr über Dresden besorgt; speziell dazu empfehle ich aber Slaughterhouse Five des großartigen Kurt Vonnegut).

    Nuklearwaffen haben nun keinen plausiblen anderen Zweck als das Plätten von Städten und das Töten von deren Bevölkerungen – selbst in der verqueren Logik der Militärs gibt es kein militärisches Ziel, das Sprengkräfte im Megatonnenbereich brauchen würde. Der einzige ernsthafte Vorschlag, der da jemals vorgebracht wurde, war das Stoppen einer vorrückenden Armee, und das ist ganz offensichtlich etwas, das zuletzt so um die 1815 in den napoleonischen Kriegen ernstzunehmen war.

    Nein: Wer Atomwaffen hat, droht mit der Einäscherung gegnerischer Städte. So einfach ist das. Unsere Regierung tut das. Das ist ein Skandal. Und drum bin ich dankbar, dass der unermüdliche Friedensratschlag Heidelberg heute eine Demo für die Ratifizierung des TPNW in Heidelberg angemeldet hat. Ich war, trotz Regen, gerne dabei.

  • Ein Jahr ohne Terry Jones

    Heute vor einem Jahr ist Terry Jones gestorben (habe ich auf sofo-hd erfahren). Allein für die Regie beim ewigen Klassiker Life of Brian gedenke ich seiner gerne. Wofür ich ja jetzt dieses Blog habe.

    Die 1a Blasphemie, die Alien-Szene, die scharfsichtige Darstellung OECD-kompatibler Pädagogik („So 'eunt' is...?“ mit einem Schwert am Hals) und die gekonnte Verarbeitung der abgedroschenen Klischees der Historienschiken rund um Ben Hur würde eigentlich schon für eine Aufnahme des Films in den Olymp großer Kunst reichen.

    Vor allem aber sollte der Film Pflichtlektüre linker Aktivist_innen sein. Wer nämlich lange genug in linken Grüppchen unterwegs war, wird in eigentlich jeder Szene Vertrautes erblicken, ohne das wir, glaube ich, alle schon ein ganzes Stück weiter wären. Der blinde Hass zwischen Judean People's Front und People's Front of Judea, das „this calls for... immediate discussion“ statt einfach mal vor die Tür zu gehen (und der folgende Paternalismus), der zumindest mal alberne Versuch, patriotische Gefühle für eine (vielleicht) fortschrittliche Idee einzuspannen („What have the Romans ever done for us?“), das gegenseitige Abmetzeln über Fragen, die sich vernünftige Menschen gar nicht stellen würden („we were here first“ unter Pilatus' Palast), sinnlose Opferbereitschaft aus einem Bedürfnis nach größtmöglicher Reinheit heraus („We are the Judean People's Front. Crack suicide squad.“ vor dem Massenselbstmord), die große (autoritäre) Versuchung, einer „Bewegung“ anzugehören („Yes, we are all different!“) und so fort: Fast alles, was es an Irrsinn gibt, der (glücklicherweise nicht nur) fortschrittliche Kämpfe lähmt, findet sich in diesem Film.

    Mein Tipp: Jeden Karfreitag mal reinschauen.

    Was ich bisher nicht wusste: Den Film gibts überhaupt nur, weil Ex-Beatle George Harrison eingesprungen ist, als die ursprüngliche Produktionsfirma nach dem Lesen des Skripts den Geldhahn zugedreht hatte (vgl. rational wiki, der noch ein paar weitere Geschichten dazu hat).

    Die Welt ist klein.

  • Großes Leid, Große Verwirrung

    Das Gerede von „Arbeitsplatzverlusten“ fasziniert mich in seiner Absurdität immer wieder: an sich wärs ja erfreulich, wenn wir den Krempel, den wir verbrauchen wollen, auch mit weniger Arbeit herstellen könnten. Das stoßseufzende „Endlich Freitag“, das die ARD derzeit freitags nach der Tagesschau sendet, demonstriert gut, dass auch im Wesentlichen der Rest der Welt Lohnarbeit nur bedingt für angenehm hält.

    Heute morgen hat im Deutschlandfunk der Familienminister von NRW (der, vielleicht etwas überraschend in diesem Amt, auch stellvertretender Minsterpräsident ist), auf dies Umkehr von Mittel und Zweck noch eins draufgelegt:

    Was aber auch noch mal wichtig ist, das möchte ich ausdrücklich betonen, auch für das Vertrauen in der Bevölkerung, ist, dass die Gruppen, die jetzt hier unter dem Lockdown am meisten leiden, weil sie ihre Berufe nicht ausüben können...

    Also... die schlimmsten Leiden im Lockdowns sind in der Welt von Joachim Stamp ein paar freie Wochen, zumal in Jobs, die jetzt mal garantiert keinen Spaß machen: Kellnern, Tresendienst im Fitness-Studio, so Zeug halt. Uiuiui.

    Klar wären die ernsthaften Probleme dieser Leute – ihre Existenzängste – einfach durch verlässliche Versorgung und längerfristig eine vernünftige Verteilung der Lasten und Früchte der Produktion zu lösen. Ich nehme Leuten wie Stamp aber ab, dass diese einfache und eigentlich offensichtliche Tatsache schlicht jenseits ihrer Gedankenwelt ist. Schade eigentlich.

  • Ausbrüche von Prüderie

    Ich lese gerade Bill Brysons „Mother Tongue“, ein Buch über, nun, die englische Sprache. Darin schreibt er: „Soon after Shakespeare’s death, Britain went through a period of prudery of the sort with which all countries are periodically seized”.

    Buchcover

    Bildrechte beim Verlag

    Nun bin ich jederzeit bei inklusiver Sprache dabei (und kann das belegen, denn der UNiMUT hatte schon 1993 komplett das hohe I), und ich fand es klasse, als 2015 „Geflüchtete“ das Wort wurde, das nette Leute statt „Flüchtling“ sagten. Aber ich muss zugeben, dass ich diese sprachlichen Konventionen immer vor allem als Statement gegen Rechts gesehen habe (und angesichts der Reaktionen der Reaktion funktioniert das ja auch prima). Der fast religöse Furor, mit dem viele durchaus nette Menschen Wörter bekämpfen (oder umgekehrt als konstitutiv für Linke etablieren wollen) allerdings scheint mir oft die Grenze zu überschreiten, an der gute Ideen zu Mitteln von Exklusion und Identitätsbildung werden. Und eben von Sorten von Prüderie, weshalb ich Brysons Beobachtungen von 1989 zumindest bemerkenswert fand.

    So schreibt er etwa: „But the greatest outburst of prudery came in the nineteenth century when it swept through the world like a fever. It was an age when sensibilities grew so delicate that one lady was reported to have dressed her goldfish in miniature suits for the sake of propriety“. Ich weiß, wenn sich Männer über „sensiblities“ von anderen Leuten unterhalten, ist es ein wenig wie wenn Autofahrer_innen Straßenplanung machen. Aber ich vermute trotzdem, dass ich nicht mehr „trigger warning“ werde hören können, ohne an bekleidete Goldfische zu denken.

    Und übrigens: Es ist höchst unfair, den Ausbruch des Prüderie-Fiebers Victoria... Hannover? Saxecoburgotsky? – naja, Königin Viktoria von England halt – anzulasten. Denn: Thomas Bowdler, der mit seiner Reinigung von Shakespeares (in der Hinsicht ohnehin für die Periode recht zahmen) Werken von Kraftausdrücken das Wort „bowdlerise“ geprägt hat, hat sein Hauptwerk 1818 und mithin ein Jahr vor Victorias Geburt vorgelegt.

« Seite 17 / 18 »

Letzte Ergänzungen