Schlagwort: well-known

  • Vor ein paar Wochen hat mich @voxpelli in einer Bluesky-Diskussion über SocialSpec erwähnt. Caleb Hailey (@calebhailey.com), der Initiator der Spec, hat dort nach Kontakten zu Automattic gesucht. Für Micro.blog gab es schon ein Plugin, für WordPress aber noch nicht. Pelle kenne ich schon eine ganze Weile aus dem IndieWeb-Umfeld und er meinte, dafür sei ich wohl der richtige Ansprechpartner. Also hab ich ein bisschen mitgelesen und mir SocialSpec etwas genauer angeschaut.

    SocialSpec

    SocialSpec macht aus einer Domain eine Art Social-Profil. Neben dem Feed veröffentlicht eine Seite drei einfache Dateien:

    • AboutSpec unter /.well-known/about.md, die About-Seite als Markdown
    • ContactSpec unter /.well-known/contact.vcf, eine Visitenkarte als vCard
    • FollowSpec unter /.well-known/following.opml, die Blogroll als OPML

    „single purpose, single file, and single request / No HTML scraping required.“

    Im IndieWeb-Chat wurde SocialSpec Mitte Oktober schon ausführlich diskutiert, und auch Herr Montag ordnet SocialSpec in seinem Post ähnlich ein. Kritisiert wurden vor allem die Side-Files.

    The sidefile-antipattern is a violation of the DRY principle by the use of secondary files (typically in some one-off XML format) to provide information that is a duplicate of information available in primary files on a website (in HTML), and is an antipattern due to typical DRY violation problems such as out-of-date, missing, corrupted, or outright false data.

    indieweb.org/side_file

    Caleb hat das aus Sicht der App-Entwicklung erklärt. Nicht jeder kann sein HTML anpassen, eine OPML-Datei oder eine vCard kann aber fast jedes Tool exportieren. Und für eine App ist eine Datei an einer festen Adresse einfacher und zuverlässiger als HTML zu parsen.

    Das deckt sich mit meinen Erfahrungen mit WordPress. Ich nutze Microformats seit 20 Jahren, aber als Plug&Play-Lösung in einem CMS funktionieren sie einfach nicht gut. Darüber diskutieren wir im #indieweb-wordpress Channel schon ewig. HTML können die meisten WordPress-User nicht selbst bearbeiten, die Liste an Themes mit Microformats2-Support ist leider überschaubar und über ein Plugin geht es einfach nicht. Es bleiben eigentlich nur Blöcke, über die man Inhalte semantisch auszeichnen kann, so wie bei IndieBlocks… und ausgerechnet der Block-Editor ist in der IndieWeb-Community nicht besonders beliebt, aber das ist ein anderes Thema und einen eigenen Post wert 😉

    Ich kann Calebs Punkt also durchaus nachvollziehen.

    Die WordPress-Plugins

    Wenn mich Pelle schon empfiehlt, muss ich dem natürlich auch gerecht werden 😊

    Am meisten Sinn gemacht und direkt einen Mehrwert geboten hat FollowSpec im Blockroll-Plugin, also hab ich dort /.well-known/following.opml eingebaut. Die Datei ist eine einfache Liste mit den Feeds aller gelisteten Blogrolls. Links ohne Feed lasse ich weg und Feeds, die in mehreren Blogrolls stehen, kommen nur einmal rein.

    Blockroll kümmert sich aber nur um die following.opml, für alle drei Dateien hab ich ein eigenes Plugin geschrieben. Ist das SocialSpec-Plugin aktiv, liefert Blockroll keine eigene Datei mehr aus, sondern hängt die Feeds der Blogrolls an die following.opml von SocialSpec mit dran.

    Beim SocialSpec-Plugin verwende ich, soweit möglich, die Daten, die schon in WordPress stecken. Man muss also nichts neu schreiben. In den Einstellungen wählt man nur aus, wer die Seite repräsentiert (ein User für ein persönliches Blog oder „niemand“ für ein Magazin oder eine Firma) und, wenn man will, eine andere About-Seite.

    Einstellungsseite des SocialSpec-Plugins in WordPress mit einer Auswahl, wer die Seite repräsentiert, einer Auswahl für die About-Seite und den Links zu den drei Dateien.

    Für die about.md nehme ich standardmäßig die /about Slashpage und wandle das HTML in Markdown um. Hat man in den Einstellungen eine andere Seite ausgewählt, nehme ich die. Gibt es gar keine About-Seite, nehme ich als Fallback die biografischen Angaben aus dem Profil.

    Die About-Seite als Markdown passt übrigens gut zu Dave Winers Idee vom „Web of Markdown“:

    How about a Markdown web browser. No CSS, no frameworks, just Markdown files.

    Dave Winer – The web of Markdown

    Für die contact.vcf nehme ich standardmäßig das Profil des ausgewählten Users, mit Name, Website, biografischen Angaben und Profilbild. Ist kein User ausgewählt, nehme ich als Fallback Titel, Untertitel und Icon der Seite. Die E-Mail-Adresse veröffentliche ich nicht, man kann sie aber über einen Filter ergänzen.

    WordPress hat keine Liste mit Blogs, denen man folgt. Für die OPML können andere Plugins wie Blockroll über einen Filter Feeds ergänzen. Außerdem nehme ich die Links aus dem alten Link-Manager, wenn sie einen Feed haben. Und wie bei den anderen XML-Formaten hab ich für die OPML eine Ansicht im Browser gebaut, mit einem „Subscribe“-Button für jeden Feed.

    Alle drei Dateien und die normalen Feeds von WordPress schicken außerdem CORS-Header mit, damit Apps sie direkt im Browser laden können.

    Auf notiz.blog gibt es meine About-Seite schon als about.md, meine Kontaktdaten als contact.vcf und die Blogs, denen ich folge, als following.opml.

    HyperTexting

    Eingebaut hab ich SocialSpec vor allem, weil es relativ einfach war. Den Sinn dahinter hab ich aber erst durch HyperTexting wirklich gesehen.

    Über HyperTexting bin ich eher zufällig gestolpert. Caleb hat mir in einem kurzen Video gezeigt, wie meine SocialSpec-Implementierung auf notiz.blog in seiner App aussieht.

    notiz.blog in HyperTexting (Video von Caleb)

    (About-Seite und Kontaktdaten zeigt die App bisher allerdings nur in der TestFlight-Version an.)

    Ich mag vor allem, dass sich die App wie ein Social Network anfühlt und trotzdem weitestgehend mit Web-2.0-Technologien wie Blogrolls und RSS funktioniert.

    Im Prinzip ist HyperTexting ein Feed-Reader mit einer chronologischen Timeline, ohne Algorithmus und ohne Account. Jede Seite bekommt ein Profil mit Posts, Links, About-Seite, Kontaktdaten und wem sie folgt, und zukünftig soll man auch direkt auf die eigene Seite posten können, wohl auch über Micropub. Damit folgt HyperTexting dem gleichen Muster wie ein Social Reader aus dem IndieWeb. Man liest alles in einer Timeline und antwortet direkt von dort, die eigenen Posts landen aber auf der eigenen Seite und nicht auf einer Plattform. Unter der Haube steckt ein Static-Site-Generator, den es auch als CLI gibt.

    sodir.org

    Über den Post von Maurice bin ich noch auf sodir.org gestoßen. Das ist eine Art Browser für SocialSpec-Profile. Man gibt eine Domain ein und sieht die letzten Posts, wem die Seite folgt, die About-Seite und die Kontaktdaten. Die Daten kommen direkt von der Seite, ohne Account und ohne Plattform. Maurice überlegt übrigens gerade, wie er SocialSpec in Kirby einbaut.

    Ich bin gespannt!

  • Ich hab in den letzten Wochen ziemlich viel an meinen Slashpages rumgebastelt. Ich liebe die Idee! Slashpages helfen dabei, ein Blog, seinen Hintergrund und die Person dahinter ein bisschen besser zu verstehen (frei nach @ix).

    Im Prinzip ist die Idee super simpel: einfach /about eingeben und man landet auf dem Profil. Um zu sehen, welche Slashpages ein Blog hat, müsste man aber alle einzeln überprüfen.

    Deshalb hab ich mir /.well-known/slashpages überlegt, eine einfache Liste mit allen Slashpages eines Blogs. Eine well-known Seite für well-known Seiten… irgendwie ironisch, aber bei knapp 80 Seiten sind das halt ’ne ganze Menge Links 😉

    Inspiriert ist das Ganze von .well-known/feeds und /.well-known/recommendations.opml .

    Die Spec

    Die Spec beschreibt, wie die Liste aussieht. Es ist eine OPML-Datei, in der jede Slashpage ein outline ist. Der Titel steht in text, der Name der Slashpage in category und die Adresse in url:

    <outline
    	type="link"
    	text="Was ich gerade mache"
    	category="/now"
    	url="https://notiz.blog/now/"
    />Code-Sprache: HTML, XML (xml)

    Die URL soll der bekannte Pfad sein, also z.B. /now/. Liegt die Seite woanders, darf die URL auch dorthin zeigen.

    Hat eine Seite mehrere Namen, stehen alle in category, z.B. category="/changelog,/log". Man kann auch weitere OPML-Dateien einbinden, und die Datei sollte mit Access-Control-Allow-Origin: * ausgeliefert werden, damit auch Tools im Browser sie lesen können.

    Die /slashes-Seite ersetzt das übrigens nicht. /slashes ist für Menschen, /.well-known/slashpages für Maschinen.

    Das WordPress-Plugin

    Das Plugin stellt die Datei unter /.well-known/slashpages (und /.well-known/slashpages.opml) bereit.

    Unter Einstellungen → Slash Pages stehen alle Slashpages von slashpages.net. Für jede kann man eine Seite auswählen, eine eigene URL eintragen (z.B. für Seiten, die nicht in WordPress liegen) oder sie einfach leer lassen. Gibt es schon eine Seite mit passendem Slug, z.B. now, ist sie schon ausgewählt.

    WordPress-Einstellungen „Slash Pages“ mit Seitenauswahl und URL-Feld für jeden Pfad. /about, /blank und /blogroll sind zugeordnet, /ai ist noch leer.

    Die OPML kann man sich auch im Browser anschauen. Dafür bringt das Plugin ein kleines Script mit, genau wie bei .well-known/feeds, nur ohne XSLT.

    Browseransicht von /.well-known/slashpages auf notiz.blog mit einer Erklärung zu OPML und verlinkten Slashpages wie „About (me)“, „Blank“ und „Blog·rol·le, die“.

    Die Browser-Erweiterung

    Die Erweiterung prüft auf jeder Seite einmal, ob es eine /.well-known/slashpages gibt. Wenn ja, wird das Icon blau und zeigt die Anzahl der Slashpages. Wenn nicht, bleibt es grau. Ein Klick auf das Icon listet die Seiten mit ihren Namen auf.

    Geöffnete Slashpages-Erweiterung auf notiz.blog. Das blaue Icon zeigt 11, die Liste enthält Seitentitel und Pfade, darunter /changelog und /log für denselben Eintrag.

    Hat eine Seite keine /.well-known/slashpages, probiert die Erweiterung beim Klick die bekannten Pfade von slashpages.net einzeln durch. Das sind rund 80 Requests, deshalb passiert das nur, wenn man klickt.

    Slashpages-Erweiterung auf simon.blog mit dem Hinweis, dass keine /.well-known/slashpages vorhanden ist. Über die Pfadsuche wurden /about, /blogroll, /follow und /now gefunden.

    Für die automatische Prüfung braucht die Erweiterung Zugriff auf alle Seiten. Den kann man im Browser auch abschalten, dann funktioniert nur noch der Klick. Daten sammelt die Erweiterung keine.

    Sie läuft in Firefox, Chrome (und Edge, Brave, …) und Safari.

    Plugin und Erweiterung gibt es bisher nur auf GitHub. Falls ihr Feedback habt, ich würde mich sehr über eure Ideen freuen!

    Ich glaube, das ist ein bisschen ausgeartet… 🫣

  • OpenWeb-Kolumne (wsm)

    Damit das ganze Zeug über das ich so einmal im Quartal im Webstandards-Magazin schreibe nicht pure Science Fiction bleibt, hab ich mich die letzten Wochen mal daran gemacht, ein bisschen Federated Social Web für WordPress zu basteln!

    Vor einigen Monaten kam Pepijn de Vos auf mich zu, ob ich ihm nicht bei einem „OStatus for WordPress“ (noch nicht runterladen! funktioniert noch nicht!) helfen wolle. Das damals größte Problem: Wie können wir so viele besehenden Plugins (pubsubhubbub, webfinger, …) wiederverwenden, ohne die Installation zu kompliziert zu gestalten. Da dieses Problem mittlerweile behoben ist und auch das Salmon-Plugin einigermaßen funktioniert, ist es Zeit für einen Test!

    Ich würde mich freuen, wenn ihr zwei, drei oder vier Leser da draußen mal diesen Blog bei Status.net oder Identi.ca (oder bei jedem anderen StatusNet-Klon) abonnieren und wie wild auf diesen Artikel antworten könntet. Dazu müsst ihr einfach pfefferle at notizblog dot org folgen:

    …und auf diesen Post antworten:

    Was bisher funktioniert:

    • Artikel landen in Echtzeit bei StatusNet/Identi.ca (pubsubhubbub)
    • Antworten auf diese Artikel landen als Kommentare bei WordPress (salmon)

    Zukünftige Features:

    • Kommentare auf WordPress-Seite sollen auch nach StatusNet/Identi.ca geschrieben werden
    • Bessere Integration in BuddyPress
    • …alles was euch noch so einfällt!?!

    Ich würde mich sehr über Feedback, Fragen, Anregungen, Kritik, … freuen. Viel Spaß beim testen!

    …sollte alles gut funktionieren, werde ich die Plugins dann nächste Woche veröffentlichen, also TESTEN!