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.