SlideShare a Scribd company logo
BUILDING AND DECIPHERING
                          THE INTEROPERABLE WEB



Saturday, July 17, 2010
MICHAEL BLEIGH
                             @mbleigh
Saturday, July 17, 2010
Saturday, July 17, 2010
OMGWTF
                          BBQ
                          presented by




Saturday, July 17, 2010
YOU ARE HERE




        GET READY FOR NOSEBLEEDS
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
WEBHOOKS
                          with standards

Saturday, July 17, 2010
PUBLISHER

                                ATOM/RSS FEED



                          SUBSCRIBER
Saturday, July 17, 2010
<link rel=”hub” href=”...”/>


Saturday, July 17, 2010
PUBLISHER

                             HUB

                          SUBSCRIBER
Saturday, July 17, 2010
PUBLISHER

                             HUB
                                I’D LIKE TO SUBSCRIBE

                          SUBSCRIBER
Saturday, July 17, 2010
PUBLISHER
                                HERE’S A NEW POST

                             HUB

                          SUBSCRIBER
Saturday, July 17, 2010
PUBLISHER

                             HUB
                                HERE’S A NEW POST

                          SUBSCRIBER
Saturday, July 17, 2010
PUBLISHER

                             HUB

BSCRIBER SUBSCRIBER SUBSCRIBER
 Saturday, 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
AS USED BY...
             GOOGLE, WORDPRESS,
           FRIENDFEED, SUPERFEEDR,
                 STATUSNET
Saturday, July 17, 2010
WEBFINGER

Saturday, July 17, 2010
E-MAIL = IDENTITY

Saturday, July 17, 2010
OPENID URL            HCARD PROFILE

                          mbleigh@gmail.com
           AVATAR/PIC               SOCIAL LINKS
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, REDFINGER
                          github.com/intridea/redfinger


Saturday, July 17, 2010
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
AS USED BY...
                          GOOGLE, STATUSNET
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
SOURCE

                             HUB
                                HERE’S A NEW POST

                          AGGREGATOR
Saturday, July 17, 2010
SOURCE



                          AGGREGATOR
Saturday, July 17, 2010
SOURCE
                                       HERE’S A COMMENT
                          SALMON       ON YOUR POST



                             AGGREGATOR
Saturday, July 17, 2010
SOURCE
                              HERE’S A NEW COMMENT

                           HUB

REGATOR AGGREGATOR AGGREGATOR
Saturday, July 17, 2010
“MAGIC SIGNATURES”
                 AND MORE COMPLEXITY

Saturday, July 17, 2010
IN RUBY...?

Saturday, July 17, 2010
AS USED BY...
                          CLIQSET, STATUSNET

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_streams
            github.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 #=> 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
AS USED BY...
             FACEBOOK, MYSPACE,
           GOOGLE, MICROSOFT, BBC,
               GOWALLA, OPERA
Saturday, July 17, 2010
OAUTH 2.0
Saturday, July 17, 2010
FLEXIBLE, MULTI-PROFILE
            TOKEN AUTHORIZATION

Saturday, July 17, 2010
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
bit.ly/oauth2-talk

Saturday, July 17, 2010
IN RUBY, OAUTH2 GEM
                     github.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.inspect
                 end




Saturday, July 17, 2010
AS USED BY...
                          FACEBOOK, GITHUB,
                             37SIGNALS
Saturday, July 17, 2010
BRINGING IT TOGETHER

Saturday, July 17, 2010
WATCH OUT FOR
                          UNICORN POACHERS

Saturday, July 17, 2010
XML
Saturday, 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

More Related Content

PDF
Building Distributed JavaScript Widgets with jQuery
PDF
Is these a bug
PDF
"Introduction Open Graph and Facebook Platform" - Facebook Developer Garage ...
PDF
Derailed chef update-oct2010
PDF
OmniAuth: From the Ground Up
PPT
Settle Your Mind With Serelax
PDF
Data driven app deploys with chef frontdev
PDF
Rails For Kids 2009
Building Distributed JavaScript Widgets with jQuery
Is these a bug
"Introduction Open Graph and Facebook Platform" - Facebook Developer Garage ...
Derailed chef update-oct2010
OmniAuth: From the Ground Up
Settle Your Mind With Serelax
Data driven app deploys with chef frontdev
Rails For Kids 2009

Similar to Deciphering the Interoperable Web (20)

PDF
Node.js and Ruby
PDF
Dev festasia manila-social_pub
KEY
Mozilla Labs - Explore the ideas
PDF
The Evented Web
PDF
London Ajax User Group Meetup: Comet Panel
PDF
Laug comet intro july 2010
PDF
HTML 5: The Future of the Web
PDF
Calloway introduction
PDF
Communication and Collaboration Tools at ISTE Leadership Bootcamp 2010
PDF
One Man Lightning Talks
PDF
Social Media recipes for your online kitchen
PDF
Human APIs - expanding the mobile web or are robots coming to JavaScript?
PDF
Working In And With the Apache Software Foundation
PDF
Social Network Technologies and Usages
PDF
Go real time with pubsubhubbub and feeds
PDF
Please Don't Touch the Slow Parts V2
PDF
Building Brilliant APIs
PDF
Http Push
PDF
Intridea & open source
PDF
From where OpenVBX came from to how we open sourced it
Node.js and Ruby
Dev festasia manila-social_pub
Mozilla Labs - Explore the ideas
The Evented Web
London Ajax User Group Meetup: Comet Panel
Laug comet intro july 2010
HTML 5: The Future of the Web
Calloway introduction
Communication and Collaboration Tools at ISTE Leadership Bootcamp 2010
One Man Lightning Talks
Social Media recipes for your online kitchen
Human APIs - expanding the mobile web or are robots coming to JavaScript?
Working In And With the Apache Software Foundation
Social Network Technologies and Usages
Go real time with pubsubhubbub and feeds
Please Don't Touch the Slow Parts V2
Building Brilliant APIs
Http Push
Intridea & open source
From where OpenVBX came from to how we open sourced it
Ad

More from Michael Bleigh (8)

PDF
OmniAuth: From the Ground Up (RailsConf 2011)
PDF
The Grapes of Rapid (RubyConf 2010)
PDF
Upgrading to Rails 3
PDF
The Present Future of OAuth
PDF
Persistence Smoothie: Blending SQL and NoSQL (RubyNation Edition)
PDF
Persistence Smoothie
PDF
Twitter on Rails
PDF
Hacking the Mid-End (Great Lakes Ruby Bash Edition)
OmniAuth: From the Ground Up (RailsConf 2011)
The Grapes of Rapid (RubyConf 2010)
Upgrading to Rails 3
The Present Future of OAuth
Persistence Smoothie: Blending SQL and NoSQL (RubyNation Edition)
Persistence Smoothie
Twitter on Rails
Hacking the Mid-End (Great Lakes Ruby Bash Edition)
Ad

Recently uploaded (20)

PDF
Heart disease approach using modified random forest and particle swarm optimi...
PDF
Getting Started with Data Integration: FME Form 101
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PPTX
1. Introduction to Computer Programming.pptx
PDF
Univ-Connecticut-ChatGPT-Presentaion.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PPTX
cloud_computing_Infrastucture_as_cloud_p
PPTX
Programs and apps: productivity, graphics, security and other tools
PPT
Teaching material agriculture food technology
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
A Presentation on Artificial Intelligence
PPTX
SOPHOS-XG Firewall Administrator PPT.pptx
PDF
Machine learning based COVID-19 study performance prediction
PDF
Empathic Computing: Creating Shared Understanding
PDF
Accuracy of neural networks in brain wave diagnosis of schizophrenia
PPTX
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
PPTX
Machine Learning_overview_presentation.pptx
PDF
Network Security Unit 5.pdf for BCA BBA.
Heart disease approach using modified random forest and particle swarm optimi...
Getting Started with Data Integration: FME Form 101
NewMind AI Weekly Chronicles - August'25-Week II
1. Introduction to Computer Programming.pptx
Univ-Connecticut-ChatGPT-Presentaion.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
gpt5_lecture_notes_comprehensive_20250812015547.pdf
cloud_computing_Infrastucture_as_cloud_p
Programs and apps: productivity, graphics, security and other tools
Teaching material agriculture food technology
Unlocking AI with Model Context Protocol (MCP)
Diabetes mellitus diagnosis method based random forest with bat algorithm
A Presentation on Artificial Intelligence
SOPHOS-XG Firewall Administrator PPT.pptx
Machine learning based COVID-19 study performance prediction
Empathic Computing: Creating Shared Understanding
Accuracy of neural networks in brain wave diagnosis of schizophrenia
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
Machine Learning_overview_presentation.pptx
Network Security Unit 5.pdf for BCA BBA.

Deciphering the Interoperable Web

  • 1. BUILDING AND DECIPHERING THE INTEROPERABLE WEB Saturday, July 17, 2010
  • 2. MICHAEL BLEIGH @mbleigh Saturday, July 17, 2010
  • 4. OMGWTF BBQ presented by Saturday, July 17, 2010
  • 5. YOU ARE HERE GET READY FOR NOSEBLEEDS Saturday, July 17, 2010
  • 6. WHAT IS THE INTEROPERABLE WEB? Saturday, July 17, 2010
  • 13. WEBHOOKS with standards Saturday, July 17, 2010
  • 14. PUBLISHER ATOM/RSS FEED SUBSCRIBER Saturday, July 17, 2010
  • 16. PUBLISHER HUB SUBSCRIBER Saturday, July 17, 2010
  • 17. PUBLISHER HUB I’D LIKE TO SUBSCRIBE SUBSCRIBER Saturday, July 17, 2010
  • 18. PUBLISHER HERE’S A NEW POST HUB SUBSCRIBER Saturday, July 17, 2010
  • 19. PUBLISHER HUB HERE’S A NEW POST SUBSCRIBER Saturday, July 17, 2010
  • 20. PUBLISHER HUB BSCRIBER SUBSCRIBER SUBSCRIBER Saturday, July 17, 2010
  • 22. IN RUBY, github.com/igrigorik/PubSubHubbub Saturday, July 17, 2010
  • 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. SUPERFEEDR = SUPER AWESOME Saturday, July 17, 2010
  • 25. AS USED BY... GOOGLE, WORDPRESS, FRIENDFEED, SUPERFEEDR, STATUSNET Saturday, July 17, 2010
  • 28. OPENID URL HCARD PROFILE [email protected] AVATAR/PIC SOCIAL LINKS Saturday, July 17, 2010
  • 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. 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&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. IN RUBY, REDFINGER github.com/intridea/redfinger Saturday, July 17, 2010
  • 32. require 'mofo' require 'redfinger' finger = Redfinger.finger('[email protected]') 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. AS USED BY... GOOGLE, STATUSNET Saturday, July 17, 2010
  • 35. UNIFYING THE CONVERSATIONS Saturday, July 17, 2010
  • 37. SALMON, GET IT? Saturday, July 17, 2010
  • 38. SOURCE HUB HERE’S A NEW POST AGGREGATOR Saturday, July 17, 2010
  • 39. SOURCE AGGREGATOR Saturday, July 17, 2010
  • 40. SOURCE HERE’S A COMMENT SALMON ON YOUR POST AGGREGATOR Saturday, July 17, 2010
  • 41. SOURCE HERE’S A NEW COMMENT HUB REGATOR AGGREGATOR AGGREGATOR Saturday, July 17, 2010
  • 42. “MAGIC SIGNATURES” AND MORE COMPLEXITY Saturday, July 17, 2010
  • 44. AS USED BY... CLIQSET, STATUSNET Saturday, July 17, 2010
  • 46. ATOM FEEDS ARE BORING, THERE’S NO ACTION Saturday, July 17, 2010
  • 47. LET’S ADD SOME VERBS Saturday, July 17, 2010
  • 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. <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. FOLLOWED, POSTED, FAVORITED, CLOSED, UPDATED, TAGGED Saturday, July 17, 2010
  • 51. IN RUBY, activity_streams github.com/webcracy/activity_streams Saturday, July 17, 2010
  • 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. AS USED BY... FACEBOOK, MYSPACE, GOOGLE, MICROSOFT, BBC, GOWALLA, OPERA Saturday, July 17, 2010
  • 55. FLEXIBLE, MULTI-PROFILE TOKEN AUTHORIZATION Saturday, July 17, 2010
  • 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
  • 58. IN RUBY, OAUTH2 GEM github.com/intridea/oauth2 Saturday, July 17, 2010
  • 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. AS USED BY... FACEBOOK, GITHUB, 37SIGNALS Saturday, July 17, 2010
  • 62. WATCH OUT FOR UNICORN POACHERS Saturday, July 17, 2010
  • 66. START THINKING IN STANDARDS Saturday, July 17, 2010
  • 67. QUESTIONS? @intridea @mbleigh bit.ly/interop-slides bit.ly/interop-rate Saturday, July 17, 2010