Claude Code

Privat programmiere ich ausnahmslos ohne Zuhilfenahme eines LLM, weil ich Spaß am Programmieren habe. Und eben diese Lust ist auch der Grund, warum ich mir bspw. so ein sinnloses Projekt, wie die Portierung meines Blogs auf Symfony aufgehalst habe. Das aktuelle System läuft sehr gut. Aber es macht mir Spaß. Und dabei habe ich keinen Nerv darauf, dass ein Claude auch nur in die Nähe kommt.

Im Job sieht das etwas anders aus: Einerseits bin ich froh, dass ich Zugriff auf Claude habe, um absurd uninteressante Sachen vom digitalen Sklaven erledigen zu lassen, und die eher spannenden Dinge von Hand machen kann.

Es ist schlichtweg frustrierend und langweilig, dazusitzen und Claude beim Generieren zuzusehen. Egal wie klein die Arbeitsschritte sind, dieses Ding findet fast immer einen Grund, um vom Plan abzuweichen und Irrsinn zu veranstalten.

Und natürlich gibt es dann auch Projekte, die man zu einem großen Teil von einem LLM generieren lässt. Und wenn das nicht gerade ein Projekt ist, das einem am Herzen liegt, verliert man vollkommen den Bezug dazu. Es macht für mich einen großen Unterschied, ob ein Projekt von Hand entwickelt wird und quasi ein wenig Herzblut enthält oder einfach nur ein fremdes, generiertes Ding ist.

Das scheint wohl gerade das Los vieler professioneller Entwickler zu sein… 

Simple Anti-FOMO RSS-Reader

Das erste Mal, dass ich ein GitHub Repo public mache. Im RSS-Club hatte ich ja schon mal angedeutet, dass ich einen einzigen RSS-Reader geschrieben habe, der per LLM FeedItem für mich nach Relevanz sortieren soll. Ich muss nicht alles lesen, was mir vor die Augen kommt. Man wird heutzutage ohnehin schon wie blöd mit News vollgepumpt. Quasi ein Anti-FOMO RSS-Reader. Der Name ist noch etwas sperrig.

Feature sind überschaubar:

  • Feeds werden einer OPML-Datei entnommen, gelesen und die Items in einer MySQL Tabelle hinterlegt.
  • Wenn ein ANTHROPIC_API_KEY hinterlegt ist, werden neu gelesene Items mit dem claude-haiku-4-5-20251001-Model klassifiziert. Dazu wird eine Markdown-Datei mit einer Liste von Kategorien herangezogen. Diese enthält je Zeile eine Kategorie mit Schlüsselwörtern/Definition. Die Reihenfolge der Kategorien entspricht der Relevanz. Was nicht vom LLM klassifiziert werden kann, ist „Nicht kategorisiert“ und steht unten in der Liste. Das sind dann in der Regel Posts, die sich nicht mit meinem Interessenbereich decken. Bei der Klassifizierung entstehen geringfügige Kosten.
  • Neue Items können als gelesen markiert werden.
  • Alte Items werden nach 5 entsorgt. * Items können favorisiert werden und bleiben dann über 5 Tage hinaus behalten.

Mehr gibt es noch nicht. Ich könnte mir vorstellen, die index.php zum Lesen auch wegzulassen und stattdessen das Ganze als RSS-Feed mit (soweit verfügbar) vollständigen Posts einfach nur als Feed bereitzustellen, den ich dann mit NetNewsWire lesen kann. Mal sehen …

Eine DDEV-Config ist im Repo enthalten.

Naja, es ist eher eine Art Proof of Concept als eine ernst gemeinte Anwendung. Ich denke, dass man so etwas vielleicht auch mit ein paar Klicks in Inoreader machen könnte. Aber wo bleibt denn da der Spaß.

Anders bloggen

Dieser Post ist ein kleines Experiment. Ich schreibe den Text als Frontmatter. Also ein paar key-value-Pairs oder YAML im Kopf und Markdown im Body. Claude checkt dann einmal ob ich Tinnef geschrieben habe, macht Witze über meine Tippfehler und erstellt dann einen Post über den MCP Server für das Blog.

So weit der Grundgedanke. Und während ich in vi noch fröhlich vor mich hin schreibe, weiß ich natürlich noch nicht wie gut das klappen wird.

Falls sich das Ganze als praktikabel herausstellt, muss ich dem create_entry-Tool noch Zugriff auf Last.fm geben um den zuletzt gescrobbelten Titel abzuholen um den im Post zu verankern. Und ein photo_tool ist in Anbetracht des Inhalts in diesem Blog vielleicht auch ganz sinnvoll.

Update: Und nach dem Posten, weiss ich nun, dass es perfekt funktioniert hat.

Update: Zum Foto-Upload: Ein MCP-Tool dafür ist leider keine gute Idee. Das Problem liegt darin, dass alle Tool-Parameter durch den Kontext des Sprachmodells müssen. Ein base64-kodiertes JPEG von ein paar Megabyte ergibt einen ebenso großen Textstring und das übersteigt schnell, was sinnvoll durch den Kontext geht. Stattdessen läuft der Upload direkt per curl an einen separaten HTTP-Endpunkt, komplett am Modell vorbei. Das MCP-Tool kümmert sich dann nur noch um die Metadaten.

Eine kleine Richtigstellung

OK, nach meinem Genörgel über die Kneifzange, muss ich evtl. was gerade stellen.

Seit Ende der 90er Jahre verdiene ich meinen Lebensunterhalt mit der Entwicklung irgendwelcher Software in unterschiedlichsten Bereichen und Sprachen. In all der Zeit sind Sprachen und Frameworks gekommen und wieder gegangen. Aber wenn ich zurückblicke, gibt es lediglich zwei Veränderungen, die meine Arbeit nachhaltig und positiv verändert haben: Debugger & Tracer (egal ob visuell oder textbasiert) und LLMs.

Ein per KI generiertes Bild eines selbstdichtenden Schaftbolzen. Dem Running-Gag aus Deep Space 9

Selbstdichtender Schaftbolzen: Ein per KI generiertes Bild eines selbstdichtenden Schaftbolzen. Dem Running-Gag aus Deep Space 9.

Ich habe kein Verständnis mehr für diese Ewiggestrigen, die beim Entwickeln auf LLMs verzichten. Selbst, wenn ich berücksichtige, dass ich viel Zeit investiere, um permanent hinterherzuschauen, was der kleine selbstdichtende Schaftbolzen gerade verbricht und ich manchmal das Gefühl habe, dass mich die „Begriffsstutzigkeit“ der LLM in den Wahnsinn treibt, reduziert sich meine Umsetzungszeit um die Hälfte bis zwei Drittel. Und das zeigt sich darin, dass der hässliche Teil wegfällt. Heute hat der kleine Schneehobel zum Beispiel für eine Datenmigration unzählige CMS Elemente von einer Software auf die Elemente einer anderen Software gemapped. Wenn ich vorstelle, ich hätte die Elementstrukturen auf beiden Seite erst ermitteln müssen, um dann einen Konverter zu schreiben, wäre ich vermutlich ausgeflippt.

Ganz anders bei Bildern. Wie kann man nur KI-Bildchen in seinem Blog posten. Da hört der Spaß nun wirklich auf… 

Mutter der Vergesslichkeit

Claude Code ist ja auch die Mutter der Vergesslichkeit. In einem Shopware Projekt liegen zwei Themes. In der CLAUDE.md ist hinterlegt welches davon das aktive ist. Die Keifzange nimmt in einem frischen Context beim Planen konsequent das falsche. Es ist schon beinahe lustig.

KW11/2026

Ich gebe mir große Mühe, diese Seite so unregelmäßig wie möglich zu aktualisieren.

Serienjunkie

Es gibt eine zweite Staffel von The Night Manager. Ich wusste nicht, dass eine zweite Staffel je geplant war. Die erste Staffel hat ein perfektes Ende geboten. Nichtsdestotrotz habe ich mir die erst nochmal angeschaut. Ist ja schließlich gut 10 Jahre her.
Und an diesem Abend geht es mit der zweiten Staffel los. Ich bin mal gespannt.


LLM & Claude Code

Ich freunde mich mehr und mehr mit Claude Code an. Langsam zeit sich, wie ich Claude am effektivsten einsetzen kann.

Unlängst habe ich Claude auf einen echt analen CLS losgelassen und in mehreren Anläufen wurde eine Lösung gefunden. Nach dem Blick auf den Code, dachte ich mir: Ja, logisch, aber danach hätte ich Stunden gesucht. Es ist praktisch, wenn man der Kneifzange ein Chrome-Fenster and die, sodass der Vogel selbst prüfen kann. Allerdings musste ich dafür Chrome installieren, was sich ein bisschen schmuddelig angefühlt hat. Aber ich muss die Rotzkiste ja nicht selbst benutze… 

Den Planning Mode zu benutzen, ergibt Sinn. So kann man im Vorfeld erkennen, wo der Vogel herumfantasiert oder einfach nur was Doofes machen will. Ja, man muss da echt ein Auge draufhaben.

Bei komplexen Featuren fahre ich am besten, wenn ich die Architektur, Datenstruktur etc. strikt vorgebe und dem Komiker nicht so freie Hand gebe. Je strukturierter und präziser die Vorgaben sind, desto besser ist natürlich das Ergebnis.

Bei einem neuen Feature, gebe ich dem CLI-Clown gern die komplette Vorgabe auf einen Schlag und lasse planen, checke das gegen und dann kann der Vogel umsetzen. Bei Anpassungen finde ich es praktikabler, in kleineren Schritten vorzugehen.


Kartenleser

Foto eines CFexpress Kartenlesers. Darstellt im 45 ° Winkel aus einer Schneideunterlage mit metrischer Einteilung.

CFexpress Cardreader

Jawoll, da ist er endlich. Der neue CFexpress-Kartenleser. Ich muss den Kamera-Akku also nicht mehr quälen, wenn ich mal ein paar hundert GB von der Karte herunterlade. Und schneller geht’s auch.