Stranger Than Usual

Fordite-Update: Barber's Pole

Es ist mal wieder soweit, ich habe mich mal wieder ein bisschen an mein Fordite-Projekt gesetzt. Ich hatte neulich die Idee, ein Farbschema basierend auf einem Barber's Pole anzuordnen. Als kleine Vorschau, hier ein Beispielbild für das, was am Ende herausgekommen ist:

Fordite-Bild: Orange Verwirbelungen

Kurze Erklärung

Wie habe ich das gemacht? Vielleicht kann ich am besten im Querschnitt erklären. Die folgende Animation zeigt einen Querschnitt der Stange von oben betrachtet. Über die Animation hinweg bewegt sich die Kamera nach oben:

Animation: zwei weiße, ein rotes und ein blaues Dreieck rotieren um den Mittelpunkt im Bild

Mit jedem Schritt nach oben sind die Farben ein Stück weiter rotiert. Von außen betrachtet ergibt das dann Spiralen. Von der Seite betrachtet, auf eine Ebene projeziert, sieht die gleiche Stange dann so aus:

Animation: diagonale rote, weiße und blaue Streifen bewegen sich von rechts nach links

Sieht ein bisschen langweilig aus und auch nicht wirklich nach sich drehendem Zylinder. Das liegt an der Projektion. Aber intern wird einfach der Winkel über die Zeit verändert, so dass der EIndruck entsteht, die Streifen wandern nach links.

Wirbel-Animation

Ich habe auch wieder eine Animation von einem interessanteren Motiv erstellt. Hat eine Weile gebraucht, bis ich eine brauchbare Kombination hingekriegt habe. Danke an alle, die mir Feedback und Farbideen gegeben haben.

Bahn-Fahrplanauskunft

Ich habe ein bisschen Urlaub gemacht und will mir gerade Bahntickets für die Rückfahrt buchen. Über einer der möglichen Routen prangt folgende Warnung:

Wichtige Informationen in den Verbindungsdetails!

Ok, was ist denn die Warnung? Mal nachschauen…

Fahrt fällt aus

What the Fuck. Warum bieten sie mir diese Route überhaupt an, wenn sie schon wissen, dass die Fahrt ausfällt?

Und das ist kein Einzelfall. Langfristige Baustellen, die den Zugverkehr behindern und zu Fahrplanänderungen führen? Man kriegt eine Warnung, aber die Fahrplanauskunft hält sich trotzdem an den ursprünglichen Plan, anstatt die absehbaren Fahrplanänderungen einzukalkulieren. Streiks? Schienenersatzverkehr, der drei Mal länger dauert? Taucht nicht in der Fahrplanauskunft auf, egal ob es Tage, Wochen oder Monate vorher bekannt war. Bestenfalls halt eine Warnung.

Und die DB ist da nicht alleine. Die Nederlandse Spoorwegen machen es genauso. Man könnte ja meinen, dass es mit moderner Computertechnik einfach ist, solche Änderungen im Fahrplan on-the-fly in den Fahrplan einzurechnen. Die Informationen sind ja da. Aber es passiert einfach nicht.

Die Chatkontrolle droht

Ich hatte ja vor kurzem über die gescheiterte PKW-Maut in Deutschland geschrieben. Kurz gesagt war es ein Projekt, das von Anfang an so weder rechtlich durchzusetzen war noch einen finanziellen Nutzen gehabt hätte. In diesem Zuge habe ich auch ein paar andere Beispiele für Eitelkeitsprojekte von Politikern genannt, bei denen alle Experten vorher gesagt haben, dass die so nicht funktionieren.

Chatkontrolle

Nun gibt es dazu natürlich noch mehr Beispiele. Ursula von der Leyens Internetsperren zum Beispiel, über die ich mich damals schon aufgeregt habe. Aktuell steht schon seit einiger Zeit die Chatkontrolle auf dem Plan.

Auch hier sind praktisch alle juristischen Gutachten zum Schluss gekommen, dass das zu stark in die Grundrechte eingreift und dementsprechend nicht durchzusetzen ist. Trotzdem ist die Mehrheit der EU-Staaten dafür.

Auch aus technischer Sicht ist die Sache schwierig. Da die Politiker mittlerweile zumindest verstanden haben, dass man Verschlüsselung nicht schwächen kann ohne sie zu schwächen (dazu passend auch die aktuelle Bekanntgabe, dass der TETRA-Standard einige Sicherheitsprobleme enthält, nicht zuletzt Downgrade-Attacken auf absichtlich schwache Krypto), kommen sie mit der Idee, dass man ja die Daten direkt auf den Endgeräten der Nutzer abgreifen könnte.

Meine Prognose ist: Wenn das beschlossen wird, wird es auch wieder gekippt werden. Dazwischen stehen Monate der rechtlichen Unsicherheit und viel Geld, das in den Gulli gekippt wird, und das man eigentlich für wichtigere Dinge einsetzen könnte.

Safe-Harbor / Privacy shield

Ein weiteres Beispiel ist das jahrelange Gezerre um Datentransfer in die USA. Das Safe-Harbor-Abkommen besagte im Prinzip, dass die USA ein sicheres Land für personenbezogene Daten aus der EU ist.

Das ganze wurde dann nach einem langen Gerichtprozess gekippt, weil die US-Geheimdienste Zugriff auf diese Daten einfordern konnten (auch ohne die Betroffenen zu benachrichtigen).

Daraufhin wurde mit heißer Nadel das privacy shield gestrickt. Im Prinzip Safe Habor unter einem anderen Namen. Auch das wurde nach jahrelangen Verhandlungen 2020 wieder gekippt.

Jetzt gibt es privacy shield 2.0. Das Gleiche in grün. Wird vermutlich auch wieder gekippt werden. In ein paar Jahren.

Fractal Fordite

Nachdem ich neulich ein neues Farbschichtenschema für Fordite gebaut habe, habe ich mich letzte Woche an eine neue Höhenkarte gesetzt.

Kurze Erinnerung: Fordite ist ein Programm, das nach der Inspiration von echtem Fordit Bilder erstellt. Für nähere Informationen bitte die verlinkten Blogposts lesen, durch die Tags stöbern und den Code anschauen. Für mehr Beispielkonfigurationen gibt es ein eigenes Repo.

Fraktale Landschaften

Es fing damit an, dass mir die bisherigen Höhenkarten zu gleichmäßig waren. Paraboloide, Sinuskurven, schiefe Ebenen… damit kann man schöne Bilder machen, aber die Linien zwischen zwei Farben sind immer sehr ordentlich. Saubere Kurven, geraden, etc. Echtes Fordit hat mehr Unregelmäßigkeiten.

Nun, wie erstellt man zufällige Höhenkarten? Einfach zufällige Werte nehmen, nach welcher Verteilung auch immer, gibt keine natürlich aussehende Höhenkarte und würde im Bild hinterher einfach Farben durcheinander werfen.

Glücklicherweise bin ich nicht der erste, der so ein Problem hat. In der Computerspieleentwicklung gibt es schon seit Jahrzehnten das Konzept von fractal landscapes um halbwegs natürlich aussehende Landschaften zu generieren.

Ich habe mir auf Gutdünken einen Algorithmus herausgegriffen, den diamond-square-Algorithmus. Nach einem ganzen Haufen off-by-one-Fehlern hat das auch wunderbar funktioniert:

Ein schwarz-weiß-Bild. Manche Regionen sind eher dunkel, andere sind hell. Abgesehen davon ist kein Muster erkennbar

So weit, so gut. Ich habe ein paar Bilder damit erstellt, war aber nicht wirklich zufrieden. Warum? Darauf komme ich später zurück.

Breaking Changes: Farbschichten

Um besser darstellen zu können, warum ich nicht zufrieden war, wollte ich Bilder mit verschiedenen Farbschichten bauen, die alle dieselbe diamond-square-Algorithmus-Höhenkarte verwenden. Für manche war das kein Problem, andere hatten aber bis dato keine Möglichkeit, die Dicke der Schichten einzustellen.

Die Dicke war standardmäßig dünn, für einfache, ebene Schichten war es nur 1. Wenn man da jetzt eine zufällige Höhenkarte draufpackt, hat man sehr viele Farbwechsel, denn obwohl die Höhenkarte nicht komplett wild hin- und herspringt unterscheidet sich jeder Punkt mit hoher Wahrscheinlichkeit von seinem Nachbar.

Also mussten diese Konfigurationen angepasst werden. Ich habe mir erst einmal auf die waagerechten Ebenen (horizontal_planes in den config-Dateien) und die schrägen Ebenen (inclined_planes in den config-Dateien) konzentriert. Für die anderen kommt das vielleicht später.

Ich hatte gehofft es so einrichten zu können, dass, wenn man den neuen Parameter weglässt, alles weiterhin funktioniert, so dass alte Konfigurationen rückwärtskompatibel sind. Das habe ich mit serde aber nicht hingekriegt. Also gibt muss man jetzt alte configs anpassen, damit sie wieder laufen.

Beispiele dafür, wie die neuen configs aussehen müssen, findet man hier. Wenn man möchte, dass die Bilder so aussehen wie bisher, empfehle ich für horizontal_planes den Wert 1 für den Parameter layer_thickness. Für inclined_planes ist es unterschiedlich, weil die Dicke bisher von der maximalen Höhe der Höhenkarte abhing. Da muss man ein bisschen herumprobieren.

Langweilige Bilder

Warum war ich also nicht zufrieden mit den diamond-square-Bildern? Hier zur Veranschaulichung mal Bilder mit verschiedenen Farbschichtenschemata und derselben Höhenkarte:

zerfranste Farbstreifen durchziehen unregelmäßig das Bild zerfranste Farbstreifen durchziehen unregelmäßig das Bild, im großen und ganzen aber von oben links nach unten rechts ein Netz aus zerfransten Farbstreifen umschließt unregelmäßige farbige Flächen links ist eine durchgehend grüne Fläche, rechts sieht das Bild so ähnlich aus wie die anderen zerfranste Streifen… ach, ihr wisst schon

Versucht mal zu raten, welches Bild mit welchem Farbschichtenschema erzeugt wurde. Die Höhenkarte ist überall gleich. Die Lösung steht im Titel des Bilders (darüberhovern auf Geräten mit Maus, antippen für Mobile Browser, wenn ich mich recht entsinne).

Worauf ich hinaus will: Man kann zwar Unterschiede zwischen den Farbschichtenschemata erkennen (besonders die schiefen Ebenen stechen wegen des große-einfarbige-Fläche-quirks heraus), aber ansonsten sehen die sich vom Prinzip her alle recht ähnlich.

Breaking Changes: Die Rettung naht, doch vorher noch ein paar Umbauten

Um die Lösung, die mir vorschwebte zu bauen, musste ich ein bisschen Umstrukturieren. Insbesondere habe ich die Höhenkarten-Transformation (bisher Verschiebung und Rotation) aus der allgemeinen Konfiguration in die einzelnen Höhenkartenkonfigurationen verschoben.

Das zerstört mal wieder bestehende Konfigurationsdateien. Die zu reparieren ist nervig, aber nicht sehr kompliziert. Damit waren nun alle Voraussetzungen geschaffen für das:

Addieren von Höhenkarten

Meine Idee war: Vielleicht ist es zu viel, die ganze Höhenkarte zufällig zu machen. Vielleicht kann man ja mit einer regelmäßigen Höhenkarte anfangen, und dann eine zufällige Höhenkarte dazuaddieren.

Mit den im vorherigen Abschnitt erwähnten Änderungen an den Konfigurationsdateien war das sehr einfach umzusetzen. Dieses Mal macht es sogar keine configs kaputt! Es gibt einen neuen Höhenkartentyp, sum, der als Parameter eine Liste von Höhenkarten und Gewichten entgegennimmt.

Das Addieren funktioniert wie folgt:

  1. generiere alle Höhenkarten
  2. normalisiere alle Höhenkarten auf denselben Wertebereich
  3. multipliziere alle Höhenkarten mit ihren Gewichten
  4. addiere die Höhenkarten
  5. skaliere das Ergebnis auf die gewünschte Höhe

Und damit habe ich endlich das, was ich will. Und nicht nur das: Ich habe mir direkt einen ganzen Haufen zusätzlicher Optionen geschaffen, schließlich kann man beliebige Höhenkarten addieren.

Hier ein Beispiel, wie das aussehen könnte. Zuerst ein Bild, dass ich früher schon einmal geposted habe (bevor ich die Höhenkarten auf float umgestellt habe, deswegen hier eine neue Version):

ein blaues Fordite-Bild. Die Kanten sind zwischen zwei Farbschichten sind gleichmäßig geschwungen

Im Vergleich dazu: die gleiche Konfiguration, aber mit 10% Gewichtung eine zufällige Höhenkarte draufaddiert:

ein ähnliches Bild wie vorher, aber die Kanten sind nicht mehr so glatt und gleichmäßig. Sie sehen eher aus, als hätte jemand sie von Hand gezeichnet

Ich will nicht zwingend sagen, dass eine Version besser ist als die andere, aber es ist definitiv ein Unterschied.

Breaking changes: two_sine

Zu guter Letzt gibt es noch einen dritten breaking change: Die two_sine-Höhenkarte fällt weg. Ihren Effekt kann man jetzt schließlich mit dem Addieren von zwei sine-Höhenkarten erreichen.

Schlusswort

Ich werde jetzt erst einmal mit den neuen Optionen herumspielen und vielleicht auch noch ein Video erzeugen. Mir ist auch die Idee gekommen, dass ich vielleicht Höhenkarten nicht nur addieren, sondern auch multiplizieren kann. Mir sind auch schon ein paar Ideen gekommen, wozu das nützlich sein kann.

Was außerdem noch ansteht: Ich möchte separate Zufalls-seeds für die Farbschichten anbieten. Ich habe schon für den diamond-square-Algorithmus einen (optionalen) eigenen seed eingeführt. Hätte ich das nicht, wären die Farbschichten anders als ohne diamond-square. Aber all das drängt nicht.

Chaos Communication Camp 2023

Die Fairy Dust von unten fotografiert. Sie ist grünlich, Sonnenlicht spiegelt sich auf ihrer Hülle.

All creatures welcome

Das diesjährige Chaos Communication Camp, die Sommerveranstaltung des Chaos Computer Club, ist gerade in vollem Gange (ja, es gibt auch andere große Hackerveranstaltungen im Sommer, die ich hier willkürlich ignoriere).

Das Camp findet alle vier Jahre statt. Ich bin dieses Jahr das erste Mal dabei und amüsiere mich prächtig. Was genau das Camp ist, ist schwer zu beschreiben. Gestern, in einem improvisierte Flachwitze-Open-Mic (die eigentlich geplante Veranstaltung hatte ein paar Probleme und musste später anfangen) brachte ein Hacker diesen Vergleich:

The Camp is like the Congress, only more in tents

Aber genug Gelaber, wie ist es denn so?

Wetter

Das Wetter könnte nicht viel besser sein. Gut, tagsüber ist es meist ein bisschen zu warm (insbesondere Tag 1 (Dienstag) war um die 30°C), aber durchaus ertragbar. An Tag 1 hat es auch ein bisschen gewittert, was zum Ausfall von ein paar Vorträgen geführt hat, aber meines Erachtens ansonsten kein Problem war (und sicher auch zur Abkühlung beigetragen hat).

Leute

In der ganzen Hackerszene sind einfach ein Haufen toller Leute. Ich bin eher scheu, habe es aber auch geschafft, hier und da mit mir unbekannten Leuten zu sprechen. Besondere Grüße hier an die Italian Hacker Embassy. Im Großen und Ganzen wissen sich die Leute hier viel besser zu benehmen als in der echten Welt.

Ich habe auch zwei Bekannte getroffen, einen ehemaligen Kollegen und einen Rollenspieler, beide aus Hamburg. Anders als beim Congress läuft man sich hier deutlich häufiger auch zufällig über den Weg.

Last but not least muss ich erwähnen, dass die ganze Veranstaltung von Freiwilligen („Engeln“) organisiert und durchgeführt wird. Jeder Campteilnehmer kann mithelfen.

Gadgets

Wie bei jedem Camp gibt es wieder ein elektronisches Gadget, das man sich (optional) dazubestellen kann. Eine Art elektronisches Namensschild mit viel, viel mehr Funktionen (und Programmierschnittstelle): Der flow3r-Badge. Dieses Jahr liegt der Fokus auf Musik, aber das Teil hat auch ein Display und farbige LEDs, um für Lichtspektakel und andere Spielereien zu sorgen.

Ein Gerät in der Form einer Blüte. Die obere Ebene hat ist pinkt und hat fünf Blütenblätter, die Sternförmig nach außen gehen. Die untere Ebene hat vier weiße Blütenblätter in den Räumen zwischen den oberen Blütenblättetn. In der Mitte ist ein Display, das „Knirps“ anzeigt. Auf den Blütenblättern sind Muster

Natürlich basteln sehr viele coole Leute auch an anderen Gadgets. Manche mehr, manche weniger aufwändig. Manche so, dass sie die auch Verteilen (idealerweise für eine Spende). Chaos West zum Beispiel macht Anstecker. Ein paar Chaosnahe Defaultmotive, aber man kann denen auch irgendwelche Bilder schicken, die die dann ausdrucken und die man in die Anstecket packen kann. So bin ich zum Beispiel zu meinem Napstablook-Anstecker gekommen:

Ein klassischer, runder Anstecker. Das Motiv ist ein traurig aussehender Geist

Zu dem Napstablookbild habe ich auch noch eine kleine Geschichte zu erzählen, aber dazu später mehr.

Vorträge

Natürlich gibt es auch Vorträge auf dem Camp. Wie beim Congress sollte man nicht zu viel Zeit auf die Vorträge verwenden. Die Vorträge sind zwar gut, aber das Drumherum ist es, was den eigentlichen Charme ausmacht. Alle Vorträge werden live gestreamed, werden aber auch aufgezeichnet, also kann man sich alles auch später noch anschauen.

Ich gebe jetzt keinen Überblick über die Talks, die ich mir angeschaut habe, aber es ging u.a. um Datenschutzmythen, Chatkontrolle, technischen Krams. Letzte Nacht (Mittwoch/Donnerstag) gab es auch ein kleines Kaspertheater mit dem CCCasper. Es gab einen Science Slam

Lightning Talks

Natürlich gibt es auch hier lightning talks. Ein bisschen anders als auf dem Congress (10 statt 5 Minuten). Wie immer ein Feuerwerk von verschiedenen Ideen. Hier eine kurze Übersicht von gestern:

  • Basebanana behandelt „Banana words“, also Worte, die immer abwechselnd Konsonanten und Vokale haben. Eine Anwendung dafür ist die Codierung von Zahlen, damit man sie sich leichter merken kann
  • Sorry, Odro, ein Umweltschutzprojekt, das u.a. Wasserverschmutzung an der Oder misst (insbesondere nach dem großen Fischsterben letztes Jahr)
  • „Church Of Cryptography“: Kann man Kryptografie zur Religion erheben, um sich beim Verteidigen des Rechts auf Verschlüsselung auf die Religionsfreiheit berufen zu können?
  • eine kurze Einführung in Prolog
  • eine Person, die während der Coronazeit digitale Versionen der ganzen Aufklebermotive gesammelt hat, die man so auf Chaosveranstaltungen findet

Ich hatte ja überlegt, ob ich einen lightning-talk über Fordite einreichen soll, habe es dann aber aus Stress sein lassen. Gute Entscheidung, der Beamer an der Bühne ist recht schwach, bei (indirektem) Sonnenlicht kann man nichts erkennen. Für einen so bildlastigen Vortrag wäre das fatal gewesen. Ich schaue mal, vielleicht kann ich den Vortrag ja auf dem diesjährigen Congress halten.

Bunt, Leuchtend und andere Kunst

Was wäre eine Chaosveranstaltung ohne jede Menge cooler Sachen, die zu nichts nütze sind, aber schön anzusehen oder zum Nachdenken anregen (aka „Kunst“). Insbesondere natürlich ein Haufen Lichtinstallationen, die nachts überall zu sehen sind.

Bei dem hier bin ich nicht sicher, ob es eine Kunstinstallation oder einfach nur Zufall ist:

Ein kleines pinkes Skateboard steht verlassen vor einer Blechwand. Die Blechwand ist stark verbogen. Die Spitze des Skateboards zeigt auf die Blechwand.

Ich habe auch jemanden mit einem motorisierten und beräderten Kajak auf dem Gelände herumpaddeln sehen. Das Kajak stand gestern Abend bei Hackern aus Konstanz, vielleicht gehe ich da mal vorbei und frage, ob ich ein Foto machen (oder sogar mal darin fahren) darf.

Workshops

Workshops und Bastelsachen gibt es auch zuhauf. Löten / Elektronik, lock picking, Cyanotypie sind nur ein paar Beispiele. Es gibt einen TeX-Helpdesk, jede Menge Angebote für Kinder.

Sonstiges

Das Waffel Operation Center ist wieder aktiv, wenn auch nicht auf voller Kraft. Dem Teehaus von quadrature du net muss ich noch Besuch abstatten.

Die verschiedenen Wege auf dem Camp wurden nach Frauen in IT und Wissenschaft benannt. Hier ist eine Liste. Einige Klassiker, wie z.B. Ada Lovelace sind dabei, aber auch aktuelle Bekanntheiten wie z.B. Simone Giertz:

Ein Straßenschild aus Spanholz mit der Aufschrift „Simone Giertz Way“

Napstablook

Here comes Napstablook

Es folgt eine viel zu detaillierte Darstellung, wie ich eine Vektorgrafik von Napstablook erstellt habe. Lesen auf eigene Gefahr.

Ein traurig aussehender Geist. Das Bild hat eine sehr geringe Auflösung

Dieses Bild stammt aus dem Spiel Undertale von Toby Fox. Es zeigt den Charakter Napstablook. Wer das Spiel gespielt hat, wird Napstablook erkennen. Wer nicht… nun ja, ich habe ja schon einmal erwähnt, dass man Undertale besser ungespoilert spielt.

Nun bin ich ein bisschen ein Fan von Napstablook. Auch Napstablooks Kampfmusik ist durchaus zu empfehlen, am besten in der Jazz-Cover-Version.

Aber das originale Bild aus dem Spiel ist einfach so klein. Und verpixelt. Das passt zwar gut zum Stil von Undertale, ist aber unpraktisch, wenn ich es woanders verwenden möchte. Zwar gibt es jede Menge Fanart von Napstablook, aber da bin ich mir mit den Rechten nie sicher, und außerdem möchte ich eine Version, die möglichst nah am Original ist.

Also habe ich selber eine gemacht:

Ein traurig aussehender Geist

Man sieht es hier nicht, weil die Grundmaße dieselben sind wie bei der Rastergrafik oben, aber da es eine SVG ist, kann man sie beliebig skalieren.

Entstehung

Wie bin ich dahin gekommen? Nun, ich habe mir einfach die Originaldatei geschnappt, und in inkscape mit Bezierkurven nachgezeichnet.

Das war es eigentlich schon. Warum habe ich dann eine viel zu detaillierte Beschreibung versprochen?

Zuerst einmal, weil die SVG-Datei von inkscape ziemlich überladen ist. 6,2 KiB. Das geht doch kleiner. Also svgo zum Optimieren genutzt: 3,0 KiB.

Besser. Aber schauen wir doch mal in die Datei herein. Da sind Dinge drin wie

<path style="fill:#fff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1" d="M44.22 39.117s.073 1.226 0 0z"/>

Wow. Das ist ne Menge CSS in dem style-Attribut. Das meiste davon unnütz. Hier hätte anstelle des style-Attributs einfach fill="white" stehen können. Also habe ich das gemacht. Dann noch einmal svgo drüberlaufen lassen und… voilà: nur noch etwa 1,9 KiB.

Notiz am Rande: die Option, dass ein SVG auch <script>-Tags oder CSS enthalten kann ist ein Grund, warum viele Seiten keine SVGs aus user-Uploads oder anderen unvertrauenswürdigen Quellen einbinden. Schon mal versucht, in Discord oder Slack eine SVG-Datei zu posten? Geht nicht.

Und noch ein Vergleich: Die Originalgrafik, als verlustfreies WebP abgespeichert, ist 244 Bytes groß. Die SVG liegt also um eine Größenordnung darüber. Dafür ist sie aber skalierbar.

Genauigkeit

Natürlich möchte ich jetzt noch herausfinden, wie originalgetreu meine SVG-Datei ist. Die Idee: Ich könnte ja einfach die SVG-Datei in entsprechender Größe exportieren und mit der Originaldatei vergleichen.

Das Problem: Die Originaldatei ist strikt schwarz-weiß, keine Graustufen. Mit Standardeinstellungen wird die aus dem SVG exportierte Datei hingegen Graustufen enthalten, zur Kantenglättung. Das macht einen Vergleich schwieriger.

Also mal stöbern, wie man eine Rastergrafik mit harten Kanten exportiert… vielleicht die Antwort auf diese neun Jahre alte stackexchange-Frage?

The development version of Inkscape (upcoming 0.91 release) has a global anti-aliasing toggle in the Document Properties window, which should also work for export.

Nun, neun Jahre später muss ich mich nicht mehr auf die Development-Version verlassen. Die Checkbox ist einfach zu finden. Das Ergebnis ist absolut identisch. Kurze Suche zeigt, warum: die abgewählte Checkbox wird jedes Mal zurückgesetzt, wenn ich die Dokumenteneinstellungen verlasse.

Aber halt, man kann inkscape ja auch als Kommandozeilentool verwenden! Das sieht dann etwa so aus:

inkscape -C -w 90 -h 90 napstablook_black_bg.svg -o napstablook_no_anti_aliasing.png

Aber man inkscape zeigt keine Parameter, mit denen man anti-aliasing steuern kann. Also auch nicht der richtige Weg. Hmpf.

Ok, dann begnüge ich mich mit einer Krücke: Ich nehme die geglättete Version und lasse einfach einen Schwellwertfilter drüberlaufen. In diesem Fall habe ich gimp dafür genommen. Ich muss den Threshold-Filter dort jedes Mal suchen. Der ist nämlich nicht im Filters-Menü sondern im Colors-Menü. Als Schwellwert abe ich 127 genommen, also genau die Mitte.

Jetzt muss ich die Bilder nur noch vergleichen. Das geht mit compare von Imagemagick:

compare napstablook_original.webp napstablook_not_anti_aliased.png diff.png

Das Ergebnis mit den Defaulteinstellungen ist dieses Bild (rote Farbe bedeutet Unterschiede):

Unterschiede sind an vielen Kanten zu erkennen, aber nicht an allen. In der Regel sind sie nicht breiter als ein Pixel

Meine Einschätzung: Es gibt schon Unterschiede, aber insgesamt ist es nah genug dran.

Fazit

Ich hatte die SVG-Datei schon seit Monaten herumliegen, aber jetzt bin ich endlich dazu gekommen, sie zu optimieren. Ihr könnt sie gerne herunterladen und verwenden, aber beachtet, dass der eigentliche Urheber von Napstablook Toby Fox ist. Der sieht Fanart sehr locker, aber im großen Stil verkaufen bzw. Geld damit machen sollte man nicht.

Die SVG-Datei ist übrigens die, die ich auf dem Chaos Communication Camp für meinen Napstablook-Anstecker verwendet habe.

Basic Computer Games

Ende Dezember 2021 hat Jeff Atwood auf seinem Blog „Coding Horror“ einen Artikel zu einem mittlerweile 50 Jahre alten Buch veröffentlicht: BASIC Computer Games. Der Artikel ist interessant, ich kann empfehlen ihn zu lesen.

Eine kurze Zusammenfassung: In den Zeiten, als private Computer noch rar waren, das das Internet noch in den Kinderschuhen steckte (vom WWW war noch nicht zu denken) und es noch schwierig war, Software zu verteilen, wurde ein Buch mit 101 Computerspielen veröffentlicht. In BASIC geschrieben, zum selberabtippen.

Ich kann das nicht selber bezeugen, aber anscheinend war dieses Buch sehr einflussreich auf die Entwicklung vieler angehender Programmierer zu der Zeit. Deswegen hat Jeff Atwood ein Projekt aufgesetzt, die Spiele aus diesem Buch in modernen Programmiersprachen zu reimplementieren.

Ursprünglich hielt ich das zwar für ein cooles Projekt, aber da rust nicht unter den offiziell gelisteten Sprachen war hatte ich nicht viel Lust, daran zu arbeiten.

Als ich aber vor Kurzem noch einmal in den Blogpost geschaut habe, musste ich feststellen, dass rust mittlerweile (seit spätestens März 2022) auf der Liste steht.

Also habe ich mir ein Spiel herausgepickt, das noch nicht portiert worden ist (Spiel 53, „King“) und habe es in rust nachgeschrieben.

Das Ergebnis ist nicht der schönste rust-Code, den ich je geschrieben habe, aber es war ein interessantes kleines Projekt für mich. Der Code ist auf github gehosted, alle die wollen können mitmachen. Die originalen Spiele sind in Basic kann man in diesem JS-basierten Interpreter spielen. Viel Spaß!

Chaos Communication Camp 2023: Rückblick

Ich hatte ja während des Camps schon einen Blogpost über das Camp geschrieben. Das Camp ist mittlerweile etwa vier Wochen her, da wird es Zeit, endlich einen Rückblick zu schreiben mit ein paar Sachen, die ich auch noch erzählen wollte.

Chaospost

Natürlich gab es auch wieder die Chaospost. Man konnte Postkarten an Leute auf dem Camp verschicken, aber auch nach außen (letzteres kostet die Chaospost natürlich, deswegen waren Spenden gerne gesehen). So oder so gab es einen Haufen Postkarten mit Chaosmotiven, nächtlichen Luftbildern von vergangenen Camps und Ähnlichem.

Ich selbst habe ein paar Postkarten an Freunde in die wirkliche Welt geschickt, außerdem zwei Postkarten innerhalb des Camps, an zwei Leute von der Italian Hackers' Embassy und an die Gruppe von Chaos West, die die Anstecker gemacht hat, die ich schon im letzten Post erwähnt habe.

Die Chaospost basiert auf Freiwilligen, die die Post innerhalb des Camps austragen. Es ist garnicht so einfach, die adressierten Personen zu finden, trotzdem habe ich es ein paar Mal geschafft. Meine eigenen Postkarten (von anderen Leuten ausgetragen) haben ihr Ziel auch erreicht.

Gemischtes

Ich kann unmöglich von allen Eindrücken berichten, die ich mitgenommen habe. Von den diversen Villages, die im größeren Stil kochen (die Italian Hackers' Embassy zum Beispiel, aber auch die Nerds der Oberrheinischen Tiefebene, die besprechen, wie sie ihren Sauerteig behandeln müssen). Von dem Workshop über Rollenspiel-Safety. Der WLAN-Ausfall, zu dem sich die Italian Hackers' Embassy bekannt hat. Ein Vortrag über Datenschutzmythen. Die Teslaspulenkonzerte. Die Museumsbahn, die noch einen Bällebad-Waggon bekommen hat. Das Salzamt, das immer geschlossen war.

Jeder erlebt ein anderes Camp. Es liefen auch wieder eine Menge Nachwuchshacker (aka Kinder) herum. Viele davon hatten Spaß auf dem Wasserspielplatz, einige programmierten aber auch Apps für ihren flow3r-Badge oder löteten Elektronik zusammen.

Lustige Aushänge gab es auch wieder. Zum Beispiel den hier:

An eine Wand geklebt ist ein DIN A4-Zettel mit der Aufschrift „Nimm ein Lächeln mit“. Darunter, mit Einschnitten, Ascii-Smilies zum Abreißen. Einige davon sind schon abgerissen.

Landkajak

Seit Tag 1 habe ich gelegentlich ein Kajak gesehen, mit dem Leute über das Camp gepaddelt sind. Nein, das Camp lag nicht unter Wasser, so wie das Burning Man Festival vor kurzem. Das Kajak hat Räder. Und ein Paddel, mit Beschleunigungssensor, so dass eine ungefähre Paddelbewegung in Motorbewegungen des Bootes umgesetzt wurde.

An Tag 5 habe ich es endlich mal geschafft, die Macher dieses Geräts zu erwischen, bevor sie schon weitergepaddelt sind. Es handelt sich um Hacker aus Konstanz. Ich konnte dann auch eine kleine Fahrt unternehmen:

Ein halbes, gelbes Kajak auf Rädern. Ich sitze in dem Kajak und halte ein „Paddel“ in den Händen.

Das Gerät verhält sich nicht wie ein Kajak im Wasser. Was es für mich als erfahrenen Paddler schwierig machte, es zu steuern, weil ich immer wieder in eintrainierte Bewegungsmuster verfallen bin. Die Videos davon werde ich nur unter Freunden zeigen.

LibreOffice

Ganz verpasst habe ich hingegen, dass ein ehemaliger Kollege von mir, Björn Michaelsen, auch auf dem Camp war. Und nicht nur das, er hat sogar einen Vortrag gehalten: How to survive being bought by Oracle, worin er mit einem Mithacker Geschichten von der Entstehung von LibreOffice aus OpenOffice erzählte.

Ich habe andere alte Bekannte getroffen, mehrmals und zufällig. Aber den einen davon, der einen Vortrag gehalten hat, habe ich nicht getroffen und erst erfahren, dass er da war, als ich schon auf dem Rückweg war.

Heimreise

Stichwort Rückweg: der war eine Tortur. Ich wollte nämlich am Sonntag nicht zu spät los, um nicht in mit anderen Abreisenden vollgestopften Bussen und Zügen zu sitzen.

Samstagabends konnte ich keinen Zug mehr nehmen. Ich wollte noch die Abschlussveranstaltung anschauen, außerdem hätte ich dann zwölf anstatt acht Stunden gebraucht.

Am Sonntagmorgen fuhr um kurz vor sechs ein Zug. Danach erst wieder so gegen zehn. Die Shuttlebusse fuhren aber auch erst so, dass sie den Zug um zehn erwischen. Und die Shuttlebusse wären vermutlich voll gewesen.

Also eine andere Möglichkeit gesucht, zum Bahnhof zu kommen. Keine Chance, niemand da, der um die Uhrzeit da hinfährt und mich hätte mitnehmen können.

Also den Teil meines Gepäcks, den ich per DHL verschicken konnte zur Chaoseigenen Paketzentrale geschickt (die war zwar zu der Zeit eigentlich unbesetzt, aber ein paar andere Camper hatten jemanden mit Mate bestochen, dass er noch kurz unsere Pakete aufnimmt) und versucht, mich ein bisschen auszuruhen. Natürlich nicht im Zelt, das hatte ich ja schon in das Paket gesteckt.

Ich habe also maximal zwei unruhige Stunden Schlaf bekommen, dann bin ich gegen drei Uhr nachts zu Fuß in Richtung Zehdenick gelaufen. Sieben Kilometer sind das. An sich kein Problem, aber ich war todmüde und hatte einen schweren Rucksack und eine schwere Tasche dabei. Meinen großen Wanderrucksack habe ich vor der Anreise ums Verrecken nicht gefunden, mit dem wäre es um einiges einfacher gewesen.

Der Weg war auch eigentlich recht schön. Durch ein Feuchtgebiet auf Fuß-Radwegen, angenehme Luft, angenehme Temperatur, stockfinster, aber ich hatte meine neue Kopflampe dabei.

Trotzdem war ich wie gerädert, als ich endlich am Bahnhof ankam. Kurz nach sieben war ich dann auch in Berlin. Auf ein Frühstück verzichtete ich, wegen leichter Bauchprobleme. Die Fahrt nach Duisburg dauerte eine Viertelstunde länger als geplant, wodurch ich meinen Anschlusszug verpasste und eine Stunde in Duisburg warten musste. Wenigstens hatte ich dann Zeit, zu essen (und meine Tasche mit Dönersoße vollzukleckern).

Nur noch ein paar mal Umsteigen später war ich dann am Nachmittag endlich wieder in meiner Wohnung. Die eine Woche Camp war nicht so anstrengend wie diese Rückreise.

Trotzdem: Das war es wert. Nächstes Mal bin ich wieder dabei.

Ugly Plot Competition

Letzte Woche kam meine Professorin mit einer interessanten Aufgabe um die Ecke. Hintergrund war, dass eine Kollegin an Perfektionismus leidet. Wenn meine Professorin vorschlägt, dass sie irgendwas plotten soll, plotted sie es nicht nur, sondern arbeitet Stunden daran, den Plot perfekt zu machen, bevor sie ihn der Professorin zeigt.

Nicht zielführend, wenn man nur kurz etwas darstellen möchte, was man möglicherweise ohnehin später wieder verwirft. Also hat die Professorin ihr die Aufgabe gegeben, ein möglichst hässliches Diagramm zu erstellen. Wenige Minuten später ist sie auf die Idee gekommen, uns andere Doktoranden mit reinzuziehen und einen Wettbewerb darauf zu machen.

Long story short, das hier sind die Ergebnisse:

Ein hässlicher Plot. Vier Graphen sind in einem Koordinatensystem dargestellt. Jeder in einem anderen Stil. Alle bis auf einen schwarz. Die Legende ist in der Mitte des Koordinatensystems und überschneidet sich mit mehreren Graphen. Von der Überschrift ist nur die obere Hälfte zu sehen. Es werden überall unterschiedliche Schriftarten verwendet, darunter Comic Sans. Das Koordinatensystem besteht nicht aus Linien, sondern aus dicken Punkten. Manche Texte stehen auf dem Kopf, andere sind um 90 Grad nach rechts, wiederum andere um 90 Grad nach links gedreht. Überall im Bild sind starke JPEG-Kompressionsartefakte zu sehen.

Zitat meiner Professorin:

This is the most ugly plot I have ever seen.

Ein nutzloser Plot. Links im Koordinatensystem ist eng zusammengequetscht ein Punktplot aus halbtransparenten Kreisen in allen möglichen Farben. Die Kreise überschneiden sich, man kann nichts erkennen. Die rechten drei viertel des Koordinatensystems sind leer, mit Ausnahme der Legende, die aus einem Lila Kreis mit der Beschriftung „for more info look here“ besteht. Die Beschriftungen der Tics an der X-Achse überschneiden sich. Die X-Achse ist mit „Ports“ beschriftet, die Y-Achse mit „Num Packs“.

Zitat meiner Professorin:

This is the most useless plot I have ever seen.

Mangels Gewinner wurde eine zweite Runde ausgerufen.

Fazit

Mein Plot ist der erste von den beiden. Mir hat es ja nicht wirklich wehgetan, ihn so furchtbar zu machen. Das Script, um den zu erstellen, ist recht übersichtlich. Beide Plots sind wie ein Wimmelbild: Je länger man draufschaut, desto mehr Details entdeckt man. Insofern haben sie auch etwas Schönes an sich.

Aber wer mein Blog verfolgt, weiß, wie fanatisch ich hinter verlustfreier Bildkompression her bin. Das war echt schmerzhaft. Insbesondere, weil die JPEG-Datei trotz 20% Qualität immer noch größer war als die PNG-Rastergrafik, aus der sie erstellt wurde. Unabhängig davon würde ich so etwas normalerweise eh als Vektorgrafik erstellen.

Deutsche Bahn: Autofahren ist auch Scheiße

Gestern, am Sonntag, bin ich mal wieder von Essen nach Nijmegen gefahren. Das Ganze ist eine ziemliche Tortur geworden. Einen blutigen Zwischenfall gab es schon vorher beim Ticketkauf über die Bahn-Website, doch dazu später mehr. Kommen wir erst einmal zur Reise selbst.

Die Reise

Essen Hauptbahnhof

Die Bahnreise startete in Essen am Hauptbahnhof. Meine erste Zwischenstation war Oberhausen Hauptbahnhof. Das ist praktisch direkt nebenan, nur 12 Minuten Fahrt. Zum Umsteigen hatte ich zehn Minuten Zeit, also eigentlich genau richtig: Genug, um beim Umsteigen nicht in Stress zu geraten, nicht so viel, dass man ewig warten muss.

Nur dass in Essen am Hauptbahnhof direkt angezeigt wurde, dass der Zug nach Oberhausen neun Minuten Verspätung hat. Kurze Zeit später kam dann eine Durchsage, dass die Verspätung zehn Minuten ist. Dann noch eine. Runter auf fünf Minuten Verspätung. Dann sechs Minuten. Am Ende ist der Zug 7 Minuten zu spät in Essen angekommen, schaffte es aber, diese Verspätung bis Oberhausen auf 12 Minuten auszubauen.

Oberhausen Hauptbahnhof

Nun ist es so, dass ich normalerweise von Oberhausen direkt nach Arnhem fahren kann. Wenn nicht gerade Schienenersatzverkehr (SEV) ist. So wie Anfang 2022, wo sich meine Fahrtzeit von etwa 2,5 Stunden mehr als verdoppelt hat, weil die Bahn-Website mir nicht mitgeteilt hat, dass es auf der Strecke SEV gibt und ich lieber eine andere Route nehmen sollte.

Zumindest in dieser Hinsicht hat sich die Bahn gebessert. Momentan ist zwischen Düsseldorf und Oberhausen Sterkrade SEV, und die Bahnwebsite hat das bei der Routenplanung auch eingeplant. Ich musste den Bus 3 von Oberhausen Hauptbahnhof nach Oberhausen Sterkrade nehmen. Dass das SEV ist, hat mit die Website aber nicht mitgeteilt.

Nun war ich ohnehin schon zu spät, habe mich aber trotzdem beeilt. In der Hoffnung, ich könnte den Bus vielleicht doch noch erwischen. Nur… Am Hauptbahnhof fuhr kein Bus 3. Alle Buslinien sind entweder mindestens dreistellig oder haben die Präfixe SB (Schnellbus) oder NE (Nachtexpress).

Ich gibt es in Oberhausen am Hauptbahnhof einen ganzen Haufen nummerierter Bussteige. Auf meinem Ticket, auf dem alle Bahnsteige verzeichnet sind, ist der Bussteig von Bus 3 nicht verzeichnet. Obwohl die Bahn diese Information hat, denn der Herr bei der Bahnauskunft konnte sie mir ohne Probleme sagen.

Die SEV-Busse sind also an Bussteig 10, und sind nicht als „Bus 3“ markiert, sondern als SEV. Zumindest auf den Anzeigetafeln. Erinnerung: Ich wusste, bis ich nachgefragt habe, nicht einmal, dass „Bus 3“ einen Schienenersatzverkehrbus ist.

Immerhin, dank der Auskunft wusste ich Bescheid. Nur fuhr der nächste SEV erst eine Stunde später (ist halt Schienenersatzverkehr, fährt im selben Takt wie die Züge). Die Busse, die sonst noch angeblich vom Hauptbahnhof nach Sterkrade fuhren, waren nirgendwo zu sehen. Außerdem konnte ich ums Verrecken nicht herausfinden, ob ich die mit meinem Bahnticket hätte benutzen dürfen.

Und eine Stunde später, ließ sich auch mein SEV-Bus nicht blicken. In Sterkrade hatte ich nur sechs Minuten Zeit zum Umsteigen.Bei Fünf Minuten Verspätung wurde der Bus dann von der Anzeige gestrichen, so dass ich ein bisschen in Panik geriet, dass ich noch eine Stunde hier herumstehen müsste.

Zu allem Elend hat auch noch jede dritte Person auf den Bussteigen geraucht. Es war voll, und sie haben sich gleichmäßig verteilt, so dass man ihnen nicht ausweichen konnte.

Irgendwann kam der Bus dann doch.

Oberhausen Sterkrade

Der Bus in Oberhausen Sterkrade hatte Verspätung, aber glücklicherweise trat das auch auf den Zug zu. Er hatte zehn Minuten Verspätung laut Durchsage, aber 12 Minuten nach fahrplanmäßiger Abfahrt war er noch nicht da. Dann kamen drei Durchsagen, direkt hintereinander, dass dieser Zug 20 Minuten Verspätung habe. Kurze Zeit später noch eine Durchsage, 25 Minuten.

Als der Zug dann endlich kam, gab es keine Sitzplätze mehr. Erst nach einer knappen Dreiviertelstunde Fahrt wurde ein Sitzplatz frei.

Arnhem und der Rest

Für Arnhem musste ich mir dann auch noch eine andere Verbindung suchen, weil ich ja deutlich zu spät war. Am Ende bin ich dann 1,5 Stunden zu spät angekommen, bei einer geplanten Fahrtzeit von 2,5 Stunden.

Autofahren ist auch Scheiße

Kommen wir nun zum Titel dieses Blogposts. Im ersten Zug, zwischen Essen und Oberhausen Hauptbahnhof wurden Informationen zu Baustellen im Zug angezeigt. Mit dem Hinweis (in etwa, Wortlaut kenne ich nicht mehr): „Bevor sie auf das Auto umsteigen, bedenken Sie: Auch dort haben sie Baustellen und Staus“.

Stimmt. Aber vielleicht sollte man den Marketing-Spezis bei der Bahn mal erklären, dass „die Alternativen sind auch Scheiße“ nicht gutes Marketing ist.

Der Ticketkauf

Der Ticketkauf war ein traumatisches Erlebnis für mich. Die Bahn hat ein neues Frontend für den Kartenkauf und es ist noch schlimmer als vorher.

Update: Ok, jetzt, eine Woche später als geplant, kommt endlich der Rant über die Fahrplanauskunft. Grund für die Verzögerung war ein kleines Souvenir von der Bahnreise: Eine Covid-19-Infektion (Empfehlung: Tragt FFP2-Masken in Zügen).

Zurück zum Thema: Die Online-Fahrplanauskunft/Ticketshop. Ich habe also mühsam Start-und Zielbahnhof sowie eine Zeit angegeben (und es ist wirklich mühsamer als auf anderen Seiten, weil die Bahn-Website sich alle Mühe gibt, meinen Inputfokus woandershin zu lenken), sehe die Liste der möglichen Verbindungen und denke: „Verdammt, ich wollte noch meine Bahncard angeben“.

Früher war das einfach. Ich konnte ganz am Anfang ein Dropdown öffnen. Das waren zwei Schritte:

  1. Dropdown anklicken
  2. richtige Bahncard auswählen

So schnell ging das. Heute ist das komplizierter. Ich habe eine illustierte Anleitung gemacht.

Schritt 1: Anfrage ändern

Der erste Schritt ist noch harmlos. Man muss die Stelle ausfindig machen, wo man die Bahncard hinzufügen kann. Oben auf der Seite findet sich unter anderem das hier:

Screenshot. Ganz links steht „keine Ermäßigung“. Ganz rechts steht „Anfrage ändern“ neben einem Stiftsymbol.

Prima, dann ändern wir doch mal die Anfrage.

Schritt 2: ähh… Anfrage ändern?

Durch einen Klick auf „Anfrage ändern“ öffnet sich dieses Modal:

Screenshot. Jede Menge Angaben zur Fahrt. Oben links in der Ecke ist ein roter „Ändern“-Button. In der Mitte irgendwo steht „Reisende, Fahrräder, Bahncards > 1 Person, keine Ermäßigung.

Ok… oben links in der Ecke ist ein „Ändern“-Button. Aber vielleicht hilft es ja, wenn ich einfach auf „Reisende, Fahrräder, Bahncard“ klicke.

Schritt 3: Reisende, ähh… Bahncard hinzufügen

Dieser Klick öffnet ein weiteres Modal:

Screenshot. Liste von Reisenden. 1 Person, keine Ermäßigung. Daneben ein kleiner „ändern“-Link mit einem Stift-Symbol. Darunter, viel größer, ein „Hinzufügen“-Button. Unter„Hinzufügen“ steht auf dem Button noch in Klein „(Reisende, Fahrräder)“. Ganz unten ein „Übernehmen“-Button

Nun sind ja alle Informationen da, aber der typische Benutzer liest ja nicht alles, sondern klickt sich schnell durch. Ich will eine Bahncard hinzufügen, oder? Also klicke ich auf „Hinzufügen“.

Schritt 4: Eine Bahncard hinzufügen

Es öffnet sich natürlich noch ein Modal:

Screenshot. Überschrift: „Reisende hinzufügen“ Darunter eine Radiobutton-Liste von verschiedenen Personengruppen (nach Alter) und die Option „Fahrrad“. Weiter unten die Überschrift „Ermäßigungen“. Ganz unten ein „Übernehmen“-Button.

Äh… wo sind denn jetzt die Bahncards? Warte, da steht „Ermäßigungen“! Scrollen wir doch mal in dem Modal nach unten!

Screenshot. Selbe Darstellung wie im vorherigen Bild, doch statt der Radiobutton-Liste ist jetzt eine Checkbox-Liste mit Bahncards da.

Ah, prima, da sind ja die Bahncards!

Schritt 5: Eingaben korrigieren

So, einmal auf „Übernehmen“ geklickt und schon… Moment mal, was soll das?

Screenshot. Die Liste von Reisenden aus Schritt 3, nur stehen dort jetzt zwei Reisende einmal mit- und einmal ohne Bahncard.

Mist. Ich wollte keine zwei Reisenden. Ich wollte doch nur eine Bahncard hinzufügen? Wie kann man die jetzt wieder löschen? Ah, prima, wenn man auf „Ändern“ klickt, kommt ein Modal sehr ähnlich zu dem aus Schritt 4. Nur dass man hier halt den bestehenden Eintrag ändert.

„Löschen“ gehört auch dazu. Warum man zum Löschen ein Modal öffnen soll, anstatt es einach mit einem Button in der Liste zu machen, ist mir schleierhaft. Aber wenigstens kann ich hier auch Bahncards nach Lust und Laune hinzufügen. Ich muss es nur mit „Übernehmen“ bestätigen.

Damit lande ich wieder in dem Modal aus Schritt 3, nur dieses Mal mit den korrekten Angaben.

Schritt 6: Noch einmal „Übernehmen“ klicken

Um dieses Modal zu schließen, muss ich dann noch einmal auf „Übernehmen“ klicken. Ein bisschen zu viel des Guten, aber ok. Damit Bin ich wieder im ersten Modal:

Screenshot. Wieder das Modul aus Schritt 2. Dieses Mal ist eine Bahncard angegeben. Oben in der Ecke ist nach wie vor ein roter „Ändern“-Button

Prima. Jetzt nur noch dieses Modal schließen. Das geht entweder mit einem Klick auf das X oben in der Ecke (das es nicht auf den Screenshot geschafft hat) oder, indem man einfach neben das Modal klickt.

Aber… Huch!

Screenshot. Ganz links steht „keine Ermäßigung“. Ganz rechts steht „Anfrage ändern“ neben einem Stiftsymbol.

Die Bahncard ist noch nicht ausgewählt! Was zum…?

Schritt 7: Zurück zu Schritt 1

Ich habe das Ganze mehrmals durchprobiert. Obwohl die Bahncard jedes Mal zwei Mal übernommen habe, wurde sie nie übernommen.

An diesem Punkt war ich wirklich verzweifelt. Eine halbe Stunde und einen blutigen Kampf mit der Website später hatte ich endlich die Lösung: Ich muss in dem ersten Modal noch einmal auf „Ändern“ klicken.

Wider Erwarten öffnet sich dann nämlich nicht noch ein Modal. Stattdessen wird das Modal geschlossen und die Änderungen übernommen.

Zusammenfassung

Um eine Bahncard hinzuzufügen, musste man früher ein Dropdown benutzen.

Jetzt muss man nicht ein, nicht zwei, sondern drei Modale in Reihe öffnen und die Eingaben nicht ein, nicht zwei, sondern drei Mal bestätigen. Und um allem die Krone aufzusetzen, sind die buttons nicht konsistent benannt. In der Regel öffnet ein „Ändern“-Button ein Modal und ein „Übernehmen“-Button bestätigt die Eingaben. In einem Fall öffnet der „Ändern“-Button kein Modal sondern übernimmt die Funktion des „Übernehmen“-Buttons.

Und dann ist es viel zu leicht möglich, aus Versehen alle Eingaben zu verwerfen, selbst die, die man bereits zwei Mal übernommen hat.

In Punkto User Interface und User Experience bestenfalls eine 5 (mangelhaft). Ich kenne das ja aus eigener Erfahrung, dass man sein UI gerne aus dem Bauch heraus entwirft, aber das ist kein guter Ansatz für eine Website, die jeden Tag von unzägligen Reisenden benutzt wird.

Das Teil braucht dringend eine Überarbeitung.

GitLab Registrierungs-Dark-Patterns

Als Github vor ein paar Jahren von Microsoft übernommen wurde, gab es eine große Abwanderung zu GitLab. Gut, soweit ich es erkennen kann, ist Github immer noch weitaus populärer, aber immerhin.

GitLab ist einerseits eine Web-Application zum Hosten und Verwalten von git-Repos, andererseits gibt es auch eine zentrale Instanz dieser Software, wo man git-Repos hosten kann, sowohl öffentlich als auch in einem gewissen Rahmen private Repos. Das Ganze ist kostenlos.

Ich selbst hoste ein paar Sachen auf GitLab, unter anderem ein Repo, das ein mit Hugo erstelltes Lexikon enthält (über eine Fantasy-Welt einer Rollenspielrunde, an der ich teilnehme). Hier habe ich schon einmal davon berichtet.

Kollaboration am Lexikon

Nun ist die Spielleiterin und Autorin der Welt mit an Bord bei diesem Projekt, hat bisher aber nur über mich Dinge eingepflegt. Ich wollte ihr jetzt zeigen, wie sie das selber machen kann, zumindest bis zu einem gewissen Grad, damit es für mich und für sie schneller geht.

Besagte Spielleiterin ist keine Informatikerin und hat weder viel Erfahrung it Markdown oder Hugo, und erst recht keine Erfahrung mit git. Besonders letzteres könnte ein Problem sein, denn obwohl git die ganze Arbeit sehr vereinfacht, muss man doch erst ein paar Konzepte lernen, um damit umzugehen.

Ein paar Konzepte lernen, einen git-Client unter Windows installieren, den man idealerweise nicht nur per Kommandozeile benutzen kann, den ganzen Krams pushen… das alleine kann für jemanden, der nur kurz ein paar Tags zu Charakterseiten hinzufügen möchte, abschreckend sein. Besagte Freundin war aber willens, sich darauf einzulassen.

Glücklicherweise gibt es bei GitLab ja auch die Möglichkeit, kleinere Änderungen direkt auf der Website vorzunehmen, so dass vielleicht zumindest das Herumgehampel mit einem lokalen Klon des Repos entfällt. So oder so, die Spielleiterin brauchte erst einmal einen GitLab-Account.

Account-Erstellung schwer gemacht

Ein Account bei GitLab ist grundsätzlich kostenlos. Man kann zwar Zusatzoptionen buchen, die einem eine CI-Pipeline oder ähnlichen Krams bringt und es erlaubt, mehr als eine kleine Anzahl an Personen an einem privaten Repo arbeiten zu lassen, aber das brauchten wir nicht. Die Spielleiterin brauchte nur einen kostenlosen, einfachen Account. Von dem ich ihr versicher habe, dass sie ihn anlegen kann.

Dementsprechend war sie ein bisschen überrascht, als sie auf der GitLab-Seite (also der Seite, auf die man gelangt, wenn man nicht eingelogged ist) folgendes sah:

Screenshot. Ein Fett markierter „Get free trial“-Button links, ein unmarkierter „Sign in“-Link rechts

„Get free trial“ impliziert ja, dass der Account grundsätzlich etwas kostet. Was besagte Freundin erst einmal sehr skeptisch gemacht hat. Auf den „Sign in“-Link zu klicken kam ihr nicht in den Sinn. Warum auch? Sie hatte ja noch keinen Account, um sich einzuloggen.

Glücklicherweise sah sie oben links im Menü einen „Pricing“-Link, der sie zu einer Seite führte, wo unter anderem das hier zu sehen war:

Screenshot: „Free, essential features for individual users, 0$ per user/month“, darunter ein „Get started“-Link

Das sah richtig aus, also hat sich sich darüber einen Account erstellt. Die Überraschun kam nach der Registrierung, als der Account aktiviert werden sollte. Dort war nicht nur ein Feld zur Bestätigung der E-Mail-Adresse, sondern auch ein Pflichtfeld zur Eingabe einer Telefonnummer. Zitat der Spielleiterin:

Jetzt wollen die auch noch meine Handynummer, sorry, nein

Durchaus eine gute Einstellung. Wieso zur Hölle wollen die ihre Telefonnummer? Habe ich dort meine Telefonnummer angegeben?

Ein kurzer Check stellte heraus: Nein, natürlich nicht. Es musste also einen Weg ohne Telefonnummer geben. Eine kurze Suche hat dann auch ergeben, wo: Wenn man, wie sie, über die „Pricing“-Seite geht, kommt man zu dieser Registrierungsseite.

Wenn man aber zuerst konterintuitiv auf „Sign in“ klickt, und dann dort auf „Register now“, kommt man stattdessen auf dieser Registrierungsseite. Der Unterschied ist erst einmal minimal. Bei dieser Seite muss man aber nach der Registrierung nur die Mailadresse bestätigen, keine Telefonnummer angeben.

Nun kann meine Spielleiterin jetzt erst einmal trotzdem keinen Account erstellen. Sie hat sich ja schon mit ihrer Mailadresse registriert. Da braucht sie aber eine Telefonnummer. Den Account kann sie auch nicht löschen, bis sie ihn aktiviert hat. Die einzige Möglichkeit, die bleibt, ist, drei Tage zu warten bis der nicht-aktivierte Account gelöscht wird.

Fazit

Zitat meiner Spielleiterin:

Organistionen, die solchen Kram veranstalten mit einem, sind eigentlich eh nicht so mein Fall. Es sieht für mich sehr so aus, als wenn die dauerhafte, kostenlose Option, wo sie einem nicht Infos aus der Nase ziehen, eigentlich nur noch so als Überbleibsel da ist, und das nicht das ist, was sie wollen, das man benutzt. So, wie das wirkt.

Sie hat recht. Das Ganze stinkt sehr nach einer Masche, Leute mit aller Kraft in Richtung der Zahloptionen zu schieben, selbst wenn sie das überhaupt nicht brauchen. Und um zusätzlich nocht weitere personenbezogene Daten (die Telefonnummer) einzusammeln. Ein klassisches Dark Pattern.

Nun habe ich persönlich ein gewisses Vertrauen in GitLab, aber ich war trotzdem ziemlich enttäuscht von dieser Benutzerführung. Und jetzt kann ich nur hoffen, dass meine Spielleiterin nach dieser Geschichte überhaupt noch GitLab benutzen will. Ihre Motivation hat vermutlich einen starken Dämpfer bekommen, noch bevor ich überhaupt mit dem git-Workflow um die Ecke gekommen bin. So kann man Leute auch von cooler Technologie fernhalten: Indem man unnütze Hürden einbaut, die demotivieren, bevor man überhaupt richtig angefangen hat.

Sparkasse pushTAN und das Passwort

Ach ja, Passwortregeln. Darüber habe ich mich ja schon vor einem Jahr aufgeregt. Kurz: Viele Passwortregeln in freier Wildbahn sehen etwa so aus (Quelle):

Es tut uns leid, Ihr Passwort muss mindestens einen Großbuchstaben, zwei Ziffern, ein Symbol, eine inspirierende Nachricht, einen Zauberspruch, ein Gang-Logo, eine Hieroglyphe und das Blut einer Jungfrau enthalten.

Das Problem ist so verbreitet, dass es schon Spiele dazu gibt. Dabei ist der heutige Stand der Wissenschaft: Wenn man überhaupt ein Passwort benutzen muss (anstatt einer anderen Möglichkeit zur Authentifizierung), dann muss es nur zwei Regeln einhalten:

  1. Es muss eine Mindestlänge haben (häufig wird 10 genannt)
  2. Es darf nicht in einem Wörterbuch stehen (Bonus: Es darf nicht in einer Datenbank von geleakten Passwörtern vorkommen)

In der Praxis sieht das leider immer noch anders aus. Das geht so weit, dass sich der Typ, der sich die typischen Passwortregeln ausgedacht hat, öffentlich entschuldigt hat.

Sparkasse pushTAN

Die Sparkasse (hier speziell die Sparkasse Essen, aber die scheinen größtenteils alle dieselbe App zu nutzen) scheint davon noch nichts mitbekommen zu haben. Eine Verwandte von mir wollte heute die pushTAN-App einrichten und wurde mit einem Formular konfrontiert, dass in etwa so aussah:

Screenshot: Ein Passworteingabeformular. Unter dem Formular eine Liste mit grün abgehakten Punkten: „Mindestens eine Zahl“, „Mindestens ein Buchstabe“, „8 oder mehr Zeichen“, „Mindestens ein Sonderzeichen“, darunter in rot ein Button „App-Passwort festlegen“

Wie man sieht einmal grob alle dummen Regeln aufgelistet. Im konkreten Fall sah das Formular aber etwas anders aus: Der Button zum Bestätigen war ausgegraut.

Komisch. Es sind doch alle Passwort-Regeln erfüllt, oder? Jede der Regeln ist grün markiert und mit einem Häkchen versehen. Das heißt, dass die erfüllt sind, oder?

Nein, natürlich nicht. Es stellte sich heraus, dass meine Verwandte übersehen hat, dass auch ein Sonderzeichen im Passwort enthalten sein muss. Der Punkt war trotzdem grün und abgehakt. Alle Punkte waren grün und abgehakt, selbst wenn das Passwortfeld leer war.

Das ist schon komplett konterintuitive Bedienung. Wenn die Liste wenigstens schwarzweiß gewesen wäre, dann hätte sie einfach nur wie eine Auflistung der Regeln ausgesehen. Grün und mit Häkchen sah sie aus wie eine Checkliste, in der alles abgehakt ist.

Und nicht nur das, es gab sonst überhaupt keinen Hinweis, warum der „App-Passwort festlegen“-Button ausgegraut war. Nichts. Man hat keinen Hinweis, dass die Eingabe auch nur in irgendeiner Form ungültig ist. Nur der Absenden-Button ist halt ausgegraut.

Das ist so typisch Sirius Cybernetics Corporation: Die offensichlichen Designschwächen täuschen nur zu gut über die absolut grundlegenden Designprobleme hinweg.

Eine Website im Halloween-Kostüm

Heute wollte ich ganz unschuldig ein TeX-Paket nachschlagen. Völlig überraschend hat mich diese Seite begrüßt:

Screenshot von ctan.org. Vom Design her erinnert sie an übertriebene websites aus den 90ern. Die Seite ist in Rot-/Orange-/Schwarztönen gehalten. Die Schriftart erinnert an Comic Sans (ist aber eigentlich „Schoolbell“). Rechts oben ist das Seitenlogo, projeziert auf eine abgeflachte Kugel. Hintergrundbild für den Text ist eine Textur, die entweder schwarzes Holz oder Marmor darstellen könnte.

Ich war zunächst ein bisschen schockiert. Der Screenshot zeigt nicht einmal alles. Die Kugel rechts oben? Die ist animiert und dreht sich. Der Text oben im Hintergrund? animiert, läuft von rechts nach links. Wenn man die Maus bewegt, bewegt sich die Textur im Haupt-Textbereich. Da ich davon ausgehe, dass der Spuk morgen wieder vorbei ist, hier ein Link zu der archivierten Seite.

Die Seite ist halbwegs sauberes HTML5, mit responsive design, etwas, worauf in den 90ern nicht wirklich Acht genommen wurde.

Dann fiel mir ein: Es ist Halloween. Diese Aufmachung ist das Halloweenkostüm der Seite. Glorreich! Es enthält vieles, was ein gutes Halloweenkostüm braucht:

  • es ist gruselig
  • es stellt etwas dar, was schon lange tot ist (aber trotzdem noch herumläuft)
  • ich kann nicht leugnen, dass eine gewisse Handwerkskunst hineingeflossen ist. So wie im September bei der Ugly Plot Competition.
  • ich kann beruhigt schlafen, weil ich weiß, dass die Gruselei morgen wieder vorbei ist.

Zum Vergleich: So sieht die Seite normalerweise aus:

Screenshot von ctan.org. Die Seite ist größtenteils Schwarz/Weiß mit nüchternem, funktionalen Design.

PS: anscheinend hat die Seite dieses Halloweenkostüm schon in den letzten Jahren immer angezogen. Trotzdem genial.

Das Kochprojekt in neuem Glanz

Ich habe endlich den letzten Eintrag meines Kochprojektes überarbeitet. Das war lange in Arbeit und ich habe es Stück für Stück veröffentlicht. Meist, wenn ich das betreffende Rezept gerade gekocht habe, aber manchmal auch so.

Für die meisten von euch wird der einzige sichtbare Unterschied sein, dass der Name des Gerichts jetzt endlich auch im Titel des Blogposts auftaucht. Aber dahinter steckt noch ein bisschen mehr. Aber dazu muss ich etwas weiter ausholen…

Das Kochprojekt

Im Jahr 2014, das Jahr, nachdem ich meinen Masterabschluss gemacht habe, hatte ich mir ein Projekt vorgenommen: Ich wollte jede Woche etwas kochen, was ich bis dahin noch nicht gekocht habe. Im Großen und Ganzen ein Erfolg.

Doch ein paar Schönheitsmakel gab es schon. Das Sichtbarste waren natürlich die Blogpost-Titel: Die hießen einfach „Kochprojekt Woche 1“, „Kochprojekt Woche 2“ usw. Das ist natürlich unpraktisch, wenn man sich die Übersicht anschaut und ein spezielles Rezept sucht oder auch nur sehen möchte, welche Rezepte es denn gibt. Das wäre recht einfach zu beheben gewesen, aber es hätte auch Arbeit bedeutet, die ich mir damals nicht machen wollte.

Der zweite Schönheitsfehler, der schon damals bemerkbar war, war, dass bis irgendwann im September die alt-Texte von Bildern einfach nur „Image“ waren. Warum, erkläre ich unten. Das ist doof, insbesondere für sehbehinderte Leute, die so keine Ahnung haben, was dort eigentlich zu sehen sein soll.

Der neue Bloggenerator

2020 habe ich dann die Blogsoftware umgestellt. Das bedeutete mehrere Dinge:

  1. waren die Blogpost von da an in Commonmark verfasst, anstatt wie vorher in reinem HTML. Die alten HTML-Blogposts habe ich aber als solche in die neue Software importiert, um den Umstieg zu erleichtern.
  2. habe ich ein paar Meta-Elemente hinzugefügt, z.B. eine meta-description und OpenGraph-Bilder, so dass meine Blogposts, wenn sie an bestimmten Stellen geposted werden auch direkt eine kurze Zusammenfassung und ggf. ein Bild erhielten.
  3. Haben sich die URLs für die Bilder geändert (die alten URLs funktionieren aber weiterhin).
  4. Habe ich irgendwann automatisch Bilddimensionen zu eingebundenen Bildern hinzugefügt.

Von dieser Liste war nur Punkt 2 einfach zu erledigen.

HTML zu Markdown

Die Umwandlung von HTML zu Markdown ist eigentlich erstaunlich einfach. Dazu gibt es das Python-Paket markdownify. Hier und da muss manchmal noch ein bisschen nachgearbeitet werden.

Aber ganz so einfach ist es nicht, denn Punkt 4 hängt davon ab, dass die Blogsoftware die Bilder auch findet. Und da in den alten Posts noch die alten Pfade verwendet wurden, und die sich nach Punkt 3 geändert haben, schmiert die Blogsoftware dann einfach ab, weil sie die Bilder nicht finden kann (das ist Absicht, damit ich nicht aus Versehen ungültige Pfade einbaue). Der einzige Grund, warum das vor der Umwandlung von HTML in Markdown funktionierte ist, dass die Bildgrößen nur bei Markdown eingebunden werden. HTML wird einfach 1:1 übernommen, ohne auf die URLs zu schauen.

Die Pfade mussten also alle angepasst werden. Auf der positiven Seite konnte ich dadurch auch die alten Pfade, die bisher einfach dieselben Dateien wie die neuen Pfade ausgeliefert haben, mit einem 301 Moved Permanently umleiten, was etwas sauberer ist. Das habe ich vorher sein lassen, damit nicht jeder Aufruf nach einem Bild zwei Mal durchgeführt werden muss.

BB-Code

Die Umstellung von HTML zu Markdown war übrigens nicht die erste Umstellung. Irgendwann mitten im Kochprojekt habe ich damals die ursprüngliche BB-Code-Codierung der Blogposts auf reines HTML umgestellt. Gründe dafür gab es mehrere, aber der Hauptgrund war die Performance. Der in Ruby geschriebene BB-Code-Parser war einfach entsetzlich lahm, was insbesondere ein Problem war, weil die blogposts just-in-time gerendert wurden.

Ein nebensächlicher Grund war, dass ich nicht zufrieden war mit dem HTML, dass aus dem BB-Code herauskam. Zum einen war es kein semantisches HTML. Ich konnte zum Beispiel keine echten Überschriften machen, sondern musste auf Elemente wie [b] zurückgreifen, was als <strong> gerendert wurde, also eine starke Betonung, aber definitiv keine Überschrift. Auch konnte man keine alt-Texte für Bilder angeben (wie oben erwähnt). All das musste ich manuell nacharbeiten.

Viel Arbeit, verteilt auf viel Zeit

Seit Anfang 2021 habe ich dann die alten Kochprojekteinträge überarbeitet. Meist (aber nicht immer) wenn ich das Rezept sowieso kochen wollte. Jeder Eintrag war schon Arbeit, und so zog sich die Sache dahin. Vor Kurzem habe ich endlich in einer Hauruck-Aktion die letzten zehn Einträge fertig gemacht. Nebenbei hier und da auch noch einen anderen Artikel, der noch die alten Bildpfade enthielt. Die anderen Artikel waren aber weitaus weniger zahlreich und hatten meist nur ein Bild, so dass die Arbeit deutlich geringer war.

Jetzt muss ich nur noch die letzten 144 Blogposts auf Markdown umstellen. Und dann bleibt immer noch einer, in dem eine Tabelle ist. Was ich mit dem anstelle, weiß ich noch nicht.

Telekomterror

Ich ziehe ja demnächst wieder nach Deutschland, und in meiner neuen Wohnung brauche ich natürlich auch einen Internetzugang. Die Tarife bei den verschiedenen Anbietern unterscheiden sich da nicht so sehr, von der Qualität habe ich in der Vergangenheit keine großen Unterschiede bemerkt (aka sie sind alle Murks), also gehe ich zur Telekom, da sind wenigstens der Anschluss am Haus und der Internetanbieter in derselben Hand.

Also gehe ich auf die Telekomseite, wähle einen Tarif (der jede Menge Kram hat, den ich nicht brauche, z.B. eine kleine Menge Cloud-Speicher bei der Telekom und eine E-Mail-Adresse bei der Telekom) und versuche mich durchzuangeln.

Hindernis 1: Verfügbarkeitsabfrage

Bevor ich den Anschluss in den Warenkorb legen kann, möchte die Telekom prüfen, ob dieser Anschluss bei mir verfügbar ist. Soweit eigentlich verständlich.

Wenn ich in der Verfügbarkeitsabfrage den Straßennamen meiner neuen Wohnung angeben möchte, löscht die Seite den Straßennamen, bevor ich überhaupt die Hausnummer eingeben kann. Vorher blitzt ganz kurz auf, dass zu dieser Straße keine Treffer gefunden werden konnten.

Aber je nachdem auf welchem Weg ich mich durch die Seite durchklicke, komme ich auf eine Seite, wo ich den Anschluss ohne vorherige Prüfung in den Warenkorb legen kann. Also mache ich das.

Wenn ich dann zur Kasse gehe, kommt dort die Prüfung. Meine Straße (die es definitiv gibt, die Adresse ist korrekt, ich habe es mehrmals geprüft) findet er auch hier nicht. Allerdings kann ich hier einen Haken auswählen, dass die Prüfung übersprungen werden soll (ich denke mal, dass das bedeutet, dass die Telekomtechniker am anderen Ende dann das Problem mit der fehlenden Straße lösen dürfen).

Wenn ich aber auf diesen Haken klicke, komme ich trotzdem nicht weiter. Kein Hinweis, warum. Wenn ich dann aber nach oben im Formular schaue stelle ich fest, dass dadurch ein neues Pflichtfeld hinzugefügt wurde: Vorwahl des Ortes. Also die Vorwahl rausgesucht, eingegeben, und jetzt kann ich endlich weitermachen.

Hindernis 2: Die E-Mail-Adresse

Nun muss ich alle möglichen Daten eingeben, unter anderem auch meine E-Mail-Adresse. Nun nutze ich für solche Sachen ungerne meine Posteo-Adresse (die ich hauptsächlich für private Kommunikation vorbehalte) und lieber meinen alten Googlemail-Account.

Der Googlemail-Account hat auch den Vorteil, dass ich im lokalen Teil der Mail (also vor dem @) etwas in der Form von +irgendwas hinzufügen kann, und das zum selben Postfach führt wie ohne dieses Suffix. Ich benutze das gerne, um zu kennzeichnen, wo ich diese Mail angegeben habe. So kann ich nachvollziehen, ob jemand meine Mailadresse geleaked oder verkauft hat. Die Adresse sieht dann in diesem Fall etwa so aus festes.praefix+telekom@googlemail.com.

Das ist eine gültige E-Mail-Adresse, aber das Telekom-Formular behauptet, sie sei nicht gültig.

Hindernis 3: Kontaktformulare

Also nach Support gesucht. Der ist gut versteckt. Es gibt Kontaktformulare. Da muss man sich vorher durch ein dreiseitiges Formular durchkämpfen um zu bestimmen, welches Kontaktformular man haben möchte. Keine der Optionen passte wirklich auf mein Problem, also habe ich die nächstbesten Optionen genommen. Dann sagt mit das Teil, dass so ein Formular einige Tage braucht, um bearbeitet zu werden (und ich habe extra früh angefangen, mir den Anschluss zu besorgen, damit ich nicht viel zu lange ohne Internetanschluss dastehe) und lässt mich endlich zum Formular.

Im Formular muss ich dann wieder alles Mögliche angeben: Name, Adresse, Anschlussnummer… Moment, Anschlussnummer? ABER MEIN FUCKING PROBLEM IST DOCH DASS ICH KEINEN ACCOUNT ERSTELLEN KANN GESCHWEIGE DENN EINEN ANSCHLUSS BUCHEN!

Dasselbe Problem hatte ich auch, als ich meinen Minecraft-Account von dem klassischen Mojang-Account zu einem Microsoft-Account umstellen musste. Microsoft wollte meine (gültige) Mailadresse nicht. Mojang konnte mir keinen Support geben, weil das Microsofts Sache war (bestand aber darauf, dass ich meinen Account umstelle). Der Microsoft-Support funktioniert nur, wenn man bereits ein Microsoft-Konto hat, selbst wenn mein Problem ist DASS ICH KEINS ERSTELLEN KANN.

Hindernis 4: Chatbot

Aber es gibt noch andere Supportwege. Zum Beispiel einen Chat. Hier werde ich zunächst einem Chatbot vorgeworfen. Der hat nun bei Weitem nicht ChatGPT-Qualität, obwohl das am Ende vermutlich wenig Unterschied gemacht hätte. Nachdem das Teil meine Fragen zwei Mal nicht verstanden hatte, leitete es mich an eine menschliche Supportperson weiter.

Hindernis 5: missing link

Die Supportperson hat sich dann über die Sache mit dem Pluszeichen gewundert und gemeint, dass das eigentlich gehen müsste. Sie hat dann für mich den Account angelegt. Ich habe eine Mail zur Bestätigung meiner E-Mail-Adresse erhalten.

In dieser Mail fehlte aber der Bestätigungslink. Ich zeige nur Plaintext-Mails an. Diese Mail hatte zwar einen Plaintextteil und einen HTML-Teil, aber der Plaintextteil enthielt den Link zur Aktivierung nicht. Andere Links enthielt er jedoch. Die Mail war also kaputt.

Ich habe dann mit dem Texteditor den Link aus dem HTML-Teil der Mail herausgefischt.

Hindernis 6: Ausland

Nun sitze ich noch in den Niederlanden. Als ich den o.g. Link dann im Browser aufrief, sagte mir die Seite, dass ich das nur in Deutschland machen könnte. Ein VPN hatte ich gerade nicht zur Hand, also was tun?

Ich habe dann mein armes Mütterchen angerufen, damit die den Link für mich aufruft. Bei ihr hieß es aber dann „Die Seite sagt, dass diese E-Mail-Adresse schon bestätigt wurde.“

Mit anderen Worten: Die Seite hatte mich glatt angelogen, als sie behauptet hat, dass ich das nur aus Deutschland machen konnte

Hindernis 7: Login

Aber der Account ist jetzt aktiviert, also versuche ich mich, einzuloggen:

Benutzername ist nicht korrekt.

Na toll. Ich habe die Mailadresse gerade bestätigt. Ich habe von euch eine Mail an diese Adresse bekommen! Ihr könnt nicht sagen, dass die nicht gültig ist.

Aber mal schauen, welche Optionen zum Login gibt es noch?

  • Telekom-Mobilfunk-Nummer? Habe ich nicht
  • E-Mail-Adresse? Funktioniert nicht
  • Zugangsnummer? Dafür muss ich erstmal einen Anschluss gebucht haben
  • Benutzername? Kenne ich nicht, oder ist auch die E-Mail-Adresse

Aber vielleicht braucht es ja einfach ein bisschen Zeit, bis die Aktivierung der Mail auch in den richtigen System angekommen ist. Also einfach regelmäßig probieren, mich einzuloggen

Hindernis 8: Zu lange inaktiv

Wenn ich eine ganze Zeit lang regelmäßig versuche, mich einzuloggen, läuft irgendwann meine session ab (obwohl ich die ganze Zeit aktiv war). Ich kriege also eine Fehlermeldung. Wenn ich dann auf den Link in der Fehlermeldung klicke lande ich auf https://www.telekom.de/hilfe/technical-error?samChecked=true, was zumindest gestern und heute eine absolut leere Seite ist. Absolut leer im Sinne von: Das ist eine komplett weiße Seite.

Hindernis 9: Nervenzusammenbruch

Ich war mittlerweile seit über zwei Stunden beschäftigt, mir einen Account zu erstellen. Es war spät in der Nacht, und piqaerugfböaosuedfbdösaidufbüweiougfhalsidhvdöad.kjbsadfüiou FUCK YOU

Update

Ich habe heute noch einmal versucht, per Chat Support zu bekommen. War nur mäßig erfolgreich bis zu dem Punkt, wo ich zugestimmt habe, den Chatsupporttypen den Vertrag für mich abschließen zu lassen. Der sagt mit dann, dass ich nur 16MBit/s kriegen kann.

Nun habe ich aber inzwischen herausgefunden, warum die Verfügbarkeitsprüfung bei mir nicht ging: Wenn ich statt „Soundsostraße“ nur „Soundsostr.“ eingebe, funktioniert das prima. Und das Ergebnis ist, dass bei mir 100MBit/s verfügbar sein sollten. Und diese Auskunft habe ich dann dem Typen vom Chatsupport mitgeteilt.

Der meinte, das läge daran, dass ich da wohl wholebuy-Kunde werden würde, was heißt, dass sie die Leitung von einem anderen Anbieter buchen. Er hat auch noch gesagt, ich solle dafür eine Nummer anrufen, die er mir nannte. Bevor ich nachfragen konnte, was ich denen dort erzählen soll, hatte er den Chat schon beendet.

Nun war damit aber der Hauptgrund weggefallen, warum ich überhaupt die Telekom gewählt hätte: Dass Infrastruktur und Internetzugang in derselben Hand liegen.

Also habe ich mir einen anderen Anbieter herausgesucht. Namen nenne ich )noch?) nicht, ich schaue mir erst einmal an, wie das läuft.

Dort musste ich jedenfalls aus mir unerfindlichen Gründen auch meine bisherige Wohnadresse angeben. Dazu gehörte auch ein Feld, in dem ich die Postleitzahl eingeben musste. Das Feld ließ aber nur fünfstellige PLZ zu, die nur aus den dezimalen Ziffern bestanden (also das deutsche Format). In den Niederlanden ist das Format aber anders (vier Ziffern plus zwei Buchstaben). Konnte ich nicht eingeben. Also habe ich einen Dummy-Wert eingegeben und in einer separaten Supportanfrage nachgehakt, warum sie die Adresse überhaupt brauchen, dass die PLZ falsch ist und wenn sie die richtige PLZ haben wollen, sie sich noch einmal bei mir melden sollen.

Fürs Protokoll: Die altbekannten falsehoods programmers believe about addresses, den Hinweis, dass das beste Adressformular einfach ein großes Freitextfeld ist, und ein Hinweis auf die Fallstricke von E-Mail-Adress-Validierungen:

What I found out was surprising. Nearly 100% of regular expressions on the web purporting to validate an email address are too strict.

Ein Kollege von mir ist übrigens der Meinung, dass, wenn eine kleine Minderheit von Entwicklern unfähig ist, Pluszeichen in E-Mail-Adressformularen zuzulassen, der Standard geändert werden müsse, so dass Pluszeichen überhaupt nicht mehr erlaubt sind.

Ich bin da anderer Ansicht.