Safari 27 hat jetzt einen eingebauten MCP-Server. Hab ihn mit Claude Code getestet, und was soll ich sagen? Funktioniert. Und gefällt mir definitiv besser als die Fummelei mit der Claude-Erweiterung für Chrome.
Vielleicht gut zu wissen: Remote Automation muss aktiviert sein. Eventuell müsst Ihr außerdem safaridriver --mcp ausführen. Danach Safari einmal neu starten, dann sollte es klappen.

Mein Ex-Kollege Eugen hat seine (kostenlose) App Regelzeit veröffentlicht:
Regelzeit ist eine Zyklus-Tracking-App für iOS, die deine Daten dort behält, wo sie hingehören: auf deinem Gerät. Keine Cloud-Speicherung, keine Weitergabe an Dritte, keine Werbung. Nur du und dein Körper.
Ich bin jetzt vielleicht nicht gerade die richtige Zielgruppe für eine solche App, aber vielleicht ist sie ja für den einen oder die andere von Euch interessant.
Das ist ja verrückt: Erst am Donnerstag bin ich wieder zum guten alten Sublime Text gewechselt, nachdem Visual Studio Code immer mehr zur AI Bloatware wird – und gleichzeitig macht David Bushell das Gleiche!
Und diese Aussage gefällt mir ja besonders:
Modern software sucks. It’s built by self-proclaimed “engineers” who make their chat box addiction your problem and still use Twitter.
Sublime Text ist super.
Via eay.
Instagrams offizieller Datenexport liefert Captions, Bilder, Timestamps – aber keinen Link zurück zum Original-Beitrag. Für Syndication-Links auf meiner Seite brauche ich aber genau das: die URL, unter der ein Foto zuerst erschienen ist.
Also hab ich mir eine Browser-Erweitung gebaut, die das nachträglich einsammelt. Sie läuft lokal, klickt sich per Weiter-Pfeil durchs eigene Profil und protokolliert pro Beitrag URL, Shortcode und Timestamp. Am Ende: Export als JSON, den ich gegen meine exportierten Beiträge matchen kann.
Weiterlesen …
Ich weiß nicht mehr genau, wann und warum, aber ich habe wohl irgendwann mal bei Patreon auf den falschen Button gedrückt und bin seitdem mit einem unveröffentlichten Patreon-Creator-Profil gestraft. 🙄
Die Navigation ist seitdem jedes Mal aufs Neue verwirrend: Das Häuschen-Icon bedeutet nicht mehr „Home“, sondern „Dein Kreativ*er-Studio“ – na klar – und führt dementsprechend zu /create. Das Welt-Icon ist hingegen der „Feed“, der unter /home zu finden ist. Ja sicher. Dazu gibt es einen „+“-Button, mit dem ich Beiträge für meine unveröffentlichte Seite anlegen kann.
Alles sehr durchdacht also. Wow.
Weiterlesen …
Eigentlich müsste es sogar heißen: Von Fever zu iCloud zu FreshRSS.
Diese Woche bin ich wieder auf einen selbstgehosteten Feedreader umgestiegen. Der Grund: Möchte man seine Feeds auch auf einem Gerät lesen, das nicht am selben iCloud-Konto hängt wie die eigenen Geräte – etwa dem Arbeits-MacBook oder einem Android-Gerät –, hat man mit der iCloud-Synchronisation schlicht keine Möglichkeit dazu.
Zufällig habe ich dann entdeckt, dass NetNewsWire, mein Feedreader der Wahl für macOS und iOS, inzwischen auch FreshRSS unterstützt. FreshRSS ist ein selbstgehosteter Feedreader, den man mit wenigen Minuten Aufwand auf einem PHP-/MySQL-Server installieren kann. Im Grunde genau wie früher Fever.
Der große Vorteil: Die Feeds sind damit nicht mehr an ein bestimmtes Ökosystem gebunden. Stattdessen lassen sie sich auf jedem Gerät lesen, das einen FreshRSS- oder Google-Reader-kompatiblen Client unterstützt.
Etwas mehr Zeit hat allerdings die Einrichtung gekostet. Zum einen musste ich herausfinden, wie NetNewsWire auf die Feeds zugreifen kann, zum anderen, wie sich die automatische Aktualisierung per Cronjob einrichten lässt. Hat man das einmal verstanden, ist es aber ganz einfach:
- Im „Profil“ ein API-Passwort anlegen.
- Unter „Authentifizierung“ den API-Zugriff aktivieren.
- Danach kann man über
https://example.com/api/greader.php mit Benutzername und API-Passwort auf die Feeds zugreifen.
- Für die automatische Aktualisierung zusätzlich im „Profil“ ein Master-Authentifizierungs-Token erstellen.
- Dieses Token anschließend in einem Cronjob verwenden, der folgende URL aufruft:
https://example.com/i/?c=feed&a=actualize&ajax=1&user={name}&token={token}. Ein Beispiel wäre so:
0 * * * * curl --silent --show-error --fail --max-time 60 "https://example.com/i/?c=feed&a=actualize&ajax=1&user={name}&token={token}" >/dev/null
Vielleicht erspart das ja jemandem die gleiche Suche wie mir.
In den letzten Wochen habe ich begonnen, meine über 4.000 Instagram-Beiträge ins Blog zu holen. Auch wenn noch etwas Finetuning erforderlich ist, hat das soweit ganz gut geklappt. Über die Jahre habe ich auch Fotos an Flughäfen oder auf Flügen gemacht, und inspiriert durch Dominiks Flüge habe ich diesen Fotos nun ein paar zusätzliche Machine Tags verpasst:
flight:from=muc
flight:to=dus
flight:number=LH2734
Die Tags werden nicht in der üblichen Tag-Liste ausgegeben, sondern rendern stattdessen – zusammen mit den Daten des Beitrags – einen Pseudo-Boardingpass:

Die Daten habe ich meinen alten Flugtickets aus Apple Wallet entnommen – ja, die habe ich immer noch.
Kleines Frontend-Detail am Rande: Für den border-radius nutze ich hier erstmals corner-shape: scoop, das funktioniert aber aktuell nur in Chromium-basierten Browsern.
Hach, Internet!
Ich habe kürzlich Episode 692 vom Accidental Tech Podcast gehört, und ein Thema ist „Why does everyone hate AI?“. Und ich fühlte mich da sehr abgeholt.
Bei uns in der Firma testen wir aktuell gefühlt alles: Gemini, Claude Code, OpenAI Codex, GitLab Duo, CodeRabbit und noch einiges mehr. Und ich selbst habe erst vor kurzem mit Claude Code eine komplette Website umgebaut, um zu schauen, was geht. Ich nutze KI also durchaus aktiv — und trotzdem werde ich der ganzen Entwicklung gegenüber eher skeptischer als euphorischer.
Weil inzwischen vieles wirkt wie ein gigantischer Push ohne Rücksicht darauf, ob Menschen das überhaupt wollen. KI steckt plötzlich in jeder App, jedem Editor und jeder Präsentation. Oft nicht, weil es ein Problem löst, sondern weil gerade niemand der nächste sein will, der den Trend verpasst.
Weiterlesen …
Google installs Chrome, then writes a 4 GB AI model under the user’s profile directory without authorisation. The binary is not Chrome. It is a separately-trained machine-learning model, with a separate purpose, a separate data-protection profile, and a separate consent footprint.
Uff.
Google Chrome silently installs a 4 GB AI model on your device without consent. At a billion-device scale the climate costs are insane. — That Privacy Guy!
Nicht abgesprochen, aber wie bei Markus gibt es auch hier ein kleines Facelift:
Ich bin jetzt auf die Farbdefinition via oklch() umgestiegen. Das stand schon länger auf meiner Liste – in anderen Projekten hatte ich es sogar schon umgesetzt – aber Jeremy Keiths Beitrag hat mich dann doch dazu gebracht, auch hier endlich Hand anzulegen. Parallel dazu habe ich ein wenig am Kontrast geschraubt, wobei da aber noch Luft nach oben ist.
Apropos frische Ideen: Bei WebKit wurde kürzlich über Line Height Units geschrieben, und da konnte ich auch nicht widerstehen. Jetzt sind lh und rlh an vielen Stellen im Einsatz. Ein bisschen Feintuning steht hier noch an, aber der Grundstein ist gelegt.
Auch die Schrift habe ich ausgetauscht. Vorher war’s Inter – solide, aber auf Dauer doch etwas beliebig. Jetzt läuft hier Rubik, ebenfalls eine variable Schrift, aber deutlich kompakter mit fast 50% weniger Dateigröße. Nicht schlecht, oder?
Und dann wäre da noch ein kleiner Fünfzeiler, den ich ebenfalls bei Jeremy aufgeschnappt habe:
@media (prefers-reduced-motion: no-preference) {
@view-transition {
navigation: auto;
}
}
Mein Einstieg in die View Transition API – mal sehen, wie sich das in den nächsten Wochen so anfühlt.