My HomeOffice is my castle

Vor zwei Jahren habe ich meinen ersten Tag im Home-Office verbracht. Damals habe ich noch gedacht, dass das einfach nur ein paar Wochen wegen des Lockdowns sein werden. Das daraus ein dauerhaftes Arbeiten von zu Hause aus werden wird, habe ich mir damals nicht ausmalen können. Das stand auch nicht als Ziel auf irgendeiner Liste.

Es funktioniert. Und wird auch weiterhin funktionieren. Das hat sehr viel damit zu tun, dass mein Tag sehr strukturiert und gleich abläuft. Der Rest der Familie verlässt morgens das Haus in Richtung ihrer Schulen, vorher zusammen frühstücken und dem Hund die weite Welt zeigen. Arbeitsphase bis mittags, dem Hund die andere Seite der Welt zeigen und dann bis abends wieder weiterarbeiten. Ohne irgendwelche Sachen wie Hausarbeit oder Ablenkung durch andere Dinge.

Das sehe ich bei anderen nämlich, deren Arbeit nicht so wie die von Entwicklern strukturiert werden kann. Da wird später aufgestanden und die Arbeit von Dingen wie Spülmaschine ausräumen oder sich mal um private Telefonate kümmern gestört. Oder einfach mal längere Zeit auf der Terasse in der Sonne liegen. Sachen, die man halt auch nicht machen würde, wenn man in der Agentur wäre. Die Familie trägt natürlich auch einiges dazu bei. Sie wissen, dass man mich nicht stören darf, um mich nicht aus dem Flow zu bringen.

Trotzdem muss ich sagen, dass es Tage gibt, an denen ich mein "altes" Arbeitsleben gerne zurück haben würde. Mit Kollegen von Angesicht zu Angesicht reden, mit ihnen Mittags Essen organisieren, kickern (auch wenn ich da eigentlich echt schlecht drin bin) oder abends auf ein Getränk länger bleiben. Oder einfach sich mit Teamkollegen stundenlang in einen Raum einschließen, um ein Problem gemeinsam zu lösen.

Das macht schon einiges auch im Hinblick auf Teambuilding aus, das man so aus dem Home-Office nicht erreichen kann. Es wird jedenfalls in den nächsten Jahren sehr spannend werden, wie sich das Arbeiten noch weiter verändern wird. Machen wir das Beste draus!

Disclaimer: ich hatte keine Lust, für das Foto meinen Arbeitsplatz aufzuräumen. So habe ich ihn heute nach der Arbeit verlassen.

Erste Hilfe für Open Source

Alexander Kellner hat die provokante These in den Raum geworfen, dass Open Source kaputt sei und aufgefordert, an der Reparatur mitzuwirken. Dies ist bestimmt überspitzt gemeint und bezieht sich im Artikel dann in erster Linie auf die Wahrnehmung, aber vor allem auf die Wertschätzung von Open Source.

Open Source lebt nicht allein von der Verbreitung, sondern von der aktiven Unterstützung durch deren Nutzer. Diese kann auf verschiedenen Ebenen passieren: manch einer ist in der Lage selber Code beizusteuern, andere verbessern die Dokumentation und wiederum andere können das Projekt finanziell unterstützen. Denn Entwicklung kostet Zeit. Zeit, die die Entwickler nicht mit ihrer regulären Beschäftigung zum Geld verdienen nutzen können oder von ihrer Freizeit abziehen müssen.

Alex´ Idee ist es mit Blick auf TYPO3 und der großen Vielfalt der Extensions, dass die Association eine zentrale Funktion für die Verteilung von Spenden einnehmen könnte. So eine Art Patreon/Steady für Community-Extensions. Es gibt ja selbst auf GitHub die Möglichkeit über das Sponsoring einzelnen Entwicklern etwas in den Topf zu werfen, was ich auch ein wenig mache.

Ich habe mir vor ein paar Jahren einen gewissen Rahmen gesetzt, den ich pro Jahr in Form von Spenden entbehren kann. Der größte Teil geht in Form von Fördermitgliedschaften bei so Projekten wie Sea-Watch oder der Gesellschaft für Freiheitsrechte drauf. Eine Bronze-Mitgliedschaft in der TYPO3 Association finde ich auch bezahlbar. Aber ich unterstütze auch über Plattformen wie Patreon/Steady/GitHub Sponsoring Entwickler und Podcaster, die sonst über keine anderen Wege für ihre Projekte an Geld kommen.

Aber ich muss bis jetzt über mehrere Kanäle schauen, dass mein Geldkontingent "klug" verteilt ist und ich ändere auch alle paar Monate meine Unterstützungen, um das Ganze breiter zu streuen. Einen zentralen Pool für TYPO3 und all seiner Extensions würde ich also begrüßen. 

Und ich habe vor auch auf anderen Wegen meinen Obolus beizutragen. Und mich erkenntlich für all das zu zeigen, was mir andere Entwickler möglich gemacht haben. Danke schon mal dafür!

2022

Das letzte Jahr war bestimmt für alle gleich seltsam, nervend und komisch. Ich kenne keinen, dem diese Pandemie nicht auf den Sack geht. Mehr möchte ich über dieses Virus nicht verlieren, sondern, wie der Titel sagt, nach vorne schauen. Denn 2022 kann nur großartig werden!

Vor allem habe ich mir vorgenommen, mich nicht weiter runterreißen zu lassen. Und ich glaube, dass es mir gelingen wird, weil ich die Kleinigkeiten viel mehr genießen werde. Also nicht versuche, große Dinge wie Urlaube oder Festivalbesuche übers Knie zu brechen, sondern kleine Dinge wie laue Sommernächte zu zelebrieren. Die Fahrradtour mit Freunden, das Bierchen/Wässerchen danach, Kino, Essen, Familie, den Jungs wieder mehr ermöglichen. Meine Kinder haben sowieso die letzten beiden Jahre Unglaubliches geleistet und gleichzeitig zurückgesteckt, um die Großeltern nicht in Gefahr zu bringen.

Abseits dessen habe ich mir vorgenommen mindestens zwei Stunden pro Woche OpenSource zu widmen. Wie und was genau, werde ich in den ersten Wochen erstmal ausarbeiten müssen, indem ich unterschiedliche Dinge ausprobieren werde. Aber damit das auf keinen Fall im Sand verläuft, wird das zu einem festen Termin in der Woche. So kann sich die Familie drauf einstellen, dass ich da nicht verfügbar bin und selber habe ich keine Ausrede, dass an dem Abend etwas anderes eine höhere Priorität hätte.

Auch meine eigene RSS-Reader-Extension möchte ich dann aus der Prototypen-Phase herausholen. Da habe ich mich im Sommer in zu viele Anforderungen und Features verrannt. Diese habe ich jetzt in eine langfristige Roadmap gepackt.

Im Laufe des vergangenen Jahres hatte ich mal wieder eine Phase, in der ich mich politisch engagieren wollte. Das ist aber auch recht schnell wieder beendet gewesen. Dazu habe ich leider in meiner Kindheit/Jugend zu viel vom Bürgermeisteramt meines Opas mitbekommen. Da bin ich desillusioniert. Ja, ich bin mir bewusst, dass das die falsche Herangehensweise ist, aber da ist die Schmerzgrenze bei mir noch nicht erreicht.

Achso: und mehr Gitarre spielen. Es kann also nur großartig werden! Dieses 2022.

Pagan

Rollenspiele waren schon immer irgendwie auch mein Steckenpferd. Meine "Pen & Paper"-Zeit liegt zwar auch schon Äonen zurück, in denen wir begeistert erst Das schwarze Auge und AD&D gespielt haben und dann neben Shadworun, Star Wars (ja, da gab es echt mal ein Rollenspielsystem für), Plüsch, Power und Plunder auch Statistikschlachten mit dem Rolemaster-Regelwerk bestanden haben. Und schon immer gab es Rollenspiele auf dem Computer. Auf dem C64 hatte ich damit noch wenig Berührung, obwohl es dort auch Spiele wie Bards Tale gab. Die Faszination kam dann aber eigentlich erst mit dem ersten Teil der Sternenschweif-Triologie des schwarzen Auges oder mit der "Pool of Radiance"-Reihe, die man auf dem IBM-PC gespielt hat.

Aber auch die Ultima-Reihe (vor allem Ultima VII) habe ich geliebt. Und wollte das eigentlich mal wieder spielen. Nur ist das wirklich sehr schlecht gealtert. Vor allem kann man den gelben Text auf dem Hintergrund einfach nicht mehr lesen, ohne Panik haben zu müssen, dass man in den nächsten Tagen sich eine neue Brille beim Optiker besorgen muss.
Aber auf dem Pile of shame der nie beendeten Spiele liegt auch noch der Nachfolger Ultima VIII Pagan. Zwar hat das Spiel aufgrund seiner Spielmechaniken damals keine guten Kritiken bekommen, aber ich weiß noch, wie ich damals Nächte durchgezockt habe. Und geflucht habe, wenn mal wieder so eine Jump'n'run-Passage zu meistern war.

Dann schaue ich mal, wie weit ich dieses Mal komme.

Globales Ignorieren

Es gibt nichts Schlimmeres als fremde IDE-Konfigurationsdateien in einem Repository. Damit ich meine IDE-Konfiguration auch nicht anderen Entwicklern aufdrücke, gibt es eine globale gitignore-Datei, in der wenigstens folgende Zeilen erstmal enthalten sind:

.DS_Store
.idea

Die Datei kann man nennen wie man möchte, muss sie dann lediglich per

git config --global core.excludesfile ~/.gitignore_global

der globalen git-Konfiguration mitgeben.

Von Stöckchen und Software

Vor fast 15 Jahren habe ich ein neues Laptop kaufen wollen und auf der Suche nach einem vernünftig verbauten und soliden Case haben mich die aus Aluminium bestehenden Gehäuse der MacBooks angelacht. Ich kannte zwar den Ein oder Anderen durch die Arbeit mit Agenturen, der mit macOS gearbeitet hat, aber so richtig haben mir nur die ganzen Blogs geholfen, die im deutschsprachigen Raum zu dieser Zeit erblühten.

Damals hat man noch mit Stöckchen geworfen und in der Sidebar Blogrolls gepflegt, um andere auf lesenswerte Seiten aufmerksam zu machen. Und kommentiert. Twitter (oder eher twttr) war in der Pre-Smartphone-Zeit noch unbekannt und auf StudiVZ/Facebook... naja.

Aber es gab unzählige Blogs, die sich mit macOS und der Software dafür beschäftigten. Man bloggte, wie sein System aufgesetzt ist, wo man gerade irgendwelche Rabatte für den Einkauf von Software bekam und so weiter.

Da ich mir gerade durch einen Jobwechsel einen neuen Laptop aussuchen durfte und ich die letzten zwei Jahre wegen eines Windows-Systems geflucht habe, bin ich echt dankbar, dass ich diesen Text auf macOS schreiben darf. Hätte es WSL2 nicht gegeben, wäre ich schon im letzten Jahr mit dem Auto über das Laptop gefahren. Nachdem ich es angezündet und aus einem Hochhaus geworfen hätte.

Und es gibt fast nichts Schöneres als ein neues macOS einzurichten. Ich hätte zwar das Profil und die Software von meinem privaten MacBook während der Installation übertragen können, aber irgendwie war es mir wichtig, das Ganze frisch aufzusetzen. Und da mache ich es doch wie vor 15 Jahren und schreibe auf, was ich so alles installiert habe.

Die erste App, die ich installiert habe, ist iA Writer, mit der ich diesen Text auch schreibe. Schon seit Jahren meine Wahl für Texte schreiben, aber auch Notizen finden hier ihren Platz.

Und dann kommt neben dem ganzen Entwicklerkram das Wichtigste: die Shell. Keine Ahnung, es soll immer noch Entwickler da draußen geben, die so gut wie keine Berührung mit Shells haben, ich kann gar nicht ohne. macOS kommt ja seit 10.15 mit zsh als Standard-Shell daher. Ich haue da noch iTerm2 und oh-my-zsh drauf und in Verbindung mit meiner geliebten Konfiguration, Syntax-Highlighting, Autosuggestions und einem schönen Theme will ich eigentlich gar nicht raus. Aus ihr.

Was schon bei der Installation der Shell nicht fehlen darf, ist Homebrew. Ein Paketmanager für macOS und in Verbindung mit dem AppStore von Apple braucht man eigentlich keine weiteren Quellen mehr, um Software zu installieren.

Neben den üblichen verdächtigen Browsern und Firefox als Standard-Browser, kommen dann noch Tweetbot (Links lasse ich jetzt einfach mal aus Bequemlichkeit weg, ihr könnt ja bestimmt Suchmaschinen bedienen), Slack, Discord und Signal, sowie ReadKit auf den Rechner, um mit der Außenwelt zu kommunizieren und Feeds abzugreifen.

Mit Thunderbird versuche ich mal wieder warm zu werden. Sonst gefallen mir auf macOS eigentlich bisher gar keine Mail-Clients. Die Hübschen haben zu wenig Funktionen wie Verschlüsselung und die Funktionalen sehen alle scheisse aus.

Neben den üblichen Tools wie 1Password (auch wenn die gerade böse geworden sind) und Lastpass für das Passwort-Management, Things für ToDos (obwohl ich das eigentlich kaum noch benutze, es spielt sich ja zum Glück alles in Ticketsystemen ab), odrive für das Handling aller Cloud-Dienste, VLC für Videodateien und Pixelmator für Bilder, werkelt dann noch Little Snitch herum. Ja, ist ne Software-"Firewall", aber zum Placebo-Blocken von Ressourcen ist es halt was fürs "besser fühlen".

Die GPG Suite fürs Verschlüsseln (Keybase ist ja auch böse geworden und hat sowieso kaum einer genutzt) und Tunnelblick für die VPNs. Achso, Moom als Fenstermanager. Warum Apple sowas immer noch nicht in macOS integriert hat, ist mir schleierhaft. Die ganzen Standardtools wie einen PDF-Reader und Office... geschenkt.

Kommen wir nun zum eigentlich Wichtigsten: dem Enwicklerkram. Da ich die meiste Zeit PHP schreibe, sollte es nicht verwundern, dass PhpStorm meine IDE der Wahl ist. Mit VSCode mögen Frontendler klarkommen, mir reicht das aber nicht. GitKraken ist der schönste Git-Client, da lasse ich mir nichts anderes erzählen und mit Sequel Ace kann man schön Datenbanken kaputtmachen. Atom ist auch dabei, aber wirklich nur im Notfall einen einfachen Text-Editor starten zu können. Und ja, ich habe sogar noch Transmit installiert. In der Hoffnung, es nie brauchen zu müssen.

Neben der Installation von Docker und DDEV habe ich dann noch git aktualisiert (die Version von macOS ist zwar halbwegs aktuell, aber neuer und sicherer ist immer gut) und sowas wie wget/curl kann man auch immer gebrauchen.
So bin ich schon mal bereit, da kommt aber mit der Zeit bestimmt noch mehr Software nach.

Eine Runde Hack

Ich habe ja irgendwie ein Faible für alte Spiele. Meistens sind es irgendwelche Grafikadventures, da man die alten Action- oder sogar Simulationsspiele nicht mehr auf aktueller Hardware zum Laufen bekommt oder sie von der Steuerung so schlecht gealtert sind, dass man sie einfach nicht mehr spielen kann.

Strike Commander ist so eins, was ich damals geliebt habe, aber das ich einfach nicht so konfiguriert bekomme, wie es sich damals angefühlt hat. Es mag sein, dass da romantisierte Erinnerungen eine Rolle spielen und die Steuerung damals vielleicht auch schon so "schlecht" war. Nur hatte man damals einfach nichts besseres.

Meine ersten Computerspiel-Erfahrungen habe ich damals auf dem IBM-XT im Büro meines Vaters gemacht. Irgendwie existierten neben der Steuerberater-Software ein paar Disketten mit Spielen und unter anderem war dort Castle Adventure zu finden, das ich fasziniert stundenlang spielen konnte. Obwohl meine Englisch-Kenntnisse zu dem Zeitpunkt eigentlich gar nicht vorhanden waren. Ich befand mich nämlich noch in der Grundschule.

Trotzdem fesselte es mich an den Monitor, ich wechselte die Räume und Orte und wurde dann von Monstern getötet. Die ich nicht besiegen konnte, weil ich gar nicht verstanden hatte, wie man weitere Gegenstände aufnehmen konnte, um sich zu verbessern. Was mir aber egal war. Ich startete das Spiel immer wieder aufs Neue.

Nethack basiert zum großen Teil auf den Regeln von "Dungeons & Dragons", was nach dem deutschen Rollenspiel "Das schwarze Auge" meine erste Bekanntschaft mit sogenannten Pen & Papers war. Und was haben wir damals selber Abenteuer geschrieben und dabei natürlich den ein oder anderen Dungeon auf Kästchenpapier entworfen. Mit all seinen Fallen und Monstern.

Nethack ist kein Rogue-like, sondern quasi die Verbesserung des Klassikers Rogue und quasi nichts weiter als prozedural erzeugte Dungeons auf Kästchenpapier. Mit einem D&D-ähnlichen Regelset. Gekauft! Bzw. heruntergeladen und ausprobiert.

Ich habe so gut wie nichts im Internet vorher über Nethack gelesen (es gibt Wikis, in denen scheinbar so gut wie alles Wissenswerte steht), nur dass man als Anfänger am Besten als neutrale Walküre starten sollte. Und die Seite mit den ganzen Tastaturbefehlen habe ich offen. Auf gehts!

Im ersten Raum befinden sich neben meinem Hund und mir ein Zauberspruch ANDOVA BEGARIN, den ich mir gleich schnappe, eine geschlossene Tür im Norden und ein offener Weg nach Westen. Neugierig wie ich bin lese ich den Zauberspruch, was sich nicht als sonderlich kluge Idee rausstellt, denn dieser scheint verflucht gewesen zu sein und lässt meinen Schild wegbröckeln. Super! Mein Rüstungsschutz ist damit quasi nicht mehr vorhanden.

Der nach Westen verlaufende Weg verzweigt sofort in alle Himmelsrichtungen und ich folge ihm nach Norden. Nach ein paar Windungen gelange ich in einen neuen Raum, der aber auch nach einigem Suchen keine spannenden Dinge enthält, außer einem Weg im Süden, dem ich folge, der mich aber wieder in meinen Startraum zurückbringt. Also auf nach Norden durch die verschlossene Tür.

Der Weg dahinter führt in einen großen Raum, in dem eine Treppe nach unten in das nächste Dungeonlevel führt. Da sich noch weitere Türen in dem Raum nach Osten und ein weiterer Weg nach Süden befinden, beschließe ich erstmal nach Süden aufzumachen. Ein Schakal versperrt meinen Weg, um den sich mein Hund und ich uns aber liebevoll kümmern und ihm den Weg in die Hölle zeigen. Soll er da mal schmoren.

Auf dem südlichen Weg läuft uns ein Goblin in die Arme, der aber keine große Gefahr für uns darstellt. Ich erbeute seinen Helm, den ich direkt anziehe. Seinen Körper nehme ich auch mal lieber als Nahrungsquelle mit. Kein Leckerbissen, aber wer weiß, wann der nächste Grill hier in den Dungeons zu finden ist.

Ich muss erstmal eine versperrte Tür auftreten, hinter der sich ein großer Raum befindet, in dem sich zwei Käfer gleich auf mich stürzen...
Herrlich!

Gib dem Code Statik

Ja, ich weiß, Statik und statische Code Analyzer haben in erster Linie nicht viel miteinander zu tun, aber im Endeffekt wird Code durch deren Verwendung trotzdem um einiges besser. Härter. Und tragen somit zu einem soliden Code-Gerüst bei, das unsere Anwendungen noch stabiler und besser macht.

Wie Roland Golla in der 5.2021 vom Entwickler Magazin schreibt: "Legacy-Code macht krank." In seinem Artikel geht es um PHPStan. Wie man diesen Static Code Analyzer in seine Entwicklungsumgebung (und damit ist nicht nur die IDE gemeint) einbinden kann, um nicht nur bisher unentdeckte Fehlerquellen zu finden, sondern um seine Fähigkeiten und vor allem sein Wissen als Entwickler zu verbessern.

Man kann einfach nicht alles wissen, die Entwicklung in PHP findet auch in immer kürzeren Releaes-Zyklen statt. Auf der anderen Seite pflegt man die in die Jahre gekommenen Anwendung des Kunden. So muss jeder Entwickler eine ungeheure Bandbreite von Features abdecken, die einem die im jeweiligen Projekt eingesetzte PHP-Version zur Verfügung stellt.

Das unfassbar schöne und immer wieder faszinierende am Beruf eines Softwareentwicklers ist in meinen Augen, dass man jeden Tag etwas lernt. Wirklich jeden Tag. Und Tools wie Static Code Analyzer helfen einem dabei. Ich glaube jeder kennt das Gefühl, wenn man Code von vor drei, vielleicht vier Jahren anschaut, den Kopf schüttelt und dann nach einem beherzten "git blame" am liebsten im Boden versinken möchte, wenn man feststellt, dass man selber diesen Legacy Code produziert hat.

Static Code Analyzer setzen hier schon beim ersten Entwickeln an und helfen einem, sehr viel sauberen Code zu schreiben. Sie helfen einem jetzt nicht unbedingt, bessere Programm-Logiken zu schreiben, man kann also immer noch die Business-Logik so dermaßen unnütz verschachteln und schwer zu verstehen umsetzen. Aber hey, dafür gibt es ja wiederum andere Tools wie Performance Profiler (Blackfire usw.), die man auf dieses Problem werfen kann.

Ich kann jedem eigentlich nur Tools wie PHPStan, rector, Psalm usw. neben den hoffentlich schon seit Jahren verwendeten Tools wie PHP-CS-Fixer oder PHPMD ans Herz legen. Um Code zu analysieren, zu refactoren und vor allem zu lernen. Quasi als Pair-Programming mit einem Tool und nicht mit einem anderen Entwickler. Oder als Code review vor dem eigentlichen Code review.

Disclaimer: Roland Golla hat mir die oben erwähnte Ausgabe kostenlos zur Verfügung gestellt, wofür ich ihm herzlich Danke. Print-Produkte habe ich schon lange aus den Augen verloren, wenn es um Programmierung oder Themen im Web geht. Es war aber mal wieder eine wunderbare Erfahrung, beim Lesen Papier in der Hand zu haben. Ich werde jetzt zwar kein Abo abschließen, aber sollte ich mal wieder irgendwelche Reisen per Bahn oder so unternehmen, werde ich am Bahnhofskiosk auf die Suche nach solchen Zeitungen gehen. Ansonsten kann ich euch seinen YouTube-Kanal "Never Code Alone" ans Herz legen, den ich regelmäßig verfolge. In seinen Videos geht es vor allem um Testing, Refactoring und allgemeinen Themen rund um das Entwicklerdasein.

AusgeFLoCkt

Ich habe noch keine Nachricht der ganzen Browser neben Chrome gesehen, die Googles Cookie-“Ersatz” FLoC zum Tracken des Userverhaltens integrieren wollen. Aber nur um auch wirklich sicherzugehen, dass die eigene Website bei der ganzen Sache nicht mitmacht, sollte man per Permissions-Policy das ganze unterbinden. Da es zur Zeit nur den OptOut mittels des HTTP Response Headers gibt, muss man entweder direkt über die Serverkonfiguration, der htaccess-Datei oder dem Setzen der Header mittels TypoScript dem Ganzen einen Riegel vorschieben:

config {
    additionalHeaders {
		10.header = Permissions-Policy: interest-cohort=()
    }
}

Die Reihenfolge im additionalHeaders-Array natürlich bitte anpassen, ich gehe doch davon aus, dass da noch ein paar weitere Header wie Content-Security-Policy usw. gesetzt sind.