Die neue Losstopschade-Version ist seit ein paar Tagen online und die ersten Alibi-Posts, die man schreiben muss, damit nicht direkt der erste Post ein blöder Metapost übers Bloggen wird, sind geschrieben. Mein liebstes Feedback bis jetzt kam von Max:

iMessage-Nachricht: “digitaler internet-weblog” ist sehr “So I’m making a network of digital podcasts… ah… that we will monitor… that… that will… that is gonna meet… sorry.”

Es wird also Zeit für die wichtigen Fragen:

Warum überhaupt ein Relaunch?

Die alte Version von Losstopschade war seit 2010 online und das ist einfach zu lang. 98% der Dinge, die ich 2010 gemacht habe, müssen 2018 nicht mehr im Internet stehen – egal, ob sie peinlich, langweilig oder nur irrelevant geworden sind. (Ich hatte neulich aus dem gleichen Grund schon alle Posts vor 2015 auf Privat gestellt.) Irgendwie hatte ich den Blog zuletzt auch kaum noch befüllt. Das hatte verschiedene Gründe, aber irgendwie wurde ich auch von dem Gewicht von den hunderten von alten Posts runtergezogen. Hinzu kam, dass es anstrengend war, das Theme anzupassen, weil das nur live im Tumblr Theme Editor möglich war – und seit ich professioneller™ Frontend-Entwickler bin, ist mir das einfach zu blöd.

Auf der anderen Seite gibt es so viel soziale Netzwerke, in denen ich Texte, Fotos oder Videos lassen kann, dass es gar nicht so sinnvoll erschien, ausgerechnet meinen Weblog zu befüllen. Aber: Ich habe meine Meinung dazu geändert. Ich finde, die Welt braucht wieder mehr Blogs. Ich würde lieber noch drei richtig gute Blogs von meinen Freunden lesen, als dreißig generischen Influencern zuzuschauen, wie sie mir lächelnd Spülmittel verkaufen. Ich möchte einfach deinen einfachen, persönlichen Post über irgendwas Unverfängliches in meinem RSS-Reader haben, und mich durch kein Online-Lifestyle-Magazin klicken, das jede meiner Augenbewegungen analysiert, um mir Werbung auszuspielen. (Puh.)

Daraus ergibt sich auch der dritte Punkt: Mit einem selbstprogrammierten, selbstgehosteten Blog habe ich endlich wieder volle Kontrolle über alles, was mit dieser Webseite zu tun hat. Ich bin zum Beispiel gerade so rechtzeitig aus Tumblr ausgestiegen, bevor sie ihre furchtbare ganzseitige DSGVO-Meldung über meinen Blog kleben konnten.

Ich musste aber beispielsweise lange in Kauf nehmen, dass sie gegen meinen Willen zwei (!) Banner auf der mobilen Ansicht der Seite anzeigen, oder dass sie automatisch (und ohne Opt-Out Möglichkeit!) allerlei Krempel in den HTML-Code einfügen. Ohne, dass ich mein eigenes Template anfasste, veränderten sich immer wieder Dinge, was im Nachhinein ziemlich blöd war, aber wenn man der Frosch im Kochtopf ist, denkt man manchmal gar nicht dran, was es wohl zum Abendessen gibt.

All das ist jetzt vorbei. Jedes Byte, das dieser Blog jetzt ausliefert, ist in liebevoller Handarbeit einzeln ausgewählt und setzt meinen Traum einer kleinen Webseite um. Wie mache ich das? Lest jetzt weiter, um das zu erfahren:

Technische Hintergründe: Losstopschade und der Orden des Phoenix

Falls ihr euch nicht so sehr für Programmierthemen interessiert, könnt ihr diesen Teil überspringen. Er ist nicht klausurrelevant!

Diese Webseite läuft auf einem selbstgeschriebenen System, das auf dem Phoenix Framework basiert, welches wiederum die Programmiersprache Elixir nutzt. Als Datenbank verwende ich Postgres. Im Frontend benutze ich Stylus als CSS-Preprocessor und mein JavaScript besteht aktuell nur aus Turbolinks. Der Source Code liegt (natürlich) bei Github und gehostet wird das ganze (natürlich) bei Uberspace.

Erste Erfahrungen mit genau diesem Stack habe ich schon mit meiner Rezepteseite (Repository hier) gemacht, und das Erlebnis war (bis auf die Lernkurve) so gut, dass ich es für den Blog gerne wiederholt habe. Falls ihr euch auch schon mal überlegt habt, Elixir auszuprobieren: Tut es, es ist ziemlich cool!

Inzwischen müsste ich mich eigentlich daran gewöhnt haben, aber ich bin immer noch absolut begeistert davon, wie schnell die Kombination aus Phoenix, Turbolinks und „keinen Schrott ausliefern“ ist. Ich musste dafür 2 Zeilen JavaScript schreiben (import Turbolinks from 'turbolinks'; Turbolinks.start()), und meine Seite ist schnell wie eine Single Page App, aber ich hatte keinen Stress. (Im Ernst: Meine Begeisterung für Phoenix ist ziemlich groß, aber die für Turbolinks ist noch größer. Wenn ihr nur eine einzige Sache von diesem Blogpost mitnehmt, dann lasst es bitte Turbolinks sein. Baut Turbolinks auf eure statischen Webseiten ein, lehnt euch zurück, genießt die Geschwindigkeit und macht früher Feierabend, weil ihr nicht vier Wochen lang React Router konfigurieren müsst.)

Noch eine Besonderheit am Rande: Ich habe lange überlegt, ob ich gerne eine statisch generierte Webseite haben will (wie das, was bei Jekyll rausfällt) oder eine Datenbankgestützte (wie bei Wordpress). Beides hat Vor- und Nachteile: Statisch generierte Seiten sind einfach und überall zu hosten, es ist relativ einfach, eine sehr schnelle Seite zu erhalten, und man kann die Quelldateien für die Blogposts zusammen mit dem Seitencode im Repository lagern. Nachteile sind, dass man nicht so flexibel ist, wenn man beispielsweise eine Suche einbauen will, oder wenn man bestimmte Sortier- oder Filteroptionen anbieten will. Schlussendlich habe ich mich für einen Hybrid entschieden: Die Posts liegen tatsächlich in einem Ordner im Repository, werden bei jedem Deploy eingelesen und die Datenbank wird dann komplett ersetzt. Ich nenne es Immutable Database oder sowas. Meiner Meinung nach ist es das Beste von beiden Welten. Die Geschwindigkeit ist für mich kein Problem, weil Elixir so lächerlich schnell ist, und das Hosting ist für mich kein Problem, weil Uberspace so gut ist. Für euch könnten die Trade Offs anders sein!

Ich bin jedenfalls sehr zufrieden, wie sich dieser Blog aktuell entwickelt, und ich hoffe, ihr habt auch ein bisschen Spaß. (Ich habe keine Statistiken – es könnte sein, dass nur meine Oma hier mitliest, aber ich werde es nie erfahren.) Bis bald!