Deciphering the Interoperable Web

Post on 18-May-2015

4.038 views 2 download

Tags:

description

A survey of the technologies that will enable interoperable social web applications, given at Ruby Midwest 2010.

Transcript of Deciphering the Interoperable Web

BUILDING AND DECIPHERINGTHE INTEROPERABLE WEB

Saturday, July 17, 2010

MICHAEL BLEIGH@mbleigh

Saturday, July 17, 2010

Saturday, July 17, 2010

OMGWTF

BBQpresented by

Saturday, July 17, 2010

GET READY FOR NOSEBLEEDS

YOU ARE HERE

Saturday, July 17, 2010

WHAT IS THE INTEROPERABLE WEB?

Saturday, July 17, 2010

Saturday, July 17, 2010

Saturday, July 17, 2010

Saturday, July 17, 2010

Saturday, July 17, 2010

Saturday, July 17, 2010

PUBSUBHUBBUB (PuSH)Saturday, July 17, 2010

WEBHOOKSwith standards

Saturday, July 17, 2010

SUBSCRIBER

ATOM/RSS FEED

PUBLISHER

Saturday, July 17, 2010

<link rel=”hub” href=”...”/>

Saturday, July 17, 2010

SUBSCRIBER

PUBLISHER

HUB

Saturday, July 17, 2010

SUBSCRIBERI’D LIKE TO SUBSCRIBE

PUBLISHER

HUB

Saturday, July 17, 2010

SUBSCRIBER

HERE’S A NEW POST

PUBLISHER

HUB

Saturday, July 17, 2010

SUBSCRIBERHERE’S A NEW POST

PUBLISHER

HUB

Saturday, July 17, 2010

SUBSCRIBER

PUBLISHER

HUB

SUBSCRIBER SUBSCRIBERSaturday, July 17, 2010

SIMPLE + POWERFUL

Saturday, July 17, 2010

IN RUBY,github.com/igrigorik/PubSubHubbub

Saturday, July 17, 2010

EventMachine.run { pub = EventMachine::PubSubHubbub.new('http://pubsubhubbub.appspot.com/publish').publish "http://www.test.com/"

pub.callback { puts "Successfully notified hub." } pub.errback { puts "Uh oh, something broke: #{pub.response}" }}

Saturday, July 17, 2010

SUPERFEEDR = SUPER AWESOME

Saturday, July 17, 2010

GOOGLE, WORDPRESS,FRIENDFEED, SUPERFEEDR,

STATUSNET

AS USED BY...

Saturday, July 17, 2010

WEBFINGER

Saturday, July 17, 2010

E-MAIL = IDENTITY

Saturday, July 17, 2010

mbleigh@gmail.com

AVATAR/PIC SOCIAL LINKS

HCARD PROFILEOPENID URL

Saturday, July 17, 2010

GET /.well-known/host-meta

<?xml version='1.0' encoding='UTF-8'?><XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0' xmlns:hm='http://host-meta.net/xrd/1.0'> <hm:Host xmlns='http://host-meta.net/xrd/1.0'>gmail.com</hm:Host> <Link rel='lrdd' template='http://www.google.com/s2/webfinger/?q={uri}'> <Title>Resource Descriptor</Title> </Link></XRD>

Saturday, July 17, 2010

GET google.com/s2/webfinger/?q=mbleigh@gmail.com

<?xml version='1.0'?><XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'> <Subject>acct:mbleigh@gmail.com</Subject> <Alias>http://www.google.com/profiles/mbleigh</Alias> <Link rel='http://webfinger.net/rel/profile-page' href='http://www.google.com/profiles/mbleigh' type='text/html'/> <Link rel='http://microformats.org/profile/hcard' href='http://www.google.com/profiles/mbleigh' type='text/html'/> <Link rel='http://gmpg.org/xfn/11' href='http://www.google.com/profiles/mbleigh' type='text/html'/> <Link rel='http://specs.openid.net/auth/2.0/provider' href='http://www.google.com/profiles/mbleigh'/> <Link rel='describedby' href='http://www.google.com/profiles/mbleigh' type='text/html'/> <Link rel='describedby' href='http://www.google.com/s2/webfinger/?q=mbleigh%40gmail.com&amp;fmt=foaf' type='application/rdf+xml'/> <Link rel='http://schemas.google.com/g/2010#updates-from' href='https://www.googleapis.com/buzz/v1/activities/100660544095714416357/@public' type='application/atom+xml'/></XRD>

Saturday, July 17, 2010

IN RUBY, REDFINGERgithub.com/intridea/redfinger

Saturday, July 17, 2010

require 'mofo'require 'redfinger'

finger = Redfinger.finger('example@gmail.com')hcard_uri = finger.hcard.first.to_shcard = hCard.find(hcard_uri)hcard.fn # => "Example Guy"hcard.title # => "Title of the guy"

Saturday, July 17, 2010

GOOGLE, STATUSNETAS USED BY...

Saturday, July 17, 2010

SALMON

Saturday, July 17, 2010

UNIFYING THE CONVERSATIONS

Saturday, July 17, 2010

PuSH BACKWARDS

Saturday, July 17, 2010

SALMON, GET IT?

Saturday, July 17, 2010

AGGREGATOR

SOURCE

HUBHERE’S A NEW POST

Saturday, July 17, 2010

AGGREGATOR

SOURCE

Saturday, July 17, 2010

AGGREGATOR

SOURCE

HERE’S A COMMENT ON YOUR POSTSALMON

Saturday, July 17, 2010

AGGREGATOR

SOURCE

HUBHERE’S A NEW COMMENT

AGGREGATORAGGREGATORSaturday, July 17, 2010

“MAGIC SIGNATURES” AND MORE COMPLEXITY

Saturday, July 17, 2010

IN RUBY...?

Saturday, July 17, 2010

CLIQSET, STATUSNETAS USED BY...

Saturday, July 17, 2010

ACTIVITYSTREAMS

Saturday, July 17, 2010

ATOM FEEDS ARE BORING,THERE’S NO ACTION

Saturday, July 17, 2010

LET’S ADD SOME VERBS

Saturday, July 17, 2010

<entry> <title>ciberch: thanks to /Jerry @robdolin , @daveman692, @chrismessina, @apparentlymart and @jsmarr for a very produtive activitystrea.ms session</title> <content type="html">ciberch: thanks to /Jerry @robdolin , @daveman692, @chrismessina, @apparentlymart and @jsmarr for a very produtive activitystrea.ms session</content> <id>tag:twitter.com,2007:http://twitter.com/ciberch/statuses/2396395271</id> <published>2009-06-30T00:59:54+00:00</published> <updated>2009-06-30T00:59:54+00:00</updated> <link type="text/html" rel="alternate" href="http://twitter.com/ciberch/statuses/2396395271"/> <link type="image/pjpeg" rel="image" href="http://s3.amazonaws.com/twitter_production/profile_images/81481539/180653_normal.jpg"/> <author> <name>Monica Keller</name> <uri>http://www.myspace.com/ciberch</uri> </author></entry>

Saturday, July 17, 2010

<entry> <! ... !> <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb> <activity:object> <id>tag:twitter.com,2007:http://twitter.com/ciberch/statuses/2396395271/object</id> <title>thanks to /Jerry @robdolin , @daveman692, @chrismessina, @apparentlymart and @jsmarr for a very produtive activitystrea.ms session</title> <link type="text/html" rel="alternate" href="http://twitter.com/ciberch/statuses/2396395271"/> <published>2009-06-30T00:59:54+00:00</published> <updated>2009-06-30T00:59:54+00:00</updated> <author> <name>Monica Keller</name> <uri>http://www.myspace.com/ciberch</uri> </author> </activity:object></entry>

Saturday, July 17, 2010

FOLLOWED, POSTED, FAVORITED, CLOSED,UPDATED, TAGGED

Saturday, July 17, 2010

IN RUBY, activity_streamsgithub.com/webcracy/activity_streams

Saturday, July 17, 2010

require 'rubygems'require 'activity_streams'require 'open-uri'

twitter = 'http://api.cliqset.com/feed/?svcuser=rubenfonseca&feedid=twitternotesposted'feed = ActivityStreams::Feed.from_xml(open(twitter).read)feed.entries.size #=> 20feed.entries.first.id = "http://twitter.com/rubenfonseca/statuses/10075665287"feed.entries.first.verbs.size #=> 1feed.entries.first.verbs.first #=> "http://activitystrea.ms/schema/1.0/post"...

Saturday, July 17, 2010

FACEBOOK, MYSPACE, GOOGLE, MICROSOFT, BBC,

GOWALLA, OPERA

AS USED BY...

Saturday, July 17, 2010

OAUTH 2.0Saturday, July 17, 2010

FLEXIBLE, MULTI-PROFILETOKEN AUTHORIZATION

Saturday, July 17, 2010

USER AGENT Like web server but no secret shared.

NATIVE APP One-time username/password use.

AUTONOMOUS Userless authorization.

WEB SERVER User authenticates on host site.

Saturday, July 17, 2010

bit.ly/oauth2-talk

Saturday, July 17, 2010

IN RUBY, OAUTH2 GEMgithub.com/intridea/oauth2

Saturday, July 17, 2010

require 'rubygems'require 'sinatra'require 'oauth2'require 'json'

def client OAuth2::Client.new('app_id', 'app_secret', :site => 'https://graph.facebook.com')end

get '/auth/facebook' do redirect client.web_server.authorize_url( :redirect_uri => 'http://localhost:4567/auth/facebook/callback', :scope => 'email,offline_access' )end

get '/auth/facebook/callback' do access_token = client.web_server.get_access_token( params[:code], :redirect_uri => redirect_uri)

user = JSON.parse(access_token.get('/me')) user.inspectend

Saturday, July 17, 2010

FACEBOOK, GITHUB,37SIGNALS

AS USED BY...

Saturday, July 17, 2010

BRINGING IT TOGETHER

Saturday, July 17, 2010

WATCH OUT FOR UNICORN POACHERS

Saturday, July 17, 2010

XMLSaturday, July 17, 2010

COMPLEXITY

Saturday, July 17, 2010

LOCK-IN MINDSET

Saturday, July 17, 2010

START THINKING IN STANDARDS

Saturday, July 17, 2010

QUESTIONS?@intridea @mbleigh

bit.ly/interop-slides bit.ly/interop-rate

Saturday, July 17, 2010