The Logo of the AT Protocol

Vor zwei Jahren wollte Twitter in das „Dezentrale Netzwerke“-Business einsteigen und gründete eigens dafür das Projekt Bluesky. In den folgenden zwei Jahren wurde viel evaluiert und diskutiert, was wohl die beste Lösung für Twitter sei und wir alle fieberten mit ob es nun ActivityPub oder doch Matrix werden würde…

Aber das Warten hat ein Ende! Bluesky hat verkündet wie es weiter geht!

Sie entwickeln ein neues Protokoll!

Das AT Protocol, kurz für Authenticated Transfer Protocol!

Ich hab mir die FAQ mal angeschaut und dort steht warum Bluesky sich gegen ActivityPub entschieden hat:

Account portability is the major reason why we chose to build a separate protocol. We consider portability to be crucial because it protects users from sudden bans, server shutdowns, and policy disagreements. Our solution for portability requires both signed data repositories and DIDs, neither of which are easy to retrofit into ActivityPub. The migration tools for ActivityPub are comparatively limited; they require the original server to provide a redirect and cannot migrate the user’s previous data.

Das erinnert mich ein bisschen an die Subline von meinem OpenWeb-Icons Font:

Why OpenWeb Icons? Because Font Awesome had no RSS-icon […]

Weil ActivityPub keine perfekte Lösung für „Account portability“ hat, bauen sie ein komplett neues Protokoll?

ActivityPub ist sicherlich nicht „feature complete“, aber ein guter erster Wurf, was das Fediverse erfolgreich bewiesen hat! Warum arbeitet Twitter also lieber an einem eigen Format anstatt mit dem W3C zusammen an ActivityPub v2?

Warum macht sich das W3C überhaupt noch die Mühe „Standards“ zu definieren?

Wegen der Interoperabilität!

Würde Twitter mit HTTP(S), HTML oder CSS ähnlich umgehen, würde der Browser einfach leer bleiben, weil das &$%§& Internet nur mit einheitlichen Standards funktioniert!

Und das gleiche gilt auch für dezentralte Netze, zumindest wenn sie erfolgreich sein wollen! Darüber hab ich tragischerweise schon vor 10 Jahren geschrieben!

Diaspora* wurde kaum für „tot“ erklärt und schon steht das nächste Projekt in den Startlöchern! Tent.io soll ein protocol for distributed social networking and personal data storage werden. Alles neu, alles anders, alles besser als OStatus, DiSo oder Diaspora*. Aber mal ganz ehrlich… was haben die Diasporas & Co. bisher geschaffen? Ziel war es Facebooks „Walled Gardens“ aufzubrechen und was kam wirklich dabei rum? Eine ganze Reihe an dezentralen „Walled Gardens“. Na danke!

Dezentrale „Walled Gardens“

Das fediverse hat (wie schon erwähnt) bisher einen großartigen Job gemacht und verschiedenste Netzwerke mit den verschiedensten Ausprägungen vernetzt! Ich glaube bin der festen Überzeugung, dass sich diesmal wirklich das offene Format (ActivityPub) durchsetzen wird und Blueskys Authenticated Transfer Protocol auch in ein paar Monaten oder Jahren keine Rolle spielen wird!

Ben Werdmuller hat eine gesunde Einstellung zu dem Thema:

I’m so burned out by open source social, but I’m glad to see people throw energy at the problem, even if it’s not how I would have gone about it.

Twitter

Mehr hab ich dazu eigentlich nicht zu sagen, außer dass wir in der aktuellen Folge des neunetzcasts sehr ausgiebig über genau dieses Problem gesprochen haben!

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?

Im modernen Sprachgebrauch wird der Begriff [Posse] in übertragenem Sinn […] genutzt, um als grotesk empfundene Vorgänge in Gesellschaft und Politik zu beschreiben.

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

Wer sich (aus gegebenem Anlass) sorgen um Twitter macht, sollte sich mal mit der etwas anderen POSSE befassen.

POSSE is an abbreviation for Publish (on your) Own Site, Syndicate Elsewhere, the practice of posting content on your own site first, then publishing copies or sharing links to third parties (like social media silos) with original post links to provide viewers a path to directly interacting with your content.

https://indieweb.org/POSSE

Installiert euch WordPress! Veröffentlicht Texte, Bilder, Videos und Ideen nicht auf Twitter sondern auf eurer eigenen Seite! Teilt eure Inhalte über Twitter!

Und sollte Twitter „verschwinden“, teilt es über Mastodon! usw, usw…

Schaut euch dazu gerne auch mal Brid.gy an!

Wir haben die aktuelle Folge von „Hier und Jetzt – Open Web“ über Clubhouse aufgenommen 🙌!

Ich hatte mich vorher nicht so wirklich mit dem neuen Hype beschäftigt, fand es aber ganz charmant, einen Podcast wie eine Art „Talkrunde“ aufzunehmen um im Anschluss auch auf Fragen eingehen zu können. Es gab leider noch nicht so viele Zuschauer und auch keine Fragen… aber es geht ja ums Prinzip 😉!

Thema der Folge 7: „Dezentrales Twitter und dezentrales Clubhouse?

Hier klicken, um den Inhalt von share.transistor.fm anzuzeigen

Matthias Pfefferle und Marcel Weiß sprechen über Twitters Dezentralisierungs-Projekt „Bluesky“ und den umfangreichen ersten Bericht des Projekts über fast alle heutigen dezentralen Social-Networking-Ansätze. Außerdem: Wäre eine dezentrale Alternative zu Clubhouse denkbar?

Viel Spaß beim hören ☺️!

‚Hier & Jetzt‘ kann man per RSS-Feed abonnieren und findet man natürlich auch bei Apple Podcast und in jeder Podcast-App.

Letzte Woche war WordCamp Europe. Mit weit über 8000 Teilnehmern war es das bisher größte online WordCamp! Bei der Größe ist es klar, dass man auch eine ganze Menge neuer und interessanter Leute trifft. Also schnell auf Twitter und allen folgen!

Ich war auf dem größten online Event, von dem wohl am meisten verbreiteten Indie/OpenSource CMS und ich habe Personen, die ich dort kennen gelernt habe, über Twitter kontaktiert!

Warum?

Warum kam ich auf die Idee, Twitter zu benutzen, anstatt ihre Blogs zu abonnieren?

Auch auf den WordCamp Badges taucht lediglich das Twitter Handle auf und es wird nirgends das eigene Blog erwähnt.

WordCamp Badges mit Twitter Handle und ohne Blog-URL

Eigentlich ist die Antwort klar… Twitter ist ein soziales Netwerk dessen Kern-Kompetenz das Folgen anderer User ist. Außerdem findet der ganze Prozess an einer Stelle statt (twitter.com) und den Twitter-Handle kann man sich zudem leicht merken. Keine komplizierte Domain… keine Feed-URL… keine E-Mail Adresse… einfach nur @username

Wie sieht das Folgen oder Befreunden bei Blogs aus? Ist es das Abonnieren des Feeds? Das heraussuchen der E-Mail Adresse über das Impressum? Das Bookmarken der Kontakt-Seite?

Es gibt leider keine einfache Alternative um einem Blog zu „folgen“.

Aber gehen wir mal davon aus, das Abonnieren des Feeds käme dem am nächsten… Wie bekomme ich die richtige Feed URL heraus? Bei WordPress ist das noch relativ einfach, da die URLs standardisiert sind, aber wie sieht es mit anderen Systemen aus?

Marcus Herrmann will dazu eine /feeds URL etablieren, ähnlich wie /about, /now oder /contact.

People create more content than ever before – but siloed away in the Facebooks, Twitters, Instagrams and Mediums of the world. RSS is considered as something that can’t be monetized in our attention economy and is therefore on its way out. Even when personal blogs offer a feed, it is not obvious anymore in the browser user interface. When I stumble over an interesting blog and want to subscribe to it, I open the dev tools of my browser (which is kind of a knee jerk reaction in my profession anyway) and search the source code for a subscribable URL.

[…]

Personal website owners – what do you think about collecting all of the feeds you are producing in one way or the other on a /feeds page?

Ich mag die Idee, aber ich glaube nicht dass sie das oben beschriebene Problem löst. Es mag sein, dass es durch eine /feeds Seite einfacher ist, den richtigen Feed zu finden, es setzt aber auch voraus, dass man weiß was ein Feed, was RSS, oder was Atom ist.

Was wir eigentlich brauchen ist aber eine Art Indie-Follow oder Indie-Subscribe Button.

Chris Aldrich spricht in seiner Antwort auf Markus‘ Blogpost ein paar wichtige Punkte an.

Worse, suppose I click over to a /feeds page, as an average person I’m still stuck with the additional burden of knowing or learning about what a feed reader is, why I’d need or want one, and then knowing what RSS is and how I might use that. I might see a one click option for Twitter or Mastodon, but then I’m a mile away from your website and unlikely to see you again in the noise of my Twitter feed which has many other lurking problems.

Chris erwähnt SubToMe als bisher einzige offene Alternative, die einem Indie-Follow Button noch am nächsten kommt.

One of the best solutions I’ve seen in the past few years is that posited by SubToMe.com  which provides a single, customizable, and universal follow button. One click and it automatically finds the feeds hidden in the page’s code and presents me with one or more options for following it in a feed reader.

Damit hat er leider recht!

Hier ein SubToMe Beispiel-Button: Follow!

Es gab in den letzten 10 Jahren diverse Ideen, die ein dezentrales „Follow“ ermöglicht hätten: XAuth, WebIntents, Custom-Schemes, WebActions und Rel-Subscribe. Leider hat sich aber keines dieser Format durchgesetzt. Die Gründe dafür reichen von einem Extrem zum anderen.

Mit WebIntents wollte man die eierlegende Wollmilchsau entwickeln:

We didn’t specifically solve a single use case well other than connecting apps. The broad verb-space meant that a lot of developers wanted to design their own actions. I believe that this diluted the message of intents, and is something that if I had researched the Android ecosystem more effectively at the time, I would have probably constrained the verb eco-system to a couple of small but well defined cases.

Mozilla dagegen, hat beim Thema RSS (in meinen Augen) etwas zu schnell klein begegeben:

Die Prüfung der Nutzungsdaten und der Anforderungen zur technischen Wartung dieser Funktionen (unter Berücksichtigung der Tatsache, dass Ihnen bereits alternative Reader für RSS/Atom-Formate zur Verfügung stehen) brachte die Erkenntnis, dass die Funktionen einen unverhältnismäßig großen Aufwand in Bezug auf Wartung und Sicherheit im Verhältnis zu ihrer Anwendung erfordern.

Auf der anderen Seite hat Mozilla schon 2010 einen Artikel über „RegisterProtocolHandler Enhancing the Federated Web“ geschrieben, in dem sie aufzeigen, wie ein dezentraler Follow-Button für das Fediverse funktionieren könnte und theoretisch auch immernoch funktioniert!

Ich verstehe bis heute nicht, warum sich web+custom://scheme nicht durchgesetzt hat… Vielleicht sollte man (ich) mal einen zweiten Anlauf für ActivityPub/Mastodon starten

Shows a diagram of the Fediverse with Twitter in the middle

Jack Dorsey, CEO von Twitter, hat vorgestern einen spannenden Thread auf Twitter veröffentlicht:

Twitter is funding a small independent team of up to five open source architects, engineers, and designers to develop an open and decentralized standard for social media. The goal is for Twitter to ultimately be a client of this standard.

[…]

We’d expect this team not only to develop a decentralized standard for social media, but to also build open community around it, inclusive of companies & organizations, researchers, civil society leaders, all who are thinking deeply about the consequences, positive and negative.

Schön, dass Twitter dem Thema „Dezentrale Netzwerke“ (nach über zehn Jahren) eine (zweite) Chance gibt! Nicht so schön, dass Twitter, zumindest laut Jacks Thread, dafür einen neuen „Standard“ entwickeln will.

Zum Glück hat @bluesky, der Account des neuen Projekts/Teams, die Aussage noch einmal relativiert.

As we mentioned, the team will have complete freedom to identify and consider all the great work already done, and if they believe it’s best to work on a pre-existing standard 100%, they will. If not, they’re free to create one from scratch. Their discretion, not Twitter, Inc’s.

@bluesky

Ich bin gespannt auf das finale Ergebnis, immerhin hat sich Evan Prodromou, Erfinder von OStatus, Gründer von Identi.ca und Status.NET und Mit-Autor von ActivityPub, schon ‚mal über Twitter beworben 🙂

… und vielleicht sollte ich mich ja auch bewerben?!?

via Marcel Weiß & Daniel Ehniss

Garfield minus Garfield comic
Image from Garfield minus Garfield

Ich war nie ein großer Fan der Twitter Cards, was aber nicht wirklich schlimm ist, da Twitter das Open Graph Protocol als vollwertiges Fallback unterstützt… unterstützt hat…

Seit ein paar Wochen scheint den feinen Herren das Open Graph Protocol aber nicht mehr auszureichen und meinen Links fehlt der schöne, kleine Teaser 🙁

Zum Glück reicht aber ein Meta-Tag um das ganze wieder zum laufen zu bekommen. Twitter unterstützt verschiedene Arten von Previews, welche über <meta name="twitter:card" content="summary" /> festgelegt werden. Neben summary (für Texte) gibt es auch noch photo für Bilder und player für Audio/Video (die komplette Liste findet ihr hier). Ich würde euch außerdem noch den twitter:creator empfehlen, mit dem ihr auf den Twitter-Account des Autors hinweisen könnt. Für meinen Blog sieht das wie folgt aus:

<meta name="twitter:creator" content="@pfefferle" />
<meta name="twitter:card" content="summary" />Code-Sprache: HTML, XML (xml)

Wenn ihr sicher gehen wollt ob ihr alles richtig gemacht habt, könnt ihr eure Seite mit dem Twitter Card Validator testen.

Den WordPresslern unter euch kann ich außerdem folgende Plugins empfehlen:

  • Open Graph – Keine Settings, kein Know-How, alles vollkommen Idiotensicher.
  • twitter:creator – Setzt zusätzlich die angesprochenen twitter:creator und twitter:card.

…also viel Spaß beim Twitter Cards Boykott ;).

Anfang der Woche hat Martin Weigert schon über Twitters Pläne, die eigenen Tweets mit noch mehr Medieninhalten zu erweitern, geschrieben:

Immer mehr Partnerseiten können zusätzliche multimediale Inhalte im Kontext von Tweets darstellen. Ganz eindeutig ist bisher nicht, wohin diese Reise für Twitter geht.

Aber ich habe mir nichts weiter dabei gedacht… Immerhin macht das Twitter ja schon seit einer ganzen Weile und ich meine mich zu erinnern, irgendwo gelesen zu haben, dass sie dazu oEmbed einsetzen… Also alles in bester „OpenWeb“-Ordnung 🙂

Aber, Geek der ich bin, hab ich mir gestern zufällig einen Quelltext angeschaut in dem ich auf folgendes entdeckt habe:

<meta name="twitter:card" content="summary">
<meta name="twitter:url" content="...">
<meta name="twitter:title" content="...">Code-Sprache: HTML, XML (xml)

…und nach kurzem googlen bin ich auf die Twitter Cards gestoßen, Twitters eigenes, kleines Open Graph Protocol. Mit den Twitter Cards bekommen Seitenbetreiber ein Set an Meta-Tags an die Hand, und Twitter kann diese Informationen nutzen um die tweets mit den oben erwähnten Mediendaten anzureichern.

Example Twitter Card

…und ich wollte mich gerade darüber aufregen, warum Twitter dazu eine eigene Meta-Sprache erfindet, da bin ich in der Doku ironischerweise auf folgendes gestoßen:

You’ll notice that Twitter card tags look similar to OpenGraph tags, and that’s because they are based on the same conventions as the Open Graph protocol. If you’re already using OpenGraph to describe data on your page, it’s easy to generate a Twitter card without duplicating your tags and data. When the Twitter card processor looks for tags on your page, it first checks for the Twitter property, and if not present, falls back to the supported Open Graph property. This allows for both to be defined on the page independently, and minimizes the amount of duplicate markup required to describe your content and experience.

„Ok“, dachte ich… vielleicht reichen die Open Graph Properties ja nicht aus um alle Informationen, die Twitter braucht, abzubilden. Also hab ich mir mal die Mühe gemacht sie zu vergleichen:

Twitter CardsOpen Graph Protocol
twitter:cardog:type
twitter:siteog:site_name
twitter:urlog:url
twitter:descriptionog:description
twitter:titleog:title
twitter:imageog:image
twitter:image:widthog:image:width
twitter:image:heightog:image:height
twitter:player oder twitter:player:streamog:video oder og:audio
twitter:player:widthog:video:width
twitter:player:heightog:video:height

Es lässt sich also prinzipiell alles mit dem Open Graph Protocol abbilden, es fehlen lediglich die Felder twitter:site:id und twitter:creator:id. Aber wegen diesen zwei Feldern muss man doch nicht das ganze Format „kopieren“. Es reicht doch ein kleiner Absatz, wie man den Open Graph mit den proprietären Werten erweitert… So wie das auch Facebook praktiziert:

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:og="http://ogp.me/ns#"
      xmlns:fb="https://www.facebook.com/2008/fbml">
      xmlns:twitter="https://dev.twitter.com/docs/cards">
  <head>
    <title>The Rock (1996)</title>
    <meta property="og:title" content="The Rock"/>
    <meta property="fb:admins" content="USER_ID"/>
    <meta property="twitter:site:id" content="@USER_ID"/>
    ...
  </head>
  ...
</html>
Code-Sprache: HTML, XML (xml)

Hoffentlich überlegt sich das Twitter noch einmal… Wenn nicht, wird dank dieser (und folgender) Redundanzen der <head /> einer Webseite in ein paar Jahren mehr Informationen beinhalten wie der <body />.

…welch ein Over-<head> 🙂

Der Artikel "Single-Sign-On mit Facebook, Twitter und dem Open Stack", den ich für Ausgabe 19 des t3n Magazins geschrieben habe, ist jetzt kostenlos im Heftarchiv verfügbar.

Immer mehr Webdienste erleichtern ihren Nutzern die Anmeldung, indem Sie statt einer langwierigen Registrierung auf den einfachen Login mit „Facebook Connect“ oder „Sign in with Twitter“ setzen. Wir zeigen, wie das funktioniert, welche Vorteile und Risiken sich daraus ergeben und warum es am Ende auf einen „Universal Login“ mit offenen Standards wie OpenID hinauslaufen könnte.

Link: Single-Sign-On mit Facebook, Twitter und dem Open Stack

Viel Spaß beim lesen…