anyMeta 4.19.3 - Atom module 0.3.2 2012-02-09T13:53:36+01:00 http://www.mediamatic.nl/feed/atom/386/nl Open–CI blog http://www.mediamatic.nl/id/3416 2010-11-29T16:30:38+01:00 Open-CI: Notifications <p>Open-CI is about federating social networks, enabling users to share information between sites and use one user account to create works or create connections. In anyMeta everything is represented by 'things' that areconnected by 'edges'. Things could be persons, articles, events, organisations, etc. Edges always have a predicate to specify the nature of the connection. Examples include: participant, author, knows and likes.</p> <p>To log onto another site, some representation of the person is required on that site. The same goes for when connections are made to things that are not on thesame site as the subject. To facilitate this, anyMeta also has things that are marked as non-authoritative. These are incomplete copies of one original thing (that is authoritative on its 'home' site) are mostly similar to authoritative things, but always refer to their original and have no page of their own. They basically act as proxies to their original.</p> <p>Every thing in anyMeta has a corresponding XMPP Publish-Subscribe node. Using that node, one can receive instant notification of changes to their associated thing. This is similar to providing HTTP-based Atom feeds, which anyMeta also does, but uses a push model, instead of the polling nature of regular feeds.</p> <p>Whenever a local representation of a foreign thing is required, a non-authoritative thing, that refers to that foreign thing, is created. The public data and outgoing edges of the foreign thing are retrieved and subsequently kept up-to-date by 'subscribing' to the node that corresponds to the foreign thing.</p> <p>For example, if I log into Picnic Network with my Mediamatic account, a non-authoritative person thing is created at Picnic Network, pointing to the original at Mediamatic. Every time I show up on pages, as a friend or an author of an article or as a participant of an event, this local representation is used for the title, a short description and a thumbnail image. Now, when I change my description, I do this at Mediamatic, and a notification of that change is sent out to all subscribers, among which the Picnic Network site. The latter than updates its local representation of my person thing.</p> <p>Similarly, for creating connections, if I add myself as a participant to a particular event, a new edge is created from my person thing to the thing that represents the event. Outgoing edges always belong to the subject of the connection, so if that event thing is at Picnic Network, the site will ask the Mediamatic site to create that edge. If the event has no local representation at the Mediamatic site, yet, it will be created by subscribing to it. Then, because the edge was created, a new notification for my change person thing is sent out to Picnic Network. This notification includes the new connection, so that Picnic Network can now show that I have added myself as partipant.</p> <h2>XMPP Notifications</h2> <p>The interchange format used in the cross-site notifications in Open-CI is the Atom Syndication Format. Atom is an XML language used for web feeds, and comes in to forms: feed documents and entry documents. The former is mostly used for the above mentioned HTTP poll-style feeds (that usually have more than one entry), while we use the latter for two things: per-thing HTTP feeds and our XMPP publish-subscribe notifications. The following is a an example of such a document as part of a message a subscriber to the publish-subscribe node for my person thing would get:</p> <pre> &lt;message to=&quot;ralphm@ik.nu&quot; from=&quot;pubsub.mediamatic.nl&quot;&gt; &lt;event xmlns=&quot;http://jabber.org/protocol/pubsub#event&quot;&gt; &lt;items node=&quot;generic/169e9f07-0fda-4583-a5cc-df142445b634&quot;&gt; &lt;item id=&quot;current&quot;&gt; &lt;entry xmlns=&quot;http://www.w3.org/2005/Atom&quot; xmlns:anymeta=&quot;http://mediamatic.nl/ns/anymeta/&quot; xml:lang=&quot;nl&quot;&gt; &lt;id&gt;http://www.mediamatic.net/id/71101226-d816-102a-b311-0014385010dc&lt;/id&gt; &lt;updated&gt;2009-02-22T21:55:59+01:00&lt;/updated&gt; &lt;link href=&quot;http://www.mediamatic.net/person/24879/nl&quot; type=&quot;text/html&quot; rel=&quot;alternate&quot;/&gt; &lt;link href=&quot;http://www.mediamatic.net/foaf/24879&quot; type=&quot;application/rdf+xml&quot; rel=&quot;alternate&quot;/&gt; &lt;title&gt;Ralph Meijer&lt;/title&gt; &lt;subtitle&gt;7' of protocol design&lt;/subtitle&gt; &lt;link href=&quot;http://fast.mediamatic.nl/f/sjnh/icon/287/24879-480-480-crop-.jpg&quot; type=&quot;image/jpeg&quot; rel=&quot;enclosure&quot; title=&quot;FIGURE&quot;/&gt; &lt;author&gt; &lt;name&gt;-&lt;/name&gt; &lt;/author&gt; &lt;link anymeta:symbolic_name=&quot;FIGURE&quot; title=&quot;ralphm2.jpg&quot; anymeta:predicate_title=&quot;figure&quot; href=&quot;http://www.mediamatic.net/id/4bbf91a8-d817-102a-b311-0014385010dc&quot; rel=&quot;http://xmlns.com/foaf/0.1/img&quot;/&gt; &lt;link anymeta:symbolic_name=&quot;KNOWS&quot; title=&quot;Nadya Peek&quot; anymeta:predicate_title=&quot;knows&quot; href=&quot;http://www.mediamatic.net/id/466b7b38-b95e-1028-8877-00baa71471f7&quot; rel=&quot;http://purl.org/vocab/relationship/knowsOf&quot;/&gt; &lt;link anymeta:symbolic_name=&quot;KNOWS&quot; title=&quot;Jyri Engeström&quot; anymeta:predicate_title=&quot;knows&quot; href=&quot;http://www.picnicnetwork.org/id/014d2dde-55a3-102a-b311-0014385010dc&quot; rel=&quot;http://purl.org/vocab/relationship/knowsOf&quot;/&gt; &lt;link anymeta:symbolic_name=&quot;INTEREST&quot; title=&quot;Federating Social Networks / SNES 00&quot; anymeta:predicate_title=&quot;interested in&quot; href=&quot;http://www.mediamatic.net/id/176e1a12-f074-102a-b311-0014385010dc&quot; rel=&quot;http://xmlns.com/foaf/0.1/interest&quot;/&gt; &lt;link anymeta:symbolic_name=&quot;INTEREST&quot; title=&quot;Mobile Massage Couch&quot; anymeta:predicate_title=&quot;interested in&quot; href=&quot;http://www.mediamatic.net/id/a704ae47-d84c-102b-b6db-0014385010dc&quot; rel=&quot;http://xmlns.com/foaf/0.1/interest&quot;/&gt; &lt;link anymeta:symbolic_name=&quot;PARTICIPANT&quot; title=&quot;Kom je ook?&quot; anymeta:predicate_title=&quot;Participant&quot; href=&quot;http://www.mediamatic.net/id/6cb8fdae-aec2-102b-b6db-0014385010dc&quot; rel=&quot;http://purl.org/vocab/relationship/participantIn&quot;/&gt; &lt;link anymeta:date_start_acc=&quot;d&quot; anymeta:symbolic_name=&quot;WORKS_FOR&quot; title=&quot;Mediamatic Lab&quot; anymeta:predicate_title=&quot;My organisation&quot; href=&quot;http://www.mediamatic.net/id/c12c20fe-b95c-1028-8877-00baa71471f7&quot; anymeta:date_end_acc=&quot;d&quot; anymeta:date_start=&quot;2007-10-29T00:00:00+01:00&quot; rel=&quot;http://mediamatic.nl/ns/anymeta/2008/term/works_for&quot; anymeta:date_end=&quot;2007-10-29T23:59:59+01:00&quot;/&gt; &lt;category term=&quot;xmpp&quot;/&gt; &lt;category term=&quot;anymeta&quot;/&gt; &lt;category term=&quot;code&quot;/&gt; &lt;anymeta:kind&gt;PERSON&lt;/anymeta:kind&gt; &lt;/entry&gt; &lt;/item&gt; &lt;/items&gt; &lt;/event&gt; &lt;/message&gt; </pre> <p>A few notes. The node identifier here is a UUID that was chosen by the publish-subscribe service upon node creation, as requested by the site. In our case, the same item is just overwritten upon a change, so it is called 'current'. The atom entry document itself has an http link that redirects to an HTML rendering of my person, has my name as the title and further contains links to images, acquaintances, things of interest and events I participated in. Some of the things linked to, are local, some on other sites. These links<br/> correspond to the outgoing edges.</p> <h2>Discovery</h2> <p>Every time anyMeta wants to make a local, non-authoritative, copy of a remote thing, it needs to find out what node to subscribe to. Usually, it only knows some HTTP URI to the remote thing, and sometimes a title. To find out what XMPP publish-subscribe node represents a particular thing, each HTML representation contains a link element that points to the corresponding node. Any other site, or other entity, can just download the HTML page and find the link element that points tot the node, and then subscribe to that node. An example is:</p> <pre> &lt;link rel=&quot;xmpp.feed&quot; href=&quot;xmpp:pubsub.mediamatic.nl?;node=generic/169e9f07-0fda-4583-a5cc-df142445b634&quot; title=&quot;XMPP updates for this item&quot; /&gt; </pre> <p>The relationship here is 'xmpp.feed', and the linked resource is an XMPP URI that contains the Jabber ID of the publish-subscribe service (pubsub.mediamatic.nl) and the node identifier. In this case, it points to the same node as above.</p> <h2>Implementation</h2> <p>Currently, we use Idavoll as our publish-subscribe service. Idavoll is a server-side component that connects to a generic Jabber server. However, we could not use it directly. AnyMeta is written using PHP, which means that for each page request a PHP script is run, and if the page is done, the script ends. For XMPP, however, a persistent connection to the XMPP server is required.</p> <p>To remedy this, we added an HTTP interface to Idavoll, so that our PHP scripts can send HTTP requests to Idavoll for publishing items and subscribing to remote nodes. When subscribing to remote nodes, a callback URI is passed along, so that Idavoll can send a request to the callback URI as soon as it receives notifications for those subscriptions.</p> Ralph Meijer http://www.mediamatic.nl/id/347 ARTICLE text 1 http://www.mediamatic.nl/id/3391 2009-04-29T14:02:14+02:00 OpenCI: The current state How OpenCI combines technologies to create a federation of social networks <p>OpenCI, Mediamatic's <em>Open Community Infrastructure</em>, is an umbrella-name for a set of specifications which use Open Standards to create a federation of social networks.</p> <p>The article on <a href="http://www.mediamatic.nl/page/387/nl">the technology behind OpenCI</a> already explains which technologies are being used &quot;under the hood&quot;. However, it does not go into detail of the specific features of OpenCI and how these technologies are used to empower them.</p> <p>This article will outline the distinct features of OpenCI and will, for every feature, link to the specification document describing that feature in detail. The <a href="http://www.mediamatic.nl/openci">OpenCI specification</a> also collects all these documents.</p> <p>This article is based on <a href="http://tstsrv01.mediamatic.nl/~arjan/hyves/openci.html">the presentation about the current state of OpenCI</a>, given at a workshop at <a href="http://www.hyves.nl">Hyves</a>, on February 6, 2009.</p> <p>Open-CI currently implements the following features:</p> <!--[toc]--> <ul class='wikitoc'> <li class='wikitoc2'><a href='#178647676-1'>Trust-network of <em>Sister sites</em></a></li> <li class='wikitoc3'><a href='#178647676-2'>Rationale</a></li> <li class='wikitoc3'><a href='#178647676-3'>Implementation in AnyMeta</a></li> <li class='wikitoc2'><a href='#178647676-4'>Service Discovery</a></li> <li class='wikitoc2'><a href='#178647676-5'>Logging in to other sites: OpenID</a></li> <li class='wikitoc3'><a href='#178647676-6'>Implementation in AnyMeta</a></li> <li class='wikitoc2'><a href='#178647676-7'>Content-sharing</a></li> <li class='wikitoc3'><a href='#178647676-8'>Rationale</a></li> <li class='wikitoc3'><a href='#178647676-9'>Implementation in AnyMeta</a></li> <li class='wikitoc2'><a href='#178647676-10'>Phoning home (&quot;Teleport&quot;)</a></li> <li class='wikitoc3'><a href='#178647676-11'>Implementation in AnyMeta</a></li> <li class='wikitoc2'><a href='#178647676-12'>Cross-site updates</a></li> <li class='wikitoc2'><a href='#178647676-13'>Profile merging/migration</a></li> <li class='wikitoc3'><a href='#178647676-14'>Implementation in AnyMeta</a></li> <li class='wikitoc2'><a href='#178647676-15'>Update notifications</a></li> <li class='wikitoc2'><a href='#178647676-16'>Cross-site messaging</a></li> </ul> <!--[/toc]--> <h2><a name='178647676-1'></a>Trust-network of <em>Sister sites</em></h2> <h3><a name='178647676-2'></a>Rationale</h3> <p>Open-CI is about federating social networks by enabling users to share information between sites and use one account to do stuff on other websites.</p> <p>If you connect your website to an Open-CI network, first thing that you do is specify which sites you want to include in your network: which sites you trust.</p> <p>Typically, this would form a fully-connected graph of social networks, but it does not need to be: an <em>Open-CI lite</em> site could choose just to enable logons from some other sites, and not to provide user registration themselves. The <a href="http://www.ikrip.nl">IkRip</a> and <a href="http://travel.mediamatic.net">Mediamatic Travel</a> sites are example of such satellite sites.</p> <p>[image]</p> <h3><a name='178647676-3'></a>Implementation in AnyMeta</h3> <p>In AnyMeta, this functionality is implemented as a list of <em>sister sites</em> (as seen on the screenshot). For every site, a title is provided and the base URI for the other site. Besides that, an OAuth relation is made to the respective site. This OAuth relation is used for notification and cross-site messaging (see below).</p> <p>Every connected site shows up on the logon screen as an OpenCI sistersite, and from your site you can choose one of the other sites to login with.</p> <h2><a name='178647676-4'></a>Service Discovery</h2> <p>For the discovery of whether Open-CI sites have implemented a certain feature, we use <a href="http://xrds-simple.net/">XRDS-Simple</a>. This is a simple protocol which basically allows you to retrieve an endpoint URL given a &quot;service&quot; you want to use.</p> <p>The command</p> <pre> curl -s -L -H 'Accept: application/xrds+xml' http://mediamatic.net/ </pre> <p>will give you the XRDS document for the mediamatic.net domain.</p> <p>In the rest of this text, for every service that needs it, the service type URI will be given and AnyMeta's default endpoint URI as well.</p> <h2><a name='178647676-5'></a>Logging in to other sites: OpenID</h2> <p>When you use the dropdown box to login to the current site using an account from a connected Open-CI site, <a href="http://openid.net/developers/specs/">the OpenID 2.0 protocol</a> is used. The &quot;official&quot; protocol requires that for an OpenID logon, you need to specify your OpenID URL in a text box, but to enhance the user experience we decided to add the dropdown box which just submits the hostname of the sister site. XRDS is then used to discover the actual OpenID endpoint.</p> <h3><a name='178647676-6'></a>Implementation in AnyMeta</h3> <p>In AnyMeta, every person has automatically an OpenID identity, because every Open-CI site is an OpenID provider at the same time.</p> <h2><a name='178647676-7'></a>Content-sharing</h2> <h3><a name='178647676-8'></a>Rationale</h3> <p>The idea behind content sharing is that public information can be shared, so that semantic links can be made between items on different sites.</p> <h3><a name='178647676-9'></a>Implementation in AnyMeta</h3> <p>I</p> <h2><a name='178647676-10'></a>Phoning home (&quot;Teleport&quot;)</h2> <p>When you click a link on an item that is non-local (denoted by the little Open-CI icon next to the item's title), you are being redirected to the site the item originated from, the so-called &quot;authoritative source&quot;. </p> <p>You are being redirected because the only place where the full item can be viewed is at the authoritative site. Although its information (e.g., title) is being shared to other sites, an information item only has its own web page on the site it originates from.</p> <p>In the redirection of the authoritative source, we let the site you are redirected to know on which site your profile is located. This is done so that in the event that you want to do an action on that site (e.g. click the &quot;I like it&quot; button), that site knows where you are coming from, and thus will not attempt to log you in with a local profile, but will try an automatic OpenID logon at the originating site first.</p> <h3><a name='178647676-11'></a>Implementation in AnyMeta</h3> <p>When visiting a non-authoritiative link, say <a href="http://www.mediamatic.net/id/51627,">www.mediamatic.net/id/51627,</a> AnyMeta does the following:</p> <ul> <li>It will look up the authoritative resource URI, which is <a href="http://www.picnicnetwork.org/id/d5a12234-ba3e-102a-b311-0014385010dc">www.picnicnetwork.org/id/d5a12234-ba3e-102a-b311-0014385010dc</a></li> <li>Then it will check if it finds a &quot;Teleport&quot; service by looking at the XRDS service document which is related to this URI</li> <li>This service is indicated by the service type of <a href="http://mediamatic.nl/ns/anymeta/2008/service/teleport/incoming.">mediamatic.nl/ns/anymeta/2008/service/teleport/incoming.</a></li> <li>If such a service is found, it redirects to the found URI with the following arguments:<ul> <li>'uri' argument with the original resource URI, to redirect to</li> <li>'home_site' argument with the URI of the site on which the current user's profile is located</li> </ul> </li> <li>The other site then records this 'home_site' argument in its session, and redirects to the 'uri' argument.</li> </ul> <p>The next time the visiting user wants to do something on www.picnicnetwork.org and needs to logon for that action, this site knows that he was coming from www.mediamatic.net, and thus will start an OpenID logon process at the home site.</p> <h2><a name='178647676-12'></a>Cross-site updates</h2> <p>Cross-site updates come into play when a user wants to do things on a site on which he does not have an authoritative profile. In this section, we are always referring to a user which is logged in at www.picnicnetwork.org with his www.mediamatic.net account.</p> <p>The &quot;I like this&quot; button is a typical form of where a cross-site update will take place. In AnyMeta terms, an <em>edge</em> (connection) with the label &quot;interest&quot; will be made. This edge will be connected from the user with the www.mediamatic.net account to an item on the www.picnicnetwork.org site. Since the user is currently at www.picnicnetwork.org, this site needs to &quot;ask&quot; www.mediamatic.net to create this edge for him, since in AnyMeta only outgoing connections can be made, and edges are always owned by the outgoing party (the &quot;subject&quot;). The actual update URI is discovered over XRDS and executed using a on-the-fly acquired OAuth relation.</p> <p>For a cross-site update, AnyMeta now does the following:<br/> </p> <ul> <li>It will detect that an update is to be done on a non-authoritative item.</li> <li>It will then check if it finds a &quot;Cross-site update&quot; service by looking at the XRDS service document which is related to the item's URI</li> <li>This service is indicated by the service type of <a href="http://mediamatic.nl/ns/anymeta/2008/service/cross_site_update">mediamatic.nl/ns/anymeta/2008/service/cross_site_update</a></li> <li>If such a service is found, AnyMeta can continue with permission checking.</li> <li>In the OAuth registration it will lookup an OAuth key for the domain of the non-authoritative item (www.mediamatic.net in this case).</li> <li>If no such key is found, it will discover the <em>static consumer key</em> on www.mediamatic.net, and will redirect to the OAuth authorization URL</li> <li>Because www.mediamatic.net has www.picnicnetwork.org in his list of &quot;trusted sites&quot;, a request for the static consumer key will be automatically approved, without user interaction.</li> <li>The OAuth key is used in a call to the <em>cross site update</em> URL previously discovered, to do the actual update.</li> <li>After the update, a notification is shown to the user to let him know that it can take some time for the update to appear on www.picnicnetwork.org; because this update needs to be published over the XMPP channel.</li> </ul> <h2><a name='178647676-13'></a>Profile merging/migration</h2> <p>Within the OpenCI network, it is possible to move an account to a different web site. Besides that, it is possible to see on which Open-CI sites there are accounts similar to your current account, and merge those accounts into one. All of this can be done using a convenient drag 'n drop interface in which you can select which account you want to move or merge where.</p> <h3><a name='178647676-14'></a>Implementation in AnyMeta</h3> <h2><a name='178647676-15'></a>Update notifications</h2> <h2><a name='178647676-16'></a>Cross-site messaging</h2> - ARTICLE text 1 http://www.mediamatic.nl/id/2383 2008-01-03T15:30:20+01:00 Federating Social Networks What was it for? <p>I'm pretty tired of the fact that every time a new social network shows up on the internet, I end up picking a new user name, a new password, having to reconnect with all my friends, having to write a new profile description and having to upload a new profile picture. I'm pretty tired of copying my content from site to site, and I'm pretty tired of having to look at 5 different places to find out where, when, what, with who and what did it look like.</p> <p>Don't get me wrong, I &lt;3 the internet. I love all social objects and am completely addicted to all the services that dish them out to me. But still, somehow this should should be able to be made better.</p> <p>Luckily, I'm not the only one who thinks this. People have been working on bringing all kinds of things together, by working on things like OpenID for cross-platform authentication, OAuth for server to server authentication and OpenSocial for finding common ways to talk to social networks. At Mediamatic December 2007, we organized a workshop on Federating Social Networks, especially to exchange thoughts on how we can better use technology to share our online resources.</p> <p>At Mediamatic, we develop the content management system anyMeta, where any resource (photograph, article, event, person) is a thing. Any thing can have multiple relations such as author of, featured in, picture of, located in, etc. to other things. This ontological structure is now being converted from a custom made representation to standard XML-implemented RDF.</p> <p><span class="inline-image-wrapper ui_animateFigureCaption"><a href="http://www.mediamatic.nl/2385/nl/domain-model"> <img src="http://fast.mediamatic.nl/f/cnsk/image/422/2385-400-316.png" height="316" width="400" alt="" title="Domain model" playable="1"/> </a><span class="caption-inline"><span class="title"><a title="Vergroot afbeelding - Domain model - Mediamatic Lab" href="/2385/nl/domain-model">Domain model</a></span></span></span></p> <h2>What is it exactly that we want to do?</h2> <p>We have our life streams, which consist of works like photographs on flickr, presence from twitter or jaiku, articles from our blogs, etc. Then we have our personal websites, our work websites, websites of clubs or groups we belong to.</p> <h3>Share</h3> <p><span class="inline-image-wrapper ui_animateFigureCaption"><a href="http://www.mediamatic.nl/2386/nl/share-between-websites"> <img src="http://fast.mediamatic.nl/f/cnsk/image/970/2386-400-296.png" height="296" width="400" alt="" title="Share between websites" playable="1"/> </a><span class="caption-inline"><span class="title"><a title="Vergroot afbeelding - Share between websites - Mediamatic Lab" href="/2386/nl/share-between-websites">Share between websites</a></span></span></span></p> <p>We would like share articles, profiles and photographs with other sites. Not just the article itself, but also the tags and author relations.</p> <h3>Migrate</h3> <p>Sometimes we would like to just pack up and make a move from MySpace to Facebook without having to remake all those friends, comments and zombiebites. We want better data portability!</p> <h3>Search</h3> <p><span class="inline-image-wrapper ui_animateFigureCaption"><a href="http://www.mediamatic.nl/2387/nl/central-search"> <img src="http://fast.mediamatic.nl/f/cnsk/image/391/2387-281-400.png" height="400" width="281" alt="" title="Central search" playable="1"/> </a><span class="caption-inline"><span class="title"><a title="Vergroot afbeelding - Central search - Mediamatic Lab" href="/2387/nl/central-search">Central search</a></span></span></span> <br/> We don't want to have to look in flickr, smugmug and zooomr to be able to find the right photograph to feature in a blogpost. We want to search through sites sharing with us without visiting each separately.</p> <h3>Consolidate</h3> <p>If I update my address on my homepage, it would be nice if those changes propagated to all other places featuring my contact information. </p> <p>There are some difficulties with doing all of this. Once we start sharing social objects all over the web, how do we know who owns them? And what about not the social objects, but the relations to the social objects?</p> <h2>How are we going to do it?</h2> <p>Searching through data which is comprised of different things makes a pretty heavy load- if each time you searched you would also be searching on other servers, the load would get pretty unfriendly. How can you make the searching possible and scalable?</p> <p>Consolidation of data requires knowing whether the data has been updated. Right now, knowing whether the data has been updated requires constant polling. If the data then has been updated, we can pull the data in. This causes a lot of latency and doesn't scale very well.</p> <p>At Federated Social Networks, we considered more use cases. We think that XMPP will solve a lot of our latency and scaling problems, <a href="http://www.mediamatic.nl/id.php/394">read more about PubSub here.</a> Finally, we would like to put up a protocol for how to talk to us so that we can talk to you, too!</p> Nadya Peek http://www.mediamatic.nl/id/397 ARTICLE 1 http://www.mediamatic.nl/id/394 2008-01-03T15:31:00+01:00 Federating Social Networks on XMPP <p>When you decide to visit a website in your favorite browser, you type an http address. That address points to a server, and your browser opens a connection to pull the site off that server. Once the site is fully loaded, the connection closes.</p> <p>When you decide to fire up google talk and talk to a friend, your XMPP server finds the address associated with your friend's (jabber) ID and opens a connection to him. This connection stays open, so when you type something, you don't have to wait for his chat client to decide to check whether you posted something. You send it to him directly.</p> <p>HTTP can also do some kind of persistent connection, but it's hacky. HTTP servers are not made for persistent connections, and they don't scale. HTTP persistent connections also lack addressability: it is unclear which user is connected to an http connection, while users connected to an XMPP server need to authenticate with their jabber IDs.</p> <h2>PubSub: don't pull, push!</h2> <p>Using XMPP, we don't only have to send chat messages. In fact, we can send whatever we want: vcards, audio, flickr enclosures. We want to use XMPP to send XML stanzas containing our anyMeta <em>things</em> from server to server. To do this, will use a publication and subscribe method (PubSub). We can have publishers and subscribers, where a publisher sends a notification to a subscriber each time there is a new stanza to transmit.</p> <p><span class="inline-image-wrapper ui_animateFigureCaption"><a href="http://www.mediamatic.nl/395/nl/26691-1556-858-png"> <img src="http://fast.mediamatic.nl/f/cnsk/image/194/395-400-221.png" height="221" width="400" alt="" title="26691-1556-858.png" playable="1"/> </a><span class="caption-inline"><span class="title"><a title="Vergroot afbeelding - 26691-1556-858.png - Mediamatic Lab" href="/395/nl/26691-1556-858-png">26691-1556-858.png</a></span></span></span></p> <h2>What does an XMPP message look like?</h2> <p>There are three types of of XMPP messages: a <em>message</em>, an <em>i.q.</em> or identification query (for subscribing, unsubscribing and error messages) and a <em>presence</em> {online, offline, busy}. A message will be what we use to move data from website to website. A message contained in a node, which is what you subscribe to to receive the message. The message is then one of the node items, with its own ID, title and content. It can also contain audio, flickr enclosures or location, whatever you want. Besides containing node items, the node itself also has a node ID and to and from IDs.</p> <h2>What if I don't have my own XMPP server?</h2> <p><span class="inline-image-wrapper ui_animateFigureCaption"><a href="http://www.mediamatic.nl/396/nl/26689-1466-562-png"> <img src="http://fast.mediamatic.nl/f/cnsk/image/890/396-400-154.png" height="154" width="400" alt="" title="26689-1466-562.png" playable="1"/> </a><span class="caption-inline"><span class="title"><a title="Vergroot afbeelding - 26689-1466-562.png - Mediamatic Lab" href="/396/nl/26689-1466-562-png">26689-1466-562.png</a></span></span></span></p> <p>You could also use PubSub as an external service for people who do not have access to an XMPP server.</p> Nadya Peek http://www.mediamatic.nl/id/397 ARTICLE publication 1 http://www.mediamatic.nl/id/389 2008-10-11T14:11:21+02:00 Solving Social Network Fatigue Social Network sites open up to applications, but how can we make the network our own again? <p>A social network site is a website where we share some common interest with other people. That interest can be your personal life (<a href="http://www.facebook.com/">Facebook</a>), your professional career (<a href="http://www.linkedin.com/">LinkedIn</a>), your sport, your hobby, or just a single conference (<a href="http://www.picnicnetwork.org/">Picnic Network</a>). </p> <p>All these networks have one thing in common: they are walled gardens, islands that force their users to rediscover their friends and re-explain who they are. </p> <p>At <a href="http://www.mediamatic.nl/">Mediamatic Lab</a> we are exploring methods to connect all those islands, creating an archipelago where you can travel from island to island.</p> <h3>Social Networks Should be Fun</h3> <p>A common interest is what fuels most sites. It brings people together, it leads to discussions, creativity and close relationships between people. Groups, hobbies, clubs, it is the glue of society. Social networks bring that glue to the internet, make it possible to interact from our homes to interact with the very same people we know from the sport field, that conference or some photo we shared online.</p> <p>We have more than one interest. We might have more than one career. And we definitely have more than one group of friends. All those groups will most definitely not be present on one single website, and probably will have a multitude of different online places where they meet. The website of the rowing club, the website of a cultural foundation, the website of the family.</p> <p>Here the problem starts.</p> <h3>Social Networks Are Walled Gardens</h3> <p>Creating and maintaining profiles on social network sites leads to a very real <em>social network fatigue</em>. More and more people simply refuse to become member of yet another o-so-cool website. I am one of those people who refuse to become member, it is just too much. And I definitely do not maintain my profiles. </p> <p>People not maintaining their profiles is a shame. It makes sites less interesting, and gives less incentive to create an active community around a common interest. And that active community was the goal in the first place.</p> <p>Established sites try to boast their user base into the millions of people. Just to make the chances bigger that your friends are on that specific site as well. But what if my active friend group is somewhere else? What if my organisation wants to have their own identity on the web? Their own editorial content? Their own responsibilities? Do you think your organisation wants to be a Facebook or Hyves group? No way, they want to have their own site. Their own people to stay in contact with, their own identity on the world wide web.</p> <h3>A Network of Sites For People With Common Interests</h3> <p>Organisations want to retain their own identity and keep control over that identity. That is why they mostly have a website of their own. Those organisational websites are slowly transformed into social networks to connect with interested people, members, associates and other people. </p> <p>To be able to get people participate in your site you have to make it easy to become member. There is technology for that, it is called OpenID. OpenID is a way to authenticate at a website using the credentials of another website. Say signing on on Mediamatic.net, using your yahoo.com username.</p> <p>Besides authentication there are also initiatives on the way to make it easy to distribute updates to your profile to other websites you are member of. And the same for your <em>friend lists</em>, why make friends for the 2nd, 3rd, 4th time? You know those people already, let the websites figure out the rest.</p> <p>So you have your presence on multiple sites, you have a central profile, and you are using your OpenID to sign on. And now you switch your blog from Blogger to your own site. You want to move your nice photos along with you, your articles, your bookmarks, your whole online blogging world. How to do that?</p> <h3>It Is Your Data, Your Personal Network</h3> <p>It should be possible to move all your data from one site to another. Leaving behind references at the old location to the new location. It is all <em>your data</em>, you made it, you created it, you own it. So you should be able to pick it up and move it to any other website or maybe even multiple sites.</p> <p>The same for you account (or profile). When you leave a site, pick it up and move it somewhere else. Leaving a reference to the new location so that people (your friends!) can still find you.</p> <p>In this way we are talking more about your <em>personal network</em> that is facilitated by a multitude of websites. Your photos on Flickr, your blog on wordpress, your musings on your own site, your career on LinkedIn. All of those sites working together, using the photos on Flickr on your blog, your CV on LinkedIn on your personal site.</p> <p>The idea is that you become a member of a site because the <em>for you interesting people</em> are there. When your interests change, your location changes. You can move houses, let us make it possible to move your data as well.</p> <h3>What Now?</h3> <p>Mediamatic Lab is working hard to make it possible to have your own personal network, to give you the ownership of your data. On Saturday December 8th, 2007, we have hosted a workshop where we have discussed the technologies and user scenarios involved with other partners in the industry. You can <a href="http://www.mediamatic.nl/id/387">read an article about the technologies we propose</a>.</p> <p>Spring 2008 will give you back your own personal network.</p> Marc Worrell http://www.mediamatic.nl/id/151 ARTICLE publication 1 http://www.mediamatic.nl/id/387 2008-01-03T14:49:32+01:00 Federating Social Networks - The Technology <p>We are proposing a range of existing technologies to enable the federation of social networks. Some are quite new, some are well established. Here I give a short overview of the technologies and how to work together in creating a personal network.</p> <p>We are not the only ones interested in integrating our content. So far, we've started looking at various possibilities- for users and servers signing on to (federated) social networks, for publishing, aggregating, exchanging and subscription to content, and for better ways to describe content and meta-content on the social networks.</p> <h3>Authenticating People: OpenID</h3> <p>To avoid having to create a separate login and password for each social network, we have been integrating the decentralized log-in system provided by OpenID for user authentication into our CMS anyMeta.</p> <h3>Servers Communicating With Other Servers: OAuth</h3> <p>Once we have users signed into one social network, we want to allow them to move their data from one network to another. For this we are looking at the open protocol OAuth, which will standardize server to server communication, i.e. the passing of authentication tokens through APIs. This will help make our server-side communication more robust and streamlined.</p> <h3>Representing Information: Atom + RDF</h3> <p>After authenticating, but before we can move content from one place to another, we also need a way to define our content. We're starting to use RDF as a standard formatting method for our content. We see users and their contacts as another form of content, and are using FOAF to describe their networks. Other forms of content, such as events or projects, allow other standard formatting techniques permissible in RDF- such as DOAF, SOAF and MicroFormats.</p> <h3>Finding Information In The Network: OpenSearch</h3> <p>Since our implementation of RDF will be done in XML, it could be pretty easy to search through the various pages' content and meta-content. To do this, we're looking into OpenSearch, which should standardize the presentation of information as well as allow auto-discovery, for instance of things like OpenIDs. We're still looking into ways to keep our website scalable while using OpenSearch.</p> <h3>Staying Up To Date With Changes: XMPP Publish &amp; Subscribe</h3> <p>Once we have our content properly labeled, we can use standards like Atom1.0 to exchange parts of our content. Specifically, we can use Atom to format newsfeeds and other time-sensitive content, and then use XMPP to announce it. By using XMPP instead of HTTP, we can have persistant connections which will allow the networks to propagate changes as fast as possible.</p> Marc Worrell http://www.mediamatic.nl/id/151 ARTICLE publication 1