deciphering the interoperable web
DESCRIPTION
A survey of the technologies that will enable interoperable social web applications, given at Ruby Midwest 2010.TRANSCRIPT
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
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/[email protected]
<?xml version='1.0'?><XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'> <Subject>acct:[email protected]</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&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('[email protected]')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