One of the outcomes from my trip to Victoria last week is some thinking about the social graph.
More specifically, you may recall that I've been using Flock. As it turns out, I recently upgraded my laptop to Leopard, and made Flock my main browser. This has given me increased exposure to their "people bar" -- a side bar that supports a variety of big community websites, like Facebook, Flickr, Twitter, and so on.
As I've been using this feature, and seeing the way that Flock "detects" features of different websites, I started thinking about how every community website could enable this functionality. Right now, the Flock team has to pre-integrate with the specific website's API to enable this functionality. But, just as they "detect" the presence of site-specific search engines, there is no reason that one couldn't expose a link header that indicates the presence of a social graph.
I know what you're thinking: "But Boris, how many people use Flock? Isn't this just browser specific functionality?" Well, no. First of all, Google has a Social Graph API that is already being crawled -- looking at FOAF and XFN.
Secondly, I got to thinking about all these site-specific applications -- like Twhirl that was bought by Seesmic. So, if we had some basic standards about this stuff, it would be simplistic to have one app that let us monitor / notify / update any of these systems. Yes, there will ALWAYS be websites that have more complex APIs with more features -- that are only accessible by implmenting *their* API to talk to them.
But for thousands of other community websites, built in Drupal, WordPress, Joomla, or what have you -- you suddenly have the same rich access to applications as the big guys. How many websites would encourage their users to install Flock or Twhirl if it supported *their* website?
Oh, and I'm completely skipping the linked data / RDF / Semantic Web factor of having community websites expose some part of their social graph, or at least make it available for querying by people that have the right credentials.
OK, so how does this look to the end user? I'll use Flock as an example, since I've got agreement in principle from them that they'll work with me on this, including help in defining some of the formats.
Now, I know the first thing we're going to have to do is fight a religious war over the format of the socialgraph file. I'm going to suggest some minimal FOAF format, since I'm a born again RDF fan.I don't want to go spraying email addresses all over the place, so perhaps either local unique user GUIDs or OpenID could be used as identifiers for each person. We actually don't need full "person" information -- a username, avatar, status message, and date stamp for last activity sorting should be the minimal set. Even status message could be option for smaller, less complex sites so almost anyone could support this out of the box: just show everyone on the site (yes, that's right...ignore any sort of "friend" connection) sorted by last active -- which could be a post / comment, or (again, simple support by many sites...) just date stamp of last login.
I'd like to think that the choice of OAuth as credentials for acessing this info isn't controversial at all. Feel free to layer OpenID in here somehow, but for the action-at-a-distance on which cool functionality can be built, this kind of a token system looks to be ideal.
What next? Well, surprise, surprise, I'm going to take a crack at getting this implemented in Drupal. Raincity Studios is already working on the OAuth module, which would be one of the main pre-requisites. Once the format of the social graph file is defined (calling Joshua, Arto, and maybe RalphM...), building the next piece shouldn't be too hard.
Ideally, something like the Gnomepal Drupal distribution would ship with this out of the box (for the really ambitious, Drupal 7 core!). And other systems like Marc Canter's People Aggregator could easily expose this social graph info as well.
I'm excited at the continuing growth of every website as a dynamic web application, and also of the exposure of data and APIs by this web of sites. This feels like the right path we're travelling on to get everything a little bit more interconnected.
Comments
Interesting notion
If you're looking to test something like this out in a non-Drupal environment (in this case, .NET), I'd be interested in developing a presence/social graph feed of some kind for Protagonize.
DNS Service Discovery & PubSub autodiscovery
DNS Service Discovery (DNS-SD) might be of interest, at least from a prospective point of view. Also, PubSub autodiscovery has been discussed recently and will probably be standardized.
Pidgin for social networks
A byproduct of this could be that it would enable a pidgin.im-type client for social networking sites... implementing common functionality like status updates and other lifestreaming-type of notifications.
Flock is nice, but it presents the several social networks as separate worlds... ideally I should be able to use my Facebook and Twitter contacts without distinction, and even designate a Twitter and Facebook contact as one user. (You'd however need to solve questions then like: "will my status updates be pushed to 2 different networks for one contact?")
For end users, this would mean practical interoperability of social networks...
8hands.com does a nice job interface-wise, but stores (gasp!) the user's uernames/pswd's (for Facebook, Twitter...) on its own server! Twhirl can cross-post to Jaiku and Pownce, but is (not yet?) a client for those two.
Socially relevant network talk at Web2Open
Hi, I am going to be proposing a "build your own socially relevent network" talk at Web2Open. I really like this socially relevant meme, particular since I not participating in the current social networking craze. If I can own my content, then I am happy to plug in, and I'd like to help others do the same with Drupal.
Anyone else going to be in San Francisco for the 10 000 person Web 2.0 conference?
Kieran
Puzzles pieces aplenty
There are actually more pieces of this puzzle in place than you might think. You don't need the rel="socialgraph", you can just use the established FOAF autodiscovery (rel="meta" title="FOAF"). So this mechanism already exists on tons of websites, which is why Google and Yahoo are crawling it.
For uniquely identifying users, the FOAF guys have two established practices: e-mail SHA1 sums (effective spam protection while providing a globally unique ID), and the person's OpenID URL. Either will do fine, so that piece is in place, too. (See my FOAF data at http://ar.to/ for an example - you're featured in there, too ;-))
All the information you want can be described pretty much using two vocabularies, FOAF (http://xmlns.com/foaf/spec/) and SIOC (http://www.johnbreslin.com/blog/2008/04/05/tales-from-the-sioc-o-sphere-...). In fact the SIOC project sounds pretty much aimed at something like what you're envisioning in there - maybe Raincity Studios could join up with the SIOC guys to collaborate on the spec?
In any case, looking forward to collaborating on the OAuth module vis-a-vis the RDF modules for Drupal, where it makes sense. We should talk some more.
Lightweight
I figured something related to FOAF in the header link might already exist. However, this is a very specific application that it would be nice if it "just worked" -- i.e. don't have to pull down the file, figure out what it is, and go from there.
I think SIOC is overkill...but I have to write up some more specifity on the actions / verbs that can be taken, and what data is inside the file about each person. I'm using the Flock people bar as a model for the simplest thing that just works, plus also thinking about what a *core* Drupal / WordPress / etc. site might be able to provide with no dependencies (e.g. list of usernames on the site plus a datestamp -- no interconnections at all, or rather a "memberOf" property to the site itself).
It would, however, also need to be able to model additional capabilities -- friend connections, status messages, blog / media posts, private messaging between users, and so on. I guess that's where you were thinking SIOC in part.
FOAF == social graph
SIOC has all the properties you mention, including membership. It's not overkill in any way: it's just a vocabulary defining terms. You can use just a single term (like sioc:member_of) or the whole enchilada - it's up to you. Why reinvent e.g. a memberOf term if the semantics you want already exist in SIOC?
I think you could get pretty far with just two terms, foaf:knows and sioc:member_of, sprinkled into existing HTML content using RDFa tagging, and then iterate/evolve upwards from there.
Social Graph Talk @ Social Camp (Open Web Vancouver 2008)
Open Inviation - If you're interested in a short (lightning) talk (10-15min) on the topic. Add yourself to the wiki @ http://barcamp.org/SocialCampVancouver
Added a talk
Sounds good, Gerald -- I added a talk listing on that page pointing back to this page.
Thanks for presenting at SocialCamp
Thanks for presenting at the SocialCamp @ Open Web Vancouver 2008. Cheers.