Stranger Than Usual

Feedbackemails

Früher, noch zu Zeiten meines Rails-Blogs, hatte dieses Blog eine Kommentarfunktion. Die wurde allerdings nur am Anfang genutzt und recht schnell von Spambots gefunden und missbraucht. Ich habe die dann erst einmal abgeschaltet, um sie später, mit Honeypotfeldern für die Spambots, wieder zu aktivieren. Im selben Jahr allerdings noch bin ich auch meinen static site generator umgestiegen, und da war dann ein Kommentarfeld einfach nicht mehr möglich.

Ich hatte diese Funktion nie ernsthaft vermisst, aber ein kleiner Zweifel nagte doch an mir: Was ist, wenn jemand wirklich einen wichtigen Hinweis zu einem meiner Artikel hat? Was ist, wenn ich mangels Kommentarfunktion vielleicht die Lösung für das in einem Blogpost beschriebene Problem verpasse? Was, wenn ich einen Fehler gemacht habe, den ich unbedingt korrigieren muss? Eine Möglichkeit für Feedback oder eine Kontaktmöglichkeit wäre schon nicht schlecht. Ich könnte meine Emailadresse hinterlegen, aber dann kriege ich vielleicht wieder Unmengen an Spam (Die Phishing-Mail vom Freitag war übrigens Zufall und hat nichts mit diesem Post hier zu tun. Trotzdem ist sie ein gutes Beispiel).

Email-Obfuscation to the rescue

Jetzt bin ich im März über einen Blogpost zur Email-Obfuscation auf Websites gestoßen. Der Autor stellt hier viele Obfuscation-Techniken vor, sowohl für die Emailadresse im Text als auch für die Adresse in einer email:-URL in einem <a>-Tag. Er hat auch untersucht, wie viele Scraper er mit einer jeweiligen Technik abwehren konnte. Das war selbst bei simplen Techniken immer erstaunlich viel.

Nun habe ich aber ein paar Bedingungen an eine Email-Obfuscation auf meiner Website:

  1. kein Javascript – damit fallen die wirksamsten Methoden weg
  2. keine Server-Interkation: dadurch kann ich zum Beispiel keine Weiterleitung auf eine Emailadresse machen
  3. die Methode muss barrierefrei sein: ich will keine „irgendwas ÄT example.com“-Adressen, die meine Nutzer dann selber zusammensetzen dürfen. Ich möchte auch keiner Bilder meine Emailadresse verwenden, die die Leute dann selber abtippen müssen.

Ich habe mich für eine Kombination aus zwei Techniken entschieden: erstens habe ich die Emailadresse URL-encodiert (das heißt die Bytefolge der Adresse durch %xy ersetzt, wobei xy eine zweistellige Hexadezimalzahl ist). Zum anderen habe ich die ganze URL als HTML-Entitäten der Form &#<unicode-number>; ersetzt. So wird zum Beispiel aus der Adresse some+one@example.com zunächst

%73%6f%6d%65%2b%6f%6e%65%40%65%78%61%6d%70%6c%65%2e%63%6f%6d

Ich habe noch einen Betreff hinzugefügt, die komplette URL sähe dann so aus:

mailto:%73%6f%6d%65%2b%6f%6e%65%40%65%78%61%6d%70%6c%65%2e%63%6f%6d?subject=%f0%9f%92%a4

Das dann noch in HTML-Entitäten encodiert, sieht so aus:

&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#55;&#51;&#37;&#54;&#102;&#37;&#54;&#100;&#37;&#54;&#53;&#37;&#50;&#98;&#37;&#54;&#102;&#37;&#54;&#101;&#37;&#54;&#53;&#37;&#52;&#48;&#37;&#54;&#53;&#37;&#55;&#56;&#37;&#54;&#49;&#37;&#54;&#100;&#37;&#55;&#48;&#37;&#54;&#99;&#37;&#54;&#53;&#37;&#50;&#101;&#37;&#54;&#51;&#37;&#54;&#102;&#37;&#54;&#100;&#63;&#115;&#117;&#98;&#106;&#101;&#99;&#116;&#61;&#37;&#102;&#48;&#37;&#57;&#102;&#37;&#57;&#50;&#37;&#97;&#52;

Jetzt sollte man meinen: Das ist doch keine große Sache, das wird doch sicher ein einfacher HTML-Parser auflösen. Nun, grundsätzlich ja. Das ist, warum so eine URL im Browser wunderbar funktioniert. Anscheinend sind die meisten Scraper jedoch sehr simpel aufgebaut und machen so etwas nicht. Absolut sicher ist das natürlich nicht, aber meine Spamfilter können den Rest hoffentlich erträglich klein halten. Die Adresse, die ich hier im Blog nutze, ist ein Alias zu meiner Posteo-Adresse und ich verwende sie nur hier. Wenn der Spam zu viel wird, lösche ich die Adresse einfach und füge hier eine neue ein, so dass die Scraper von Vorne beginnen können.

Der Nachteil: die URL ist so deutlich länger, was auch meine HTML-Dateien größer macht. Bei einer niedrigen zweistelligen Anzahl sowohl auf der Startseite als auch auf der Archivseite ist das aber ertragbar.

Kommentiert!

So, jetzt hoffe ich dass ich auch gelegentlich Kommentare bekomme. Die werde ich dann in irgendeiner Form hier einfügen (wenn ich möchte). Vielleicht bringe ich auch dediziertes HTML für die Kommentare zurück. Die alten Kommentare sind nämlich nicht gelöscht, sondern liegen hier noch im Repo und warten darauf, wieder angezeigt zu werden. Vorerst werde ich aber Kommentare wohl einfach in einem Update des Blogposts verwursten.

Ich habe bei den Email-Links immer einen Betreff eingefügt. Den könnt ihr wenn ihr Kommentieren wollte gerne nach belieben Ändern, ich wollte nur vermeiden, Emails ohne Betreff zu bekommen.

Ich plane auch, irgendwann so etwas wie eine Kontaktseite und vielleicht ein paar andere statische Seiten einzuführen. Aber einfach Kommentarlinks unter meine Blogposts zu hauen war jetzt erst einmal die einfachste Option.

Pfandautomaten

Das muss so eine hamburger Sache sein, denn außerhalb von Hamburg ist mir das noch nie untergekommen: Welcher hirnverbrannte Idiot ist auf die Idee gekommen, die Pfandautomaten von Supermärkten außerhalb des eigentlichen Marktes aufzustellen?

Man betritt also den Supermarkt mit Pfandglas in der Tasche, füllt seinen Korb mit Sachen, findet aber den Pfandautomaten nicht. Man fragt nach. Die Angestellte Person sagt: „Der ist draußen“. Man muss dann also zur Kasse gehen, seine Sachen kaufen, das Leergut aus der Tasche holen (da sollen ja schließlich die Einkäufe rein), dann mit den Armen voll Leergut zu den Pfandautomaten (wobei unweigerlich etwas herunterfällt und zerbricht), nur um dann den Supermarkt wieder zu betreten, einmal komplett durch den Markt zu laufen (diese Einrichtung passiert irgendwie nur bei großen Supermärkten) und noch einmal an der Kasse anzustehen, um die 1,05 € Pfand zu bekommen.

Stellt. Die. Verdammten. Automaten. In. Den. Laden!

(feeling of being watched)

Ich habe mal wieder ein Kunstprojekt gemacht. Dieses Mal war die Grundidee: Ich nehme konzentrische Kreise und einen Punkt. Der Punk (dargestellt als kleiner Kreis) bewegt sich durch das Bild, und die Kreise verschieben sich in Richtung des Punktes weg vom Zentrum, wobei sich der äußerte Kreis nicht bewegt. Und je näher der Punkt an einem Kreis ist, desto größer ist die AUslenkung der Kreise. Bei meinem ersten Versuch habe ich darauf geachtet, dass die Kreise nie ihren jeweils äußeren Kreis verlassen. Die Ergebnisse sind schon über ein MiB groß, deswegen packe ich es nicht in diesen Blogpost, ich habe zwei Animationen auf Pixelfed veröffentlicht.

Das sah dann so sehr nach Augen aus, dass ich all-in auf Augen gegangen bin. Ursprünglich wollte ich beliebig viele Etagen von Kreisen mache, aber dann habe ich nur noch drei Kreise und Farben genommen. Ein weißer, äußerer Kreis als Augapfel, darauf ein farbiger Kreis in typischen Augenfarben als Iris und dann ein kleiner Kreis, die Pupille. Außerdem sollte der Fleck (Kreis), dem die Augen folgen, sich durch die Gegend bewegen, von den Rändern des Bildes und von den Augen abprallen.

Viele Augäpfel mit verschiedenen Augenfarben auf schwarzem Hintergrund blicken in die Richtung eines kleinen weißen Kreises in der linken Hälfte des Bildes. Je weiter ein Auge von dem Fleck entfernt ist, desto weniger intensive schaut es in Richtung des Kreises.

Ich habe das Ganze konfigurierbar gemacht, man kann verschiedene Bildgrößen, die Anzahl der Animationsschritte und auch die Entfernungsfunktion, wie sehr sich die Pupillen verschieben (linear oder sigmoid) einstellen. Ich musste auch noch einen Bug beheben, dass die Einfalls- und Austrittswinkel auch korrekt waren. Aber das Ergebnis ist schön, ich habe ein 5-Minuten-Video davon habe ich auf einer Peertube-Instanz hochgeladen. 1080p, ist auch im Vollbildmodus ganz schön anzusehen.

Was kommt jetzt noch? Ich könnte das zum Beispiel eine leichte, zufällige Abweichung bei jedem Abprallen einbauen. Vor allem aber versuche ich gerade, die Animation als SVG-Animation zu basteln. Grundsätzlich funktioniert das auch, allerdings ist es sehr schwierig, die Bewegung der Augen und die Bewegung des Flecks miteinander zu synchronisieren. Die Unterschiede zwischen verschiedenen Browsern sind auch groß, zu meinem Leidwesen muss ich gestehen, dass Firefox hier viel weniger effizient ist als Chromium. Die Dateigröße (unkomprimiert) ist nicht viel kleiner als die der Rasteranimation, komprimiert geht es aber richtig klein. Wenn ich das noch hinkriege, schreibe ich vielleicht noch einmal was dazu.

Der Code dazu (natürlich in Rust) ist auf Codeberg (kein besonders schöner Code, zugegeben). Der Name des Projektes ist ein (unwichtiges) Zitat aus Undertale, aber abgesehen davon hat es nichts mit Undertale zu tun.

Update: Reaktionen

Ich wollte das eigentlich schon gestern schreiben, habe es aber vergessen. Ich habe die Animationen schon privat einigen gezeigt, die Reaktionen gingen von „die Augen sind schon ein bisschen creepy“ über „👀“ bis hin zu:

Vll spielen die ja auch Ball

[…]

Ich war ja nie gut in Fußball, aber wenn ich das angucke, merke ich doch, dass gewisse Sachen von meiner Zeit im Verein sich eingebrannt haben - ich guck das an und denke "warum stehen die alle rum und gucken dem Ball hinterher - positioniert euch sinnvoll zum Passen!"

Frühlingsgerüche

Ich wurde mal gefragt, auf welchen Sinn (von sehen, hören, schmecken, fühlen und riechen, ich weiß, dass es mehr Sinne gibt) ich am wenigsten verzichten wollen würde. Die meisten in der Runde wählten das Sehen oder das Hören. Ich wählte das Riechen. Einige der Anderen waren zunächst etwas erstaunt, also erklärte ich es:

Riechen bestimmt einen hohen Teil meiner Lebensfreude. Mit Gerüchen verbinde ich noch mehr Emotionen als mit Musik. Das können natürlich Gerüche von leckerem Essen sein. Aber zum Beispiel der Geruch von einer einfachen Dosensuppe, hinterlegt mit den typischen Gerüchen eines Campingplatzes im Frühling? Wunderbar.

Ob es der charakteristische Geruch einer geliebten Urlaubsgegend (Südfrankreich, die Gegend um die Ardèche) ist, der Charakteristische Geruch der Ruhr (der eigentlich eher schlammig riecht, ich verbinde damit aber viele Erinnerungen), der Geruch von leicht feuchtem Laub im Herbst, der Petrichor bei Regen nach heißen Sommertagen, der typische Geruch der Natur ein einem heißen, schwülen Sommertag oder die blühenden Bäume und Büsche im Frühling… Ohne all das wäre mein Leben deutlich ärmer.

Deswegen mag ich auch den Winter so ungern. Denn im Winter rieche ich hauptsächlich Abgase. Von Autos, von Heizungen, von Holzöfen. Die Autoabgase sind im Sommer zwar auch da, aber wenn die gerade nicht da sind, gibt es gute Gerüche. Die gibt es im Winter nicht. Außerdem habe ich im Winter häufiger die Nase zu.

Tabakqualm ist für mich noch schlimmer als die meisten anderen Qualmsorten. Parfums müssen dezent sein, der oft übermäßige Gebrauch von Deosprays ist mir ein Gräuel. Seife und Shampoos sollten möglichst wenig riechen (ich nehme jetzt die Allergikershampoos. Nicht weil ich Allergiker bin, aber weil dort keine Parfums drin sind). Warum zur Hölle muss das alles parfümiert sein? Der Geruch von Sonnencrème ist auch nervig, besonders, wenn er andere, angenehme Gerüche überdeckt (wobei ein bisschen Sonnencrèmegeruch durchaus auch Sommergefühle bei mir auslöst).

Zum Thema Gerüche überdecken: Man kann Gestank nicht mit mehr Geruch überdecken. Wenn man versucht, seinen Schweißgeruch mit Unmengen Deo zu überdecken (Deo hilft, wenn man es vor der Geruchsbildung aufträgt), stinkt man nach Schweiß und Deo (und glaubt mir, ich finde das Deo schlimmer). Man kann Zigarettenqualm (oder den Gestank, der sich nach regelmäßige Rauchen festsetzt) nicht durch Duftbäumchen, Parfums oder Duftkerzen loswerden.

Und Gerüche ziehen teilweise weit. Was Raucher nicht verstehen: Wenn sie an einer offenen Tür rauchen, zieht der Rauch oft nach innen. Und zwar gerne durch das Ganze Gebäude, wenn er nicht durch Türen aufgehalten wird. Je nach Wind- und Wetterlage reicht es auch nicht, 20 Meter entfernt von der Tür zu rauchen. Der Rauch zieht trotzdem in das Gebäude. Und ich rieche das. Ich rieche das wirklich. Und nur weil bei den Rauchern die Geruchszellen in der Nase schon so weit abgestorben sind, dass sie das nicht mehr riechen können heißt das nicht, dass ich den Rauch nicht rieche.

Ein Frühlingsspaziergang

Nun sind mir gestern Abend und heute Morgen schon die Frühlingsgerüche, inbesondere die von blühenden Straüchern und Bäumen, aufgefallen. Entschuldigung an alle, die dagegen allergisch sind und für die das die Hölle ist, aber für mich ist das der Himmel. Ich habe heute einen langen Spaziergang im Grünen gemacht und die Gerüche genossen.

Ein unbefestigter Weg, der nach links abbiegt. Links und rechts sind im Vordergrund Büsche, dahinter Bäume. Im Hintergrund sind mehr Bäume in verschiedenen Frühlingsfarben (hellgrün, rot, weißlich), zwischen denen Teile von Häusern erkennbar sind. Die Pflanzen, insbesondere die Bäume, stehen noch nicht in vollem Laub. Der Himmel ist bewölkt.

Das Wetter war großartig, auch wenn es auf dem Foto eher düster aussieht (es hat später ein bisschen getröpfelt). Aber die Geruchskomposition war erstklassig. Ich habe noch nicht herausgefunden, welche Pflanze diesen Honiggeruch verbreitet, aber ich habe ihn genossen.

Wenn ihr also keine Allergiker seid: Geht mal raus, in den Park oder einen nahegelegenen Wald, oder zu Feldern und Wiesen. Spaziert durch die Gegend, schnüffelt ein bisschen herum, und schaltet die eventuell laufende Musik oder den Podcast mal ab und konzentriert auch ganz auf die Gerüche.

Vermutlich hat das nicht auf alle Menschen einen ähnlich starken Effekt wie auf mich, aber es ist trotzdem einen Versuch wert.

deleteduser.com

Daten löschen ist schwierig. In relationalen Datenbanken eine Zeile zu löschen ist zum Beispiel nicht immer möglich, ohne einen ganzen Haufen von Zeilen in anderen Tabellen zu löschen, die sich auf die eigentlich zu löschende Zeile beziehen. Diese anderen Zeilen will man aber vielleicht nicht löschen, weil sie noch gebraucht werden.

Beispiel: In einem Onlineshop, an dem ich mal mitentwickelt habe, haben sich Bestellungen auf ein Benutzerkonto bezogen. Wenn jetzt jemand das Konto löschen wollte, konnten wir nicht einfach die Bestellungen mitlöschen, weil die aus rechtlichen Gründen ein paar Jahre bestehen bleiben mussten. Der eigentliche Fehler war also, die Buchhaltungsteil der Bestellungen so eng an den Account zu koppeln.

Aber den Fehler zu kennen half nicht, es war ein altes System und wir mussten mit dem arbeiten, was wir hatten. Also wurden alle Daten des Benutzeraccounts mit Dummy-Daten überschrieben und der Account auf „inaktiv“ gestellt. Für alle Datenbankabfragen war es dann so, als würde der Account nicht existieren. Es gab damit noch ein paar Schwierigkeiten, die sind hier aber nicht relevant.

Jedenfalls scheinen wir mit diesem Problem nicht allein zu sein: Anscheinend machen es viele Konzerne und Websites ähnlich. Nur, dass sie zum Beispiel die Emailadresse mit irgendwas@deleteduser.com überschreiben und ansonsten nicht viele Anstalten machen den Account zu deaktivieren. So kam es, dass jemand, der sich die Domain deleteduser.com (und ein paar ähnliche Domains) registriert hat, plötzlich haufenweise Emails mit teilweise sensiblen Daten bekommt. Und sich teilweise mit diesen Emailadressen noch ein neues Passwort geben lassen kann um dann zu sehen, dass nicht nur der Account nur halbherzig deaktiviert wurde, auch wurden sensible Daten (wie z.B. Kreditkartennummern) nicht gelöscht.

Das eigentliche Problem ist nichts Neues. Schon vor 26 Jahren hat sich jemand die domain donotreply.com reserviert und massenhaft Emails von Menschen bekommen, die auf „do not reply“-Adressen geantwortet haben. Die besten dieser Antworten hat er online gestellt. Leider gibt es die Seite nicht mehr, aber auch archive.org gibt es eine archivierte Version.

Was lernt man daraus?

  • Wenn ihr wirklich irgendwo Dummy-Emailadressen nutzen müsst, nutzt eine Domain, die euch gehört.
  • Wenn ihr persönliche Daten (oder anderweitig sensible Daten) löschen müsst, es aber technisch nicht könnt, sorgt dafür dass ihr sie wenigstens durch Mülldaten ersetzt. Das ist sowohl ethisch als auch rechtlich verpflichtend.
  • Menschen achten oft nicht darauf, dass sie eine Email nicht beantworten sollen (diese Menschen sind übrigens nicht dumm, sie nutzen nur eine Funktion ihres Email-Clients, die sie sonst auch verwenden).

Vorratsdatenspeicherung III

Ein altes Sprichwort sagt: „Wenn du merkst, dass du ein totes Pferd reitest, besorge dir eine bessere Peitsche“. Oder so ähnlich.

Die Bundesregierung hat jetzt einen Gesetzesentwurf zur Vorratsdatenspeicherung beschlossen. Weil die letzten beiden Vorratsdatenspeicherungen ja so gut gelaufen sind. Waren halt nur verfassungswidrig. Aber hey, aller guten Dinge sind drei!

Dieses ist die Argumentation nicht Terrorismus, sondern… ah, der Kampf gegen Internetkriminalität. Und dann werden einfach mal anlasslos drei Monate lang alle IP-Adressen und Ports gespeichert.

Aber hey, vielleicht kann man diese Daten dann ja an eine „KI“ füttern und die erzählt einem dann, wie man das Problem mit dem Klimawandel löst oder so. Keine Ahnung. KI ist ja im Prinzip Magie, wenn man seine Wünsche nur eindrücklich genug formuliert, werden sie schon wahr werden.

Dasselbe gilt wohl auch für Gesetze: Wenn ich nur oft genug das gleiche verfassungswidriges Gesetz beschließe, ist es vielleicht beim dritten Versuch nicht mehr verfassungswidrig.

Speisekarten hinzufügen

Nach den Bombenerfolgen Support für Drogenhändlerringe und LISTE DER IMMOBILIENSUCHE FALLEN LASSEN jetzt der neue Hit:

Speisekarten hinzufügen

Zu finden in der Android-Entwickler-Doku. Im englischen Original: „Add menus“. Ich vermute mal, dass auch das irgendwann behoben wird.

Interessanterweise habe ich dieses Mal keine offizielle Anmerkung gefunden, dass der Artikel maschinell übersetzt wurde. Ich vermute trotzdem, dass das der Fall war.

Gefunden habe ich das mal wieder über Mastodon.

Rollenspielszenen: Feuerballreichweite

Rollenspielszene. Die Infiltration der Hobgoblinfeste mit Hilfe eines Illusionszaubers ist fehlgeschlagen. Glücklicherweise haben wir mehrere Ablenkunsmanöver vorbereitet. Soris, in Stinktiergestalt, stiftet Chaos in der Küche. Prattle teleportiert sich mit ein paar Tricks hinter die Goblinfestung und macht sich unsichtbar. Mavas lenkt (wenig erfolgreich) auf einem Ross ein paar Goblins und Worge ab. Lin'quel zaubert Haste auf sich selbst, rennt zur Festung hoch und weicht dabei verschiedensten Geschossen aus, während Therith ihm von hinten mit dem Bogen den Rücken deckt.

Prattle entdeckt mit einem Spähzauber (ein Papierdrache) die gesuchten Amulette in einer Schatulle, und schleicht sich im allgemeinen Chaos in die Festung, deren Tor Lin'quel mit einem Feuerball aufgesprengt hat. Die Goblins bemerken erst, dass ein Unsichtbarer durch ihre Festung läuft, als dieser sich die Schatulle schnappt. Noch mehr Chaos, während die Goblins Mehlsäcke heranschleppen um die Fußspuren von Unsichtbaren zu entdecken und die Hobgoblins sie davon abhalten müssen, diese nicht in der Nähe der brennenden Torüberreste zu entleeren.

Lin'quel tritt den Rückzug an. Ein Hobgoblinzauberwirker, der bisher nur hilflos ein paar ungezielte Zauber verschossen hat, wirft einen Feuerball nach ihm. Lin'quel wird zwar nicht direkt getroffen, nimmt aber genug Schaden, um die Kontrolle über seinen Haste-Zauber zu verlieren und ist für ein paar Augeblicke betäubt.

Mavas, der mittlerweile seine Verfolger erledigt hat, sieht Lin'quel zu Boden gehen und prescht im Gallop zu seiner Rettung. Der Hobgoblinmagier wirft einen zweiten Feuerball nach Lin'quel. Dieser, mittlerweile schwer verletzt, sieht Mavas ankommen. Sein Rückzug ist gesichert, also kann er sich noch ein bisschen rächen:

Wenn ich in Feuerballreichweite bin, ist der auch in Feuerballreichweite.

Er macht eine arkane Geste, während sich die Blutstropfen aus seinen Wunden sammeln und sich in einen zweifach verstärkten Feuerball verwandeln. Der Hobgoblinmagier und die Toranlage hinter ihm gehen in einer Explosion unter.

Alternative Arithmetik

Im dystopischen Roman 1984 von George Orwell ist eine der Strategien, wie die Partei die Macht behält, die Kontrolle der Realität der Menschen. Selbst etwas falsches zu denken ist ein Verbrechen. Es wird sogar an einer Sprache, „Neusprech“ gearbeitet, in der es unmöglich sein soll, unerwünschte Gedanken auch nur auszudrücken.

Eines der Beispiele, dass im Buch genannt wird, ist 2 + 2 = 4. Und wenn die Partei sagt, dass 2 + 2 = 5 ist, dann ist das so, und die Menschen sollen es mit voller Überzeugung glauben. Trotzdem sollen sie, wenn es für ihre Aufgaben nötig ist, weiterhin an 2 + 2 = 4 glauben. Das wird in Neusprech als „Doppeldenk“ bezeichnet: Die Fähigkeit, zwei widersprüchliche Informationen im Kopf zu halten und beide für wahr zu erachten.

Dieses Beispiel sollte wohl darstellen, wir absolut grundlegende Wahrheiten komplett verdreht werden können. Und ich habe es immer für eine dystopische Übertreibung gehalten. Bis Robert Fucking Kennedy Junior neulich in einer Senatsanhörung allen ernstes behauptet hat, dass es mehrere Arten gibt, Prozentrechnung zu betreiben und in einer davon sei eine Reduzierung von 600 Dollar auf 10 Dollar 600%.

Allein die Tatsache, dass Politifact sich dazu genötigt sah, zu dieser Aussage einen Faktencheck zu machen (Ergebnis: natürlich „Pants on Fire“) sagt eigentlich schon alles. Nämlich das wir jetzt Faktenchecks brauchen, um offensichtliche, objektive Falschaussagen über FUCKING ARITHMETIK bloßzustellen. Wir sind natürlich noch nicht auf 1984-Niveau, schließlich darf man diese Faktenchecks noch machen. Aber eigentlich sollte so eine Aussage den Gesundheitsminister sofort für irgendein Amt disqualifizieren.

Vor zehn Jahren hatte ich nichts bis kaum etwas über Donald Trump gehört. Wenn mir damals jemand gesagt hätte, dass zehn Jahre später der US-Präsident ein Klimawandelleugner wäre, hätte ich mich nicht gewundert. Wenn mir jemand gesagt hätte, dass der US-Gesundheitsminister ein Impfleugner sein wird, hätte ich mich auch nicht gewundert. Wenn mir aber jemand gesagt hätte, dass der US-Gesundheitsminister auf einer Senatsanhörung diese abgedrehte 600%-Rechnung des US-Präsidenten offiziell verteidigt, hätte ich diese Person für verrückt erklärt.

Jetzt erkläre ich mich selber für verrückt. Ich verstehe schon seit Jahren die Welt nicht mehr, und es wird nicht besser. Das alles ist doch nicht normal! Wir dürfen uns nicht daran gewöhnen, dass das normal wird, sonst wird es normal.

PS: Meine Vermutung ist, dass Kennedy mit der kaputten Prozentrechnung nur verhindern wollte, dass er die Frage von Senatorin Warren beantworten musste, warum ein Medikament, dass in Trumps ach so tollem, um 600% reduzierten Onlineshop 200 $ kostet, als Generikum bei Costco für 16 $ erhältlich ist.

Soßenerfolg

2014 habe ich in meinem damaligen Kochprojekt Spargel mit holländischer Soße gemacht. Damals hatte ich Hilfe. Seitdem habe ich mehr oder weniger jedes Jahr versucht, die holländische Soße alleine hinzukriegen. Aber sie war nie richtig cremig, immer zu flüssig.

Schwierig daran, das Rezept richtig zu lernen war, dass ich eigentlich nur etwa ein Mal im Jahr überhaupt versuche, diese Soße zu machen. Bis ich es dann wieder versuche, habe ich längst vergessen, was ich anders machen sollte als beim vorherigen Mal. Aber dieses Jahr habe ich es endlich geschafft:

Ein Teller, auf dem drei Stangen Spargel und eine kleine Kartoffel liegen, mit einer Soße bedeckt.

Ein wichtiger Unterschied zu meinem damals aufgeschriebenen Rezept: Ich habe den Weißwein und das Eigelb zuerst schon schaumig geschlagen, und erst dann im Wasserbad unter Rühren erhitzt. Der Rest ist identisch.

Spargel schälen kann ich hingegen immer noch nicht wirklich gut.

Rollenspielszenen: Summen

Rollenspielszene: Nini das Ziri und Sprinkle der Orren sind angeheuert worden, um bei der Suche nach einem versteckten Schatz zu suchen. Dummerweise haben ein Haufen Scawn ebenfalls Wind von dem Schatz bekommen und den Rassimelarchäologen Cory entführt, der ihnen bei der Schatzsuche helfen soll.

Mitten in der Nacht schleicht sich Nini an das Lager der Scawn an, um Cory zu befreien. Nini kann dank eines Zaubers im Dunkeln sehen, die Scawn nicht. Nini ist noch kleiner als die Scawn. Nini hat sich mit Dreck eingerieben, um schlechter sichtbar zu sein. Nini ist nicht mehr als ein Schatten in der Dunkelheit. Nini ist cool! Nini beginnt, eine Actionmusik zu summen, um ziener Coolheit Ausdruck zu verleihen.

Die Scawn, die Cory bewachen, wundern sich über die Actionmusik und entdecken Nini. Innerhalb kürzester Zeit ist das halbe Lager auf den Beinen.

Käsekuchenkarte

Ich hatte gestern Abend eine Rollenspielrunde. Perfekte Gelegenheit um etwas zu backen. Da einer der Spieler Veganer ist und ich einige Wochen vorher auf Mastodon auf ein veganes Käsekuchenrezept gestoßen bin, habe ich einen Käsekuchen gebacken. Um die Vorfreude anzufeuern habe ich ein Foto gemacht und in die Signal-Gruppe geposted.

Ein Käsekuchen in einer Springform, von oben fotografiert.

Dieses war der erste Streich, doch der zweite folgt sogleich!

Schritt 2: Ein Bildausschnitt

Dann bin ich auf eine Idee gekommen. Inspiriert dazu hat mich „Alternative Moons“. Um die Idee umzusetzen brauchte ich aber erst einmal einen Bildausschnitt mit nur dem Käsekuchen:

Ein ellipsenförmiger Ausschnitt des Käsekuchens von oben. Der Rahmen ist nicht mehr zu sehen, nur noch der Käsekuchen

Schritt 3: Vollmond

Im nächsten Schritt habe ich das Kuchenbild in Graustufen umgewandelt. Es sieht ein bisschen wie der Mond aus, oder?

Derselbe Bildausschnitt wie vorhin, aber in Graustufen

Schritt 4: Farbe

Ein Mond ist schön und gut, aber mein Ziel ist eine Weltkarte. Vielleicht für eine Fantasywelt oder so. Ich habe ein bisschen mit der „select by color“-Funktion von Gimp herumgespielt und das Wasser vom Land getrennt. Beim Land habe ich dann die Grauwerte invertiert, damit es auf beiden Seiten dunkle Flächen gibt. Den Ozean habe ich dann blau, die Landfläche bräunlich eingefärbt.

Derselbe Bildausschnitt wie vorhin, aber ein großer Teil der Fläche ist jetzt in Blautönen, der Rest in Brauntönen. Es sieht aus wie eine Weltkarte mit Ozean, einem Kontinent und ein paar Inseln.

Schritt 5: Mehr Farbe

So ganz einfarbig ist der Kontinent langweilig. Ich habe noch ein bisschen mit der Auswahlfunktion von Gimp herumgespielt und eine Teilauswahl des Landes genommen, die ich stattdessen grün eingefärbt habe. Die braunen Flächen halten sich jetzt in Grenzen, setzen aber Akzente.

Dieselbe „Weltkarte“ wie vorhin, aber die Landflächen sind jetzt größtenteils in Grüntönen. Hier und da gibt es aber auch bräunliche Flächen.

Ich habe die Bilder in voller Größe auf Pixelfed.de geposted.

HTTP 3

HTTP 3. Eigentlich ist die Schreibweise „HTTP/3“, aber mich irritiert das immer. Wie soll man das denn aussprechen? „HTTP geteilt durch drei“? Oder „HTTP oder drei“? Warum ist da ein Schrägstrich?

Ist ja auch egal. Zu HTTP 3 gibt es unterschiedliche Meinungen. Auf der einen Seite gibt es Leute, die meinen, HTTP 3 sei zu komplex (und damit ein Sicherheitsrisiko), würde nur dann etwas bringen, wenn man ganz bestimmte Anforderungen hat oder sei sowieso doof, weil Google zu sehr seine Finger im Spiel hatte. Auf der anderen Seite gibt es Leute, die sagen, man müsse es unbedingt nutzen, weil es alles so viel schneller macht und ja sowieso das Neueste und Beste ist, und wer sich dagegen ausspricht sei ein zurückgebliebener Maschinenstürmer (wen überhaupt die Möglichkeit in Betracht gezogen wird, dass sich jemand dagegen aussprechen könnte). Dazwischen gibt es eine ganze Menge nuancierter Meinungen.

Ich selbst spiele schon seit einer Weile mit dem Gedanken, es für mein Blog einfach mal auszuprobieren. Es scheiterte immer wieder daran, dass die nginx-Version auf meinem Server das Feature nicht aktiviert hatte und ich definitiv keine nginx-Version installieren wollte, die nicht aus dem Paketmanager stammt (wegen des Wartungsaufwands). So ähnlich ging es mir ja auch mit Brotli, wobei ich Brotli wirklich dringend nutzen wollte, während HTTP 3 nur ein „probieren wir es mal“ ist.

Zwischenspiel: HTTP 2 und nginx

Ich nutze nginx als HTTP-Server. Um sicherzustellen, dass meine nginx-Konfiguration gültig ist, habe ich /usr/sbin/nginx -t ausgeführt. Ergebnis, ohne dass ich irgendwas geändert hätte:

the "listen ... http2" directive is deprecated, use the "http2" directive instead in [REDACTED]

Ok, kurz nachgeschaut und diese Zeilen hier

listen 443 ssl http2;
listen [::]:443 ssl http2;

Durch diese ersetzt:

listen 443 ssl;
listen [::]:443 ssl;
http2 on;

Selbst wenn das mit dem HTTP 3 also nichts werden sollte habe ich immerhin meine nginx-Config auf den aktuellen Stand gebracht.

HTTP 3 mit nginx

Ich habe nach der offiziellen nginx-Dokumentation zu HTTP 3 gearbeitet. Der wichtigste Teil ist, hinter diesen Zeilen, die für HTTP 1 und 2 zuständig sind:

listen 443 ssl;
listen [::]:443 ssl;

Diese beiden Zeilen einzufügen:

listen 443 quic reuseport;
listen [::]:443 quic reuseport;

WICHTIG: Hier habe ich ein bisschen kämpfen müssen. Ohne reuseport funktionierte es bei mir überhaupt nicht. Es wird allerdings überall davor gewarnt, reuseport mehr als ein Mal zu verwenden. Ich habe in meiner nginx-config aber mehrere virtuelle Server. Kann ich dann nicht alle mit HTTP 3 betreiben? Doch, natürlich kann ich das. Aber es muss genau einer davon reuseport definiert haben (pro port + IP-Version).

Dann kann man noch ein paar weitere Optionen setzen, zum Beispiel diese hier:

quic_retry on; 
ssl_early_data on; 
quic_gso on; 
add_header Alt-Svc 'h3=":443"; ma=86400';

Die ersten drei sind optional und sollten die Performance verbessern oder so. Speziell die dritte funktioniert nur unter Linux. Die vierte Option, der Alt-Svc header hingegen ist recht wichtig. Denn ohne den erkennen User-Agents (z.B. Browser) nicht, dass es neben der HTTP 1 bzw. 2-Verbindung auch noch eine HTTP 3-Option gibt. HTTP 3 läuft über ein komplett anderes Transport-Layer-Protokoll (UDP statt TCP). Während bei HTTP 1 also ein Update zu HTTP 2 über das Protokoll selber sehr einfach möglich ist ohne auch nur die TCP-Verbindung neu zu verhandeln, geht das bei HTTP 3 nicht. Ohne diesen Header wird also vermutlich kaum ein Browser probieren, HTTP 3 zu verwenden. ma=86400 bedeutet, dass sich der User-Agent das für 86400 Sekunden (also 24 Stunden) merken soll. Vielleicht drehe ich das später mal höher, wenn HTTP 3 bei mir über längere Zeit stabil läuft.

Testen mit curl

Bevor ich diesen Alt-Svc-Header aber gesetzt habe, wollte ich wissen, ob HTTP 3 auch stabil läuft (was gut war, denn zunächst lief es wegen der reuseport-Sachen nicht stabil). Dazu wollte ich curl verwenden. Bei meinem Ubuntu 25.10 ist curl aber leider noch ohne HTTP 3-Unterstützung gebaut. Das kann man mit curl --version herausfinden. Wenn da unter features nirgendwo HTTP 3 gelistet ist, kann dieses curl kein HTTP 3.

Ironischerweise hat ausgerechnet mein Server selber eine curl-Version mit HTTP 3-Unterstützung. Ironischerweise, weil der Server mit Debian läuft und Debian eigentlich notorisch dafür ist, alte („stable“) Versionen zu benutzen. Die curl-Version ist übrigens die gleiche wie auf Ubuntu, aber halt mit HTTP 3-Support gebaut.

So konnte ich dann mit diesen beiden Befehlen (jeweils für IPv4 bzw. IPv6) testen, ob es geht:

curl -4 --http3-only -v https://blog.strangerthanusual.de/
curl -6 --http3-only -v https://blog.strangerthanusual.de/

Bei Erfolg bekam ich eine ganz normale HTTP-Antwort. Ohne reuseport kam nur

Failed to connect to blog.strangerthanusual.de port 443 after 30055 ms: Could not connect to server

Wie geht es weiter?

Ich lasse das jetzt erst einmal eine Weile so laufen und schaue mir an, wie gut es läuft. Ich werde das allerdings nicht rigoros monitoren oder methodisch korrekt untersuchen. Wenn es gut läuft, werde ich vielleicht noch einen HTTP Resource Record in meine DNS-Config packen, so dass User-Agents schon bei der Adressaufösung mitbekommen, dass hier HTTP 3 angeboten wird.

Nicht verschweigen möchte ich, dass ich bei meinen Recherchen auf Berichte zu einem Bug gestoßen bin, der in Kombination mit reuseport und soft-reload der nginx-Konfiguration Probleme bereitet. Also sollte ich hier ein bisschen vorsichtig sein.

Aber immerhin. Firefox nutzt gerade schon mit Freude die HTTP 3-Verbindung. Wie viel mir das jetzt tatsächlich bringt sei mal dahingestellt.

Slopc: Humor oder Horror?

Es gibt ja in letzter Zeit immer wieder Diskussionen über Codegenerierung durch LLMs und „Vibe Coding“, also das LLM nicht nur kleine Teile des Codes, sondern gleich mehr oder weniger das ganze Projekt generieren zu lassen (man sollte meinen, dass zumindest letzteres das offensichtlich eine schlechte Idee ist. Ist es auch, nur ist es für manche Menschen anscheinend nicht so offensichtlich).

Um diesen Prozess jetzt zu vereinfachen, hat jemand das slopc-crate für Rust geschrieben. Einfach das #[slop]-Makro vor eine Funktion setzen, und das Makro erzeugt mithilfe eines LLMs alle todo!-Makros durch LLM-generierten code, indem es den Doc-Kommentar der Funktion als Teil eines Prompt nutzt.

Die Inspiration dafür beschreibt der Autor so:

[…] felt like discovering your car has heated seat after 2 years on a lease. But then the intrusive thoughts came in: What if those heated seats were LLM driven, on fire, and the car is now driving itself into oncoming traffic ?

The voices in my head drove me to draft up some cursed proc-macro that would make my coworkers (me and my 2 cats) loose all the respect and faith they have for my technical skills.

Digital Independence Day im Mai 2026

Gestern war wieder Digital Independece Day. Im April hatte ich ja ausgesetzt (und dafür aber den kompletten Tag keinen Computer verwendet). Dieses Mal wollte ich wieder etwas machen, mir ist aber nichts eingefallen. Die Sachen auf der offiziellen DID-Seite? Habe ich entweder schon gemacht (z.B. nutze ich seit 2007 hauptsächlich Linux), betreffen mich nicht (z.B. habe ich Facebook nie benutzt) oder sind für mich ironischerweise ohne Google Playstore nicht möglich (z.B. die Umstellung auf Wero). Anderen Leuten helfen oder sie bekehren? War gestern für mich logistisch nicht möglich.

Immerhin haben sich SPD, Grüne und Linke jetzt endlich von Χitter verabschiedet. War imho lange überfällig, aber besser spät als nie. Jetzt bleibt nur noch zu hoffen, dass auch die Unionsparteien und die FDP nachziehen, dann wären alle größeren demokratischen Parteien nicht mehr dort. Die traditionellen Medien, insbesondere die öffentlich-rechtlichen, sollten sich auch von dort verabschieden, sofern sie es nicht schon getan haben.

Für mich wiederum gibt es vielleicht irgendwann sonst diesen Monat eine Chance, anderen beim Loskommen von großen Tech-Konzernen zu helfen.