Das Fediverse tut sich schwer, das volle Potential der verschiedenen Activity-Objects auszunutzen, hauptsächlich aus Angst, sie falsch oder schlecht darzustellen und deshalb teilen die meisten großen Netzwerke leider nur Notes.

Dabei könnte es so einfach sein!

@deadsuperhero schreibt auf seinem Blog, dass er eigentlich gerne Articles veröffentlichen will, aber (hauptsächlich) durch Mastodon zu Note gezwungen wird, wenn er sicher gehen will, dass der Text vollständig dargestellt wird.

Here’s the problem, though: the biggest player in the space, Mastodon, does a poor job of supporting Article. Instead, every post Mastodon uses is instead a Note. From a semantic point of view, it might not seem like there’s a lot of difference between the two: both are effectively texts posts that can contain some formatting markup, both can hold an arbitrary amount of characters, and both can effectively be used to represent a full article.

A Content-Fallback Mechanism for the Fediverse

Ironischerweise zeigt Mastodon eine föderierte Note vollständig an, auch wenn der Text weit über die eigentlich erlaubten 500 Zeichen hinaus geht, bei einem Article wird statt dessen aber nur die kurze summary benutzt.

Seine Idee: Ein Content-Fallback Mechanismus!

Das heißt jede Aktivität, egal von welchem Typ, liefert zusätzlich zu dem spezifischen Objekt, eine standardisierte Note (content-fallback):

{
  "@context":[
    "https://www.w3.org/ns/activitystreams",
    {
      "Hashtag":"as:Hashtag"
    }
  ],
  "id":"https://wedistribute.org/2024/04/iftas-dsa-guide/",
  "type":"Article",
  "content-fallback": {
    "content":"IFTAS, the dedicated Trust & Safety organization ...",
    "mediaType":"text/plain",
    "summary":"",
    "tag":[{
      "href":"https://wedistribute.org/tags/fediverse",
      "name":"#fediverse",
      "type":"Hashtag"
    }],
    "type":"Note",
    "updated":"2024-04-11T20:55:29Z"
  }
}Code-Sprache: JSON / JSON mit Kommentaren (json)

Ich verstehe das Problem und finde die Idee generell nicht schlecht, aber eigentlich bietet ActivityPub alles Nötige schon von Haus aus! ActivityPub oder besser ActivityStreams ist so aufgebaut, dass alle Objekte von einem Art Base-Object abgeleitet werden. Das heißt Article, Note, Event oder Place, haben ein gleiches Minimal-Set an Attributen:

Und auch wenn beispielsweise Place oder Event einige spezifische Eigenschaften haben, die nicht jede Plattform „kennt“ und „versteht“, sollte es immer möglich sein, die Beschreibung (content oder summary) und den Titel (name) anzuzeigen.

Das Prinzip ist ähnlich wie, wenn nicht sogar inspiriert durch, schema.org/Thing. Auch hier basieren alle Objekte letztendlich auf einem Thing und trotz der wesentlich größeren Anzahl1 an Objekten und Attributen, können Suchmaschinen sich immer sicher sein, dass es zumindest einen name, eine description und eine url zum Anzeigen gibt.

Bevor wir über also über ein `content-fallback` nachdenken, sollten wir (meiner Meinung nach) erst einmal dafür sorgen, dass die vorhanden Möglichkeiten richtig genutzt werden.

  1. The vocabulary currently consists of 806 Types, 1474 Properties 14 Datatypes, 90 Enumerations and 480 Enumeration members. – https://schema.org/docs/schemas.html ↩︎

Ich bin schon vor Monaten über einen Artikel auf heise gestolpert, der das potentielle Phänomen der „Demenz bei Künstlicher Intelligenz“ beschreibt.

Die nächste Generation von KI-Anwendungen werde unweigerlich auch an Datensätzen im Netz trainiert, die nicht von Menschen, sondern von früheren KI-Anwendungen erstellt wurden.

Künftige KI-Modelle potenziell von Demenz bedroht

Das ist vor allem deshalb spannend, weil es genau die zwei Anwendungsfälle von KI betrifft, die auch mich, in meiner Arbeit oder als Betreiber eines Blogs, begleiten:

  1. Das automatische Generieren von Inhalten
  2. Die automatische Verarbeitung und Interpretation von Inhalten

Konkret handelt es sich um Plugins/Dienste, die beim Erstellen von Texten helfen oder sogar komplett automatisiert Texte verfassen, um AI-generierte Bilder oder der Kombination aus beidem. Auf der anderen Seite stehen Dienste wie Google et al., die versuchen, Antworten auf Suchanfragen direkt aus den Suchergebnissen zu extrahieren, um dem Suchenden den Klick auf den entsprechenden Link zu „ersparen“.

Auch wenn ich das generelle Potential von KI durchaus sehe, sind das zwei Bereiche in denen mich deren Anwendung eher nervt!

Ich bin ein „Kind“ der Generation Web 2.0, ich schreibe meine Gedanken ins Web um mich mitzuteilen und mit anderen über meine Ideen und Einschätzungen zu diskutieren und (konstruktiv) zu streiten. Wenn ich was zu schreiben habe, schreibe ich etwas, wenn nicht, nicht.

Leider gibt es aber auch Menschen, die berufsbedingt schreiben müssen, ohne dabei die Freiheit zu haben, dies lediglich nach Lust, Zeit oder Inspiration zu tun. Dieser Druck verstärkt die Verlockung, auf KI-Unterstützung zurückzugreifen natürlich wesentlich.

Ein „wunderbares“ Beispiel hierfür ist die WordPress Community auf LinkedIN. Ein stetiger Stream an ähnlichen und meist inhaltslosen Posts mit einem überzeichneten, grellen, bunten Bild im Comic Stil, in dessen Mitte ein verunstaltetes WordPress Logo prangt!

Mein RSS-Reader ist zum Glück noch frei von solchen Inhalten, aber die Anzahl der KI generierten Bilder steigt auch hier auffällig konstant.

@Krisuuu schreibt in seinem Blog:

Das persönliche Bloggen hat eine lange und reiche Geschichte. Es ermöglicht Menschen, ihre Gedanken, Erfahrungen und Leidenschaften in einer einzigartigen Stimme zum Ausdruck zu bringen. Doch mit dem Aufkommen von KI-Technologien, die in der Lage sind, menschenähnliche Texte zu generieren, könnte das persönliche Bloggen bedroht sein. Die Versuchung, diese Aufgabe an Algorithmen abzugeben, ist real – aber sie könnte auch den Verlust von etwas Unersetzlichem bedeuten.

Der Kampf um Authentizität: Warum persönliches Bloggen unersetzbar bleibt

Per definition hat das nichts mehr mit „bloggen“ zu tun1, aber das ist Wortklauberei und das Problem ist wirklich real!

So real, dass Google aktuell schon damit zu kämpfen hat:

In the continual cat-and-mouse game of Google Search versus search engine optimization (SEO) firms, Google seems to be losing lately. Search feels less useful with every passing day as the ChatGPT era has unleashed a tsunami of AI junk that quickly fills up search results. Google played a big part in creating all this with its invention of transformers, and now it’s finally doing something about it. A new blog post details efforts to reduce „spammy, low-quality content on Search.“

Google now wants to limit the AI-powered search spam it helped create

Das ging schneller als ich dachte!

Auf Social Media hab ich ein sehr schönes Kommentar zu der Misere gelesen. Leider finde ich es nicht mehr und muss deshalb improvisieren. Hier eine sinngemäße Zusammenfassung: „Ein Ziel der industriellen Revolution war, unliebsame und stupide Prozesse zu optimieren um dadurch mehr Zeit für Kunst und Kultur zu schaffen. Und was macht AI, sie automatisiert uns genau diese Freiheit und nimmt uns ausgerechnet das Erstellen von Bildern und Texten ab.“

Die Aussage ich sicherlich etwas konstruiert, beschreibt aber genau meine Sorge: Optimiert euren Arbeitsalltag mit und durch AI, damit ihr mehr Zeit zum schreiben, bloggen und „malen“ habt, nicht umgekehrt!

Brave New World!

  1. Ein Blogger steht als wesentlicher Autor über dem Text, schreibt zumeist in der Ich-Perspektive und integriert seine persönliche Meinung. — Wikipedia ↩︎

Seit letzter Woche braucht man keinen Invite-Code mehr um sich bei Bluesky anzumelden, die wesentlich spannendere Info steht aber, wie beiläufig erwähnt, im letzten Abschnitt:

This month, we’ll be rolling out an experimental early version of “federation,” or the feature that makes the network so open and customizable. On Bluesky, you’ll have the freedom to choose (and the right to leave) instead of being held to the whims of private companies or black box algorithms. And wherever you go, your friends and relationships can go with you.

https://bsky.social/about/blog/02-06-2024-join-bluesky

Ich bin gespannt wie Bluesky federation umsetzen wird. Auf mich wirkt das ATProtocol immer noch viel zu kompliziert und „overengineered“, aber vielleicht ist das ja auch gerade der Vorteil gegenüber ActivityPub.

Ich hatte vorgestern einen kleinen Plausch mit @deadsuperhero für den Decentered Podcast, in wir unter anderem auch über die Schwierigkeiten bei der Implementierung von ActivityPub sprachen. Da WordPress in vielen verschiedenen Umgebungen laufen muss und sich die Konfiguration des Webservers, die PHP Version, das Caching, die Interferenz mit anderen Plugins und andere spezial Fälle nicht seht gut abschätzen lassen, ist es sehr schwer komplexere Funktionalitäten umzusetzen.

Ein Beispiel: Im Gegensatz zu OStatus, wo die Distribution von neuen Inhalten über PubSubHubbub (jetzt WebSub) geregelt wurde, ist bei ActivityPub der Service selbst dafür verantwortlich. Ein direktes Verteilen der Inhalte, direkt nach dem Veröffentlichen, würde bei großen Follower zahlen, den Prozess unnötig in die Länge ziehen, oder könnte sogar zu einem Fehler oder einem kompletten Abbruch führen. Um dem (so gut es geht) entgegen zu wirken, wird der Prozess asynchron über WP_Cron abgearbeitet. Leider ist aber auch das keine Garantie für einen fehlerfreien Ablauf (Siehe Ende des vorherigen Absatzes).

Lange Rede kurzer Sinn: Abhängig davon wie simpel ein Personal Data Server kurz PDS aufgebaut ist, könnte Bluesky vielleicht doch interessanter sein als ich ursprünglich angenommen habe.

Ich muss mich wohl mal mit @snarfed.org über seine Bluesky Implementierung unterhalten.

Ich bin gespannt!

Vor einigen Wochen habe ich Ian Steward auf einem Automattic Meetup kennengelernt. Er kam auf mich zu, um mir zu erzählen, dass er kürzlich auf einen ziemlich alten Artikel von mir gestoßen ist. In diesem Artikel geht es darum, wie man die Reihenfolge der Sidebars im K2-WordPress-Theme ändert.

Ich habe K2 sehr lange auf notiz.Blog eingesetzt und mich viel und lange mit dessen technischem Aufbau und der semantischen HTML-Struktur beschäftigt!

Aber außer dem kurzen Schwelgen in alten Erinnerungen hab ich mir nicht weiter Gedanken zu dem Thema gemacht. Immerhin gibt es das Theme schon seit einer halben Ewigkeit nicht mehr und Sidebars sind auch aus der Mode!(?)!

Dann schreibt @ricmac letzte Woche aber folgendes auf Mastodon:

Sidebar Culture: remember things in your blog sidebar like blogrolls, “Influential articles”, Flickr photos, MyBlogLog (a proto-social network for bloggers). All this stuff and more helped make early 2000s blogging fun and more communal. Would love to find a way to bring that back in 2024…

https://mastodon.social/@ricmac/111477809540922177

…das hat mich dann doch noch einmal neugierig gemacht und ich habe eine alte notiz.Blog Version von 2008 (auf Basis von K2) raus gekramt.

Fast die Hälfte der Seite war Sidebar 😍

Vieles von damals hat mich schwer an den Artikel „The lost infrastructure of social media.“ von @anildash (und der IndieWeb Version davon) erinnert.

Ich bin gespannt was @ricmac sich einfallen lässt…

Thinking about a personal website re-design (or a new site), so I can play around with fediverse integration, sidebar culture, and other fun things. Thinking of using @eleventy (have used Hugo before and this seems better). Maybe a new site is better, as I don’t want to have to migrate ricmac.org from WordPress…for now, anyway. Is it normal for people to have two personal websites these days? I should just start a test site with 11ty and see how it goes…

https://mastodon.social/@ricmac/111489177217562043

… und ich werde die Position meiner Sidebar vielleicht nochmal überdenken!

Alles kommt wieder ☺️

2022 war ein extrem spannendes Jahr! Ein Rückblick!

CloudFest Hackathon

Im März hatte ich die Chance ein Thema für den CloudFest Hackathon zu leiten/betreuen (Danke an Carole und Alain). Auch wenn das Projekt anders lief als ich das insgeheim geplant hatte, hab ich sehr viel über UX gelernt und großartigen Input bekommen, den ich leider noch nicht komplett umsetzen konnte.

WP Sofa

Robert Windisch hat, im Rahmen des Hackathon, Lucas Radke und mich auf das WP Sofa eingeladen und wir haben ein bisschen über die „WordPress Hosting Communtiy“ gesprochen.

In der gleichen Folge erklärt Robert übrigens auch noch das „Hippie Zeug“ an dem wir an den drei Tagen gearbeitet haben 😉

20 Jahre bloggen

Letztes Jahr, vor 20 Jahren, habe ich mit dem Bloggen angefangen! Das heißt ich schreibe jetzt fast mein halbes Leben lang Dinge in’s Internet!

neunetzcast

2022 kamen leider nur drei neunetzcast Folgen zustande, dafür haben wir (aus meiner Sicht) zwei extrem spannende Ausgaben zu Mastodon, ActivityPub und dem Fediverse gemacht.

Eine der Zentralen Fragen des Podcasts: Warum Walled Gardens wie Facebook, Twitter oder TikTok immer noch den Markt der sozialen Netzwerke dominieren, während z.B. im IOT Bereich massiv am Thema Standards und Interoperabilität gearbeitet wird.

These: Der Schmerz ist einfach noch nicht groß genug!

…und als hätte Elon Musk unseren Podcast gehört, hat er promt für den nötigen Schmerz gesorg und viele Twitter-User in die Arme von Mastodon getrieben, was vielleicht der letzte Tropfen war, den das Fediverse Fass gebraucht hat!

Außerdem hat sich ein alter Podcast-Freund zu uns gesellt, mit dem ich seit Jahren nicht mehr gesprochen hatte! Es hat großen Spaß gemacht, Carsten und Marcel und ich freue mich auf nächstes Jahr!

ActivityPub für WordPress

Dank Elon Musk haben sich aber auch die Download-Zahlen von meinem ActivityPub (WordPress) Plugin und meine Follower auf Mastodon mindestens verzehnfacht! Das hat mich beflügelt wieder aktiver am Plugin zu arbeiten und es kamen ein paar großartige Änderungen dabei rum. Alex Kirk hat beispielsweise sein friends Plugin so angepasst, dass man auch Freunde über ActivityPub abonnieren kann.

Um Menschen auf Mastodon oder ähnlichen Plattformen über dein eigenes WordPress zu folgen, kannst du das Friends-Plugin für WordPress benutzen, das über das Plugin Beiträge abruft, in deinem eigenen WordPress anzeigt und es so zu einer eigenen Fediverse-Instanz macht.

Außerdem hat Alex mich (auch durch sein friends Plugin) zu einem neuen Onboarding Screen inspiriert.

Es stehen aber noch weitere großartige Features in den Startlöchern (wie z.B. DjangosFederated Comments“ Vorschlag) die aber noch etwas angepasst werden müssen.

Danke an Elon, Django und Alex!

WWSIV

Ich war im November (2022) zu Gast beim „Wo wir sind ist vorne„-Podcast und durfte über alles reden, worüber ich hier auch schreibe 🙂

Indie Web, Open Web, Websemantics, Microformats, Open Graph, Schema.org!“

Mit unserem Gast Matthias Pfefferle verschaffen wir uns einen Überblick über den aktuellen Stand der Websemantics und wie sie dazu beitragen das Web besser zu strukturieren und durchsuchbar zu machen. Dazu lernen wir, warum die eigene Website immer noch der beste Weg ist im Web zu publizieren, sprechen über den Twitter-Meltdown + Fediverse und zum Abschluss gibt es noch Blasmusik. Wir hatten Spaß. Und ihr?

https://wowirsindistvorne.show/open-web-mit-matthias-pfefferle/

Ich kenne Moritz ( @MoritzGiessmann ) ein bisschen und habe den Podcast auch schon seit einer Weile abonniert… zu meiner Schande muss ich aber gestehen, dass ich bisher nur die Live-Steams geschaut („geschaut“ ist vielleicht auch übertrieben… ich habe ein bisschen rein ge-zappt…), aber noch nie eine Audio-Folge gehört habe…

DIE MEISTEN BEITRÄGE SIND ÜBER 2 STUNDEN LANG!

Aus perspektive des Gastes, verstehe ich jetzt aber warum die Folgen so lange sind! Die beiden haben einfach ’ne menge Spaß an dem was sie tun und eine Aufnahme ist viel mehr als „nur“ das Fachsimpeln zu einem Nerd-Thema. Von den 3 Stunden, die ich mit Moritz und Constantin geredet habe, geht es wahrscheinlich „nur“ 60 min um die oben genannten Themen… in der restlichen Zeit haben wir uns über Bier, Spam, Solar-Panele, Blasmusik und Terence Hill unterhalten (und ich hatte mich anfangs noch gewundert warum sie mich gefragt haben ob ich die ganze Folge dabei sein will).

Es war auf alle Fälle sehr lustig und kurzweilig… Ich hoffe die Beiden laden mich irgendwan nochmal ein und kann jedem nur wärmstens empfehlen den Podcast zu abonnieren!!

„Torque Social Hour“ und „Post Status Draft“

Dann war ich im November außerdem mit Tim Nolte zu Gast bei Doctor Popular und wir haben über „WordPress and the Fediverse“ gesprochen…

Hier klicken, um den Inhalt von YouTube anzuzeigen.
Erfahre mehr in der Datenschutzerklärung von YouTube.

…und im Dezember hatte ich noch einen gemütlichen Plausch mit Cory Miller „On The Fediverse, WordPress, and Activity Pub“.

Hier klicken, um den Inhalt von YouTube anzuzeigen.
Erfahre mehr in der Datenschutzerklärung von YouTube.

2023

Dieses Jahr wird mindestens genau so aufregend, wenn nicht noch aufregender…

Mehr dazu gibt es aber ein anderes Mal 🙂

Ein Screenshot meines ersten Blogposts im Mai 2002

Heute vor 20 Jahren habe ich mit dem Bloggen angefangen! Das heißt ich schreibe jetzt fast mein halbes Leben lang Dinge in’s Internet!

Von 2002 bis 2005 ging es viel um persönliches und privates. Ich hatte ein Blog mit Freunden, das oft auch einfach als Ersatz zu einem Messenger benutzt wurde.

2005 hab ich dann angefangen hier zu bloggen. Von 2005 bis 2007 waren mein Studium, Web-Technologien und das Web 2.0 die großen Themen auf notiz.Blog. Ich war fasziniert von der Blogosphäre und den sozialen Netzwerken die (damals noch als die Guten) so nach und nach entstanden.

Ab 2007 entwickelten sich die großen „Communities“ immer mehr zu „Walled Gardens“ und ich schrieb und beschäftigte mich bis 2010 viel mit den Themen „Dezentrale Netzwerke“ und „Data Portability„.

Seit 2007 hab ich auch angefangen mich intensiver mit meiner Blogging-Plattform WordPress zu beschäftigen. Dadurch ist wesentlich mehr Code als Text entstanden und wenn ich zum schreiben kam, ging es meistens um die Entwicklung von Plugins und (dem einen) Theme(s).

Die Themen ab 2007 sind im Prinzip auch die Themen um die es bis heute geht. Wenig bis nichts persönliches, viel Technik, WordPress und noch mehr Open Web. Das ist OK für den Moment, muss aber nicht so bleiben 🙂

Auf die nächsten 20 Jahre! 🎉

Auf dem CloudFest Hackathon im März, hab‘ ich mich ein wenig mit Alain Schlesser über WordPress und Plugin-Entwicklung unterhalten. Alain meinte, dass er, wenn es das Plugin hergibt und es zeitlich möglich ist, immer zuerst eine generische Library bauen und diese dann über ein WordPress-Plugin implementieren würde.

Vor ein paar Tagen hab ich mich an unser Gespräch erinnert, weil ich mich (aus Gründen) wieder intensiver mit dem ActivityPub-Plugin beschäftigt habe. Wir hatten schon vor einem Jahr den Plan, eine ActivityPub-Bibliothek zu verwenden, um uns nicht mit dem Protokoll beschäftigen zu müssen, und uns so voll und ganz auf die WordPress Integration konzentrieren könn(t)en. Wir haben die Idee aber erstmal nicht weiter verfolgt, da die Bibliothek eine Reihe von schwergewichtigen Third-Party-Libs wie Guzzle (HTTP-Client), Monolog (Logger) oder Symfony Cache (Caching) mit sich bringt. Für all diese Funktionen hat WordPress eigene Lösungen und wegen der Interoperabilität mit anderen Plugins, sollte man diese auch nutzen.

Bei der erneuten Evaluierung der ActivityPub-Bibliothek ist mir aufgefallen, dass sich Monolog, durch einen beliebigen PSR-3 kompatiblen Logger ersetzen lässt.

Kurze Erklärung zu PSR:

Eine PHP Standard Recommendation (PSR) ist eine PHP-Spezifikation, welche durch die PHP Framework Interop Group veröffentlicht wird. Ähnlich einem Java Specification Request in Java dient sie der Standardisierung von Programmierkonzepten. Ziel ist es die Interoperabilität von Komponenten zu ermöglichen und eine gemeinsame technische Basis zu schaffen oder bewährte Konzepte für einen guten Programmierstil sowie eine gute Testbarkeit von Komponenten umzusetzen. Verschiedene Frameworks wie z. B. die der TYPO3-Community, Symfony oder Zend implementieren hierbei PSR-Spezifikationen in einem selbst gewählten Umfang.

https://de.wikipedia.org/wiki/PHP_Standard_Recommendation

PSR-3 definiert ein standardisiertes Logger-Interface, welches (in unserem Beispiel) durch Monolog implementiert wird. Beim initialisieren des ActivityPub-Servers, lässt sich Monolog, durch einen alternativen Logger ersetzen, solange dieser auch PSR-3 konform ist.

use ActivityPhp\Server;

// Create a server instance with no log output
$server = new Server([
    'logger'   => [
        'driver' => '\Psr\Log\NullLogger'
    ],
]);Code-Sprache: PHP (php)

Also hab ich mir überlegt, wie so ein Logger für WordPress aussehen könnte und einen PSR-3 kompatiblen Wrapper gebaut:

namespace WPPSR\Log;

use Psr\Log\AbstractLogger;

class ErrorLogLogger extends AbstractLogger {
    public function log( $level, $message, $context = array() ) {
        if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
            if ( defined( 'WP_DEBUG_LOG' ) && WP_DEBUG_LOG ) {
                error_log(
                    sprintf(
                        '%s: %s. Details: %s',
                        $level,
                        trim( $message, '.' ),
                        json_encode( $context )
                    )
                );
            }
        }
    }
}Code-Sprache: PHP (php)

PSR definiert passenderweise auch Interfaces für HTTP-Clients, Request-/Response-Objekte und Caching. Für die Request-Library die in WordPress benutzt wird, gibt es sogar schon ein passendes Issue: https://github.com/WordPress/Requests/issues/320

Leider sind Caching und der HTTP-Client in der ActivityPub-Implementierung noch nicht austauschbar, obwohl beide benutzten Libraries PSR kompatibel sind. Das heißt ich muss zuerst evaluieren, wie viel Arbeit es ist, die ActivityPub-Lib anzupassen, um dann diverse Wrapper für das WordPress Caching und die Request-/Response-Classes zu schreiben…

Bzw. muss ich das wahrscheinlich nicht einmal selbst implementieren, da ich bei weitem nicht der Erste war, der diese Idee hatte:

WordPress tut sich immernoch schwer mit modernem PHP-Dependency-/Plugin-Management. Ersteres ist praktisch nicht vorhanden (wird aber zumindest nicht verhindert) und letzteres basiert immer noch auf einem Prozess in dem SVN eine tragende Rolle spielt. Aber mit PSR(-Wrappern) kann man das Problem schon ganz gut kompensieren 🙂

Ein Code-Beispiel wie Kommentare als Custom Post Type registriert werden können.

Eine Leseempfehlung vorweg: „Yes, Comments Are Still Relevant, But We Need a Better System“ von Justin Tadlock auf WPTavern!

Soziale Netzwerke haben die Art wie wir kommunizieren drastisch verändert. Wir reagieren selten mit Text, statt dessen liken, re-tweeten, sharen und faven wir was das Zeug hält. Und wenn wir mit Text reagieren, hat dieser spätestens seit Twitter, einen anderen Stellenwert. Ein Kommentar ist nicht länger ein Stück Text unter einem Artikel, ein Kommentar steht für sich alleine und wird durch die Plattform in den richtigen Kontext gesetzt, abhängig vom Einstiegspunkt des lesenden.

Mein Tweet, über meine Timeline, mit Depones Antwort
Daniels Antwort über seine Timeline, mit meinem Tweet als „Reply-Context“.

Die IndieWeb Community nennt das einen Reply-Context.

Diese Art der Darstellung und Handhabung von Reaktionen ist auch in dezentralen Netzwerken sehr populär. Mastodon ähnelt sehr, dem von Twitter gekauften Tweetdeck und imitiert auch dessen Darstellung. Die IndieWeb Bewegung geht sogar noch einen Schritt weiter und schafft mit Webmentions eine Möglichkeit über Blog-Posts dezentral zu kommentieren.

Die Kommentar-Funktion von WordPress ist dagegen bald 20 Jahre alt und dementsprechend antiquiert.

Zeit das zu ändern!?!

Custom Post Type

Ich arbeite seit knapp 15 Jahren daran, WordPress im IndieWeb und Fediverse zu verankern. Das große Problem ist dabei immer wieder die Persistenz und die Darstellung von Reaktionen. Ich habe mir viele Gedanken gemacht, wie man das Problem beheben und WordPress‘ Kommentar System modernisieren könnte, und ende immer an dem Punkt, wo ich versuche die Custom Post Type – Funktionalität für Kommentare nachzubauen.

Aber warum? Wenn ich eh alles nachbauen müsste, wäre es doch viel sinnvoller direkt Post-Types zu benutzen.

register_post_type( 'comment' );Code-Sprache: JavaScript (javascript)

Aktuell bildet WordPress Posts, Pages, Attachments, Revisions, Navigation Menus, Custom CSS und Changesets über Custom Post Types ab… Warum also nicht auch Kommentare und andere Reaktionen?

Durch die Gleichsetzung der Datenstruktur von Posts und Comments, lassen sich diese einheitlich und dadurch einfacher verarbeiten und über z.B. APIs ausgeben. Gerade ActivityPub macht, wie Twitter, keinen Unterschied zwischen Kommentar, Antwort, Like, Boost oder initialem Text.

Die (Custom-)Post Tabelle bietet über post_parent schon jetzt die Möglichkeit komplexe Zusammenhänge wie z.B. auch Threaded-Comments abzubilden. Über den post_status ließen sich außerdem Kommentar-Status sowie eine Spam-Behandlung realisieren und commentmeta kann komplett in postmeta aufgehen.

Neben den klassichen Kommentaren lassen sich aber auch andere Reaktionen umsetzen.

Like, Share, …

Mit Post-Formats hat WordPress ein interessantes Konstrukt um Posts (über eine Taxonomy) weiter zu klassifizieren. Was für Posts das aside, gallery, link oder video Format ist, könnte für Comments das Like, Share oder Bookmark Format sein.

Themes könnten ihren Support wie folgt definieren:

add_theme_support( 'comment-formats', array( 'like', 'share', 'bookmark' ) );Code-Sprache: PHP (php)

Und Plugins, wie Webmention oder ActicityPub, könnten neue Formate wie folgt registrieren:

register_comment_format( string $comment_format, array|string $args = array() )Code-Sprache: PHP (php)

Fazit

Technisch spricht also nichts dagegen, Custom Post Types auch für Kommentare zu benutzen, man muss eigentlich nur noch alle Kommentar-Funktionen und -Klassen anpassen und fertig!

…und direkt über wpdb wird sicherlich eh niemand auf die Kommentar-Tabelle zugreifen! 😉

Spaß beiseite… Ich mag die Idee wirklich, hab aber bisher noch keinen ähnlichen Vorschlag im Trac gefunden… Ob das ein Zeichen ist?

Das IndieWeb Team auf dem Cloudfest Hackathon

Vom 19. bis 21. März fand der CloudFest Hackathon in Rust statt und ich hatte die Chance ein Projekt einzureichen und zu leiten:

WordPress and the IndieWeb

The IndieWeb is a community of individual personal websites, connected by simple standards, based on the principles of owning your domain, using it as your primary identity, to publish on your own site (optionally syndicate elsewhere), and own your data.

There are a variety of WordPress-plugins implementing these standards and principles, to help people to stay independent. Most of these plugins are very basic, have no or only little documentation with a poor user experience. Help the movement to mature and gain a broader audience.

Ich hatte mir im Vorfeld nicht viel Gedanken zum Hackathon gemacht, hab aber insgeheim gehofft, der Version 5.0 vom Webmention Plugin (einer nahezu kompletten Überarbeitung an der David Shanske und ich schon eine halbe Ewigkeit arbeiten) ein wesentliches Stück näher zu kommen… Das Wochenende lief dann aber doch etwas anders… auch großartig, aber anders 🙂

1. Tag

Wir waren eine wild zusammengewürfelte Truppe von 8 Leuten mit den verschiedensten Lebensläufen und ich hab mir den ersten Tag viel Mühe gegeben, das IndieWeb und Webmentions zu erklären. Die Diskussionen waren spannend und hitzig und gingen sogar so weit, dass ich zwischendurch den generellen Sinn und Zweck des Webmention Plugins verteidigen musste.

Hackathon Gruppe

Letztendlich haben aber nicht meine Argumente die Gruppe überzeugt, sondern eine Präsentation des Plugins mit all seinen aktuellen Features. Wer diesen Erkenntnisprozess nachvollziehen möchte, kann gerne Hagen Grafs „Webmention Journey“ auf Twitter verfolgen 🙂 (Nachtrag: Hagen hat seine Journey mittlerweile auch „verbloggt“)!

Meine Fazit des ersten Tages?

Man muss nicht die Geschichte des IndieWebs verstehen und auch nicht den Webmention Standard gelesen haben um von der Funktionalität begeistert zu werden, vor allem in der Kombination mit Brid.gy (Brid.gy schlägt eine Brücke zwischen dem Webmention Standard und den proprietären APIs der bekannten Social Networks. So landen dann auch Likes auf Facebook und Kommentare auf Twitter, im eigenen Blog).

Ich werde Versuchen mich zukünftig weniger auf Geschichte und Technologie zu konzentrieren und auf Vorträgen und Hackathons mehr Fokus auf die Funktionalität zu legen.

Ich hab die Plugins in erster Linie erstmal für mich Gebaut. Frei nach dem Motto „eat your own dogfood„. Das hat für die IndieWeb Community ganz gut funktioniert, aber um eine breitere Masse anzusprechen, muss das Plugin verständlicher werden.

Für den Hackathon haben wir uns deshalb dazu entschieden, die Usability und die User Experience des Plugin zu beleuchten und (im besten Fall) zu verbessern.

Webmention-Settings

Die Einstellungen setzen relativ viel Kenntnisse über die Funktionsweise von Webmentions voraus. Ein Teil der Gruppe hat sich daran gemacht, die Seite zu überarbeiten und zu vereinfachen.

Das Resultat ist eine Art Wizard, der beim ersten Aufruf gestartet wird und den User Schritt für Schritt durch die Einstellungen führt und sie ausführlich erklärt. Der Wizard soll nur beim ersten Laden starten und die klassischen Einstellungen nicht ersetzen.

(Der Pull Request dazu: #328)

Die zweite Idee war Brid.gy tiefer in das Webmentions Plugin zu integrieren. Die aktuelle Diskussion dazu findet auf GitHub statt.

Response-Types

Im Gegensatz zu Trackbacks und Pingbacks, müssen Webementions nicht immer „nur“ ein simpler ping sein. Es ist auch möglich dezentrale Likes, Bookmarks, RSVPs oder Reposts zu verschicken.

Aktuell muss man dazu im Block-Editor auf die HTML Ansicht wechseln und dem Link eine CSS-Klasse hinzufügen:

<a class="u-like-of" href="http://example.com/">Example</a>Code-Sprache: HTML, XML (xml)

Das ist nicht praktikabel und in keiner Weise anwenderfreundlich. Aus diesem Grund hat eine zweite Gruppe, an einem User Interface für den Response-Type gearbeitet.

Response-Types für Links im Block Editor

Am Ende des Hackathons gab es auch einen ersten Draft, mit der man Links als Likes auszeichnen konnte. Den PR gibt es leider noch nicht, aber ich werde ihn nachreichen wenn es soweit ist.

Webmaininnat suomeksi

…ja Carolinan ansiosta Webmaininnat-laajennus on nyt saatavilla myös suomeksi! Kiitos paljon 🙂

Fazit

Es war extrem spannend mit Leuten, außerhalb der IndieWeb und (teilweise) auch außerhalb der WordPress-Community, über das IndieWeb im Allgemeinen und das Webmention Plugin im Speziellen zu sprechen.

Vielen Dank an Moritz Bappert, Stefan Euchenhofer, Marko Feldmann, Hagen Graf, Carolina Lindqvist, Jason Rouet und Jan Vogt für eure tolle Arbeit! Danke für die neue Perspektive und für euer Feedback!

Danke auch an Robert Windisch und Alain Schlesser, mit denen ich viel über das Potential von Webmentions im WordPress Core geredet habe.

Die 5.0er Version des Webmention Plugins wird großartig!