knuspermagier.de
Hallo. Ich bins! Philipp!

Photos.app-Library backuppen mit osxphotos

Kurz notiert, weil ich es alle drei Monate wieder vergesse, wie das Tool heißt, was ich benutze:

Mit osxphotos kann man seine Photos.app Library ganz einfach exportieren um sie z.B. auf die NAS zu schieben. Dabei werden alle möglichen Metadaten, soweit möglich, erhalten und mit exportiert.

osxphotos export --export-by-date /Volumes/Fotos/Fotos-iPhone --download-missing --use-photokit --retry 3 --exiftool --update

Das versucht auch automatisch erstmal alle Originalversionen der Fotos herunterzuladen, was manchmal wohl etwas zu Problemen führen kann – bei mir zum Glück nicht, denn ich habe am Mac Keep Originals eh aktiviert.

Discord Export Viewer

In letzter Zeit versuche ich Kram, der mir schon seit längerem auf dem Herzen liegt, halbwegs schnell mit Hilfe von AI zu erledigen. Heute geht es es um eine kleine Webapp, die den Discord DSGVO-Export halbwegs übersichtlich anzeigt.

Warum?

Wozu brauche ich das? Ich versuche eigentlich jeden Tag ein paar Zeilen in mein Tagebuch zu schreiben, manchmal vergesse ich das aber und so entstehen unschöne Lücken. Wenn ich das Monate später bemerke, kann ich mich natürlich in den seltensten Fällen erinnern, was ich jetzt am 18. April 2025 genau getan habe.

Glücklicherweise gibt es eine gute Quelle, wo ich jeden Tag etwas reinschreibe, und meistens hat es auch eine gewisse Relevanz für den entsprechenden Tag: verschiedene Discord-Server.

Würde es sich nun wirklich nur um einzelne Tage handeln, könnte man wahrscheinlich mit der Suchfunktion in Discord alle eigenen Nachrichten von einem bestimmten Tag suchen, manchmal sind es aber doch ein paar Tage in Folge, die ich rekonstruieren muss, und so dachte ich mir schon länger, dass es spannend wäre, einfach den DSGVO-Export, der alle meine Nachrichten enthält, zu nehmen und entsprechend darzustellen, dass ich mich da kurz durchklicken kann.

Warum erst jetzt?

Ich glaube, meinen ersten Discord-Export habe ich vor zwei Jahren angefordert. Aber die Aufgabe war mir einfach immer zu dumm und zu lästig. Außerdem wusste ich ja, dass die Daten da sind, verarbeiten kann ich sie ja immer noch.

Prompts

Diese drei Prompts lieferten nach vielleicht so 10 Minuten das fertige Ergebnis, an dem ich nichts mehr zu mäkeln hatte. (Sonnet 4.5)

hey. in package/ there are a lot of json exports of the messages i send to different discord channels. please try to understand the schema and build an importer that imports the messages to a sqlite database. in a second step build a basic php app (no react, no stuff, just simple php multi page application) to view all the messages on the different channels and servers. the messages should be displayed grouped by day.

ok, good work so far. now create another entry page, that shows a calendar (yearly, all months, all days) from the start of the messages to the end. every day should be a link to a page that shows all messages for that day across all servers (oldest message at top, newest at bottom). also can you extend the importer to automatically download all the attachments and replace the links to the CDN with local links?

one small change: the day.php view currently displays all messages from the day. it would be better if they were grouped by CHANNEL and not completely jumbled

screenshot-2025-12-30-at-01.54.31.png
Fast 115k Nachrichten??

Fazit

Es ist irgendwie erfrischend, so kleine “könnte man ja mal machen” Sachen kurz abzugeben und am Ende ein benutzbares Produkt zu haben, ohne, dass man sich selber mit langweiligen JSON-Strukturen auseinander setzen muss.

Damit die 10 Minuten KI-Denkzeit nicht ganz umsonst waren, habe ich es auch mal bei Github hochgeladen, vielleicht muss ja noch jemand mal seinen Discord Export anschauen.

(Aber bitte nicht den Code, der sieht echt nach einer PHP-App von 2002 aus. Aber ich hab zumindest einmal drüber geguckt, ob er nicht zufällig alle meine Nachrichten irgendwo ins Internet schickt.)

The Pitt

Staffel 1

Vor Monaten sah ich auf Mastodon einen Post von Nico, den ich mittlerweile nicht mehr wiederfinde, wahrscheinlich, weil er die Instanz zwischendurch gewechselt hat, der die HBO Max-Serie The Pitt anpries. Der Trailer wirkte ganz interessant, also schaute ich rein und muss sagen, dass ich selten von einer Serie so begeistert war!

Es gibt 15 Folgen, die den Verlauf einer 15-Stunden-Schicht in der Notaufnahme in einem Krankenhaus in Pittsburgh begleiten und es geht… hoch her. Das ist es auch irgendwie, was mir gefällt. Gefühlt kommt alle 4-5 Minuten ein neuer Patient oder eine neue Patientin reingerollt und stellt eine neue Herausforderung für Dr. Robby und sein Team dar. Es geht einfach Schlag auf Schlag und man hat gar keine Ruhe. Hier und da gibt es auch mal eine lustige Szene, oder es wird mal ein Hund gestreichelt, aber eigentlich ist konstant einfach Action.

Dr. Robby erinnerte mich an Anfang ganz ein wenig an House, aber naja, eigentlich ist er einfach nur ein bisschen grumpy, wer wäre das nicht, wenn man regelmäßig 15-stündige 100%-Stress Schichten schieben muss.

Was die einzelnen Fälle angeht, und was sonst so passiert, gewinnt es jetzt nicht unbedingt einen Preis für total Innovatives oder nie Dagewesenes. Ein paar Fälle sind mir auch etwas zu unsubtil und plakativ, wie die Fentanyl-Überdosis, oder die Frau, die von ihrer Menschenhändler-Vorgesetzten hingebracht wird, die für sie spricht, oder die Jugendliche, die gerne eine Abtreibung vornehmen will, aber in letzter Sekunde kommt ihre Mutter und versucht es zu verhindern, das sind jetzt alles keine ganz besonderen Sachen, wo es einen House braucht, um herauszufinden, was jetzt das Problem ist.

Manche Fälle sind aber auch spannender und tiefgründiger. Insgesamt ist es aber einfach die konstant hohe Schlagzahl von Dingen, Szenenwechseln, Patientenwechseln, die da passieren und irgendwie mitreißen. Ab und zu gibt es natürlich auch nochmal ein paar Sachen, die besonders unter die Haut gehen.

Also, top Serie, wenn man mal 15 Stunden nichts zu tun hat. Am besten vielleicht am Stück gucken, und sich freuen, dass man gerade auf dem Sofa sitzt und nicht wirklich in der Notaufnahme arbeitet.


Bis hierhin schrieb ich den Text, nachdem ich die ersten zehn Folgen in zwei oder drei Tagen durchgebinged hatte, danach gab es für mich leider einen kleinen Downer, der dazu führte, dass ich die Serie erstmal zwei Monate nicht weiter schaute. – Spoiler ab hier – In Folge 11 oder 12 kommt es nämlich auf einem Festival zu einem Mass Shooting und die ganzen Verletzten kommen in die Notaufnahme. Damit wird es für die ganze Crew natürlich nochmal herausfordernder, ganz abgesehen davon, dass eigentlich alle schon am Ende ihrer Schicht sind.

Gleichzeitig fand ich es schlagartig irgendwie anstrengend und langweilig. Statt einem neuen potentiell spannenden Fall, der Diagnostiziert werden muss, kommen nun pro Minute einfach drei Personen mit blutenden Schusswunden, und das ganze über 3 Folgen lang.

Wie gesagt, brauchte ich ein paar Wochen, bis ich mich dazu durchringen konnte, den Rest zu gucken und konnte mich mit der letzten Folge auch wieder mit allem etwas versöhnen.


In der Ursprungsversion dieses Textes schrieb ich noch, dass ich mir gar nicht gut vorstellen könnte, wie eine zweite Staffel der Serie aussehen würde, da in der ersten schon in einer solch massiven Schlagzahl alles passierte, was in einer Arzt-Serie passieren kann. Eben hab ich aber nochmal recherchiert und las, dass es anscheinend schon Anfang 2025 renewed wurde und die ersten Folgen der zweiten Staffel schon im Januar 2026 erscheinen werden. Nagut. Schauen wir mal, wie sich das entwickeln wird.

Firefly Drei AI

So ungefähr einmal im Jahr bekomme ich die Lust, mal einen CSV-Export von Outbank zu nehmen und ordentlich zu kategorisieren, um zu sehen, ob ich jetzt mehr oder weniger Geld für Essen ausgegeben habe. Bei meinem letzten Versuch machte ich das mit Firefly III, fand das aber nur so mittel und baute kurzerhand ein eigenes Tool dafür…

Da ich bei der Sache aber sehr nachlässig bin und schnell die Lust verliere, fehlten natürlich ein paar Sachen um es wirklich nutzen zu können und so begab es sich, dass ich wieder ungefähr anderthalb Jahre lang einfach nichts machte.

Da sich mein Tool also nicht benutzbar genug anfühlte, importiere ich wieder alles in Firefly und fing an alles durchzugehen. Irgendwann hat Amazon leider angefangen, teilweise für eine Bestellung von fünf Artikeln 4-6 Abbuchungen in völlig zufälligen Höhen zu machen. Da ich das alles etwas unübersichtlich fand, wollte ich die Transaktionen gerne zusammenführen, aber natürlich kann Firefly das nicht.

Nun stand ich vor der Frage, ob ich doch auf mein Tool wechsele, und herausfinde, was sonst noch fehlt um es wirklich benutzen zu können, oder ob ich es in Firefly einbaue. Vor dem KI-Zeitalter hätte ich mich garantiert für Ersteres entschieden, aber nun witterte ich die Chance, dass ein einfaches ”Bitte bau ein, dass man zwei oder mehr auf der Transaktionsliste ausgewählte Transaktionen mergen kann"* mein Problem in kurzer Zeit lösen könnte. Ich erstellte also einen Fork von Firefly, checkte das Git-Repo aus und warf Claude an. Insgesamt dauerte es so zehn Minuten AI-Zeit und weitere zehn Minuten für mich um herauszufinden, wie ich den Docker-Container bauen kann und das Feature war drin und funktioniert. Juchu!

screenshot-2025-12-03-at-17.14.56.png

Ein weiterer Fall in dem mir das vorsichtige anwenden von etwas AI-Magie den Alltag etwas erleichtert hat.

(Ja, ich weiß, theoretisch muss ich jetzt immer Zeit investieren, den Fork aktuell zu halten, mit den Updates aus Upstream, aber da kommt zum Einen eh nie was spannendes und zum Anderen hab ich davor mit der Version von zwei Jahren gearbeitet und nichts vermisst)

*: Der volle Prompt war etwas länger, auf Englisch und insgesamt gab es noch vier Feedbackloops, wo er ein paar Error 500s fixen musste.

Scheibenwelt

Ich habe in den letzten Jahren ja öfters versucht wieder in die Scheibenwelt zu kommen, aber bisher ist es mir nicht so richtig gelungen. Ich finde das sehr schade da Wachen, Wachen! damals, als ich 16 war, das erste Buch war, was ich in meinem Leben gelesen habe und ich fand es total witzig und cool.

Leider scheint mit der Humor von Terry Pratchett in den letzten Jahren immer… weniger zu gefallen. Oder keine Ahnung. Ich habe, glaube ich, ungefähr schon dreimal mit Die Farben der Magie angefangen und es abgebrochen. Diesmal habe ich mir als Hörbuch angemacht und hab es fast durch, weil ich mich da weniger überwinden muss, als wenn ich selber lese, aber so richtig übergesprungen ist der Funken noch nicht wieder. Vielleicht gebe ich der Sache mal noch ein oder zwei Bücher. Vielleicht ist die Zauberer-Reihe auch einfach gar kein guter Einstieg und ich sollte lieber bei den Wachen-Büchern weiter machen. Wer weiß.

Diese gute alte Lesereihenfolge von Uwe Milde dürfte auf jeden Fall zu meinen ältesten Bookmarks gehören.

Die Gesellschaft zur Erhaltung der Kaijū-Monster

John Scalzi

Ein schnelles kurzes Buch. Hat sich schnell weg gehört und hat eine interessante Welt aufgespannt, die auch direkt wieder vorbei war. Insgesamt fehlten mir mehr Informationen. Ich denke noch 150 Seiten mehr mit mehr Lore wären gut gewesen.

Nun ist die Frage, ob ich mir überhaupt weitere Bücher angehört hätte, wenn es mehr gegeben hätte, wenn ich eh nur drei Sterne vergebe. Oder vergebe ich die Sterne, weil ich es so schade finde, dass es ein One-Shot in dieser Welt ist? Wer weiß.

Wie mich mein WLAN viel Zeit kostete

Letztens ersetzte ich mein in die Jahre gekommenes Amplifi HD-System mit einer Kombi aus UniFi Express 7 und U7 Lite. Erstmal lief alles auch super, vor allem das auspacken und konfigurieren macht ja immer Spaß, weil alles so hübsch ist, angefangen bei der Verpackung, bis hin zur Konfigurationsoberfläche.

Als ich ein paar Tage später merkte, dass ich, wenn ich zu dem U7 Lite verbunden bin, nur maximal 10 MBit Durchsatz bekomme, war ich allerdings wieder etwas enttäuscht. Da hat wohl mein Netzwerk-Fluch wieder zugeschlagen, den ich mir wahrscheinlich eingefangen habe, weil ich im Informatik-Studium zu selten in der Hochschule war. Der sorgt auch dafür, dass bei mir Fritzboxen nie zufriedenstellend funktionieren.

Ich erstellte mir also eine Liste von Dingen, an denen es liegen könnte und probierte durch. Das Kabel von der Buchse bis zum Accesspoint war es schonmal nicht, auch wenn ich darauf meine größte Hoffnung legte. Das war nämlich schon echt alt und zerquetscht. Als nächstes warf ich einen Blick auf meinen Switch und sah, dass das Lämpchen am entsprechenden Port statt grün nur orange leuchtet. Also schonmal bestätigt kein Gigabit-Link!

Nun verbrachte ich zu viel Zeit damit, im Unify UI herauszufinden, wie ich den SSH-Zugang aktivieren kann, um mich auf dem Gerät einzuloggen und per ethtool eth0 zu checken, mit welcher Geschwindigkeit das Interface arbeitet. Cool, dass das geht, aber warum wird das nicht einfach auch in der Web UI angezeigt? Ist ja nicht so, als wären die da sonst sparsam mit Daten. Jedenfalls bestätigte mir die Anzeige das Problem: Speed: 10Mb/s

Ich probierte also erstmal das Einfachste, was mir in den Sinn kam: Ein anderer Port am Switch. Fünf Minuten später: Speed: 1000Mb/s. Fixed, juchu.

Einerseits bin ich nun froh, dass ich nicht weiter Kabel ausprobieren muss und dass es auch nicht das Kabel in der Wand ist, was kaputt ist. Andererseits finde ich es schade, dass dieser 8-Port PoE-Switch, anscheinend… kaputt ist. Zwei andere Ports mit Devices, die eigentlich Gbit können, sind nämlich ebenfalls orange. Mal sehen, wie lange es dauert, bis der nächste Port kaputt geht.

Wie mich mein Adblocker viel Zeit kostete

Seit ein paar Wochen machte der dev-Prozess eines Projektes Probleme. Immer, wenn ich die Seite aufrufen wollte, spuckte er nur Fehlermeldungen auf die JavaScript-Console aus. Da ich keine Zeit hatte, mir das genau anzuschauen, arbeitete ich halt wie 2005 mit einem npm build nach jeder Änderung. Ging schon irgendwie, war aber nervig.

Gestern wollte ich das Problem endlich mal beheben und schaute es mir genauer an. Stimulus konnte einen Controller nicht laden, soso. Bei Vite-Projekten ist es ja so, dass im dev-Modus nicht alles zu einem großen Bundle zusammengeklebt wird, sondern jede JavaScript-Datei einzeln geladen wird. Ich fräste mich da also durch und versuchte den Fehler zu finden, ohne größeren Erfolg.

Ich bat Claude AI ein paar Debug-Ausgaben an kritischen Stellen einzubauen, aber das zeigte mir eigentlich auch nur, dass weiterhin alles in Ordnung war. Als ich irgendwann die Console nochmal genau anschaute und Meldung für Meldung durcharbeitete, fiel es mir eine Zeile auf, die ich bisher ignoriert hatte: die lib/matomo.js konnte nicht geladen werden.

🤦‍♂️🤦‍♂️🤦‍♂️

Vor Monaten baute ich für ein paar Funktionen ein Tracking ein, das mit Matomo realisiert wurde. Ich packte die Helper-Funktionen dafür in diese Datei, die ich dummerweise halt matomo.js nannte. Zunächst war alles völlig problemlos, aber seit ein paar Wochen klappte es nun nicht mehr, was war nur geschehen? Richtig, Chrome hat mich gezwungen auf uBlock Origin Lite umzusteigen, da das richtige uBlock Origin ja nicht mehr funktioniert. Zunächst habe ich mich gefreut, dass auch die Lite-Funktion ziemlich gut funktioniert und ich in meinem täglichen Leben keine Änderung merke, aber offensichtlich gibt es schon ein paar Feinheiten die anders sind – so hat uBlock Origin anscheinend erkannt, wenn es sich bei einem Request um einen Dynamic Import aus dem JavaScript-Kontext handelt (oder so) – uBlock Lite sind ja nur noch einfache blockierte URLs oder URL-Teile.

Was lernen wir daraus?

  • Bei Fehlern die JavaScript-Console genau lesen und keine Zeilen auslassen
  • Trackingfunktionen nicht in einer so offensichtlich benannten Datei verstecken
  • Vielleicht doch auf einen Browser wechseln, der noch das richtige uBlock unterstützt

Alte Windows-Spiele mit UTM

Vor nicht allzulanger Zeit versuchte ich ja mal vergeblich Mech Commander in einer VM zum Laufen zu bekommen. Leider ohne Erfolg, unter Windows 98 klappte die Installation nicht und unter Windows XP crashte es direkt.

Nun begab es sich, dass ich ein ebenfalls uraltes Spiel ausprobierte, nämlich Lego Loco. Das klappte an sich tadellos unter Windows XP, hatte aber den Nachteil, dass es immer crashte, wenn man einen Spielstand laden wollte, was das Langzeit-Spielerlebnis natürlich etwas trübt.

Als letzten Rettungsversuch wollte ich nochmal Windows 98 probieren, da ich meine alten, selbst-installierten, VMs aber schon weg geworfen hatte, googelte ich einmal "UTM windows 98 download" und hoffte, dass einfach jemand ein fertiges Image irgendwo hin geladen hat, damit ich mir nicht wieder eine .iso-File besorgen muss. Glücklicherweise fand ich dieses Github-Repo. Da hat sich wohl jemand echt viel Mühe gegeben und ein paar UTM-Images gezimmert, wo alles richtig schön installiert und konfiguriert ist und gut laufen soll!

Voller Vorfreude lud ich die 300MB also herunter, startete Windows, installierte Lego Loco und, schwupps! Man kann speichern und auch laden, klasse. Anscheinend reicht es nicht, einfach nur ein frisches Windows 98 in die UTM-VM zu installieren und es sind noch ein paar geheime Kniffe notwendig. Danke an anonymousaga, den oder die anonyme Spender:in dieser Datei.

Zu guter Letzt installierte ich natürlich noch Mech Commander, was tadellos funktionierte. Ob ich das jetzt wirklich spiele, oder ob mir das Intro-Video nicht schon gereicht hat um genug Nostalgie zu empfinden, schauen wir mal.

Wireguard

Vor etwa einem Jahr wollte ich einmal einen VPN-Tunnel zwischen einer OPNSense Firewall und einer Fritzbox herstellen. Ich aktivierte das Wireguard in der Fritzbox, kopierte die ganzen Keys zwanzig mal hin und her und es funktionierte einfach nicht! Ich verzweifelte, schob es auf die Fritzbox und ignorierte das Thema.

Wenige Monate später, ich starte einen neuen Versuch. Diesmal kaufte ich so einen kleinen VPN-Würfel von GL.inet. Tolles Ding. Einfach so ein sehr handschmeichlerischer Alu-Block. Ich liebe es. Nach der Einrichtung allerdings das gleiche. Die Geräte hinter der Firewall kamen einfach nicht durch das VPN durch. OPNSense zeigte auch an, dass das Gateway nicht erreichbar ist. Ich verzweifelte.

Die gleiche Konfiguration mit dem Wireguard-Zugang zu Mullvad funktionierte problemlos. Wenn ich mit meinem Handy und der Wireguard-App darauf zugriff, klappte es auch ohne Mucken. Woran liegt es nur?

Irgendwann fiel mir in der Konfiguration dann auf, dass es eine Checkbox gibt, die den Geräten im VPN erlaubt auf Geräte innerhalb des Netzwerks zuzugreifen. Ich aktivierte ihn und schwupps, es funktionierte. Meine Güte. Das Problem war die ganze Zeit, dass die Geräte im VPN, zumindest wenn es über die Firewall ging nicht auf 10.10.0.1 als Gateway zugreifen konnten, weil der Haken in der Wireguard-Konfiguration nicht gesetzt war. Aah.

Ich erinnerte mich, dass es eine ähnliche Checkbox auch bei der Fritzbox-Konfiguration gab. Ahhh. Ich klickte ihn immer nicht an, weil ich dachte, ich brauche keinen Zugriff auf Geräte im Netzwerk, ich wollte den Wireguard-Endpunkt ja quasi nur als Exit-Node benutzen. Dass das Gateway direkt auch als “Gerät im Netzwerk” gilt, wer hätte das denn gedacht.

Naja. Wie auch immer. Jetzt funktioniert alles. Nach nur einem Jahr! Im Grunde könnte ich das GL.inet-Ding auch zurückschicken, es müsste ja, mit dem richtigen Haken, auch mit der Fritzbox gehen. Aber es ist auch so niedlich!