- From: Toby Inkster <tai@g5n.co.uk>
- Date: Thu, 22 Oct 2009 00:13:38 +0100
- To: public-xg-socialweb@w3.org
Just posted this to the GNU Social mailing list. I use a different e-mail address to subscribe to W3C mailing lists (W3C listserv doesn't like my usual address), so I couldn't CC it here, hence forwarding it instead. -Toby -------- Forwarded Message -------- > From: Toby Inkster <mail@tobyinkster.co.uk> > To: social-discuss@nongnu.org > Subject: [Social-discuss] A missive - thoughts on a distributed social > network > Date: Thu, 22 Oct 2009 00:00:30 +0100 > > Darling everybody, > > I promised Matt that I'd pop my head in and provide my thoughts on > distributed a social network. I think it's a great idea, but alas I > don't think I have any time to contribute to it in any practical way, so > my thoughts are all you're likely to get. > > When I first started using the Internet it was via AOL. Our family used > that for a year or so before moving to a real ISP. That experience > taught me that walled garden social networks are not a Good Thing. > Consequently, you'll find me on very few of them. I don't have a > Facebook account; I don't have a Myspace account; I think I have a > del.icio.us account, but have not really used it. Because I don't have > much experience using "social network sites", I think perhaps I might > bring a different perspective to this discussion, based on different > preconceptions of how a social network should behave. > > I'd also like to state that my interests lie not so much in building > social networks, but making our existing network more social. > > Moving swiftly on, here are my thoughts on how *I'd* approach building > something like daisycha.in, if I were in charge, and if I had the time. > > Firstly, federation is a must. I should be able to run my own account on > my own server, and connect up with other people running software on > their own servers, or shared servers. > > Another feature is extensibility. This is entangled up with an idea that > Dan Brickley's been going on about a bit recently - the idea that geeks > shouldn't decide how everyone describes themselves. For instance, say > that in our federated network, two servers need to exchange profile > information about their users: there will be fields like "name", > "avatar", "email" being passed about. The protocol designers shouldn't > decide which fields are allowed and which are optional. The end users > should, or at the very least, the people running the servers should. > What fields are important to you and me might not be important to other > people. > > Privacy and security are important, and related. I should be able to > share data with my social network, reasonably confident that it won't be > leaked outside my circle - at least, not without a conscious decision > from one of my friends to deliberately pass it on. (Clearly, this last > possibility is always going to be a privacy hole - there isn't a > sensible technical fix for it.) > > Anyway, those are fairly abstract ideas, but important to state. Now for > more practical matters. What should this distributed social network > actually do? > > Firstly, I'd want to publish profile-type information about me. Some > profile information I want to be public, so people can find it (perhaps > through Google). Other profile information I want to only be available > to my friends, or maybe just to a subset of them. > > Secondly, I want to publish items of content. These might be short, > microblog-like bits of text; they might be photos, videos or audio > clips; they might be links to things I've found on the Web. Again, some > of these I might elect to make public, and others I'd want to keep > private. > > I want to, of course, be able to view my friends' profiles, and be kept > informed of the items of content that they publish, in some sort of > aggregated view, so that I don't need to go and visit each of their > pages individually. > > Lastly, I'd need a way to manage these friends and contacts. A way of > blocking access from some people; a way of establishing a relationship > with others. > > So what would a web application that let me do this actually look like? > Here's my suggestion. It would consist of two loosely-related parts: > > 1. A publication tool; > 2. A feed aggregator. > > Each of these would be functionally fairly independent, though for > usability's sake, they would probably provide a fairly integrated user > experience. A third part of the platform which would need to have ties > to both is an API for adding and approving friendships. > > Using the publication tool I'd publish my profile data and content > items. The publication tool would allow me to configure access control > to different bits of data. This wouldn't have to be tricky ACL-type > stuff: a mere "this is public"/"only my friends" drop down would cover > the majority of use cases. > > Crucially the publication tool would be outputting the data using FOAF > and RSS 1.0, embedded in RDFa. Using RDF gives us our extensibility - > RDF is a framework built to represent data of all kinds. There's a whole > host of off-the-shelf libraries, parsers, databases, query engines and > so on that it opens up. Specifically for daisycha.in I'd recommend ARC2, > a PHP+MySQL RDF toolkit. > > The output XHTML+RDFa files would be simply published to a location on > the public Web, albeit with the non-public ones using HTTP > authentication. This would be Googleable and could indeed not only act > as your social networking profile but as your personal web site as well. > > The aggregator would visit the XHTML+RDFa-enabled profiles of all your > friends, parse their information and present it in a unified view for > your consumption. As these people have confirmed your friendship, your > aggregator will have access to their private profile data and content > items too. > > Those parts are actually pretty easy. We're left with two gaps: > > 1. Managing friendships; > 2. Push updates of new content. > > To manage friendship, OpenMicroBlogging's method might be a possibility, > but it's not really intended for symmetrical relationships. Here's > another possibility... > > Assuming Alice and Bob want to become friends; their profiles are hosted > on separate sites. Alice finds Bob's profile through Google and copies > and pastes hist profile's URL into her friendship manager. This > publishes a friendship "claim" to her profile (i.e. her profile says > that Alice claims to be Bob's friend). Alice's friendship manager then > pings Bob's server. Bob's server receives a ping from Alice's server and > fetches Alice's profile. It notes the friendship claim and puts that in > a queue of claims to verify for Bob. Next time Bob logs in, he sees the > claim and approves it. Bob's server pings Alice's to let it know the > friendship was approved. Alice's server lists Bob as Alice's friend. It > returns a success message to Bob's server. Bob's server gets the success > message and adds Alice as Bob's friend. > > For aggregating your friends' content, clearly a push model would be > more efficient than polling. Something like PubSubHubBub might work > here. > > The great thing about all this is that, even without any special > software at all, you can join in the social network. If you only want to > publish public profile and content data, then you can make do by > publishing static XHTML+RDFa files. It's only once you get into the more > complex area of making friends that you need to have any server-side > scripting involved. > > Anyway, that's how I'd do it, if it were me. -- Toby A Inkster <mailto:mail@tobyinkster.co.uk> <http://tobyinkster.co.uk>
Received on Wednesday, 21 October 2009 23:14:24 UTC