knuspermagier.de
Der privateste Blog von Philipp.

Das Känguru und Audiobookshelf

Heute kommt das neue Buch aus Marc-Uwe Klings Känguru-Kosmos heraus und da man ja nicht immer Amazon alles Geld in den Rachen schieben muss, dachte ich, ich kaufe das Hörbuch einfach in seinem eigenen Shop.

Nun stand ich allerdings vor dem unlösbaren Problem, dass ich es mir auf dem iPhone ja gar nicht in der Audible-App anhören kann. Dieses Problem ließ sich natürlich nur lösen, in dem ich einen neuen Service in mein Homelab aufnahm, der schon länger auf meiner Liste war: Audiobookshelf. Als Player auf dem Telefon habe ich Prologue, die App ist wirklich sehr schön und integriert sich wunderbar mit Audiobookshelf.

file://cdtnour5aorx9qih
file://xcbldddxlsfig7uk

Natürlich wurde der Platz auf meinem Docker-Host direkt etwas knapp, da ich nun mehrere hundert Megabyte große Sound-Dateien hochgeladen habe. Ich überlegte, wie ich die am besten ausgelagert bekomme und dachte mir zuerst, ich installiere jetzt Samba auf der Plex-VM und gebe die 4TB-SSD, die da dran hängt frei.

Die nächste Idee war es, das Jellyfin, das auf der Plex-VM läuft einfach auf den Docker-Host umzuziehen, und die Festplatte mitzunehmen. Damit würde ich mir auch eine VM sparen, das wäre nett. Leider musste ich feststellen, dass ich Jellyfin gar nicht per Docker installiert habe und auf die Migration einer Bare-Metal-Installation in den Container war mir erstmal zu nervig.

Zum Glück kam, kurz bevor ich Samba installierte, noch Markus mit einer viel besseren Idee um die Ecke: NFS. In Verbindung mit MacOS hatte ich damit bisher immer nur Probleme, aber von Linux zu Linux scheint das einfach problemlos und performant zu funktionieren. Der Docker-Host hat nun also Zugriff auf die 4TB-SSD und kann da beruhigt seine paar Hörbücher abspeichern. Yay!


Audiobookshelf unterstützt auch Podcasts, was ich erst Quatsch fand, denn die muss ich wirklich nicht archivieren. Später am Abend fielen mir aber doch noch zwei wichtige Podcasts fürs Archiv ein, die bisher nur auf der NAS versauerten.

file://xqybze38rwdxtutc

Die lange Reise nach Sanktuario

Große Teile meines Lebens verbrachte ich damit, Diablo 2 zu spielen. Zwischen 14 und 16, oder so, war es wahrscheinlich mein einziger Lebensinhalt. Raus aus der Schule und den ganzen Tag zockeeen.

Natürlich konnte Diablo 3 nie wieder den gleichen Reiz erzeugen, von Diablo 4 möchte ich gar nicht anfangen, das habe ich nämlich bis heute nicht gespielt, weil es natürlich nicht mehr auf dem Mac läuft.

Immer wieder habe ich jedenfalls Lust, mal wieder den Klassiker zu spielen und vor ein paar Jahren kam mit Diablo 2 Resurrected ja sogar eine aktualisierte Version raus, die das Spiel etwas auf modernere Displaygrößen (größer als 800x600) anpasst und ein paar Komfortfunktionen hinzufügt. Leider natürlich ohne Mac Support. Schade.

Vor zwei Jahren dachte ich mir, ich könnte es aber ja auf meinem Ayaneo AM01 spielen, kaufte es im Battle.net-Shop und… spielte ein klein wenig. Leider fand ich es etwas blöd, mich dafür immer an einen Schreibtisch mit Tastatur und Monitor setzen zu müssen und installierte dann Sunshine und Moonlight um das Spiel auf mein Macbook zu streamen, aber so richtig gut funktionierte das nicht, da der Mini-PC dafür wohl doch zu langsam war.


Zwischendurch kaufte ich das Spiel nochmal auf der Switch, denn da läuft es, im Gegensatz zu meinem Mac. Tatsächlich spielte ich dort auch relativ viel, nämlich einen Paladin bis Level 20. Ich schaffte leider den Endboss von Akt 2 nicht und meine Motivation schlief ein. Außerdem ist die Switch einfach nicht dafür geschaffen, verschiedene Spiele zu spielen.

Die Switch ist nämlich ein mega geiles Gerät, wenn man immer nur Animal Crossing spielt. Oder Zelda. Dann lässt man das einfach an, und wenn man spielen will, ist das Spiel noch geladen und man kann einfach weiter machen. Sobald da ein weiteres Spiel ins… Spiel kommt, ist es leider einfach nur noch anstrengend. Spiel beenden, laden, laden, neues Spiel starten, laden, laden, laden, laden. In einer Phase, in der die Switch also hier stark andersweitig frequentiert wurde, verlor ich irgendwann die Lust weiter zu spielen.


Nun ist 2026, ich dachte mir mal wieder, dass man ja Diablo 2 spielen könnte. Ich kam auf die tolle Idee, dass ich ja mal Bazzite auf meinem Ayaneo AM01 installieren könnte, denn dieses Linux nur für Gaming ist bestimmt einfach viel besser als Windows 11. Ich kaufte also erstmal einen USB-Stick, der groß genug ist, um das Image drauf zu spielen, installierte alles und musste mich erstmal damit rumärgern, dass der Battle.net-Launcher anscheinend die schlimmste Software der Welt ist und sich nur über die schlimmsten Umwege unter Linux zum Laufen kriegen lässt.

Leider musste ich da aufgeben, zum Glück kam das Spiel ein paar Tage vorher auch einfach bei Steam raus, wo ich es… naja, nochmal kaufte. Mit Steam klappte das alles super, das Spiel startete und… ich konnte es Spielen. Mit 10 FPS. Aaah. Unter Windows lief das doch recht performant, warum ist es jetzt so unglaublich ruckelig? Ich hatte wirklich keine Lust auf weitere Linux-Frickeleien, hab den Rechner abgeschaltet und wieder in den Schrank verpackt. Immerhin ist sind eine 1TB SSD und 32GB RAM drin, das ist ja quasi gerade Gold.


Da die Switch seit ein paar Wochen nur im Schrank rumlag, hab ich sie mir nochmal geschnappt und ein paar Runden Diablo 2 gespielt. Tatsächlich find ich die Steuerung mit dem Controller ja fast besser, als mit Maus und Tastatur. Ich hab ein paar Monster umgehauen, habe es bisher aber weiterhin nicht geschafft, mit meinem Paladin den Endboss vom 2. Akt zu besiegen, es ist einfach unglaublich schwer, wenn man mit den Items leben muss, die man so findet. Trotzdem macht es Spaß und eine schöne Portion Nostalgie schwingt ja immer mit. Ich hoffe, es will so schnell niemand etwas anderes auf der Switch starten.

Gestern fand ich auf Youtube dieses Video in dem ein paar Leute, anscheinend aus Vancouver, das gesamte Hamilton-Musical aufführen. Es ist natürlich nur eine Hobbyproduktion mit schlechtem Sound, ist bei jemandem zu Hause aufgenommen und es sind keine professionellen Musical Sänger:innen, aber ein paar davon sind echt ganz gut und ich hatte kein Problem damit, es mir komplett anzuhören. Gute Arbeit!

(Honorable Mention: Dieser Typ der das ganze Musical acapella in einer Schulkantine singt.)

Von 1Password zu Vaultwarden: Erster Eindruck

Vor ein paar Tagen kam eine E-Mail von 1Password, die eine Preiserhöhung ankündigte. Ungefähr 10$ sollte es teurer werden, das wären dann 70$. Ich habe das Abonnement schon relativ lange und um ehrlich zu sein, fand ich es immer schon eine Menge Geld um ein paar Kilobyte Daten zu speichern.

(Ja, ich weiß, die Entwicklung der Software kostet auch Geld, etc)

Zwar funktionierte das alles für mich immer problemlos, aber vor allem die Mac-App wurde halt auch nicht besser, seitdem es eine Electron-App ist. Außerdem gibt es mittlerweile ja einige Alternativen, die man mal ausprobieren könnte. Eine davon ist Vaultwarden, verbunden mit der Bitwarden-App.

Am Mittwoch startete ich den Vaultwarden-Container, installierte die Apps unter iOS und MacOS und habe meinen 1Password-Export importiert. Damit ich wirklich gezwungen bin, es zu nutzen deaktivierte ich 1Password in Chrome und auf dem Handy als Password-Autofill-Dienst.

Mein erster Eindruck nach zwei Tagen: Bisher funktioniert es völlig problemlos. Es schlägt mir Zugangsdaten vor und füllt sie aus. Die iOS-App funktioniert gut, die MacOS-App scheint auch Electron zu sein und, naja, sieht nicht ganz polished aus, klappt aber auch.

Weiteres kann man gar nicht berichten, it just works. Falls in den nächsten Wochen doch noch Probleme auftreten, werde ich mich nochmal melden.

Danger Dan - Das Ist Alles Von Der Kunstfreiheit Gedeckt

Das erste etwas aktuellere Album, dass es auf die Liste schafft. Danger Dan war mir vor seinem Solo-Album nicht wirklich bekannt. Ich kannte war die Antilopen Gang vom... Hören. Also den Namen, nicht deren Musik. Mit dem Erscheinen dieses grandiosen Albums traten also sowohl Danger Dan als auch seine Band in mein Leben, doppelt gut!

file://chvjsfqvminrfjbe

Anspieltipps: Lauf davon, Das schreckliche Buch, Ingloria Victoria. Wenn man, so wie ich, Live lieber mag, kann man es sich auch auf dem dazugehörigen Live-Album anhören, da sind noch ein paar andere Knaller mit drauf.


Dieser Post ist Teil der #52-alben-Serie.

Forgejo x Claude Code

Gestern habe ich versucht, mein Forgejo mit Claude Code zu verbinden. Ich hatte es mir ungefähr so vorgestellt, wie der Workflow mit Github Copilot: Ich erstelle ein Issue in Forgejo, assigne es einem Claude-User und das Issue wird dann gelöst, ein Merge Request wird erstellt und fertig.

Ich hab angefangen, das so zu bauen, mit einem Script, dass regelmäßig guckt, ob es neue Issues gibt und dann Claude Code startet, das entsprechend angewiesen ist, das Issue zu lesen, das Repo zu clonen, alles zu bauen, es zu pushen und am Ende einen Merge Request zu erstellen. Für einen sehr einfachen Task funktionierte das auch gut, aber natürlich fehlt dabei auch die ganze Diskussion, wo er erstmal einen Plan macht, den man sich angucken kann. Oder Nachfragen stellt. Wahrscheinlich könnte man das alles noch rauslesen, als Kommentare in das Issue pasten und auf meine Antwort warten, aber so wichtig war es mir auch nicht, sodass mich entschloss, diesen Ansatz nicht weiter zu verfolgen. Soll das doch jemand anderes bauen.

file://78qx77wwwt5jfn42

So ganz aufgeben wollte ich den Workflow allerdings nicht. Ich baute das also alles etwas um, behielt die ganzen Skripte und Skills um mit Forgejo zu interagieren und machte es wieder etwas interaktiver. Kann nun weiter meine Issues in Forgejo pflegen und ausformulieren und wenn ich Lust habe, kann ich mich auch von unterwegs auf meinem Server einloggen und kurz über claude-jo [link-zum-issue] lösen lassen. Ist zwar ein bisschen manuell aber dafür auch interaktiv. Und da es im Docker-Container läuft, kann ich es auch problemlos mit --dangerously-skip-permissions laufen lassen und muss nicht alle drei Sekunden etwas erlauben.

Ich habe den Code mal hochgeladen, das spart immerhin einen Prompt kostbarer Tokens.

Willkommen zurück, Woodpecker

Früher mochte ich es ja sehr, dass man, wenn man eine Änderung vorgenommen hat, einfach kurz die drei betroffenen PHP-Dateien hochladen konnte und fertig war die Laube. Das dauerte dann eine Sekunde und war mit einem Tastatur-Shortcut erledigt.

Heutzutage benutze ich natürlich für alles Docker, weil es ja auch ein paar Vorteile bietet, eine Sache, die ich aber immer noch nervig finde ist, dass ich ungefähr eine Minute warten muss, bis ich meine Änderungen live habe. Der größte Zeitfresser ist dabei der Upload des neuen Docker-Images in die Registry.

Ich hab zwar schon alles getan, was ich konnte, um das Dockerfile klein zu halten und alles so zu arrangieren, dass Änderungen auch nur kleine Diffs erzeugen, aber je nach Projekt ist es am Ende doch immer ein Upload von 50-100 Megabyte und das dauert nun mal wesentlich länger, als nur drei Kilobyte Dateien hochzuladen, vor allem, wenn man mal nicht an seiner 100 MBit-Leitung hängt.


Um diesen Schritt zumindest ein klein wenig schneller zu machen und den Step generell etwas von meinem Rechner loszulösen, hab ich mich nochmal entschlossen, mir eine YAML-Datei für Woodpecker CI zu schreiben, was ich ja eh seit Ewigkeiten (ziemlich ungenutzt) herumliegen habe.

Tatsächlich war das auch gar nicht so schwer und funktioniert ziemlich out of the Box. Im ersten Step führe ich composer install , npm install und npm run build aus und im Zweiten wird der ganze Kram mit dem woodpeckerci/plugin-docker-buildx Image gebaut und in die Registry geschubst. Vorteil hier: Er kann mit buildx direkt ein Image anlegen, das auf mehreren Plattformen funktioniert, dafür war ich lokal immer zu faul und ärgerte mich ab und zu, wenn ich etwas für amd64 baute, aber auf meinen Hetzner Server deployen wollte, der ja mit ARM läuft.


file://m297ova3o9ynijo6

Die wichtige Frage ist nun natürlich, ob es was gebracht hat, oder nicht. Ein Durchlauf braucht gerade ungefähr eine Minute, der Upload in die Registry ist auf jeden Fall wesentlich schneller. Aber natürlich verliert der Woodpecker Agent in den anderen Schritten etwas Zeit, da die Single Core Performance von meinem Rechner, auf dem er gerade läuft, natürlich von meinem M1-Macbook Pro hier in den Schatten gestellt wird.

Trotzdem hat es sich gelohnt. Ich kann nun direkt aus dem Git deployen, könnte also auch mal einen KI-Agenten direkt darauf werfen, statt ihn lokal laufen zu lassen. Zusätzlich erstellt er Multi-Plattform-Images und wenn ich mal in einem Slow-Internet-Bereich bin, dauert ein Push nicht mehr 10 Minuten, sondern nur noch eine Minute, zusätzlich zur Zeit für den git push.

Versengold - Allgebraeu

Versengold sehe ich in letzter Zeit immer öfter, sowohl auf Youtube, als auch auf Werbeplakaten für ihre Touren. Mittlerweile scheinen sie auf einem Popularitätslevel angekommen zu sein wie Santiano oder so. Ich gönne es ihnen natürlich, wirklich leiden kann ich ihre Musik in den letzten Jahren allerdings nicht. Das hält mich allerdings nicht davon ab, ihr zweites Album mit auf eine einsame Insel zu nehmen, denn es ist ein nahezu perfektes Mittelalter/Folk-Album aus dem Jahr 2006.

file://hfenflukhqajesh5

Zum ersten Mal kam ich mit diesem Album auf einer Fahrt zum Feuertanz-Festival, wahrscheinlich hatten wir eine echte CD im Mehrfach-CD-Wechsler im Auto und hörten uns da durch. Es war wunderbar!

Es ist mal wieder so ein nahezu perfektes Album ohne Tracks, die ich unbedingt skippen müsste. Viele Lieder erzählen einfach tolle Geschichten und natürlich ist alles sehr klassisch instrumentiert. Ebenfalls schön finde ich, dass sie damals mit Carolin Fährmann noch eine weitere Sängerin in der Band hatten und sich perfekt ergänzten.

Anspieltipps: Einerley, Friedel und das Allgebraeu, Das Bier ich in der Rechten trug.


Dieser Post ist Teil der #52-alben-Serie.

Doch kein GlitchTip

An sich war ich ja sehr zufrieden mit GlitchTip. Ich hatte es in alle meine Projekte integriert und dafür gesorgt, dass alle Exceptions gut ankommen, aber ich bekam es leider nie hin, dass die Webhook-Alerts funktionieren. Selbst wenn ich da einen Dummy-Service wie PostBin hinterlege, kommt einfach nichts an. Ich habe nicht herausgefunden, unter welchen Voraussetzungen er sich entscheidet eine Notification rauszuschicken.

Da das leider ein relativ wichtiges Feature ist, war ich also doch etwas unzufrieden. Meine Möglichkeiten waren nun entweder den Django-Code von GlitchTip mal mit Claude untersuchen zu lassen, um herauszufinden, was ich vielleicht falsch mache, oder ich lasse einfach einen API-Endpunkt in mein Server-Übersichtstool einbauen, dass die Sentry-Envelopes versteht. Da ich ansonsten keine Features brauche, außer dem Empfangen von Exceptions und Herausschicken von Alerts, war das eigentlich relativ einfach.

file://cy7xx1xscmvpj7sf
file://ajesv9zvlbriqlkv

Damit hab ich auch ein wiedere einen Service weniger, der irgendwo laufen muss, gut so! Allgemein sollte jede Software, die Webhook-Auslösung anbietet auch einen Test-Button für diese eingebaut haben, sonst ist das doch alles nichts.

Schöne kleine Dinge

In den letzten Tagen sind mir drei Dinge aufgefallen, die mich so richtig zufrieden gemacht haben und diese möchte ich hier, auf diesem Wohlfühlblog, mit euch teilen.

Erstens: Ich habe einige Tage zugebracht Abends, immer mal für ein paar Minuten, ein riesiges Wollknäuel, was sich über die Jahre verfilzt hatte zu entwirren. Das war so unglaublich rewarding, wenn man ein bisschen herumfitzelt und plötzlich kann man wieder ganze 40cm weiter ziehen. Als ich endlich fertig war, war ich fast etwas traurig, dass es schon vorbei ist.

Zweitens: Ich hab einen Kabelkanal angebracht und ein Kabel drin versteckt. Habe ich einfach schon viel zu lange nicht mehr gemacht, ist aber immer ein wunderschönes Gefühl.

Drittens, und das ist natürlich etwas peinlich, weil es meine Vorliebe für zuckerhaltige Getränke ausdrückt, aber das Gefühl, wenn man die Coladose aus dem Kühlschrank nimmt, und es ist noch mehr drin, als man dachte, ist auch ganz wunderbar.

Was für kleine Dinge sind euch in letzter Zeit passiert?