Ich habe das Design der Movie-Tracker-Seite etwas dem Projekt angepasst.
Notes
12. Aug. 2026
10. Aug. 2026
7. Aug. 2026
4. Aug. 2026
Ich habe heute mit der Serie Fargo angefangen. Und direkt die erste Folge hatte mich am Haken. Ich bin mal gespannt, ob das über fünf Staffeln so weitergeht.

Neue Schuhe. So weit nichts Besonderes, das kommt alle 10 bis 15 Jahre mal vor. Aber diese sind nicht schwarz; nicht mal dunkel. Und das ist eher eine Seltenheit. Ich habe mich wieder für einen Barfußschuh entschieden. Die sind einfach zu bequem. Bei diesem wollte ich allerdings eine griffigere Sohle, die auch in etwas unwegsamerem Gelände funktioniert. Bin mal gespannt, wie sich eine heller Schuh am Fuß anfüht.
31. Juli 2026
Man leidet an einem Shopware Projekt und möchte mal eine Übersicht der Queries, aber der Doctrine-Query-Tab im Symfony-Profiler ist leer.
Zwei naheliegende Verdächtige (HTTP-Full-Page-Cache, dann der Objekt-/Route-Cache) waren beide falsch: Ein Test mit request-lokalem Array-Cache lieferte weiter 0, also landeten die Queries gar nicht erst im Collector. Ursache war eine fehlende optionale Dev-Dependency. Das Framework nutzt gar kein DoctrineBundle, sondern hängt sein eigenes Query-Profiling nur dann an die DB-Connection, wenn das doctrine-bridge-Paket installiert ist, abgefangen über ein isInstalled('symfony/doctrine-bridge')-Gate im Kernel-Bootstrap von Shopware. Und was soll ich sagen, an der Stelle hat man bei der ursprünglichen Einrichtung des Projekts gespart. Und wer doctrine-bridge sagt, muss auch sql-formatter sagen.
vendor/shopware/core/Framework/Adapter/Kernel/KernelFactory.php:51-53: (SW 6.7.3.1)
if ((\PHP_SAPI !== 'cli' || in_array('--profile', $_SERVER['argv'] ?? []))
&& $environment !== 'prod' && InstalledVersions::isInstalled('symfony/doctrine-bridge')) {
$middlewares = [new ProfilingMiddleware()];
}
In diesem Fall hat mir die Installation der beiden Pakete mein heiß ersehntes Doctrine-Panel beschert.
ddev composer require --dev symfony/doctrine-bridge doctrine/sql-formatter
symfony/doctrine-bridge evtl. mit einem Version Constraint passend zur Symfony Version.
30. Juli 2026
Star Wars: Starfigher – mit Ryan Gosling?! Warum nicht gleich ein KI-Darsteller.
29. Juli 2026
Es gibt drei neue Statistiken: Last.fm-Scrobbles pro Jahr, Anzahl Filme vs. Serien und Anzahl Filme vs. Episoden.
26. Juli 2026
Neuromancer (AppleTV) und Blade Runner 2099 (Prime Video) als Serie. Fast unglaubwürdig. Aber es ist ja noch eine Weile hin. AppleTV spielt Neuromancer am 27.1.2027 an und Blade Runner kommt wohl erst 2099.
Trailer auf YouTube: Blade Runner 2099 / Neuromancer
24. Juli 2026
Wie an den meisten Freitagen bin ich auch diesen fix und alle. Und das schon am Vormittag. Ich frage mich, woher ich früher die Kraft genommen habe, abends loszuziehen, um mit zwei Armen einen hinter die Binde zu kippen. Wenn ich heute an meinem Bett vorbeigehe, muss ich die letzte mir verbliebene Kraft aufwenden, um nicht hineinzufallen.
23. Juli 2026
Gestern Abend habe ich mir Masters of the Universe angeschaut. Ist seit Kurzem bei Prime Video streambar. Der Film ist so absolut lächerlich. Ich habe mich köstlich amüsiert.
22. Juli 2026
Der erste Avenger 5: Doomsday Trailer macht mich nach langer Zeit mal wieder neugierig auf einen Marvel Film. Nach der Sache mit den 10 Ringen war ich raus. Die Szene in dem Bus ist auch das Einzige, an das ich mich überhaupt erinnern kann. Die war zugegebenermaßen nett gemacht. Aber sonst ist von der Handlung nicht viel im Kopf geblieben.
21. Juli 2026
19. Juli 2026

Die Kluft zwischen dem, was wir über Tauben zu wissen glauben, und dem, was die Wissenschaft tatsächlich über sie herausgefunden hat, könnte größer kaum sein.
– Äußerst lesenswert. Es gibt ein fast gleichnamiges Buch: Die Genies der Lüfte, das mich beim Googlen neugierig genug gemacht hat, um es mal zu bestellen.
Hmm… als Fan von Bleistiften bzw. Schreibtutensilien im Allgemeinen, kommt der Pen N mit einer gewissen Mögigkeit daher.
Es war mir nicht bewusst, wie teuer ein Führerschein heutzutage geworden ist. Zwischen 3500 und 4000 Euro für 'nen Lappen ist ja obszön.
Ich kann mich nicht mehr genau erinnern, was mich damals die Lizenz zur Lenkung eines Velociraptors gekostet hat. Das müssen etwa zwei Tyrannosaurus-Rex-Eier – damals eine harte Währung – gewesen sein. Also habe ich mal ins Internetz geguckt und bin über die Seite Kostenentwicklung des PKW-Führerscheins in Deutschland (1990-2024) gestolpert.
Auch wenn ich meinen seit 30 Jahren oder so nicht genutzt habe, kann ich mich wohl glücklich schätzen, dass ich heute keinen mehr machen muss.
16. Juli 2026
Überall verlinkt, weil gut: Jurassic Park computers in excruciating detail (via)
The Field Guide to Grid Lanes. Im wichtigsten Browser noch nicht per Default unterstützt. Könnte ich mir in Zukunft im Photoblog-Stream als gute Alternative zu den Boxen mit fester Aspect-Ratio vorstellen. (via adactio)
15. Juli 2026
Gestern habe ich dann doch Der Astronaut
geschaut. Bisher hatte ich keinen Nerv dazu, weil ich wirklich kein Fan von Ryan Gosling bin. Dennoch hat mir der Film gut gefallen. Wer Der Astronaut
also aus dem gleichen Grund noch nicht geschaut hat, sollte es vielleicht doch tun.
14. Juli 2026
Der letzte Flugtee war so gut, dass ich ihn zweimal nachbestellt habe. Aber nun war er vergriffen. Und ich habe mich für den DJ2 anstelle des DJ1 entscheiden müssen.

Ich könnte nicht sagen, welcher mir lieber ist. Beide sind echt klasse.
ProtoU: The Infinite Recall (Tidal). Ganz neu. Wurde heute vorgestellt.
8. Juli 2026
Eine Symfony-Message-Queue-Failed-Queue wächst über Tage auf tausende Einträge. Sämtliche Fehlermeldungen lauten SQLSTATE[42000] 1305: SAVEPOINT DOCTRINE_n does not exist oder There is no active transaction. Man sucht also nach einem Savepoint-Bug, nach kaputtem Transaction-Handling, nach einem Doctrine-Problem. Alles falsch: Der eigentliche Fehler ist ein InnoDB-Deadlock, und der steht in keiner einzigen Fehlermeldung.
- Doctrine DBAL bildet verschachtelte Transaktionen über Savepoints ab (
SAVEPOINT DOCTRINE_2,DOCTRINE_3, ...). Das betrifft auch Systeme, die das Doctrine ORM gar nicht einsetzen: Shopware etwa ersetzt mit seinem eigenen DAL nur die ORM-Schicht, geschrieben wird trotzdem über dieDoctrine\DBAL\Connection. Ein Repository-Write innerhalb einer äußeren Transaktion läuft dort im Savepoint. - Erwischt ein Deadlock eines der Statements, rollt MariaDB/MySQL nicht nur das Statement, sondern die komplette Transaktion implizit zurück, und zwar inklusive aller Savepoints. Der Client erfährt davon nur durch den Deadlock-Error des einen Statements; die Verbindung selbst steht danach ohne Transaktion da.
- Doctrine weiß davon nichts und räumt regulär auf:
ROLLBACK TO SAVEPOINT DOCTRINE_n. Den Savepoint gibt es nicht mehr, der Server antwortet mit 1305. Diese neue Exception ersetzt bzw. überlagert die ursprüngliche DeadlockException. Je nach Verschachtelungstiefe schlägt stattdessen später das äußereCOMMIT/ROLLBACKmitThere is no active transactionfehl. - Im Log und in der Failed Queue landet damit nur das Aufräum-Symptom, nie die Ursache. Bei tiefer Verschachtelung kappt der Exception-Handler die Previous-Kette auch noch („Over 9 levels deep, aborting normalization“ bei Monolog), der Deadlock ist endgültig unsichtbar.
Die eigentliche Pointe ist die Folgewirkung: Retry-Mechanismen, die auf Doctrine\DBAL\Exception\RetryableException matchen, greifen nicht mehr, denn die Exception, die oben ankommt, ist eine schnöde DriverException, die nicht retrybar aussieht. Der Deadlock, der klassische Fall für „einfach nochmal versuchen“, wird durch sein eigenes Symptom vor der Retry-Logik versteckt. Shopware hat dafür in RetryableTransaction inzwischen einen Workaround, der per Regex auf SAVEPOINT ... does not exist matcht (siehe auch Doctrine-Issue dbal#6651), aber die Variante There is no active transaction rutscht auch daran vorbei.
Fix-Muster: Retry eine Ebene höher ansetzen als die Transaktion, die gesamte Exception-Kette (getPrevious) auf Deadlock-Signaturen prüfen statt nur auf Exception-Typen, und vor dem Retry die Connection hart zurücksetzen. Bei DBAL 4 reicht $connection->close(): Das setzt auch den internen Transaction-Nesting-Level zurück, reconnected wird lazy beim nächsten Query.
Debugging-Heuristik: tausende Savepoint-Fehler oder „no active transaction“ in einem Zeitfenster mit parallelen Schreibprozessen (Importe, Indexer, mehrere Queue-Worker) sind fast nie ein Transaction-Handling-Bug, sondern fast immer ein maskierter Deadlock. Die Ursache habe ich in SHOW ENGINE INNODB STATUS (LATEST DETECTED DEADLOCK) gefunden, nicht im Stacktrace.
Mein Nachmittag.
- <
- >


