dogfood

Category: WebDev

Was war. KW#51

Joa. Ich kriege das regelmäßige Blogschreiben immer noch nicht hin. Nun gut. Mein Recap der letzten drei Wochen.

Things I worked on.

Frisch aus dem Urlaub zurückgekehrt, fing es für mich beim Kundenprojekt „t5“ wieder an. Die drei Wochen standen bereits im Zeichen des Jahresabschlusses und des Januars. Es gab viel Stundenzettel-Voodoo, wie er leider bei Konzernen inzwischen usus ist (inkl. Buchungs-Deadline alle Dezember-Stunden bereits Mitte Dezember). Dazu Vorausplanung für den Januar wg. Urlaub des Projektmanagers.

Eine Eigenart des Projektes sind die mitunter frugalen Spezifikationen – ablesbar an Tickets, bei denen ich im ersten Step eine sechszeilige Aufgabenbeschreibung auf über 100 Zeilen aufblähe. Bei Tickets mit größerem Scope, habe ich es mir angewöhnt, erst einmal im Kopf alle Edge Cases durchzuspielen. Und Edge Cases eskalieren schnell, wenn man drei unterschiedliche Breakpoints, Touch- und No-Touch-Devices und unterschiedliche Content-Mengen berücksichtigen muss.


In diesen drei Wochen und jetzt „zwischen den Jahren“ arbeite ich meine Liste an Kunden-Websites ab, in denen ich Adobe Typekit-Webfonts verarbeitet hatte, um sie nun gegen selbstgehostete Fonts zu ersetzen. Sechs Sites sind bereits angepasst. Vier sind noch auf der Liste.

Während ich bei Groteskschriften zahlreiche Alternativ-Fonts habe, ist das Angebot bei Antiquas deutlich dünner. Die Garamond Pro werde ich nicht annähernd nahtlos austauschen können.

Was mich aber beim Schriftenvergleich sehr geflasht hat: das große „W“ der Garamond und seinen überkreuzenden Diagonalen, die es wie zwei große „V“s wirken lassen. Verglichen mit der Darstellung anderer gewöhnlicher Antiquas, ist es eine komplexe Verzierung, die aber trotzdem nicht überladen wirkt. Wie aufwändig diese Form ist, fällt nicht nur im Vergleich zu anderen Antiquas, sondern auch im Vergleich zum kleinen „w“ auf. Das kommt im normalen Schriftschnitt gewöhnlich daher, während es im kursiven Schnitt den Garamond-typischen, schreibschrift-ähnlichen Schwung hat.

Der Buchstabe „W“ in der Garamond

Die Projekte habe ich zum Anlass genommen, mein Frontend-Boilertemplate, mit dem ich Projekte beginne, zu überarbeiten. Grunt habe ich rausgeschmissen und durch npm-Skripts ersetzt. Bei Sass kommt jetzt Dart-Sass zum Einsatz.


Mein drittes Projekt der drei Wochen war eine Website-Aktualisierung beim Projekt „Grün-Blau“. Einmal im Jahr wird eine Art Jahresabschluss-Statistik sowie eine Gebührentafel für das kommende Jahr veröffentlicht. Aus Zeitgründen habe ich hier jegliche Umbauten unterlassen und 1:1 den aus den Vorjahren etablierten Workflow durchgezogen.

Things I did.

Im Haus habe ich mich dieser Tage verstärkt um das Thema Licht gekümmert. Ich habe drei Stehlampen gegen eine Steh- und eine Tischlampe ausgetauscht – ich bin lichtempfindlich und daher immer noch ein sehr großer Freund von indirekter Beleuchtung.

In der Küche habe ich mit einem LED-Strip ein Defizit kompensiert, das seit dem Bau der Einbauküche (also dem Bezug des Hauses) vorhanden war. Eigentlich ist unter den Oberschränken eine LED-Leiste verbaut und es führen auch Stromkabel an den Übergabepunkt. Faktisch funktioniert sie nicht, was ich Trottel erst nach einigen Wochen überprüft habe. Ich hatte keinen Bock auf Schuldzuweisungen zwischen Elektriker und Küchenmonteure. Ich habe den Elektriker in Verdacht, dass er da einige Kabel verwechselt bzw falsch verlegt hat. Hatte ich letztes Jahr, einen Monat nach Bezug, Lust gehabt, mit dem Elektriker zu diskutieren und ggf. eine Wand aufstemmen zu lassen? Nope.

Nun habe ich einen LED-Strip gekauft und unter die Oberschränke geklebt. Im Schlafzimmer habe ich endlich eine brauchbare Nachttischlampe, die weder das ganze Stockwerk taghell illuminiert, noch ein derart funzeliges Licht liefert, dass ich keine Comics lesen kann. Im Wohnzimmer sind zwei sehr fette Stehlampen gegen gegen eine stabähnliche Stehleuchte ersetzt worden, die viel weniger Platz einnimmt.


Anderthalb Tage mit Magenverstimmung krank gewesen. Hat sich nicht schlimm angefühlt, aber dass ich dann in einem Rutsch elf Stunden durchschlief, ist für mich schon ein Zeichen, dass es mich etwas heftiger erwischt hat.


Endlich die Bremsbeläge am Fahrrad ausgetauscht, nachdem die Beläge vorne schon fast komplett ausgelutscht waren.


Unter der Woche einen der letzten sonnigen Nachmittag ausgenutzt und runter an die Elbe gefahren, um von Teufelsbrück gen Sonnenuntergang ins Treppenviertel zu laufen. Der Himmel so klar, dass man den von Fuhlsbüttel nach Süden gestarteten Fliegern minutenlang nachgucken konnte, bis sie nur noch ein Punkt im Himmel waren. Das Treppenviertel und die Haupteinkaufsstraße von Blankenese schon komplett im Weihnachtsmodus.


Es drängt es mich gerade wieder verstärkt in Richtung Zeichnen. Ich habe ja einen Studienabschluss „Illustration“. Nach dem ich aber anfangs meiner beruflichen Laufbahn, Mitte der 90er Jahre, noch viel mit Animation und Phasenzeichnungen zu tun hatte, ist das Zeichnen inzwischen komplett eingeschlafen und verkümmert.

Ich habe wieder verstärkt Lust, mich ans Zeichnen zu setzen. Dabei gab es zu „Black Friday“ noch einmal einen Schub, als das Standard-Programm für Illustratoren und Zeichner, „Clip Studio Paint“ (auch als „Manga Studio“ bekannt) zum halben Preis, für 22 Euro, vertickt wurde.

Ich habe mein altes Wacom-Zeichentablett heraus gekramt und sogar noch einen funktionsfähigen Treiber gefunden (ich fürchte mit Mac OS Catalina nicht mehr kompatibel). Und ich hatte durchaus viel Spaß. Am Bild zu Death Stranding sass ich die Feiertage über, mehrere Stunden.

Ich muss mich erst wieder aufbauen. Das Finden zu seinen eigenen Stilen passiert im Studium erst im Laufe der etlichen Semester und nach dem man 2–3 Jahre mit Aktzeichnungen und Stilleben Routine gewonnen und einiges ausprobiert hat.

Nach 20 Jahren Pause, muss ich mich wieder in das Zeichnen hinein finden. Das Auge trainieren. Den Kopf das Gesehene filtern und interpretieren lassen. Und das in die Hand einfließen und den Zeichenstift übertragen lassen.

Auch wenn du als Zeichner es mit einem flachen Medium zu tun hast, so hast du es doch mit einer Skulptur zu tun. Deine Hand und dein Stift müssen spüren, was du zeichnest, damit es sich auf den Strich oder die Farbfläche überträgt.

Wenn du mit Vorlagen (wie bei „Parasite“ oder „Death Stranding“) arbeitest, zeichnest du nicht einfach die Striche der Vorlage durch. Du lässt den ganzen Film oder den ganzen Norman Reedus einfließen. Der Fusselbart von Reedus ist auf der Vorlage nicht deutlich zu erkennen. Aber weil du Reedus in Aktion gesehen hast, weißt du, dass dieser Bart ein Schlüssel für seine Optik ist. Reedus‘ zärtliches Verhältnis zu seinem BB, wird nicht in der Vorlage erkennbar. Dies sind Projektionen und Interpretationen, die der Zeichner selbst beim einfachen „Durchpausen“ in die Zeichnung einbringen muss.

Auf dem Weg zurück zum Zeichnen muss ich versuchen all dies, was ich in den letzten 20 Jahren verloren habe, wieder zu finden.

Reading List

  • WebDev: Six Web Performance Technologies to Watch in 2020, Simon Hearne – Static Website-Generatoren in unterschiedlichen Ausprägungen, u.a. auch in Verbindung mit Headless CMS, WASM, Edge Compute (Code-Ausführung nicht vom Server oder Client, sondern Netzwerk-Dienstleister der dazwischen sitzt), Observability (mehr und bessere Metriken zur Performance-Messung), Platform improvements (Performance-Optimierungstechniken werden bereits pfannenfertig im Browser eingebaut, zB Lazy Loading), Web monetisation (geschmeidigeres Bezahlen durch standardisierte Web-APIs), Verbesserungen der DSGVO durch clientseitige Implementierungen.
  • WebDev: Tracking HTTP/2 Prioritization Issues – die unterschiedlichen Interpretationen der Priorisierung von Requests im HTTP/2-Standard scheint dermaßen verzwickt zu sein, dass man sich erst mit HTTP/3 Abhilfe erhofft.
  • Comics: Eine 16seitige Comic-Fassung der griechischen Sage „Illias
  • Politik: „PISA results can lead policymakers astray“, Economist vom 5.12.2019 – Schwankungen im PISA-Score sollten Politiker vor voreilige Schlüsse warnen.
  • Politik: „After half a century of success, the Asian tigers must reinvent themselves“, Economist-Special Report vom 5.12.2019 – Die Asian Tigers sind immer noch vom Export abhängig. Schwächen im Service-Bereich. Gleiche Altersprobleme wie Japan, weil ähnlich starke Geburtenrückgänge.
  • Science: “This 3D-printed Stanford bunny also holds the data for its own reproduction” – Wissenschaftler haben die Druckpläne für einen 3D-Objekt in Mikrokapseln integriert, die wiederum Teil der Druckflüssigkeit für den 3D-Printer sind, dass das 3D-Objekt ausdruckt. Man kann also ein Stück des Objektes abknapsen, eine der Mikrokapseln extrahieren und den enthaltenen Druckplan auswerten, um das Objekt „nachzudrucken“.
  • Science: Ein Browser-Spiel, dass die Basics der „Game Theory“ erklärt … und zwar auf eine Art und Weise, die bzgl. ihrer Lehren für das Leben, durchaus frustrierend ist.
  • Economics: „Reality and hype in satellite constellations…“, 12.12.2019, TMF Associates blog – Tim Farrar zerlegt das Geschäftsmodell von Starlink.

Things I watched.

  • YouTube-Kanal: The Modern Rogue – Professioneller YouTube-Kanal aus den USA mit gemischten Themen, die sich am ehesten mit „zwei Buddies probieren Dinge aus“ subsummieren lassen. Wie kann man Schlösser knacken, der Effekt von Miraculin, wie arbeiten Taschendiebe etc…
  • Sport: etliche Championship-Spiele auf Sportdigital angeguckt. Das Streamabo kostet nur 50,– Euro/Jahr und funktioniert live und on demand. DAZN hat inzwischen sein Fußballangebot aus den Sportdigital-Ligen mehr als halbiert (ca. 1–2 Championship-Spiele/Woche, 1x Eredivisie, 1x A-League) – was wiederum das Sportdigital-Stream-Abo lohnenswert macht.
  • Sport: Einige Rugby-Europapokal-Spiele gesehen und sehr von Leinster und Clermont beeindruckt gewesen.

Things I listened to.

1ter Dezember heißt: von jetzt bis Weihnachten landet Soma FMs „Christmas Lounge in die Heavy Rotation.

Was war. KW#41

Things I did.

Die Planungen der Woche mussten umgeschmissen werden, nachdem ein für Mittwoch geplantes Briefing von Kundenseite aus, um eine Woche verschoben werden musste und ich damit kurzfristig 2–3 Tage zur fast freien Verfügung hatte.

Einen Tag schmiss ich gepflegt weg, als ich mich um fehlenden Festplatten-Platz meines Desktop-Macs kümmerte (nur noch 18GB frei), um das XCode-Update (7GB) zu installieren.

Das Problem ist das völlig verkorkste Festplatten-Management unter OS X:

  • Der Finder zeigt unter „xxx GB verfügbar“ irrerweise nicht den tatsächlich verfügbaren Festplattenplatz an, sondern eine Zahl, die belegten, aber „löschbaren“ Festplattenplatz dazu addiert. Bei diesem “löschbaren” („cancellable“) Platz scheint sich um Backups, Caches und iCloud-Dateien zu handeln. Einen „Knopf“ zum Löschen gibt es nicht. Angeblich soll sich das System selber darum kümmern.

    Die tatsächliche Größe des freien Festplattenplatz erfährt man nur durch andere Tools oder per Kopfrechnen bei den Festplatteninfos: Festplattenkapazität minus Benutzter Platz.

  • Selbst nach „harten“ Löschen (am Papierkorb vorbei) zB. der 60GB Musik, wurde der unbelegte Festplattenplatz nicht größer. Nach einem Neustart schrumpfte der freie Festplattenplatz gar auf 7GB, ehe er im Laufe von 5 Minuten wieder auf 18 GB anwuchs – bar jeder Logik.

  • Der eigentliche Übeltäter ist die Time Machine, Apples Backup-System. Auch wenn er angeblich nur 7GB „backupen“ wollte – einige Minuten nach Ende des Backups waren dann plötzlich 150GB Festplatte frei.


Donnerstag, Freitag, Samstag habe ich mit Lesen von „Fachartikeln“ verbracht. Siehe unten.

Am Freitag habe ich für ein privates Projekt mit dem Endziel „React“ mal in die Themen MariaDB, ORM und Node.js reingeschnuppert und einen ersten Durchstich gemacht. Beim Evaluierung des Node.js-ORMs „Sequelize“ tauchte „LoopBack“ auf dem Radar auf und lockte mit großer Mächtigkeit und den magischen Worten „API-Endpoints“ auf – eine Evaluierung am Montag zeigte aber die Unbrauchbarkeit. LoopBack 4 sollte realistischerweiser nur mit TypeScript verwendet werden, und das ist mir im Kontext meines Endziels, zu weit aus dem Fokus raus.

Things I read.

Bereits am Donnerstag verbloggt, aber es treibt mich immer noch herum: Programming as Theory Building, ein Papier von Peter Naur von 1985. Demnach ist Code von Software nur ein „Artefakt“ der eigentlichen Arbeit eines Programmierers: dem Aufbau eines Verständnisses für die zu bewältigenden Problemen, den Anforderungen, den erforderlichen Funktionen und den Weg, den man beschreitet, kurz: dem Aufbau eines theoretischen Verständnisses der zu bauenden Software.

Dieser Blickwinkel hat Konsequenzen wie man mit Teammitgliedern/Kunden über das Software-Produkt spricht und wie man es dokumentiert. Anstatt sich in der Kleinteiligkeit von Code-Zeilen zu verlieren, gilt es Ideen, Ansätze und Motivation zu beschreiben.

1985 geschrieben, trifft er aber genau einer der Schmerzpunkte die ich als Frontendler mit der Zusammenarbeit von Designern habe, die auch 2019, kein „Theory Building“ entwickeln, sondern Photoshop- oder Sketch-Dateien liefern. Ich darf dann raten, ob die 512px breite Spalte fix 512px oder 50% der Viewportbreite eines Tablets breit sein soll – weil des Designers Liefergegenstand nur eine Zustandsbeschreibung eines Viewports liefert, aber nicht die übergeordnete Idee des Designers vermittelt, was er sich dabei gedacht hat.


Zu meiner Überraschung schneite in meiner Twitter-Timeline der Hinweis rein, dass Sass, der CSS-Transpilator, in der ersten Oktober-Woche das einschneidendste Update der letzten fünf Jahre erfuhr – und keiner meiner abonnierten Frontend-Mailinglisten hielt es bis heute für nötig darauf hinzuweisen.

Sass hat sich in seiner neuesten Version ein Modul-System angelacht – vorerst nur auf der „führenden“ Sass-Implementierung Dart-Sass (Libsass und damit Node-Sass hinken hinterher).

Dies wird IMHO das Arbeiten mit Sass auf komplett neue Beine stellen – aber zu meiner Überraschung herrscht in der Frontend-Szene Schweigen im Walde. Ein Artikel bei css-tricks.com mit schlappen 5 Kommentaren. Totentanz dagegen bei Reddit und Stackoverflow.

Mit dem neuen Modul-System über den Befehl @use will Sass Partials bzw Module so kapseln, wie man es von JS-Modulen gewohnt ist – also kein globaler Zugriff auf Dinge die in den Partials stattfinden, sondern nur explizit deklarierter Zugriff.

Per Bauchgefühl bin ich recht begeistert, denn mein Gros an Bezahlarbeit findet in sehr großen Projekten statt und der Einzug eines Scopes für Sass, hört sich auf dem Papier gut an. Aber nach Lesen der Dokumentation habe ich exakt null Gefühl für die tatsächliche Implementierung (wie verändern sich Projektstrukturen?) und den tatsächlich relevanten Vorteilen.

Macht JS-artiges Scoping Sinn für CSS und dem „scope-losen“ HTML-Markup? Was macht SCSS-Scoping mit custom properties oder Scopes wie Shadow DOM und <style scoped>? Da hätte ich mir vom Sass-Team etwas mehr Hinweise auf sinnvolle Anwendungen in der freien Wildbahn gewünscht – man komme mir bitte nicht mit „Theming“.

Things I watched.

Am Samstag lief den ganzen Tag der Stream des japanischen Auslandssender „NHK World“, die die Taifun Hagibis-Sondersendungen aus dem Inlandsfernsehen übernahmen und auf englisch simultan übersetzten.

Ich habe mir On-Air-Designs angesehen und einige Übersetzungs-App angesehen, die über die Handy-Kamera eingeblendete japanische Schriftzeichen „live“ ins Deutsche übersetzten.

  • In Japan ist der Farbcode für höchste Gefahrenstufe nicht Rot, sondern Violett und dann Schwarz.
  • Japanische Moderatoren tragen fast ausnahmslos Nadelstreifenanzüge.
  • Wenn ein*e Moderator*in auf etwas an einer Videowall zeigen will, dann wird nicht ein normaler Zeigestab genommen, sondern ein Stab mit einem dicken Bommel am Ende.
  • Das japanische Schriftsystem wird problemlos sowohl horizontal als auch vertikal eingesetzt – ein Traum für das Screendesign.

Am Sonntag habe ich die erste Folge von „Doom Patrol“ auf Amazon gesehen – nach der gleichnamigen Comic-Serie von DC. Heute habe ich die Folgen 2+3 gesehen. Ich denke, man tut gut daran, die ersten drei Folgen am Stück zu sehen, da erst die dritte Folge den vorherigen Folgen einen Zusammenhalt gibt. Auf der anderen Seite ist es eine Form der Vergeudung (oder Minutenschinderei) für jenen Zusammenhalt fucking drei Stunden zu brauchen.

Abschließendes Urteil steht noch aus – ich habe parallel mir das erste Trade-Paperback der Serie aus der Grant Morrison-Ära geholt, auf die sich auch die TV-Serie beziehen soll. Inhaltlich fängt es noch wüster an und zeichnerisch ist das dunkelstes US-Comic-Mittelalter.

Things I listened to.

Hinter der Paywall, hat die „Financial Times“ eine schöne Serie: „Life of a Song“, in der die FT auf die Geschichte eines Lieds und seiner Cover-Versionen eingehen. Diesmal ist es Sittin’ On The Dock of the Bay“ von Otis Redding.

Der Artikel hat mir noch stärker die Größe dieses Titels offenbart. Otis Redding verstarb bei einem Flugzeugunglück kurz bevor er die Produktion von „The Dock of the Bay“ abschließen konnte. Es war Steve Cropper, der aus den einzelnen Aufnahmen, den Song zusammen bastelte. Das ikonische Pfeifen am Ende war nur ein Improvisorium von Redding, der für diese Stelle später noch einen Text schreiben wollte.

Wie perfekt das Original, mit seinem depressiven Text ist, erkennt man an den zahlreichen zerschellten Cover-Versionen. Die blutleere Version von Willie Nelson und Waylong Jennings, die Kasperle-Version von T-Rex und Gloria Jones, die mit Rod-Stewart-Mayonaise zugekleisterte Variante oder die Vergewaltigung durch das Tom Jones-Vibrato (Props für die Einbindung von Steve Cropper) oder das testosteron-getriebene, bemühte „Method Acting“-Cover von Justin Timberlake (auch hier Props für die Einbindung von Steve Cropper).


Zur Entgiftung von den ganzen katastrophalen Cover-Versionen, hier eines der besten Cover der Musikgeschichte überhaupt: Tom Petty und Freunde mit „While My Guitar Gently Weeps“ bei der posthumen Aufnahme von George Harrison in die Rock & Roll Hall of Fame. Der schüchterne Junge an der Gitarre neben Tom Petty ist Dhani Harrison, der Sohn von George. Im hinteren Teil des Covers rückt dann Prince in den Vordergrund, der eines meiner Lieblings-Gitarren-Solos derart abfackelt, dass dem Harrison-Sohn die Freunde nur so aus den Augen sprüht. (Und Tom Petty ist sowieso die Idealbesetzung für den Gesang)

Watching: “A Branch in Time – a story about revision histories”

Gesehen: der Vortrag von der RubyConf.au „A Branch in Time – a story about revision histories“ von Tekon Süleyman.

Auf der Basis einer fiktiven Geschichte einer Entwicklerin, verdeutlicht Süleyman, welche zentrale Rolle Git in Projekten einnimmt – nicht nur als bloßes Source-Verwaltungs-Werkzeug, sondern idealerweise als Dokumentation, warum bestimmte Dinge im Code so umgesetzt worden sind, wie sie umgesetzt wurden. Das ist eine weitaus weniger banale Frage, als es sich für Außenstehende anhört.

Süleyman dockt seine Geschichte und Vorschläge an ein Thesenpapier von Peter Naur an: „Programming as Theory Building“ (PDF).

Programmieren ist demnach nicht die Produktion von Code, sondern der Aufbau einer Theorie oder eines Gedankenmodells, wie die Software zu arbeiten hat. Code ist demnach nur ein Artefakt/Ausdruck dieser Denkprozesse.

Software-Projekte werden fast nur noch iterativ (in kleinen Schritten) entwickelt. Schritt für Schritt wird innerhalb des Teams das oder die Gedanken-Modelle entwickelt. Aber es gibt keine Prozesse und kein Format, um die entwickelten Modelle expressis verbis niederzuschreiben und dann weiter zu entwickeln. Stattdessen handelt es sich um „institutional knowledge“, also eine Art kollektives Wissen, dass sich entwickelt.

An dieser Stelle ist Code der Ausdruck für eine konkrete Umsetzung: “was ist wie umgesetzt worden”. Git kann und sollte an dieser Stelle die Rolle spielen, die Motivation und Abwägungen, also das „warum ist es so umgesetzt worden“, zu dokumentieren. Für Git Commits gilt daher der Leitsatz: „Capture the why, not the what“.

Naur geht in seinem Papier so weit, und spricht von einem Sterben der Software, wenn das Entwicklungsteam aufgelöst wird. Mit dem Verschwinden des kollektiven Wissens, schwindet auch die Wartbarkeit der Software.


IMHO setzt der Zerfall von Software schon sehr viel früher ein: wenn unter Zeitdruck und/oder Komfort Abkürzungen genommen werden. Das Wissen wird statt eines „nachschlagbaren“ (dokumentierten) Kollektiv-Wissens, zu einem individuellen Wissen, zu einem Herrschafts-Wissen.

Es fängt mit Petitessen an. Aber wenn der Damm löchrig ist, ist der Dammbruch nicht weit.

Code-Reviews können nicht mehr sauber geführt werden, weil der zu prüfende „Soll-Zustand“ für den Reviewer nicht mehr nachzuvollziehen ist. Die Code-Review verkommt zu einem menschlichen Linting-Prozess.

Es schleichen sich immer stärkere Inkonsistenzen ins Projekt rein, weil es keine eindeutige Referenz mehr gibt, sondern mehrere entstanden sind. Es gibt mangels eindeutiger Referenz keinen Konsens mehr, was richtig oder falsch ist, sondern nur noch mehr oder weniger kompetente Interpretationen.

Das Entwicklungstempo wird abnehmen. Entwickler, die einen anderen Teilausschnitt des „kollektiven Wissens“ haben, werden den Code falsch interpretieren oder andere Rahmenbedingungen bzw. Maßstäbe anlegen und Probleme mit dem Bestandscode bekommen.

Ich weiß nicht, wie dieser Kreislauf rückgängig zu machen ist.

© 2020 Kai Pahl

Theme basiert auf „Lingonberry“ von Anders NorenNach Oben ↑