Schlagwort-Archive: Dezentrale Soziale Netzwerke

Mit Solid nach Mastodon posten, geht das?

Ein Blogpost bei Mastodon beschreibt, wie man quasi „manuell“ über das ActivityPub Protokoll auf einen Mastodon-Toot antworten kann.

We want to send a Mastodon user a message from our own, non-Mastodon server.

Ich dachte mir: Das muss doch auch mit einem Solid Pod klappen. Angelehnt an den Originalartikel ist unser Ziel in diesem Artikel daher:

Wir wollen einem Mastodon User eine Nachricht von unserem Solid Pod senden.

Los geht’s! 🚀

Der „Actor“

Idealerweise würden wir natürlich mit unserer Solid Web ID tätig werden, da ich aber im ersten Schritt möglichst wenig vom Originalartikel abweichen möchte (um mögliche Probleme zu vermeiden), habe ich mir wie dort beschrieben ein Schlüsselpaar angelegt und das fertige JSON-LD für den Actor auf meinem Solid Pod veröffentlicht. Leider ist der Data Browser Stand heute nicht in der Lage die Rohdaten aufzubereiten. Ein klassisches curl zeigt aber, dass es geklappt hat:

> curl https://angelo.veltens.org/profile/actor

{
  "@context": [
  "https://www.w3.org/ns/activitystreams",
  "https://w3id.org/security/v1"
  ],
  "id": "https://angelo.veltens.org/profile/actor",
  "type": "Person",
  "preferredUsername": "angelo",
  "inbox": "https://angelo.veltens.org/inbox",
  "icon": {
    "type": "Image",
    "mediaType": "image/jpeg",
    "url": "https://angelo.veltens.org/profile/me.jpg"
  },
  "publicKey": {
  "id": "https://angelo.veltens.org/profile/actor#main-key",
  "owner": "https://angelo.veltens.org/profile/actor",
  "publicKeyPem": "-----BEGIN PUBLIC KEY..."
}
}

Ich hab auch gleich noch ein Profilbild (icon) dazu gepackt, damit es etwas persönlicher aussieht und auch meine normale Solid Inbox verlinkt.

Webfinger

Auch die statische Webfinger Datei ist leicht platziert, da der Node Solid Server einen .well-known Ordner von Haus aus mitbringt. Nun lässt sich das Profil schon über die Mastodon-Suchleiste auffinden 🎉

Der auf dem Solid-Pod platzierte Actor ist über Mastodon auffindbar

So weit so gut!

Die Nachricht

Auch die Nachricht verfasse ich wieder als JSON-LD und lege sie in meinem Pod ab:

{
  "@context": "https://www.w3.org/ns/activitystreams",

  "id": "https://angelo.veltens.org/public/toots/hello-solid#create",
  "type": "Create",
  "actor": "https://angelo.veltens.org/profile/actor",

  "object": {
    "id": "https://angelo.veltens.org/public/toots/hello-solid#note",
    "type": "Note",
    "published": "2020-07-12T20:26:27+0200",
    "attributedTo": "https://angelo.veltens.org/profile/actor",
    "inReplyTo": "https://mastodon.social/@Gargron/100254678717223630",
    "content": "<p>Hello from Solid</p>",
    "to": "https://www.w3.org/ns/activitystreams#Public"
  }
}

Für den folgenden Schritt, brauchen wir die Datei aber auch auf dem lokalen Rechner.

Das Skript

Für die Erzeugung einer gültigen HTTP-Signature brauchen wir ein Skript, wie im Originalpost bereits beschrieben. Dort müssen wir noch unsere eigene keyId hinterlegen und ggf. den Namen der JSON-Datei an unsere anpassen, aber dann kann es schon losgehen.

Das Skript gibt leider keine Auskunft, ob es geklappt hat. Bei mir war es so, dass mein Post partout nicht bei Mastodon erscheinen wollte. Ich habe das Skript daher erstmal so umgeschrieben, dass es ein curl Kommando erzeugt, das ich manuell ausführen und besser debuggen kann:

Trotzdem hat die Antwort auf den Post von @Gargon erstmal nicht funktioniert. Der Server antwortete mit 202 (Accepted), aber die Nachricht erschien immer noch nicht! 😒

Der Durchbruch ⛏

Im SocialHub Forum gibt es ein paar Spekulationen woran es liegen könnte. Der Node Solid Server geht z.B. nicht korrekt mit dem Mime-Type application/activity+json um, und versteht auch JSON-LD Profile nicht korrekt.

Letztlich habe ich es aber doch noch geschafft einen Post abzusetzen, der auch auf Mastodon sichtbar wird. Bei mastodon.online hat es funktioniert. Dort hatte ich mir zuvor einen nativen Account angelegt, um die Webfinger-Suche zu testen. Auf einen Post dieses Accounts konnte ich dann auch mit meinem Solid-Actor antworten. Möglicherweise liegt es daran, dass die mastodon.online Instanz den Actor durch die vorherige Suche schon kannte, aber sicher weiß ich es nicht.

Hier ist jedenfalls das Ergebnis:

Bonus: Inbox-Nachrichten

Bereits kurz nachdem ich erstmals meinen Actor auf mastodon.online suchte, fiel mir auf, dass dieser Server seitdem Änderungen in meine Inbox kommunizierte.

Warum also nicht mal eine Direktnachricht ausprobieren? 💌

Mit dem Mastodon Account schreibe ich meinen Solid-Actor an

Die Nachricht konnte problemlos abgesetzt werden und erschien kurz darauf in der Inbox meines Solid-Pods. Da der Data Browser nicht in der Lage ist JSON-LD Daten anzuzeigen, habe ich die Daten kurzerhand manuell nach Turtle konvertiert:

Nach der manuellen Konvertierung kann auch der Data Browser die Daten anzeigen.

Fazit

Es funktioniert! Ein Solid Pod eignet sich grundsätzlich, um einen ActivityPub Actor und Posts zu beherbergen. Die LDP Inbox ist in der Lage Nachrichten von Mastodon zu empfangen. Hier und da hakt es noch und das alles ist natürlich weit entfernt von einer praktischen Benutzbarkeit. Es zeigt aber, dass Solid und ActivityPub sich technisch gut ergänzen. Einen Solid Server kompatibel zu gestalten dürfte keine große Herausforderung sein. Wenn die Daten dann auch noch hübsch dargestellt werden, bietet ein Solid Pod ein Tor zum Fediverse.

Einreichung zur SIGINT 2013: Dezentrales Social Web mit Linked Data und WebID

Ich habe folgenden Talk zur SIGINT 2013 eingereicht. Die Entscheidung, ob er genommen wird, fällt bis spätestens 5. Juni. Update: Die Einreichung wurde angenommen, der Talk findet statt.

Let’s tear down these walls – „Mit Links“ die Mauern Sozialer Netzwerke überwinden.

Seit jeher verlinkt das Web seine Inhalte, ganz gleich auf welchen Servern sie liegen. Interessanterweise scheint dieses Prinzip noch nicht im Social Web angekommen zu sein. Statt uns mit unseren Freunden, und Inhalten die wir mögen, zu verlinken, pflegen wir unzählige Accounts. Nicht selten stehen wir vor technischen Mauern, die unsere die Vernetzung verhindern. Diese Mauern können wir wahrsten Sinne „mit Links“ überwinden.

Das Web 1.0 – ein dunkler Ort, an dem man niemandem followen, nichts liken und nichts sharen kann. Niemand möchte mehr dort sein. Daher bietet jeder Dienst, der etwas auf sich hält ein „Connect with Facebook“, ein „Login with Twitter“ und ein „Share at Google+“ an.

Doch statt als ein soziales Wesen im Web zu agieren, sind wir nur die Summe unserer Accounts. Ein neuer Dienst, ein neuer Account. Zwar schnell erstellt per Facebook-Connect, doch inkompatibel zum Rest des Webs.

Die Mauern des Web 2.0 sind künstlich. Wir können und müssen sie einreißen. Jetzt.

Das Web war nie eine Anhäufung inkompatibler Dienste, sondern das genaue Gegenteil: Durch Hyperlinks können Webseiten miteinander verknüpft werden, ganz gleich auf welchen Servern sie liegen.

Dieses Prinzip der Links können wir auf Daten und Personen anwenden, um uns mit einer Identität global zu vernetzen. Dazu werden die Prinzipien von Linked Data und das WebID-Protokoll vorgestellt. Statt Dienste mit sozialen Funktionen im Web, wird das Web selbst zu einem gigantischen Social Network.

Der Vortrag erklärt:

  • die Grundlagen von Linked Data, d.h. wie über URIs Dinge und Personen global identifiziert und verlinkt werden können
  • wie man mit Hilfe der Friend-of-a-Friend-Ontologie (FOAF) ein maschinenlesbares Social-Web-Profil erzeugt und dezentral hostet
  • wie das WebID-Protokoll ein Ein-Klick-Login ohne zentralen Authentifizierungsdienst ermöglicht, um mit einem FOAF-Profil im Web zu agieren.

picserv unterstützt WebID-Login

Meine in Entwicklung befindliche Bilder-Plattform picserv unterstützt nun auch ein WebID-Login.

WebID ist ein aufstrebender Standard, der uns losgelöst von zentralen Netzwerken wie Facebook und Google+ eine Identität im Social Web geben kann. WebID ist gleichzeitig ein Login-Verfahren und euer Profil im Social Web. Ein solches Profil könnt ihr z.B. bei my-profile.eu mit wenigen Klicks einrichten, ihr seid aber nicht von einzelnen Anbietern abhängig. Wer mag kann auch selbst ein Profil hosten.

Wenn ihr euch mit eurer WebID bei picserv einloggt, könnt ihr dort Bilder hochladen und kommentieren. Euer Name und eurer Bild wird aus eurem Profil ausgelesen und muss nicht nochmals bei picserv hinterlegt werden. Das ist das Schöne im dezentralen Social Web: Eure Identität und die Dienste, die ihr mit dieser Identität nutzt können auf völlig unterschiedlichen Servern liegen. Statt monolithischer Social-Network-Plattformen wird das Web zum Social Network. picserv leistet mit dem WebID-Login einen Beitrag zu dieser Entwicklung.

[notice]Bitte beachtet aber, dass sich picserv noch stark in Entwicklung befindet. Verlasst euch nicht darauf, dass der Dienst oder eure Bilder dauerhaft verfügbar sind![/notice]

[important]Ihr habt Fragen zu WebID oder Probleme beim Einrichten eines Profils? Ich helfe gerne weiter. Auch Anregungen zu picserv nehme ich gerne entgegen.[/important]

WebID: Vortragsvideo & Folien vom Webmontag

Auf dem 6. Braunschweiger Webmontag habe ich einen Vortrag zum Thema „Dezentrale Soziale Netzwerke mit Linked Data und WebID gehalten“. Ich habe maßlos überzogen und viel zu schnell gesprochen. Der Vortrag kam trotzdem sehr gut an und führte zu vielen interessierten Fragen.

Wer nicht die Gelegenheit hatte, live dabei zu sein, kann sich die Aufzeichnungen auf Vimeo ansehen.

Mein Vortrag beginnt in Teil 2 bei Minute 13:55:

und setzt sich fort in Teil 4:

[important]Meine Vortragsfolien habe ich wie immer mit allen Sourcen und unter freier Lizenz bei GitHub hochgeladen. Hier ist auch nochmal die PDF-Fassung.[/important]

Linked Data Social Network

Ich beschäftige mich nicht nur theoretisch mit den Themen Linked Data und dezentralen sozialen Netzwerken, sondern arbeite derzeit auch ganz konkret an einer Social Network Plattform auf Basis von Linked Data. Dass was ich seit gestern online habe, würde ich aber nicht mal als Pre-Alpha bezeichnen, also erwartet nicht zu viel, falls ihr auf den gleich folgenden Link klickt.

Mein Projekt „Desone“ (Decentralized Social Network) hat derzeit auch noch wenig mit „Networking“ zu tun. Es ist eher ein Profil-Hoster und derzeit auch nur für mein eigenes Profil (Anmeldung ist noch nicht möglich, klickt so oft auf Login wie ihr wollt). Editierfunktionen bietet es auch noch nicht (nichtmal für mich selbst). Kommt aber alles noch!

Zum „Network“ wird das ganze aber dann doch wieder, weil Desone natürlich Linked Data bereitstellt. In meiner Bekanntenliste verlinke ich auf meine Kontakte bei identi.ca (StatusNet stellt praktischerweise FOAF bereit) und Twitter (semantictweet.com machts möglich) sowie auf einige wenige Personen die selbst ein FOAF-Profil hosten.

Meine Interessen verlinken zudem auf die DBpedia und mein Wohnort auf geonames.org. Wie ihr seht, sind dank Linked Data also schon sehr viele Angaben möglich, ohne das Desone selbst diese Informationen (z.B. Orte, Interessen) hosten muss. Desone hostet nur das Profil, den Rest stellt praktischerweise das Web of Data bereit.

Genug der langen Rede, schauts euch an, wenn ihr mögt: http://me.desone.org/person/aveltens#me

An die RDF-Daten kommt ihr dank Grails Content-Negotiation auf folgenden Wegen:

Ich werde euch natürlich über das Projekt auf dem Laufenden halten.

Das Web als Social Network

Linked Data eignet sich hervorragend um Soziale Netzwerke im Web abzubilden, die genauso dezentral funktionieren wir das altbekannte WWW. Wie ich bereits erklärt habe, gibt es im „Web of Data“ nicht nur Dokumente, sondern alle möglichen „Dinge“ können durch URIs identifiziert werden. Zu diesen „Dingen“ gehören auch Personen und ihre Beziehungen.

Zunächst müssen wir uns dazu noch einmal ins Gedächtnis rufen, dass Personen und die Dokumente, die sie beschreiben, zwei völlig unterschiedliche Dinge sind: You are not your Website!

Folgende URI identifiziert mich als Person: http://data.kontroversen.de/foaf.rdf#me

Man beachte das #me am Ende! Diese URI ist eine andere URI als http://data.kontroversen.de/foaf.rdf (ohne #me). Beide URIs führen im Web-Browser zwar zum gleichen RDF-Dokument, nur die letztere jedoch identifizert das RDF-Dokument, während http://data.kontroversen.de/foaf.rdf#me die Person „Angelo Veltens“ identifiziert.

Das abgerufene Dokument enthält RDF-Daten über die Resource http://data.kontroversen.de/foaf.rdf#me (mich), unter anderem meinen Namen und ein Verweis auf ein Bild von mir. Die Datei ist damit so etwas ähnliches wie ein Social-Network-Profil und legt damit den Grundstein für ein dezentrales soziales Netzwerk mit Hilfe von Linked Data.

Aber wie zur Hölle kann ich jetzt Freundschaften schließen, Status-Updates senden, Bilder sharen, Sachen liken, kommentieren, anstupsen, retweeten?! Eins nach dem anderen.

Beziehungen zwischen Personen sind sehr leicht über RDF-Tripel zum Ausdruck zu bringen. Die FOAF-Ontologie bietet zum Beispiel das Prädikat foaf:knows um zu sagen „A kennt B“. (Da FOAF sich prima für Social Networks eignet, ist auch häufig vom „FOAF-Profil“ die Rede, auch wenn natürlich weitere Ontologien im Profil verwendet werden können) Ein Beispiel aus meinem Profil:

<http://data.kontroversen.de/foaf.rdf#me>
  <foaf:knows>
    <http://fcns.eu/people/andrei/card#me>

Hinter http://fcns.eu/people/andrei/card#me verbirgt sich Andrei Sambra, was ein einfacher Abruf der URI verrät. Dank Content-Negotiation liefert ein normaler Webbrowser bei seiner URI sogar eine menschenlesbare HTML-Datei aus. Das habe ich für mein Profil leider noch nicht eingerichtet, kommt aber noch!

Jetzt mag das alles für Laien noch etwas kompliziert erscheinen, aber genausowenig wie man heute nicht mehr manuell an HTML-Dateien herumeditieren muss um ein Blog zu betreiben, wird man schon bald kein RDF mehr verstehen müssen um sein eigenes Profil im Social Web zu hosten. Es wird Anbieter geben, bei denen man mit wenigen Klicks ein Profil anlegen kann und wer mag installiert sich eine kleine Software auf seinem eigenen Webspace / Server um sein Profil zu hosten. Der Knackpunkt ist: Egal wo auch immer euer Profil liegt und wo die eurer Freunde liegen: Ihr könnt euch miteinander vernetzen. Ihr könnt euch nennen wie ihr möchtet. Ihr allein könnt bestimmen wem ihr welche Daten preisgebt. Ihr seid nicht von der Willkür einzelner Anbieter wie Google und Facebook abhängig. Das Web wird zum Social Network. Das gesamte Web mit all seinen Inhalten und Möglichkeiten!

Damit sind wir beim nächsten Punkt: Alles im Web lässt sich über Linked Data verknüpfen. Fotos, Videos, Blogartikel… Alles was im Web ist, hat auch eine URI und ich kann damit Aussagen treffen wie z.B.

<http://data.kontroversen.de/foaf.rdf#me>
  <ex:likes>
    <http://datenwissen.de/2011/09/das-web-als-social-network/>

um kenntlich zu machen, dass ich diesen Blogartikel „mag“. Ich kann Bilder hochladen wo immer ich möchte und sie mit meinem Profil verknüpfen. Ich kann Sie auf meinen eigenen Server laden. Oder bei Flickr. Das Social Web ist vollkommen dezentral. Nicht nur sind die einzelnen Profile auf viele verschiedenen Server verteilt, auch die Daten meines Profils kann ich beliebig im Web verteilen. Ein paar Bilder auf Flickr, ein paar in meinem Blog, Status-Updates bei Anbieter A, Social Bookmarks bei Anbieter B. Und das alles mit nur einem einzigen Profil, dass sich unter meiner Kontrolle befindet.

Um dies technisch zu ermöglichen muss ich mich in irgendeiner Form auf anderen Servern, bzw. bei den unterschiedlichen Anbietern mit meinem Profil „einloggen“ können. Erfreulicherweise arbeitet das W3C gerade an WebID, einem Protokoll, welches bereits heute mit allen Browsern funktioniert, da es auf SSL-Zertifikaten basiert, welche schon seit Jahrzehnten unterstützt werden. Mit WebID ist ein Login per Mausklick, ohne Username und Passwort, möglich. Ich werde das aber in einem späteren Artikel erklären, für heute soll es erst einmal reichen.

Ich hoffe es ist ungefähr klar geworden, wie ein dezentrales Social Web mit Hilfe von Linked Data möglich wird. Ansonsten zögert nicht Rückfragen zu stellen! Wer gleich ausprobieren möchte, was heute bereits möglich ist, der kann sich bei http://foaf.me/ oder http://webid.fcns.eu/ ein FOAF-Profil anlegen und sich mit mir verlinken. Egal wo ihr eurer Profil eingerichtet habt, könnt ihr dann hier etwas an die Wall posten.

Dezentrale Soziale Netzwerke – Ein grober Überblick

Ich habe mir die Tage mal ein paar Varianten von dezentralen sozialen Netzwerken angeschaut, auf die ich hier kurz eingehen möchte. Habe mich mit keinem davon tiefergehend befasst und es folgt auch keine Evaluation oder sowas. Ist vielmehr ein grober Überblick für mich selbst und wen auch immer es noch interessiert, was es im weiten Web in diese Richtung schon gibt:

Noserub

Einer der ersten mir bekannten Ansätze für dezentrale soziale Netzwerke. Gabs vor Jahren mal einen Beitrag im Elektrischen Reporter zu. Scheint aber auch leider nicht mehr aktiv voran getrieben zu werden. Letzte sichtbare Aktivitäten sind aus 2009.

One Social Web

Die Entwicklung wurde wohl erstmal eingestellt, weil man sich auf die Spezifikation konzentrieren möchte. Diese ist immerhin Stand Juli 2011. Basiert technologisch auf XMPP, vCard und Activity Streams.

Buddycloud

Macht einen vielverprechenden Eindruck, auch wenn leider noch keine Demo online ist. Dafür scheint die Entwicklung gut voran zu gehen. Setzt technologisch ebenfalls auf XMPP, aber man antwortete mir erfreulich zügig via Twitter, dass man FOAF und andere Semantic Web Standards / Technologien zumindest im Hinterkopf hat und diese in späteren Versionen zu erwarten sind. Ich bin gespannt!

The v0.1 release won’t see any semantic web technology but expect FOAF and other features to be included starting with v0.2

Lorea

So ganz klar wurde mir das Konzept auf der grausigen Website leider nicht. Gibt zwar zahlreiche Server die scheinbar ein Login via OpenID und sogar WebID unterstützen, aber leider gelang mir bei keinem ein Login auf diese Weisen. Fehlermeldung bei WebID-Login:

Couldnt login with the certificate:No Client Certificate Supplied

Fehlermeldung bei OpenID:

OpenID authentication failed: is not a valid OpenID URL.)

Diaspora

Der Vollständigkeit halber erwähne ich noch Diaspora, vermutlich das bekannsteste dezentrale Netzwerk zurzeit. Das ist auch schon recht gut voran geschritten und prinzipiell praktisch nutzbar wenn auch noch im Alpha-Status. Leider entwickelt es sich für meinen Geschmack zu sehr in Richtung „dezentrales Facebook“. Ein verteiltes Datensilo quasi, statt ein großes zentrales. Ich habe den Entwicklern vorgeschlagen FOAF und WebID zu unterstützen, habe darauf aber leider noch keine Rückmeldung.

Wer weitere Ansätze für dezentrale soziale Netzwerke kennt, möge Sie in den Kommentaren posten! Wie man mit Hilfe von Linked Data das Web zum Social Network machen kann, werde ich demnächst erläutern.

Aktuelle Projekte

Dieses Blog kam ja leider noch nicht so richtig in die Gänge, aber das soll sich nun ändern. Durch Landtagswahlkampf und Umzug hatte ich mich einige Monate auch fast nicht mit Linked Data und Co. befasst. Das hat sich in letzter Zeit wieder geändert und soll sich auch in diesem Blog wiederspiegeln.

Mein Hauptaugenmerk liegt derzeit auf dezentralen sozialen Netzwerken mit semantischen Technologien. Was es damit auf sich hat, werde ich demnächst mal näher erläutern. Wer es eilig hat liest sich diesen Artikel durch und googelt ein bisschen nach FOAF+SSL und WebID. Beim nächsten Braunschweiger Webmontag wird es bei Interesse auch eine kleine Präsentation dazu von mir geben.

Seit Tabulator nicht mehr in aktuellen Firefox-Versionen läuft, mangelt es mir an zufriedenstellenden RDF-Browsern, weshalb ich begonnen habe einen eigenen zu entwickeln. Falls jemand einen Tipp für einen guten Browser hat, würde ich mir die Arbeit aber gerne sparen.

Da ich mittlerweile die Sprache Groovy für mich entdeckt habe und diese die Entwicklung von Domain Specific Languages sehr einfach macht, entwickle ich derzeit eine solche DSL für die Generierung von RDF-Daten. Das ist schon ziemlich weit fortgeschritten und wird demnächst von mir veröffentlicht.

Soweit erstmal zum Stand der Dinge.