pubsubhubbub-logoSeit ein paar Wochen scheint die Version 0.4 von PubSubHubbub relativ stabil zu sein… immerhin so stabil, dass Google und Superfeedr ihre Hubs an die neue Spec angepasst haben.

Die wesentlichen Unterschiede zu der Vorgängerversion sind:

  • Alle Datentypen werden unterstützt: Neben RSS/Atom können jetzt auch vCards, beliebige XML oder JSON Datein oder auch Bilder ge-push-t werden
  • Statt HTML/Atom-Links werden HTTP-Link-Header benutzt
  • Der Pubslisher-Prozess ist nicht mehr über die Spezifikation definiert

Für die zwei großen Hubs sollte es reichen wenn ihr eure Feed-<link />s („hub“ und „self“):

<?xml version="1.0"?>
<atom:feed>

  <link rel="hub" href="http://myhub.example.com/endpoint" />
  <link rel="self" href="http://publisher.example.com/happycats.xml" />

</atom:feed>

…zusätzlich über die HTTP-Header ausliefert:

HTTP/1.1 200 OK
Date: Tue, 03 Apr 2012 08:02:19 GMT
Content-Type: text/html
Content-Length: 11261
Link: <http://http://myhub.example.com/endpoint>; rel="hub"
Link: <http://publisher.example.com/happycats.xml>; rel="self"

Leider ist die Version 0.4 aber nicht 100% abwärts-kompatibel… Die wahrscheinlich größte (und für mich enttäuschendste) Änderung ist das bewusste Weglassen des Publisher-Prozesses:

The publisher MUST inform the hubs it previously designated when a topic has been updated. The hub and the publisher can agree on any mechanism, as long as the hub is eventually able send the updated payload to the subscribers.

Auf der einen Seite kann das ein enormer Vorteil für Publisher sein, da Hubs in Zukunft auch per E-Mail, SMS, Pingbacks/Trackbacks oder XMPP über Updates informieren werden könnten. Auf der anderen Seite ist es aber auch sehr Wahrscheinlich, dass man für jedes v0.4 Hub eine individuelle Implementierung benötigt. Bisher unterstützen beide großen Hubs (Google und Superfeedr) aber weiterhin das alte Verfahren, also kein Grund sich jetzt schon Sorgen zu machen…

Alles in allem finde ich die Änderungen aber ganz nett und hoffe dass „Polling“ bald der Vergangenheit angehört…

Feed Icon…ich hab’s ja bisher immer verbummelt oder verpasst:

Aber jetzt, wo Google seinen Reader dicht macht, kann ich’s endlich auch mal schreiben: RSS ist tot!

Erst filtern, dann abonnieren!Die Informationsflut im Internet nimmt immer mehr zu und FeedReader bieten bisher keine wirkliche Möglichkeit diese Informationen sinnvoll zu filtern und da man nicht wirklich (zeitnah) Einfluss auf die Weiterentwicklung von NetNewsWire, Google Reader & Co. hat, bleibt nur noch eins: Erst filtern, dann abonnieren!

NoisePress erlaubt Seitenbesucher, einen RSS/ATOM-Feed mit Hilfe von APML vorzufiltern.

(Zum ausprobieren braucht man ein APML-Profil. Wer keines hat, sollte sich entweder das WordPress Plugin installieren oder heimlich Carstens Profil benutzen 😉 )

Warum mit APML filtern?

Man könnte natürlich auch mit WordPress-Bordmitteln eine Menge Rauschen ausfiltern, und wirklich nur das abonnieren was gerade wichtig ist:

Das Problem: Ändert sich dieses Interesse, müssen alle Feeds mühsam aussortiert (und neue gesammelt) werden. Außerdem besteht die Gefahr, dass einige spannende Themen, die nicht genau die abonnierte Kategorie/den abonnierten Tag besitzen, durch das Raster fallen können.

Das Prinzip von NoisePress: APML ist eine Art semantische Tag-Clound die das Interesse einer Person widerspiegelt. Das Interessens-Profil wird in der Regel automatisch generiert und sollte sich somit auch den diversen Interessensveränderungen anpassen.

Am Beispiel WordPress Plugin: Das Plugin erstellt ein APML-File anhand der Häufigkeit der verwendeten Tags und Kategorien. Schreibt jemand viel über OpenID, kann man davon ausgehen, dass er das Thema für wichtig hält. Ändert sich der Fokus des Blogs, wird OpenID auch im APML-Feed immer irrelevanter.

Hört sich nach Geek-Zeugs an?

Richtig! 🙂 …aber NoisePress ist auch erst einmal nur ein Test ob meine Idee überhaupt funktioniert! Im besten Fall soll der User von all der Technik gar nichts mitbekommen. Ich hoffe dass sich Firefox‘ Account Manager oder XAuth schnell weiter entwickeln und ich eine dieser Techniken für NoisePress missbrauchen könnte.

Ich würde mich übrigens sehr über ein bisschen Feedback freuen!

Durch einen Artikel auf ReadWriteWeb (5 Great YQL One-Liners) bin ich nach langer Zeit mal wieder auf Yahoos YQL-Plattform gelandet und habe nicht schlecht gestaunt, was die Yahoo Query Language mittlerweile alles leistet (mehr über YQL hier). Ich hatte z.B. keine Ahnung, dass man auch eigene table definition schreiben kann und dass es auch schon eine ziemlich fleißige Community um diese Definitionen gibt.

Meine Favoriten sind:

Microformats

select * from microformats where
url='http://wait-till-i.com'

…findet diverse Microformats. » Direct Link

Mehr dazu hier: SELECT * FROM microformats

OpenID

select * from openid.discover where
normalizedId="http://www.yahoo.com/"

…klassische OpenID-Discovery. » Direct Link

select * from openid.yadis where
uri="http://www.yahoo.com/"

…YADIS-Discovery. » Direct Link

…und es gibt noch ’ne Reihe anderer OpenID Queries… es sollte sogar möglich sein einen kompletten OpenID-Client mit YQL zu bauen.

OAuth

select * from oauth where uri='http://example.com'
and consumerKey='asd123' and consumerSecret='zxc456'
and callbackUri='http://example.com';

…sendet einen OAuth-Request. » Direct Link

pubsubhubbub

insert into pubsubhubbub.publisher
(hub_url, topic_url) values
('http://pubsubhubbub.appspot.com/publish',
'http://developer.yahoo.com')

…sendet ein Update an das angegebene Hub. » Direct Link

Webfinger

select * from webfinger where
account='pfefferle@gmail.com'

…Webfinger-Discovery. » Direct Link

OpenSocial

select * from opensocial.people

…sendet eine OpenSocial People-Anfrage. » Direct Link

Social Graph API

select * from socialgraph.lookup where
q = "notiz.blog" AND edo = "1"

…ermöglicht Zugriff auf Googles Social Graph API. » Direct Link

Atom

select * from atom where
url='http://notiz.blog/feed/atom'

…interpretiert Atom-Feeds mit allen möglichen Erweiterungen, beispielsweise der ActivityStreams-Extension. » Direct Link

Vielleicht bekomm‘ ich die Tage ja auch mal eine Query zusammen 🙂

Inspiriert durch Michromeformats, hab ich mich auch mal an ein Chrome-Addon gemacht 🙂

Das Addon erkennt auf der Seite verlinkte ActivityStrea.ms:

<link rel="activitystream"
      type="application/atom+xml"
      href="..." />

oder:

<link rel="alternate"
      class="activitystream" 
      type="application/atom+xml"
      href="..." />

Kein Hexenwerk, aber immerhin mal ein Anfang 🙂 Falls euch noch ein paar Features einfallen, immer raus damit.

OStatus LogoDie OpenMicroBlogging-Spezifikation war eine echt nette Idee und hat auch gar nicht schlecht funktioniert… zwar etwas umständlich aber immerhin ein Anfang.

Nach fast zwei Jahren arbeitet StatusNet (früher laconi.ca und Erfinder von OMB) jetzt an einem Nachfolger. Die neue Spezifikation heißt OStatus und ist eine Art „Best Off“ bestehender Open Web Standards:

…und wenn ich es richtig verstanden habe, scheint das in der aktuellen Version von StatusNet1 (Version 0.9) auch schon ansatzweise zu funktionieren.

Plattformübergreifend Echtzeitkommunikation auf Basis offener Standards… schöne neue Welt 🙂

1 StatusNet (vormals Laconica) ist eine in PHP entwickelte freie Software für Mikro-Blogging-Dienste, die den OpenMicroBlogging-Standard implementiert. Damit ermöglicht StatusNet eine offene Kommunikation zwischen Online-Communitys mit zu Twitter vergleichbarer Funktionalität. (via Wikipedia)

Google Buzz

Google startet mit Google Buzz eine Art Activity Stream integriert in Google Mail.

Google Buzz is a new way to share updates, photos, videos and more, and start conversations about the things you find interesting.

Wie man an Facebook sieht, scheint das Phänomen Activity Stream recht beliebt zu sein, immerhin war friendfeed dem Community-Giganten knapp 50 Millionen Dollar wert. Im Gegensatz zu dem eher geschlossenen Facebook macht Google mit seinem Activity Stream aber mal wieder alles richtig… Eigene Feeds und Feeds der Kontakte werden über die Social Graph API (Microformats/XFN) automatisch erkannt und die Liste der unterstützten offenen Standards ist beeindruckend:

  • Atom/RSS
  • MediaRSS
  • PubSubHubbub
  • Social Graph API (Microformats)
  • Activity Streams
  • AtomPub
  • OAuth
  • Salmon
  • Webfinger

Als nächstes wird der Buzz sicherlich auch fester Bestandteil der Google Profilseite die sich immer mehr zu einer echten Online Identität mausert!

Zuerst die Social Search, dann Google Buzz… mal gespannt was Google sonst noch alles sozialisiert…

Weiterlesen

Problem:

Problem: Cross-posting and duplicates
Quelle: Lifestream.fm

Lösung: Atom Cross-posting Extensions von Martin Atkins

<entry>
  <title>Using Microformats: Gateway to the Semantic Web | Professional Communication Society</title>
  <link rel="alternate" href="http://pfefferle.yiid.com/activity/11891"></link>
  <updated>2009-10-06T13:10:11Z</updated>
  <author>
    <name>Matthias Pfefferle</name>
  </author>
  <id>tag:www.yiid.com,2009-10-06:/activity/11891</id>
  <summary type="text">...</summary>
  <content type="html"><![CDATA[...]]></content>
  
  <crosspost:source>
    <id>http://delicious.com/url/29ff30b281955db394f2c399c028c480#pfefferle</id>
    <link rel="alternate" href="http://delicious.com/url/29ff30b281955db394f2c399c028c480#pfefferle" type="text/html" />
  </crosspost:source>
  
</entry>

Wenn ihr so kommentierfaul seid, dann bin ich mal schreibfaul 😉

Ich habe mal ein kleines Plugin geschrieben welches den WordPress-Atom-Feed mit der ActivityStream-Syntax erweitert.

 <entry>
  <id>http://notiz.blog/?p=1775</id>
  <author>
    <name>Matthias Pfefferle</name>
    <uri>http://notiz.blog</uri>
  </author>
  <...>
  <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
  <activity:object>
    <activity:object-type>http://activitystrea.ms/schema/1.0/blog-entry</activity:object-type>
    <activity:object-type>http://activitystrea.ms/schema/1.0/article</activity:object-type>
    <id>tag:notiz.blog,2009-07-13:/post/1775</id>
    <title type="html"><![CDATA[Matthias Pfefferle posted a new blog-entry]]></title>
    <link rel="alternate" type="text/html" href="http://notiz.blog/2009/07/14/webstandards-kolumne/" />
  </activity:object>
</entry>

Die Syntax ist dazu gedacht, dem Feed-Parser/Feed-Reader zu erklären um was für einen Eintrag es sich handelt. Bei WordPress sind die <entry />s ausschließlich Blogposts/Artikel…

<activity:object-type>http://activitystrea.ms/schema/1.0/blog-entry</activity:object-type>
<activity:object-type>http://activitystrea.ms/schema/1.0/article</activity:object-type>

…die gepostet wurden.

<activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>

Und für die Dienste wie NoseRub, die die Aktivität gerne in einen Satz packen, gibt’s das ganze auch noch in Prosa.

<title type="html"><![CDATA[Matthias Pfefferle posted a new blog-entry]]></title>

Das ActivityStream Schema definiert übrigens noch ’ne ganze Reihe an weiteren Objekten und Verben, die auf alle möglichen Aktionen im Netz passen. Falls ihr also noch welche findet, die zu WordPress passen könnten… lasst es mich wissen 😉

Es gibt leider aber auch ein paar Probleme mit der Syntax und diversen Feed-Readern, die das zweite <title /> im <activity-object /> mit interpretieren und dann beide Titel ausgeben… aber da ja auch MySpace und Facebook die ActivityStream-Syntax einsetzen ist dieser Fehler sicherlich bald bei jedem Feed-Reader behoben 😉

Viel Spaß beim ausprobieren!

In den letzten Tagen hat Facebook einige so spannende Ankündigungen gemacht, dass ich sogar kurz mal meinen Umzugsstress unterbrechen und darüber bloggen muss 🙂

Die Facebook Open Stream API

Die erste Ankündigung betrifft Facebooks Activity Stream der spätestens seit dem letzten Redesign das zentrale Feature von Facebook geworden zu sein scheint. Mit der Open Stream API führt Facebook diese Strategie fort und öffnet die Aktivitäten auch für externe Applikationen und Services. Besonders lobenswert ist, dass Facebook neben einer proprietären API (zum lesen und schreiben) auch einen Atom-Feed+Activity Extension1 zum weiterverarbeiten des Activity Streams anbietet. Leider ist aber auch der Atom-Feed über den Facebook-Authentifizierungsprozess geschützt und kann dadurch nicht ohne weiteres mit z.B. einem Feedreader abonniert werden.

Dass Facebook die proprietäre Open Stream API entwickelt, statt die OpenSocial RESTFul API einzusetzen ist leider zu verstehen, immerhin ist OpenSocial als Googles Antwort auf die Facebook-Apps entstanden. Schade!

OpenID Login

Als Facebook letztes Jahr der OpenID-Foundation beigetreten ist, um sie speziell in Sachen Usability/User Experience zu unterstützt, hatte ich natürlich große Hoffnung, dass Facebook in naher Zukunft auch selbst auf OpenID umstellen würde. Seit Montag ist jetzt klar, dass Facebook an einem OpenID-Login arbeitet, der hoffentlich auch irgendwann ein fester Bestandteil von Facebook-Connect wird.

Aber Facebook wäre nicht Facebook, wenn sie einfach nur einen klassischen OpenID-Login umsetzen würden. Wie Carsten Pötter auf SpreadOpenID beschreibt, plant Facebook eine Art OpenID-Auto-Discovery:

Facebook will automatically check to see if users have logged into any OpenID account when they hit Facebook.com, and give them the option to automatically login to Facebook without entering new information.

Leider ist dieses Feature, wohl nicht global für alle OpenID-Provider und definitiv nicht ohne Directed Identity möglich… aber man wird sehen (vielleicht spinn ich hier im Blog demnächst mal ein paar Szenarien (Worst-Cases) durch).


1 Die Atom Activity Extensions erweitert die Atom Spezifikation um eine Aktivitäten-Syntax. Die Idee entstand im Rahmen des DiSo-Projekts und wird unter anderem auch schon von MySpace und YIID unterstützt. Darauf werde ich demnächst sicherlich noch etwas detaillierter eingehen.