{"id":25230,"date":"2024-04-26T14:02:53","date_gmt":"2024-04-26T12:02:53","guid":{"rendered":"https:\/\/notiz.blog\/?p=25230"},"modified":"2024-04-26T14:05:24","modified_gmt":"2024-04-26T12:05:24","slug":"activitypub-the-evolution-of-rss","status":"publish","type":"post","link":"https:\/\/notiz.blog\/2024\/04\/26\/activitypub-the-evolution-of-rss\/","title":{"rendered":"ActivityPub &#8211; The evolution of RSS"},"content":{"rendered":"\n<p>Dave Winer (<a rel=\"mention\" class=\"u-url mention\" href=\"https:\/\/mastodon.social\/@davew\">@davew<\/a>) stellt (sich) auf <a href=\"http:\/\/scripting.com\/2024\/04\/04\/143706.html\">seinem Blog<\/a> und auf <a href=\"https:\/\/mastodon.social\/@davew\/112213481032208332\">Mastodon<\/a> die Frage:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>What does ActivityPub does that RSS doesn&#8217;t?<\/p>\n<\/blockquote>\n\n\n\n<p>und nimmt vorweg:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Off the top of my head, it&#8217;s not the ability to syndicate, RSS already does that. I can follow anyone on any server.<\/p>\n<\/blockquote>\n\n\n\n<p>Es macht nat\u00fcrlich Sinn, erstmal zu kl\u00e4ren was RSS ist und kann, um auf die Vorteile von ActivityPub einzugehen!<\/p>\n\n\n\n<p>Also RSS steht f\u00fcr &#8222;Really Simple Syndication&#8220; und ist eine Art &#8222;Digitale Einbahnstra\u00dfe&#8220;, so zu sagen der Newsletter oder Podcast f\u00fcr Texte auf Webseiten. Und weil es dem Podcast so \u00e4hnlich ist (und eigentlich auch dessen technische Basis) nennt es Dave Winer auch neuerdings &#8222;<a href=\"https:\/\/textcasting.org\/\">Textcasting<\/a>&#8222;, was ich gro\u00dfartig finde!<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Applying the philosophy of podcasting to text.<\/p>\n<\/blockquote>\n\n\n\n<p>Und technisch gesehen ist das auch der gro\u00dfe Unterschied zu ActivityPub. W\u00e4hrend ich bei Textcasting, Texte nur abonnieren kann, habe ich durch ActivityPub auch einen R\u00fcckkanal, der mir erm\u00f6glicht, die Texte auch zu liken, mit meinen <s>Freunden<\/s> Followern zu teilen und zu kommentieren!<\/p>\n\n\n\n<p>In den Kommentaren zu Daves <a href=\"https:\/\/mastodon.social\/@davew\/112213481032208332\" data-type=\"link\" data-id=\"https:\/\/mastodon.social\/@davew\/112213481032208332\">Mastodon Post<\/a> wird auch fast ausschlie\u00dflich \u00fcber diese technischen Aspekte diskutiert. Es geht um Push vs. Pull und immer wieder darum, dass RSS ja eigentlich vollkommen ausreichend und viel simpler ist.<\/p>\n\n\n\n<p><a rel=\"mention\" class=\"u-url mention\" href=\"https:\/\/manton.org\/activitypub\/manton\">@manton<\/a> fasst es ganz gut zusammen:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>I think RSS + Webmention (for sending replies) gets you 90% of the way there. ActivityPub does provide a comprehensive framework for the rest, though, and perhaps follows modern social network conventions more closely, e.g. liking posts, approving follows.<\/p>\n<cite><a href=\"https:\/\/micro.blog\/manton\/34864514\">https:\/\/micro.blog\/manton\/34864514<\/a><\/cite><\/blockquote>\n\n\n\n<p>Aber ist die Technik das, was hier wirklich den Unterschied macht?<\/p>\n\n\n\n<p>Die Diskussion erinnert mich sehr an den RSS vs. Atom &#8222;War&#8220;, von dem <a rel=\"mention\" class=\"u-url mention\" href=\"https:\/\/fed.brid.gy\/r\/https:\/\/tantek.com\/\">@tantek.com<\/a> in einem <a href=\"https:\/\/youtu.be\/FNr0JNwsLy8?feature=shared&amp;t=1021\">IndieWeb Vortrag spricht<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n\t\t<div class=\"embed-privacy-container is-disabled embed-youtube\" data-embed-id=\"oembed_adf4ce6087c15db353a6a2e3123a90f3\" data-embed-provider=\"youtube\" style=\"background-image: url(https:\/\/notiz.blog\/wp-content\/uploads\/embed-privacy\/thumbnails\/youtube-FNr0JNwsLy8-hqdefault.jpg?ver=1.12.3); aspect-ratio: 700\/394;\">\t\t\t\t\t\t<button type=\"button\" class=\"embed-privacy-enable screen-reader-text\">\u201eTantek \u00c7elik &#8211; The once and future IndieWeb\u201c von YouTube anzeigen<\/button>\t\t\t\t\t\t<div class=\"embed-privacy-overlay\">\t\t\t\t<div class=\"embed-privacy-inner\">\t\t\t\t\t<div class=\"embed-privacy-logo\" style=\"background-image: url(https:\/\/notiz.blog\/wp-content\/plugins\/embed-privacy\/assets\/images\/embed-youtube.png?ver=1.12.3);\"><\/div>\t\t<p>\t\tHier klicken, um den Inhalt von YouTube anzuzeigen.\t\t\t\t\t<br>\t\t\t\t\tErfahre mehr in der <a href=\"https:\/\/policies.google.com\/privacy?hl=de\" target=\"_blank\">Datenschutzerkl\u00e4rung von YouTube<\/a>.\t\t<\/p>\t\t<p class=\"embed-privacy-input-wrapper\">\t\t\t<input id=\"embed-privacy-store-youtube-adf4ce6087c15db353a6a2e3123a90f3\" type=\"checkbox\" value=\"1\" class=\"embed-privacy-input\" data-embed-provider=\"youtube\">\t\t\t<label for=\"embed-privacy-store-youtube-adf4ce6087c15db353a6a2e3123a90f3\" class=\"embed-privacy-label\" data-embed-provider=\"youtube\">\t\t\t\tInhalt von YouTube immer anzeigen\t\t\t<\/label>\t\t<\/p>\t\t\t\t\t\t<\/div>\t\t\t\t\t\t\t\t<div class=\"embed-privacy-footer\"><span class=\"embed-privacy-url\"><a href=\"https:\/\/youtu.be\/FNr0JNwsLy8?t=1023\">\u201eTantek \u00c7elik &#8211; The once and future IndieWeb\u201c direkt \u00f6ffnen<\/a><\/span><\/div>\t\t\t<\/div>\t\t\t\t\t\t<div class=\"embed-privacy-content\">\t\t\t\t<script>var _oembed_adf4ce6087c15db353a6a2e3123a90f3 = '{\\\"embed\\\":\\\"&lt;iframe title=&quot;Tantek &Ccedil;elik - The once and future IndieWeb&quot; width=&quot;700&quot; height=&quot;394&quot; src=&quot;https:\\\\\/\\\\\/www.youtube-nocookie.com\\\\\/embed\\\\\/FNr0JNwsLy8?start=1023&amp;feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen&gt;&lt;\\\\\/iframe&gt;\\\"}';<\/script>\t\t\t<\/div>\t\t<\/div>\t\t\n<\/div><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>I saw the best minds of my time waste our time arguing about syndication formats, arguing about plumbing, user don&#8217;t care about plumbing but for some reason we thought that that mattered, we thought that actually really mattered which XML tags to use in RSS versus Atom. [&#8230;] So we focused on the wrong things we argued about plumbing instead of user experience.<\/p>\n<cite><a href=\"https:\/\/youtu.be\/FNr0JNwsLy8?feature=shared&amp;t=1021\">Tantek \u00c7elik &#8211; The once and future IndieWeb<\/a><\/cite><\/blockquote>\n\n\n\n<p>Vielleicht kommt man mit RSS, WebSub und Webmentions auf ein relativ \u00e4hnliches Ergebnis und es ist technisch gesehen wahrscheinlich auch etwas einfacher umzusetzen&#8230; Aber sind RSS und ActivityPub wirklich so weit auseinander?<\/p>\n\n\n\n<p>F\u00fcr mich ist ActivityPub einfach nur die logische Weiterentwicklung, oder auch die n\u00e4chste Generation von RSS. Wer sich die erste Version von <a href=\"https:\/\/www.w3.org\/TR\/activitystreams-core\/\">ActivityStreams<\/a> (das Format, welches ActivityPub benutzt um Aktivit\u00e4ten auszuzeichnen) etwas genauer ansieht, erkennt vielleicht ein alt bekanntes Format.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">entry<\/span> <span class=\"hljs-attr\">xmlns<\/span>=<span class=\"hljs-string\">\"http:\/\/www.w3.org\/2005\/Atom\"<\/span>\n       <span class=\"hljs-attr\">xmlns:activity<\/span>=<span class=\"hljs-string\">\"http:\/\/activitystrea.ms\/spec\/1.0\/\"<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">id<\/span>&gt;<\/span>tag:photopanic.example.com,2009:photo\/4352<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">id<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">title<\/span>&gt;<\/span>My Cat<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">title<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">published<\/span>&gt;<\/span>2010-11-02T15:29:00Z<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">published<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">link<\/span> <span class=\"hljs-attr\">rel<\/span>=<span class=\"hljs-string\">\"alternate\"<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"text\/html\"<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"...\"<\/span> \/&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">activity:object-type<\/span>&gt;<\/span>photo<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">activity:object-type<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">activity:verb<\/span>&gt;<\/span>post<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">activity:verb<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">entry<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>ActivityStreams wurden 2011 als <a href=\"https:\/\/activitystrea.ms\/specs\/atom\/1.0\/\">Namespace f\u00fcr Atom<\/a> definiert um RSS\/Atom Feeds mit Informationen anzureichern, die man aus den sozialen Netzwerken kennt. Das ist haupts\u00e4chlich der <code>object-type<\/code> um neben Texten auch Bilder oder Videos auszuzeichnen, und <code>verb<\/code> um klar zu machen um was f\u00fcr eine Aktion es sich genau handelt.<\/p>\n\n\n\n<p><a href=\"https:\/\/notiz.blog\/tag\/ostatus\/\">OStatus<\/a>, der Vorg\u00e4nger von ActivityPub, <a href=\"https:\/\/notiz.blog\/2010\/03\/05\/ostatus-the-next-generation-of-openmicroblogging\/\">benutzte \u00fcbrigens genau dieses Format um Aktivit\u00e4ten auszuzeichnen<\/a>!<\/p>\n\n\n\n<p>Erst 6 Jahre sp\u00e4ter wurde die <a href=\"https:\/\/www.w3.org\/TR\/activitystreams-core\/\">Version 2.0<\/a> als reines JSON Format ver\u00f6ffentlicht, was aber auch Sinn macht, da JSON das Format ist, welches moderne APIs eben sprechen.<\/p>\n\n\n\n<p>Das hei\u00dft ActivityStreams ist im Prinzip eine moderne Form von RSS und ActivityPub ist einfach &#8222;nur&#8220; ein <a href=\"https:\/\/en.wikipedia.org\/wiki\/Publish%E2%80%93subscribe_pattern\">PubSub System<\/a> welches drumherum gebaut wurde.<\/p>\n\n\n\n<p>Aber zur\u00fcck zur Usability!<\/p>\n\n\n\n<p>Die Frage ist f\u00fcr mich nicht RSS oder ActivityPub&#8230; Die wesentlich interessantere Frage ist: Feed-Reader oder Mastodon?<\/p>\n\n\n\n<p>Die RSS oder <a href=\"https:\/\/indieweb.org\/\">IndieWeb Community<\/a> (und ich z\u00e4hle mich zu beiden, es geht hier nicht um Blaming) hat bisher leider kein massentaugliches Tool etabliert, welches mit der Usability und Reichweite von Mastodon (und Mastodon ist hier nur exemplarisch f\u00fcr eine Fediverse Platform&#8230; Pixelfed, Misskey und andere machen einen \u00e4hnlich guten Job) mithalten kann. Mastodon erm\u00f6glicht das dezentrale folgen, abonnieren, kommentieren, liken und sharen in einer simplen Oberfl\u00e4che. Kein RSS-Reader, den man zum Kommentieren verlassen muss und kein <a href=\"https:\/\/indieweb.org\/reader\">IndieWeb-Reader<\/a>, der eine eigene Webseite mit diversen Login- und Ping-Mechanismen voraussetzt!<\/p>\n\n\n\n<p>Mastodon zeigt au\u00dferdem sehr deutlich dass Technik austauschbar ist, immerhin ging die Plattform 2016 mit OStatus an den Start <a href=\"https:\/\/notiz.blog\/2019\/08\/16\/farewell-ostatus\/\">und schwenkte erst zwei Jahre sp\u00e4ter auf ActivityPub<\/a>!<\/p>\n\n\n\n<p>Ich besch\u00e4ftige mich jetzt seit ungef\u00e4hr +\/-15 Jahren mit dem Thema, welches man heute als Fediverse oder IndieWeb zusammen fassen w\u00fcrde, und habe auch ein gutes Jahrzehnt an Arbeit in diverse <a href=\"https:\/\/github.com\/search?q=topic%3Aindieweb+owner%3Apfefferle&amp;type=repositories\">IndieWeb Projekte<\/a> gesteckt, aber Mastodon und ActivityPub sind in ihren Auswirkungen bisher konkurrenzlos!<\/p>\n\n\n\n<p>Dank Mastodon und ActivityPub habe ich wieder <a href=\"https:\/\/notiz.blog\/2024\/04\/22\/its-a-thing\/#comments\">bis zu 50 Kommentare auf einen einzigen Blog-Post<\/a> (Likes und Boosts nicht mit gez\u00e4hlt) w\u00e4hrend \u00fcber RSS (gemessen an Kommentaren \u00fcber das WordPress Formular) und Webmentions vielleicht eine Reaktion im Monat kommt.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dave Winer (@davew) stellt (sich) auf seinem Blog und auf Mastodon die Frage: What does ActivityPub does that RSS doesn&#8217;t? und nimmt vorweg: Off the top of my head, it&#8217;s not the ability to syndicate, RSS already does that. I can follow anyone on any server. Es macht nat\u00fcrlich Sinn, erstmal zu kl\u00e4ren was RSS [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"webmentions_disabled_pings":false,"webmentions_disabled":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"federated","footnotes":""},"categories":[2],"tags":[1080,860,5171,404,840,103,1967],"class_list":{"0":"post-25230","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-web","7":"tag-activitypub","8":"tag-activitystreams","9":"tag-fediblog","10":"tag-json","11":"tag-pubsubhubbub","12":"tag-rss","13":"tag-websub","14":"h-entry","15":"hentry"},"_links":{"self":[{"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/posts\/25230","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/comments?post=25230"}],"version-history":[{"count":5,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/posts\/25230\/revisions"}],"predecessor-version":[{"id":25413,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/posts\/25230\/revisions\/25413"}],"wp:attachment":[{"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/media?parent=25230"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/categories?post=25230"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/tags?post=25230"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}