Diese Webseite wurde in Haskell mit dem Framework Yesod geschrieben und mit dem Framework Bootstrap gestyled.
Funktional, typsicher, RESTful, extrem schnell und leistungsstark - ganz wie der Untertitel des Buches verspricht: Security-Driven Web Development. Angriffsvektoren wie XSS oder SQL-Injection wird damit die Grundlage entzogen.
Es exisitiert eine ausführliche Dokumentation und ein
Buch,
welches in gedruckter oder digitaler Version verfügbar ist.
In Yesod bilden die Shakespearian Templates (.hamlet, .julius und .jucius, eigene DSLs) sogenannte Widgets, welche in das jeweilige Layout eingebettet werden. Diese Templates und die Funktionen, welche diese in HTML rendern, bilden den View-Layer und verleihen dem Framework außerordenliche Flexibilität, Modularität sowie Wiederverwendbarkeit. Handler in Haskell implementieren die Controler-Ebene des Frameworks, die Funktionen der einzelnen Seiten. Das Datenbank-Modell wird automatisch zur in der Programmierung festgelegten Struktur erstellt und wenn notwendig migriert. Im Hintergrund werkelt eine Postgres-Datenbank als Persitenzebene für Inhalte, Metainfomationen und Authentisierung. Durch den eingebetteten Development Server wird das Entwickeln zum Spaß.
Die Konzepte funktionaler Programmierung sind äußerst interessant, wenn auch nicht immer sofort vollständig zu fassen. Es werden keine fiktiven Software-Design-Patterns implementiert sondern reale Mathematik (Monoide, Halb-Gruppen, Funktoren, …). Einen Bug zu finden ist trivial, der Compiler ist gnadenlos, mit genauer Position im Quellcode und einem Grund warum das Programm nicht kompiliert. Diesen zu beheben, braucht anfangs etwas Zeit und Geduld. Durch diese Eigenschaft ist das gesamte Projekt immer stimmig. Typos werden erkannt, Referenzen auf fehlende Funktionen oder Typen werden nicht toleriert. Es kompiliert erst erfolgreich, wenn alles im Reinen ist. Wenn das Programm läuft, dann funktioniert es - wie gewünscht, nein eher besser. Refactoring (ohne schlechtes Gewissen) war nie so einfach. Bugs zur Laufzeit, Ade.
Während der Entwicklung einer Seite stößt man unvermeidbar auf die Anforderungen der DSGVO und der E-Privacy-Richtlinie der EU (bekannt als das „Cookie-Gesetz“). Also muss ein Hinweis eingeführt werden, welches Website-Besucher auf die Nutzung von Cookies hinweist (z.B. CookieConsent). Dann benötigt die Webseite weiterhin eine Datenschutzrichtlinie, okay. Darin muss die Nutzung externer Ressourcen vermerkt werden, da bei personenbezogene Daten wie IP-Adressen in die Hände dritter Parteien gelangen. Dies betrifft alle nachgeladenen Skripte, Schriften oder Styles. Und da ich persönlich weder einen Datenverarbeitungsvertrag mit all diesen Parteien eingehen, noch personenbezogene Informationen an Dritte weitergeben möchte, liefert dieser Server diese Dateien einfach selbst mit aus. Die Skripte stehen allesamt unter einer freien Lizenz. Dies hat gleichzeitig den Charme, dass die Versionen der im Grundgerüst enthaltenen Skripte auf ein aktuelles Niveau gehoben werden und nun auch die Integrity-Checksums mitgeliefert werden. Nutzer von NoScript haben es auch etwas leichter, einfach die Subdomain erlauben - fertig. Damit fällt auch Google-Analytics, Facebook-Pixel und der andere Tracking-Wahnsinn mit herunter, denn das widerspricht dem erarbeiteten Grundgedanken.
Ganz ohne Analyse der Besucherdaten möchte der Webseite-Betreiber dann aber auch nicht blind verbleiben und installiert einfach eine On-Premisses-Lösung (wie z.B. Matomo (ehem. Piwik). Damit kann analysiert werden, was gefällt, was nutzlos ist, wer sich für das Angebot interessiert und ob jemand die Website auf die Probe stellt. Dies ist wichtiges Feedback für die Weiterentwicklung der Seite.
Komplexe Programmierung gehört für mich als Administrator eher nicht zum Alltagsgeschäft, weshalb ich aus dieser Übung umsomehr mitnehmen kann. Gelernt habe ich z.B., dass einige Paradigmen in einer moderen Webseite nicht fehlen dürfen: Responsive Design und Mobile First. UTF-8 und fertig. Moderne Grids und Flex-Boxen in CSS sind tolle Werkzeuge. Mit SVGs sehen Grafiken immer super aus. Ein Framework zu benutzen, welches mit Sicherheit im Sinn entworfen wurde (Haskell), gibt mir wiederum das erste mal die Gelassenheit, selbstprogrammierte Software in das Internet einzuspeisen.
Yesod kompiliert am Ende zu einer ausführbaren Datei, welches zusammen mit statischen Dateien (wie Bilder, JavaScript und CSS) und ein wenig Konfiguration zu einem für Keter formatierten TAR-Archiv gepackt werden. Keter ist hierbei ein Werkzeug zum Deployment von (Haskell-)Anwendungen, das auf hohe Verfügbarkeit und Einfachheit zielt. Das ".keter"-Paket wird über "ssh" in einem Verzeichnis eingeliefert, entpackt, über Umgebungsvariablen konfiguriert, gestartet und auf Funktion überprüft und die aktuell laufende Instanz wird ausgetauscht. Ausgeliefert wird diese Webseite letztlich über einen als Proxy konfigurierten Apache2-Server. Sowohl Yesod als auch der Proxy unterstützen HTTP2.0. Starke Crypto findet also in Frontend- und Backend-Server seinen festen Platz, was das Konstrukt für mich noch sympatischer erscheinen lässt - State of the Art.
Ich hatte viel Spaß beim Entwickeln dieser Seite und bedanke mich bei:
Diese Website wird natürlich weiterentwickelt. Hier die nächsten Stationen: