30 Jahre später

Vor nicht ganz 30 Jahren habe ich mir meinen ersten Game Boy gekauft. Es muss im Sommer 1991 gewesen sein, da war ich gerade zu einem Sprachkurs während der Sommerferien in England. Ich habe mein ganzes Taschengeld zusammengekratzt und voller Aufregung die Konsole und zwei Spiele gekauft: Dynablaster und Super Mario Land.

Ersteres war die europäische Version von Bomberman, das man sogar gegeneinander spielen konnte, zwei Module und den Mehrspieleradapter natürlich vorausgesetzt. Und Super Mario Land muss man ja eigentlich nicht erklären. Der Name spricht ja für sich.

Nur habe ich es nie geschafft, die gesamten zwölf Level durchzuspielen. Keine Ahnung warum. Bis gestern Abend. Mit dem allerletzten Leben. Ein Spiel weniger auf dem Pile of shame.

Surf mal anders

Update: Mit Erscheinen von TYPO3 10.4.8 hat sich das Problem erledigt, da hier die Dependencies angepasst wurden. Scheinbar gab es nicht nur mit Surf, sondern auch mit Solr und Abhängigkeiten zu PHP 7.2 Probleme. Ich werde trotzdem Surf nicht mehr per composer in das Projekt installieren, sondern global in den DDEV-Container.

Gestern wurde ein geplantes Maintenance-Release von TYPO3 veröffentlicht. Version 10.4.7. Vom besten Content Management System, das ich kenne. Und natürlich sollten gleich alle Projekte auf die neue Version gezogen werden. Was bisher ohne Probleme mit einem herzhaften 'composer update' auch ohne weitere Anstrengung möglich war. Nur gestern nicht.

composer weigerte sich partout die neue Version in die Projekte zu integrieren. Gut, kein Problem, gehen wir das Ganze mal systematisch an. Erstmal mittels

composer clear-cache && composer update

composer zwingen, alles zu vergessen, die ganzen Quellen abzugrasen und es erneut zu versuchen. Dies brachte aber auch kein neues TYPO3 auf die Festplatte.

Dann wollte ich mal schauen und mit der Frage

composer why-not typo3/cms-core:10.4.7

kristallisierte sich dann auch heraus, dass typo3/surf eine Dependency über symfony/console enthielt, die dann schlussendlich eine Dependency auf symfony/event-dispatcher-contracts hatte, die verhinderte auf eine Version größer 2.0 zu gehen. Was aber typo3/cms-core unbedingt voraussetzt. npm, ick hör dir trapsen!

Heute morgen dann nochmal versucht, selber eine Lösung zu finden, aber vielleicht sollte ich doch im gehobenen Alter über eine Umschulung nachdenken. Somit blieb nur noch Twitter übrig, mein Leid geklagt und Minuten später, kamen schon die beiden Retter @t3easy_de und @chriwode um die Ecke. 

Der erste Versuch, Surf lokal auf einem Windows laufen zu lassen, scheiterte kläglich. Ja, Windows. Möchte ich hier nicht drüber reden. Das Ganze scheitert daran, dass unter anderem Windows awk nicht kennt und selbst wenn man dieses nachinstalliert, werden einem weitere Fehler um die Ohren gehauen.

Um jetzt mal so langsam auf den Punkt zu kommen: bisher habe ich Projekte mittels DDEV aufgesetzt und per composer nicht nur TYPO3 und die verwendeten Extensions installiert, sondern auch Surf. Um dann zum Beispiel per Kommandozeile ein Projekt deployen zu können, wenn kein entsprechendes CI/CD-System zur Verfügung steht. Meine Lösung sieht jetzt so aus, dass Surf aus diesem composer.json rausgeflogen ist und global per DDEV Start-Hook installiert wird:

hooks:
  post-start:
  - exec: composer global require hirak/prestissimo
  - exec: composer global require typo3/surf:^2.0

So lässt sich TYPO3 10.4.7 installieren und ich kann per Surf das Projekt auf ein anderes System schieben.

Geschwindigkeit ist alles

Es gibt ja für alles Untersuchungen. Auch dafür, wie sich die Ladezeit einer Website auf die mögliche Absprungrate der Besucher auswirkt. Und man mag es kaum glauben, aber die Erkenntnis ist, dass je länger eine Website zum Laden benötigt, desto höher ist die Chance, dass der Besucher den Tab schließt. Unglaublich.

Man sollte also alles daran setzen, dass eine Website so schnell wie möglich ausgeliefert und vor allem angezeigt wird. Mal abgesehen, dass man dafür sorgen sollte, dass Elemente im sichtbaren Bereich zuerst gerendert werden und schon gar nicht während des Ladens hin- und herflippen sollten, ist ein weiterer Faktor, den man ganz gut beeinflussen kann, die Anzahl und vor allem die Größe der Ressourcen wie Stylesheets und JavaScript so gering wie möglich zu halten.

Mit TYPO3 10.3 ist hierfür der AssetCollector integriert worden. Mit diesem können Skripte und Stylesheets in Fluid-Dateien mit den Viewhelpern f:asset.script und f:asset.css dem Renderingprozess hinzugefügt werden. Und das ähnlich dem schon in 8.6 hinzugefügten renderAssetsForRequest, mit dem man über die beiden Fluid-Sections HeaderAssets und FooterAssets entsprechenden Code rausrendern konnte.

Der entscheidende Unterschied ist, dass, wie der Name schon vermuten lässt, der AssetCollector die Stylesheets und Skripte erstmal sammelt und dann nur einmal im Rendering inkludiert. Heißt, ich kann in diversen Fluid-Dateien mit dem gleichen Namen auf die gleiche JavaScript-Datei referenzieren, die ich zum Beispiel für einen Slider benötige, die dann aber am Ende des Dokuments nur einmal per Script-Tag im Dokument hinterlegt wird.

Ein weiterer Vorteil ist, dass man auf diese Art und Weise dafür sorgen kann, dass nur benötigte Ressourcen an den Browser gesendet werden und nicht ein JavaScript-Plugin für ein Akkordeon, welches gar nicht auf der Seite vorhanden ist. Natürlich hebelt das ein wenig das Konzept aus, dass man eigentlich immer die gleichen Ressourcen an den Browser sendet, damit dieser diese auf der zweiten Seite gar nicht mehr anfordert, weil er sie dann aus seinem Cache nimmt.

Aber mit der gleichzeitigen Verwendung von HTTP/2, das dafür sorgt, dass die Ressourcen zum Rendern der Website an den Browser ausgeliefert werden, bevor dieser überhaupt weiß, dass er sie benötigt, wird in Verbindung mit der geringen Datengröße trotzdem ein Geschwindigkeitsvorteil erzielt, der sich vor allem in einem schnelleren Rendering der Seite bemerkbar macht. Dabei ist es gar nicht schlimm, dass die Ressourcen nicht im Concatenate- oder Komprimierungs-Prozess von TYPO3 integriert werden, wie man das ja bisher gewohnt war, wenn man seine Ressourcen mittels TypoScript eingebunden hat.

Und schon hat man wieder ein paar mehr Besucher seiner Website glücklicher gemacht.
Und ja, ich weiß, hier auf der Seite habe ich leider noch kein HTTP/2 aktiviert. Liegt nicht an mir. Tut mir leid.

Wieder was gelernt und noch mehr

Ich nehme mir ja immer wieder vor, mehr aus diesem Blog zu machen. Mich mitzuteilen und vielleicht sogar anderen Input zu geben, der sie weiterbringt. So wie anderen zigtausend Blogs und Websites, von denen ich tagtäglich lernen darf.

Die letzten Wochen habe ich während meiner Freizeit ziemlich offline verbracht. Wir haben eine neue Terrasse gebaut, was schon feststand, als wir vor ein paar Jahren in dieses Haus eingezogen sind. Damals hätte ich nur nicht gedacht, dass wir das alles alleine machen werden.

Neben dem Mauern und verputzen einer Wand (immerhin 3,5 x 2 m groß), dem Auskoffern, Schottern, Split abziehen und Plattenschneiden habe ich außerdem gelernt, dass man Handwerker einfach nichts fragen muss. Fragt man, wie man das ein oder andere machen muss, bekommt man zwei bis drei Antworten, die aber schon eine Woche später obsolet sind. Fast so wie bei Entwicklern also.

Und dann habe ich mir noch das Lösen eines Rubik´s Cube beigebracht. Den hat mein kleiner Sohn angeschleppt und wollte es eigentlich auch lernen. Da ich ihm absolut nicht helfen konnte, musste ich es mir erst einmal beibringen und kann ihn mittlerweile in knapp über 2 Minuten mit der Anfängermethode lösen. Ob ich noch andere Algorithmen lerne, um wenigstens unter einer Minute zu gelangen... Ich weiß noch nicht.

Und dann fange ich jetzt wieder für die Zertifizierung zum TYPO3 Developer (TCCD) zu lernen. Die TCCI-Zertifizierung durfte ich letzten Freitag um ein Jahr verlängern, wobei ich das Verfahren echt, na sagen wir überdenkenswürdig halte. Nur weil ich an einer Präsentation der Neuerungen von TYPO3 10 teilgenommen habe, die ich selber kurz nach Erscheinen in ähnlicher Form in meiner Abteilung abgehalten habe, habe ich zwar eine Menge an Anregungen gesammelt, beherrsche sie aber nicht. Vielleicht liegt das auch daran, dass ich ja einer der letzten war, bei dem die Zertifizierung normalerweise drei Jahre gilt, die neuen Zertifikate gelten nur noch zwei Jahre.

Für die Vorbereitung ackere ich wieder den Exam Study Guide for the Official TCCD Certification of the TYPO3 Association (https://leanpub.com/typo3certifieddeveloper-en) durch und dieses Mal habe ich mir vorgenommen, bei jedem Thema/Frage, die ich beim Lernen nicht korrekt beantworte, einen Blogpost zu schreiben, in dem ich das Thema dann aufarbeite. So von wegen, wenn man einen Spickzettel schreibt, lernt man am besten. Es werden bestimmt einige Posts werden. ;-)

Eine verrückte Zeit

Es ist schon eine komische Zeit, in der keiner wirklich sagen kann, wie es sich entwickeln wird. Alle schwimmen.
Und auch wenn die Auswirkungen schon am Horizont zu erahnen sind und sie uns alle schwer treffen werden, sind alle (TM) Menschen momentan irgendwie freundlicher zueinander. Okay, außer die Leute, denen man beim Einkaufen zu nahe kommt. Die schauen jedenfalls ziemlich böse. Oder ängstlich.

Star Trek: 25th Anniversary - Hijacked

Das Sternenflottenkommando ruft uns keine zwei Minuten nach unserem letzten Abenteuer zu einer neuen Mission: wir sollen nach der vermissten USS Masada im System Beta Myamid schauen.
Eigentlich wollte ich der Crew eine wohlverdiente Pause gönnen, aber Dienst ist Dienst und so machen wir uns auf. Kurz nachdem wir angekommen sind, werden wir von einem Elasi Piraten unfreundlich aufgefordert, das System zu verlassen. Wo kommen wir denn dahin, wenn Kirk sich von so einem aufgeblasenen Kapitän etwas vorschreiben lässt!

Wir vertreiben das Piratenschiff mit einigen Treffern unserer Phaser und Photonentorpedos und schwenken in den Orbit ein. Dort befindet sich auch das vermisste Schiff mit hochgefahrenen  Schilden. Spock kann mit unseren Sensoren 27 Lebensformen an Bord ausmachen und schlägt vor, den Computer der Masada mit einem geheimen Schiffscode von außen zu übernehmen und dann die Schilde herunterzufahren, so dass wir herüberbeamen können.

Vorher lasse ich aber Uhura das Schiff rufen und umgehend meldet sich ein weiterer Elsa-Pirat, der das Schiff gekapert und die Mannschaft als Geiseln genommen hat. Kirk macht ihm deutlich klar, dass er das Schiff und die Geiseln übergeben soll. Was vielleicht etwas zu vorschnell war, denn dem Piraten gefällt der forsche Tonfall von Kirk mal so gar nicht und tötet erstmal einen Gefangenen. Das gibt bestimmt Abzüge bei der Bewertung...

Er fordert uns auf, alle Daten, die wir über Gefangene Elasi besitzen, ihm zu übermitteln. Wir stimmen zu, aber nur um etwas Zeit zu gewinnen. Uhura sendet den Code an die Masada, mit der wir die Schilde senken können und Kirk beamt mit Spock, Pille und dem üblichen Red-Shirt auf das andere Schiff. 

Im anderen Transporterraum angekommen bietet sich uns ein Bild der Verwüstung. Das am Boden bewußtlos liegende Crewmitglied wird umgehend von Pille versorgt. Dieser ist zwar noch ziemlich benommen, bedankt sich aber artig und übergibt uns noch ein spezielles Werkzeug, mit dem wir aber zunächst nichts anfangen können. Schon gar nicht den Transporter wieder in Gang zu bekommen, da scheinen uns noch einige Dinge für zu fehlen.

Wir verlassen den Transporterraum und stehen in einem Gang, der ähnlich ramponiert aussieht. Die hintere Tür wird von einem Kraftfeld verschlossen. Nachdem Kirk ein paar Drähte, metallenen Schrott und Phaser ohne Energiezelle aufgelesen hat, gehen wir in den Gefangenentrakt. Zwei Elasi-Piraten stehen dort Wache, die wir mit Leichtigkeit mit den Phasern betäuben können.

In der Arrestzelle sehen wir neun Crewmitglieder hinter einem Energiefeld gefangen. Da Pille ein ungutes Gefühl hat, betätigt Kirk erstmal nicht den Schalter, um das Energiefeld aufzuheben.   Wir entdecken eine Bombe direkt hinter dem Energiefeld und die bunten Drähte haben bestimmt etwas damit zu tun. Spock soll sich darum kümmern und natürlich kann er die Bombe entschärfen. Die längeren Drähte nehmen wir mit und öffnen auch gleich noch das Energiefeld.

Ein Crewmitglied verrät uns noch, wie wir das Kraftfeld um die Brücke entschärfen können, aber Spock und Kirk kümmern sich erstmal um die Reparatur des Transporterraums, damit wir gleich von hier wegbeamen können. Danach stürmen wir die Brücke und setzen die Elsa-Piraten außer Gefecht. Wobei natürlich der Red-Shirt sein Leben lassen muss. Es interessiert aber auch jetzt keinen großartig.

Nachdem wir auf die Enterprise gebeamt sind, meldet sich auch gleich das Sternenflottenkommando, aber irgendwas scheinen wir bei dieser Mission nicht richtig gemacht zu haben. Die Bewertung ist unterirdisch und wir erhalten auch keine Erfahrungspunkte.

Star Trek: 25th Anniversary - Demon world

Auch wenn gerade Star Wars in aller Munde ist und mich auch das neue Spiel ein wenig reizt: antizyklisch ist das Wort und daher spiele ich im doppelten Sinne ein 27 Jahre altes Adventure aus dem "Star Trek"-Universum.

Schon gleich in den ersten Minuten fällt auf, wie sehr sich doch Spiele in den Jahren verändert haben. Es gibt kein Tutorial, in dem einen Schritt für Schritt das Spiel und seine Shortcuts näher gebracht werden. Wer nicht einen kurzen Blick ins Handbuch geworfen hat, ist schon jetzt
Das Spiel beginnt auf der Brücke der USS Enterprise und man steuert im gesamten Spiel lediglich Captain James T. Kirk, kann aber mit Pille und Spock und den anderen Crew-Mitgliedern interagieren.

Wir werden in ein simuliertes Gefecht mit der USS Republic geworfen. Also: Alarmstufe Rot, Waffen aktivieren und Schilde hochfahren. Hier sieht man auch gleich, dass das Hauptaugenmerk der Entwickler auf dem Adventure-Teil des Spiels lag. Die Steuerung ist grausam, die KI des gegnerischen Schiffes eher eine Farce. Keine Ahnung, ob die Kämpfe noch schwerer werden und der erste Kampf nur zum Lernen gedacht ist, aber ich konnte ohne gegnerischen Treffer die Republic außer Gefecht setzen.

Das Flottenhauptquartier meldet sich nach dem Sieg und schickt uns auf unsere erste Mission zum Planeten Pollux V. Die dort ansässigen Kolonisten haben gemeldet, dass Dämonen dort ihr Unwesen treiben sollen. Anfang der 90er Jahre bestand der Kopierschutz eines Spiels in Form von Abfragen aus dem Handbuch, so wie auch hier. Denn die Bezeichnung der Systeme und Planeten fehlt in der Sternenkarte im Spiel. Die gibt es nur im Handbuch.

Auf nach Pollux V und in den Standardorbit eingeschwenkt. Wir nehmen Kontakt mit dem Prälaten der Kolonie auf, der uns kurz die Lage erklärt und bittet auf den Planeten zu beamen. Kirk nimmt Spock, Pille und den üblichen Redshirt-Kadetten mit, überlässt Scotty das Kommando. Der Kolonie-Anführer erwartet uns vor der Siedlung und berichtet von einer Dämonensichtung in einer Mine nicht unweit von unserem Standort.

Bevor wir uns aber aufmachen, schauen wir uns noch in den nahegelegen Häusern um. In einer Lagerhalle entdecken wir einen Schwerverletzten, dem Pille erst einmal nicht helfen kann, da ihm ein Serum fehlt, das auch auf der Enterprise nicht zu finden ist. Ein Wissenschaftler erklärt uns, dass er das Serum mit Hilfe seines Labors und einiger Beeren herstellen kann. Diese Beeren wachsen in der Nähe der Mine, zu der wir ohnehin müssen.

Auf dem Weg zur Mine stellen sich uns plötzlich drei Klingonen entgegen, die wir mit unseren Phasern betäuben können. Dabei fällt einem Klingonen seine Hand ab, die Kirk aufnimmt. Seltsame Dinge gehen auf diesem Planeten vor sich. Woher kommen diese Klingonen?

Am Höhleneingang finden wir die besagten Beeren, können es aber auch nicht abwarten, die Höhle zu erforschen. Der Verletzte Kolonist wird es bestimmt noch ein wenig aushalten und so gehen wir erst einmal in die Höhle hinein dessen Gang vor einer metallenen Tür endet, die aber von einem Haufen Geröll verschüttet ist. Nachdem Spock das Gestein gescannt hat, beschließen wir mit unseren Phasern auf die Steine zu schießen, um sie zu pulverisieren. Beim ersten Schuss löst sich ein großer Stein und trifft den Red-Shirt, der wie nicht anders zu erwarten, dabei ums Leben kommt. Was aber keinen der anderen drei großartig zu belasten scheint.

Unter dem letzten Haufen kommt ein verletzter Kolonist zum Vorschein, den Pille sofort ärztlich behandelt. Nachdem es ihm ein wenig besser geht, stellt er sich als Bruder Kandrey vor. 
Neben der Tür befindet sich ein Sensorfeld, von dem Spock vermutet, dass es mit dem richtigen Handabdruck die Tür öffnet. Wir beschließen aber erst einmal zurück zur Siedlung zu gehen, um das Serum für den weiteren verletzten Kolonisten herzustellen.

Kirk zeigt Bruder Stephen die Beeren, die wir in sein Labor bringen sollen. In einer Maschine des Wissenschaftlers können wir das Serum aus den Beeren gewinnen und Pille kann ihn endlich verarzten. Der Kolonist berichtet nach seiner Gensung, wie sie in der Mine von Dämonen angegriffen wurden und diese ihn dabei schwer verletzt haben. Auf seiner Flucht haben sie ihn aber nicht weiter verfolgt.

Der Wissenschaftler Bruder Stephen ist an allen Dingen interessiert, die wir in der Mine finden. Und auch wenn die anderen Kolonisten nicht sonderlich begeistert sind, sollen wir ihm alles bringen, was wir dort finden können.  
Wir befragen noch die anderen Kolonisten, die uns angsterfüllt von den Dämonen berichten, die sie am oder auf dem Berg gesehen haben.

Zurück in der Mine probieren wir die Hand, die Kirk bei dem Gefecht mit den Klingonen erbeuten konnte, an dem Sicherheitsmechanismus der Tür aus. Zwar wird die Hand von der Tür erkannt, aber ein rätselhafter Kurzschluss verhindert, dass der Mechanismus diese öffnet.
Wir gehen zum Labor von Bruder Stephen zurück, wo Spock den elektrischen Schaltkreis der Hand reparieren kann. Nun können wir die Tür öffnen, hinter der sich eine weitere Höhle erstreckt. Wir stoßen auf einen Raum, in dem sich eine fremdartige Form eines Lebenserhaltungssystems befindet. Spock analysiert das System und kommt zum Schluss, dass der Computer auf eine Art Signal wartet.

Eine seltsame Maschine weckt die Neugier von Kirk, auf der neben der Ansicht einer Sonnenfinsternis sind einige Regler zu sehen, an der er sich gleich zu schaffen macht. In einer bestimmten Konstellation erscheint im Raum eine Art Aufzug, aus dem ein Alien steigt. Dieser bedankt sich, dass wir seine Maschine repariert hätten. Nach einer höflichen Begrüßung erfahren wir, dass es sich um das Volk der Nauians handelt, die vor tausend Jahren am Beginn der Eiszeit den Bunker gebaut haben. Der Computer sollte sie eigentlich bei der nächsten Sonnenfinsternis wecken, sie hatten aber nicht damit gerechnet, dass der Mond des Planeten zerstört wurde.

Auch die Erscheinung der Dämonen wird aufgeklärt, denn die Nauians haben einen Abwehrmechanismus entwickelt, der vor der Entdeckung des Bunkers schützen soll und der die größten Ängste derjenigen abbildet, der ihnen zu Nahe kommt. Leider kann er den Mechanismus nicht abschalten, da ihm der Schlüssel fehlt. Wir sollen ihm dabei helfen, ihn zu finden.

Bruder Stephen hat in seinem Labor ein paar seltene Stücke, die wir uns mal ansehen. Ein Stück ist dabei, was aus einem unbekannten Metall ist, für Bruder Stephen der Beweis, dass auf diesem Planeten vor Urzeiten schon einmal intelligentes Leben gewohnt haben muss. Seltsam verbogen ist es. Wir nehmen einfach alles mit, sollen es aber wieder zurückbringen. 
 
Das verbogene Metallstück scheint dem Außerirdischen bekannt vorzukommen und er ist hellauf begeistert, dass er damit den Abwehrmechanismus deaktivieren kann. Er bittet um Aufnahme in die Sternenförderation und freut sich auf den Kontakt mit den Kolonisten. Wir beamen auf die Enterprise zurück und werden vom Sternenflottenkommando für unsere hervorragende Arbeit gelobt. Auf zur nächsten Mission.

Die nie ein Mensch zuvor gesehen hat...

Zwar hat mich das Erscheinen von Bladerunner auf gog.com heute ein wenig verunsichert, aber ich halte an meinem Plan fest, die beiden Star Trek Adventures durchzuspielen. Der Winter ist kalendarisch da und vielleicht finde ich ein wenig Zeit über die Feiertage.