Mein Blog

Blogpost Syndication

In den Details unter dem Blogpost ist der Punkt „Syndication“ hinzugekommen. Es werden Links zu dem Post auf Flickr, standard-reader.app, bsky.app, bubbles.town und ruhr.social (Mastodon) aufgeführt, wenn es denn eine passende Syndikation gibt.

Bis auf bubbles.town lagen alle URLs bereits vor, da die Verteilung auf die Dienste aktiv erfolgt. Bubbles.town ist da etwas anders. Wenn ein Blog dort gelistet ist, wird ein Post automatisch aufgenommen. Die URL zum Post lässt sich recht einfach über den API-Call GET https://bubbles.town/api/vote-count?url=<url-encoded-permalink> ermitteln. Da lediglich die ID benötigt wird, um die URL zu generieren: $url = 'https://bubbles.town/entry/'.$response->id

TIDdelidi

Bis neulich konnte ich mich bei Standard.site noch mit meiner etwas faulen, numerischen TID noch so durchschlängeln. Ich hatte es mir einfach gemacht und die aufsteigende ID des Blogposts benutzt.

Aber nun nimmt man das AT Protokoll wohl etwas ernster und meine letzten Posts wurden abgelehnt. Ja, mit Recht! Ich weiß. Also habe ich io-atmosphere etwas angepasst und erzeuge jetzt eine passende. Allerdings mache ich die selbst und frage nicht den Server. Das war mir für einen Samstagabend zu viel Theater!

Woche 35 · 2026

Für KW34 gab es kein Update. Schade. Ich würde es nachholen, aber ich habe alles aus der Woche vergessen. Gab wohl nichts bemerkenswrtes.


Eine Woche Urlaub ist einfach so verflogen. Ich hätte zwei nehmen sollen. Und nach zwei Wochen hätte ich mir gewünscht, dass ich drei genommen hätte. Ich nehme um meinen Geburtstag herum immer Urlaub. Manchmal mache ich einen kleinen Kurztrip, manchmal auch nicht. Dieses Jahr bin ich zu Hause geblieben. Die Woche war trotzdem recht bunt. Ich war etwas vor der Tür, um mal die neuen Schuhe auszuprobieren: Die Sohle hat ein klasse Profil mit gutem Griff. Die sind insgesamt etwas solider als die Saguaro, was auf längerer Strecke von Vorteil ist. Kein Drücken, kein Nerven. Sind perfekt.


Nicht nur mein Geburtstag ist in diese Woche gefallen, sondern auch das 25. Jubiläum meines Blogs. Und wie ich so über das Blog und seine technische Basis nachdachte, kam mir wieder die Idee, das endlich mal alles ordentlich zu machen. Es blieb nicht bei dem Gedanken und ich habe angefangen, ein Symfony-Projekt aufzusetzen und loszulegen. Ich hätte es gern nur ein wenig ordentlicher und strukturierter. Wobei mir Symfony helfen wird. Getaggte Dienste, Events und Messenger und so was sind schon ungemein praktisch und es hat dem Code des aktuellen Blogs nicht gutgetan, das entweder gar nicht zu haben oder als halbgare, selbstgehäkelte Version.

Es werden wieder zwei getrennte Projekte. Ein Admin-Projekt zur Pflege der Daten und ein Frontend, das letztlich das sichtbare Blog darstellt. Konzeptionell will ich nicht viel ändern. Das Frontend holt sich die Daten für die aufgerufene Seite über eine API vom Admin-Projekt ab und daddelt das Ganze dann mit Templates in einer HTML-Seite zusammen, die im Dateisystem abgelegt wird. Ein SSG im weitesten Sinne, der allerdings auch rein dynamisch arbeiten kann, wenn das Schreiben der HTML‑Seite nicht aktiv ist.

Das Admin-Projekt liegt auf GitHub. Und das Frontend gibt es bisher nicht. Der Spaß befindet sich noch in einem sehr frühen Stadium. Es gibt nicht mal fertige Migrationen. Momentan erstelle ich die Tabellen noch via doctrine:schema:update. Viel mehr als einloggen, Beiträge erstellen und Auflisten geht bislang nicht. Und offensichtlich hatte ich auch noch keinen Grund, eine README‑Datei zu schreiben.

Mein Blog hat heute 25‑jähriges Bestehen.

Der Post Alles neu hat am 24. August 2001 den Grundstein für dieses Blog gelegt. Der Post war eine Zäsur. Ich hatte mich entschlossen, nicht mehr auf Englisch, sondern auf Deutsch zu bloggen. Und es war mein erstes reines CSS-Layout ohne den Gebrauch von Tabellen als Layoutelemente. Das habe ich nicht ganz so konsequent durchgehalten. Soweit ich mich erinnern kann, gab es mal ein paar Table-Layouts. Im Archiv kann man sich durch die Jahre klicken.

Inhaltlich, technisch und gestalterisch hat sich in den 25 Jahren einiges getan. Im Geburtstagspost von 2025 gab es bereits eine kleine Übersicht von aus der Wayback Maschine recoverten Designs. Und die Technik dahinter. Zeitweilig waren die klassischen Blogsysteme wie pMachine, Textpattern und WordPress der Unterbau. Aber wirklich glücklich war ich nur mit meinen eigenen Lösungen.

Links und kleine Anekdoten waren von jeher die Basiszutaten für das Journal. Früher mit starkem Bezug zu Linux. Nach 2005 wurde es etwas Mac-lastiger und mit dem Wechsel von analoger Fotografie in die Welt der digitalen Fotografie kamen mit zunehmendem Ausmaß auch Fotografien hinzu.

Themen für einzelne Posts stammten schon immer von mir. Ich hatte noch nie Lust, mich mit Themen zu befassen, die in irgendwelchen Netzwerken und der Blogosphäre en vogue sind. Ein vereinzeltes Stöckchen oder die freitäglichen Fünf waren hier die Ausnahme.

Es gab schon immer nur ein oder zwei Hände voll Blogs. Und von den Blogs sind in den Jahren leider zu viele auf der Strecke geblieben. Ich freue mich immer wieder, wenn ich sehe, dass Andreas, Dominik, Jan, Marc oder Simon, um nur ein paar zu nennen, etwas Neues posten.

In den vergangenen 25 Jahren gab es einige Z(w)eitblogs, die ich aus einer Laune heraus eröffnet habe und die später aus einer anderen Laune heraus wieder eingestampft wurden. Momentan laufen da der Photostream/das Photoblog und ein Blog, in den der mürrische alte Mann sich auskotzen kann, wenn es denn mal notwendig sein sollte.

Ein Neugiertool

Bisher hatte ich nie ein Logging von Referern. Aber irgendwo bin ich dann noch neugierig. Und so sendet das Blog nun einen kleinen Beacon und teilt einem API‑Endpoint Referer und URL mit. Gespeichert werden nur Referer und die lokale URL. Also kein Profiling oder Fingerprinting. Naja, wie auch mit den paar Daten. Ich habe mich für eine so kleine Lösung entschieden, weil ich die Daten nicht an einen externen Anbieter senden wollte und auch keine Lust hatte, ein Risikotool lokal zu installieren, das letztendlich viel mehr leistet, als ich eigentlich möchte.

Wenn das einem der Langzeitbesucher negativ aufstößt, werde ich das auch gern wieder rauswerfen. Eine kurze Nachricht genügt. Zumal der Nutzen ohnehin nur begrenzt ist, da seit strict-origin-when-cross-origin nur noch die Domain mit Protokoll und ohne Pfad ankommt. Ja, und das ist auch eigentlich gut so.

neue Statistik

Langweilige Interna: Auf der Statistikseite gibt es eine neue Statistik (Top Cast) in Form einer Cloud. Ich habe mich dabei gegen ein SVG entschieden und eine einfache Liste benutzt. Dargestellt wird der über den Movie Tracker gepflegte Cast nach Anzahl seiner Mitwirkung in Filmen. Wenn das mal ausgereift ist, werde ich das auch für die Tag Cloud dieser Seite nutzen können. Momentan befindet sich das Feature noch in einem Branch, da ich noch die Filtermechanik hinzufügen möchte.

Zahlen & Fakten

Ich wollte schon immer eine Statistik-Seite haben und nun ist sie da. Erst mal mit drei grundlegenden Grafiken, um verschiedene Diagrammformen auszuprobieren.

  • Posts je Jahr als horizontales Diagramm.
  • Posts je Typ als vertikales Diagramm.
  • Posts je Monat wären weder horizontal noch vertikal praktikabel gewesen. Also habe ich mich für eine Heatmap entschieden.

Bei der Gelegenheit musste ich mich ein wenig mit SVG auseinandersetzen und habe die Diagramme dann auch vollständig als SVG generiert. Keine externen Pakete oder irgendein fancy stuff. Nur ein bisschen rechnen. Sogar mit einer hübschen Farbumkehr im Darkmode.


Update: Es sind noch zwei Charts hinzugekommen. Posts je Stunde und Posts je Wochentag, und es hat sich herausgestellt, dass ich gar nicht mal so ein extremer Wochenendblogger bin, wie ich vermutet hatte.

Tagebuch

Vor einer Weile habe ich angefangen, ein digitales Offline-Tagebuch zu schreiben. Also schon in digitaler Form auf einem Rechner, aber nicht im Web veröffentlicht. Das hat zur Folge, dass wesentlich weniger Hirnfürze hier im Blog landen. Und das ist gut.

Inhaltlich geht es im Großen und Ganzen um Fakten zum Tag und um Gespräche oder Ereignisse, an die ich mich später mal erinnern möchte oder muss. Nichts, das zu privat ist.

Die Texte schreibe ich in Markdown mit einer Art Frontmatter. Jeden Tag erstelle ich eine Datei, e. g. 2026-07-18.md, und schreibe dort mehr oder weniger ungeordnet rein. Zettlr hat sich als das ultimative Schreibwerkzeug erwiesen und hat sogar eine LanguageTool-API-Integration.

Plaintext, was Markdown ja letztendlich ist, erscheint mir als nachhaltiges Format, um Texte längerfristig zu speichern. Wer schon das eine oder andere Jahrzehnt bloggt, hat sich vielleicht auch schon mal Gedanken darüber gemacht, ob es nachhaltig ist, ein Blog ausschließlich in einer Datenbank zu halten.

Damit ich von jedem Gerät aus schreiben kann, lagern die Texte in einem privaten Git-Repository. Um den Spaß bequem lesen zu können, gibt es noch ein kleines Git-PHP-Projekt zur Ausgabe des Tagebuchs im Browser.

Das Schöne an einem privaten Blog ist: Man muss gar nicht jeden Tag „abliefern“. Zurzeit habe ich mal wieder keine Lust zu schreiben und daher gibt es an solchen Tagen auch nur ein Foto, wenn überhaupt. Später vielleicht.

standard.site || Blogs schnell in die ATmosphere bringen

Vor einer kurzen Weile bin ich von verschiedener Seite auf standard.site und den Reader aufmerksam gemacht worden. Ich fand’s toll und wollte auch dabei sein. Und da das AT Protokoll eine recht überschaubare Sache ist, habe ich meinem Blog einen bsky-Account gegönnt und ein Composer-Päckchen geschnürt, um eine beliebige PHP-basierte Publikationsplattform recht einfach anbinden zu können.

Und siehe da. Nach nur wenigen Stunden ist mein Blog auf der standard-reader.app sichtbar.

Das Package macht ein Blog und seine Posts im Atmosphere-Netzwerk (eg. standard-reader.app) sichtbar und crosspostet auf BlueSky. Es hat keine weiteren Abhängigkeiten außer ext-curl und ext-json und kann mit ein paar Handgriffen im eigenen PHP Code eingebunden werden. Zurzeit gibt es noch keine Registrierung bei Packagist und man muss das Repo in der composer.json des Host-Projekts bekannt machen:

  "repositories": [
    {...}
    {
      "type": "git", 
      "url": "git@github.com:kniebes/io-atmosphere.git"
    }
  ]

Naja, und der Rest steht im README und im Implementierungsbeispiel.

Soo … Endlich habe ich mir mal ein paar Minuten genommen und das Layout von der Last.fm-RecentTracks-WebComponent tauglich gemacht für mobile Endgeräte. Bei langen Titeln oder Künstlernamen sah das immer etwas gruselig aus.

Last Fm Recent Tracks Web Componente
Last Fm Recent Tracks Web Componente