Social Sockets
20-Jan-08
Intro:
Since I’ve been working on my personal web site socket.org I’ve always been a bit frustrated. Its hard to maintain all the services you’d be used to on a Yahoo, or Google account. On top of that you want to have content management like MySpace or FaceBook. I just hate the thought of having to use those services when I have my domain!
Use Case:
Social networks are everywhere. MySpace, FaceBook, Friendster, … They all provide two main features: the management of content, and the ability to define a network of friends or social relationships. This idea has been very successful with the masses of internet users who are capable of using email, text messaging, and even writing blogs.
But what of the true geek? The technophile who owns his own domains, manages her own dns, runs their own email servers, webservers, blogs, and wikis!? The tools that the current list of social networks provide to manage content are all to restrictive. We want our own choice of tools to create and manage content. If there is no tool that we like, open source or otherwise, then we write our own in perl, php, ruby, or even c++. Our web sites are ever evolving with the latest releases of different types of content management platforms… or maybe you like old school html for a given task.
However, the geek is not without friends. She still would like to define a set of relationships with her friends out on the internet. For any given friend you want to know how contact them, and how to get to their blog, and to be notified when there is new content.
So why not an open framework for defining friends, one that allows you to keep your content on your own hosts. You create a map of the content that you manage on your servers running in your domains and your freinds do the same. Then you just keep a list of your friends and their content maps. Lets call this idea Social Sockets.
Now there’s one more twist. You might think that someone must still maintain these maps. That this service is just another attempt to monitize information produced by a social system. Lets take this system one step further… the only thing we will define is a protocol. When you produce your content map you can host it on any number of Social Socket servers, as long as it supports a standard API to return the items listed in your content map. When you friends want to list you among their friends they just link to your Social Socket server along with your user id on that server. The whole thing is decentralized and distributed. Authentication could be taken care of with PGP or some other related scheme.
The Data:
Who are you:
You are what is defined by your content map. To find you you need a User Id, and the location of a Social Socket server.
<ss id=”dan@socket.org” ss=”http://socket.org/socket”/>
This is the path to your content map.
What is defined in your map:
The things we run are well defined bits of functionality: email, a blog, a wiki, … or maybe you have created some new type of service. However, all services have some commonality when it comes to mapping them: the type of service, the url, the rss feed that provides notification of changes.
<ss>
<self type=”email” url=”email://dan@socket.org”/>
<self type=”blog” url=”http://socket.org/blog” rss=”http://socket.org/blog/rss”/>
<self type=”wiki” url=”http://socket.org/wiki” rss=”http://socket.org/wiki/rss”/>
</ss>
Your Linkages:
Now you need to define your friends. This is just a list of user – server pairs.
<ss>
<friend id=”joe@email.org” url=”http://opensource.org”/>
<friend id=”bob@spam.org” url=”http://spam.org”/>
</ss>
If you go to the url for any of your friends and provide their id it will respond with their content map.
Implementation:
Is left up to the reader…