Deciphering the Interoperable Web

4,429 views

Published on

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

Published in: Technology
1 Comment
10 Likes
Statistics
Notes
No Downloads
Views
Total views
4,429
On SlideShare
0
From Embeds
0
Number of Embeds
135
Actions
Shares
0
Downloads
32
Comments
1
Likes
10
Embeds 0
No embeds

No notes for slide

Deciphering the Interoperable Web

  1. 1. BUILDING AND DECIPHERING THE INTEROPERABLE WEB Saturday, July 17, 2010
  2. 2. MICHAEL BLEIGH @mbleigh Saturday, July 17, 2010
  3. 3. Saturday, July 17, 2010
  4. 4. OMGWTF BBQ presented by Saturday, July 17, 2010
  5. 5. YOU ARE HERE GET READY FOR NOSEBLEEDS Saturday, July 17, 2010
  6. 6. WHAT IS THE INTEROPERABLE WEB? Saturday, July 17, 2010
  7. 7. Saturday, July 17, 2010
  8. 8. Saturday, July 17, 2010
  9. 9. Saturday, July 17, 2010
  10. 10. Saturday, July 17, 2010
  11. 11. Saturday, July 17, 2010
  12. 12. PUBSUBHUBBUB (PuSH) Saturday, July 17, 2010
  13. 13. WEBHOOKS with standards Saturday, July 17, 2010
  14. 14. PUBLISHER ATOM/RSS FEED SUBSCRIBER Saturday, July 17, 2010
  15. 15. <link rel=”hub” href=”...”/> Saturday, July 17, 2010
  16. 16. PUBLISHER HUB SUBSCRIBER Saturday, July 17, 2010
  17. 17. PUBLISHER HUB I’D LIKE TO SUBSCRIBE SUBSCRIBER Saturday, July 17, 2010
  18. 18. PUBLISHER HERE’S A NEW POST HUB SUBSCRIBER Saturday, July 17, 2010
  19. 19. PUBLISHER HUB HERE’S A NEW POST SUBSCRIBER Saturday, July 17, 2010
  20. 20. PUBLISHER HUB BSCRIBER SUBSCRIBER SUBSCRIBER Saturday, July 17, 2010
  21. 21. SIMPLE + POWERFUL Saturday, July 17, 2010
  22. 22. IN RUBY, github.com/igrigorik/PubSubHubbub Saturday, July 17, 2010
  23. 23. 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
  24. 24. SUPERFEEDR = SUPER AWESOME Saturday, July 17, 2010
  25. 25. AS USED BY... GOOGLE, WORDPRESS, FRIENDFEED, SUPERFEEDR, STATUSNET Saturday, July 17, 2010
  26. 26. WEBFINGER Saturday, July 17, 2010
  27. 27. E-MAIL = IDENTITY Saturday, July 17, 2010
  28. 28. OPENID URL HCARD PROFILE mbleigh@gmail.com AVATAR/PIC SOCIAL LINKS Saturday, July 17, 2010
  29. 29. 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
  30. 30. 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
  31. 31. IN RUBY, REDFINGER github.com/intridea/redfinger Saturday, July 17, 2010
  32. 32. require 'mofo' require 'redfinger' finger = Redfinger.finger('example@gmail.com') hcard_uri = finger.hcard.first.to_s hcard = hCard.find(hcard_uri) hcard.fn # => "Example Guy" hcard.title # => "Title of the guy" Saturday, July 17, 2010
  33. 33. AS USED BY... GOOGLE, STATUSNET Saturday, July 17, 2010
  34. 34. SALMON Saturday, July 17, 2010
  35. 35. UNIFYING THE CONVERSATIONS Saturday, July 17, 2010
  36. 36. PuSH BACKWARDS Saturday, July 17, 2010
  37. 37. SALMON, GET IT? Saturday, July 17, 2010
  38. 38. SOURCE HUB HERE’S A NEW POST AGGREGATOR Saturday, July 17, 2010
  39. 39. SOURCE AGGREGATOR Saturday, July 17, 2010
  40. 40. SOURCE HERE’S A COMMENT SALMON ON YOUR POST AGGREGATOR Saturday, July 17, 2010
  41. 41. SOURCE HERE’S A NEW COMMENT HUB REGATOR AGGREGATOR AGGREGATOR Saturday, July 17, 2010
  42. 42. “MAGIC SIGNATURES” AND MORE COMPLEXITY Saturday, July 17, 2010
  43. 43. IN RUBY...? Saturday, July 17, 2010
  44. 44. AS USED BY... CLIQSET, STATUSNET Saturday, July 17, 2010
  45. 45. ACTIVITYSTREAMS Saturday, July 17, 2010
  46. 46. ATOM FEEDS ARE BORING, THERE’S NO ACTION Saturday, July 17, 2010
  47. 47. LET’S ADD SOME VERBS Saturday, July 17, 2010
  48. 48. <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
  49. 49. <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
  50. 50. FOLLOWED, POSTED, FAVORITED, CLOSED, UPDATED, TAGGED Saturday, July 17, 2010
  51. 51. IN RUBY, activity_streams github.com/webcracy/activity_streams Saturday, July 17, 2010
  52. 52. 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 #=> 20 feed.entries.first.id = "http://twitter.com/rubenfonseca/statuses/10075665287" feed.entries.first.verbs.size #=> 1 feed.entries.first.verbs.first #=> "http:// activitystrea.ms/schema/1.0/post" ... Saturday, July 17, 2010
  53. 53. AS USED BY... FACEBOOK, MYSPACE, GOOGLE, MICROSOFT, BBC, GOWALLA, OPERA Saturday, July 17, 2010
  54. 54. OAUTH 2.0 Saturday, July 17, 2010
  55. 55. FLEXIBLE, MULTI-PROFILE TOKEN AUTHORIZATION Saturday, July 17, 2010
  56. 56. WEB SERVER User authenticates on host site. USER AGENT Like web server but no secret shared. NATIVE APP One-time username/password use. AUTONOMOUS Userless authorization. Saturday, July 17, 2010
  57. 57. bit.ly/oauth2-talk Saturday, July 17, 2010
  58. 58. IN RUBY, OAUTH2 GEM github.com/intridea/oauth2 Saturday, July 17, 2010
  59. 59. 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.inspect end Saturday, July 17, 2010
  60. 60. AS USED BY... FACEBOOK, GITHUB, 37SIGNALS Saturday, July 17, 2010
  61. 61. BRINGING IT TOGETHER Saturday, July 17, 2010
  62. 62. WATCH OUT FOR UNICORN POACHERS Saturday, July 17, 2010
  63. 63. XML Saturday, July 17, 2010
  64. 64. COMPLEXITY Saturday, July 17, 2010
  65. 65. LOCK-IN MINDSET Saturday, July 17, 2010
  66. 66. START THINKING IN STANDARDS Saturday, July 17, 2010
  67. 67. QUESTIONS? @intridea @mbleigh bit.ly/interop-slides bit.ly/interop-rate Saturday, July 17, 2010

×