SlideShare a Scribd company logo
1 of 61
Download to read offline
Coding on the
      Shoulders of Giants


                              Matt Biddulph


                                                     DOPPLR
                                   DOPPLR
Dopplr is a service for frequent travellers and their friends. It lets you share your travel plans
with a group of trusted people that you choose.
                           DOPPLR
This worldmap shows where everyone on Dopplr came to London from on October 4th 2007
(the day this talk was given at FOWA)

               Where next?
DOPPLR
                                   DOPPLR
Dopplr is a service for frequent travellers and their friends. It lets you share your travel plans
with a group of trusted people that you choose.
                           DOPPLR
This worldmap shows where everyone on Dopplr came to London from on October 4th 2007
(the day this talk was given at FOWA)

               Where next?
A quot;platformquot; is a system that can
           be programmed and therefore
           customized by outside developers
           – users – and in that way, adapted
           to countless needs and niches
           that the platform's original
           developers could not have
           possibly contemplated, much less
           had time to accommodate.
                                   –Marc Andreessen, http://blog.pmarca.com/2007/09/the-three-kinds.html


Today I’m going to talk about using the internet as a platform that your webapps can build
on top of.
A quot;platformquot; is a system that can
           be programmed and therefore
           customized by outside developers
           – users – and in that way, adapted
           to countless needs and niches
           that the platform's original
           developers could not have
           possibly contemplated, much less
           had time to accommodate.
                                   –Marc Andreessen, http://blog.pmarca.com/2007/09/the-three-kinds.html


It’s impossible to predict all possible uses that your users might want to make of your app
and its data, so we’re going to look at the technologies that developers can use today that
maximise possibilities for integration and reuse.
Dopplr is a very targeted web application, and we have no wish to reinvent the wheel on any
technology or function that isn’t part of our core mission to find serendipity in travel. We
designed Dopplr from the start to be a Small Piece, Loosely Joined.

We believe that your data belongs to you, and that you should be able to have it anywhere
you want it - even if you don’t frequently visit dopplr.com
Everything in this talk is based on live code that’s running on dopplr.com today. I’ll be
pointing out what libraries we used. Because Dopplr’s written in Ruby on Rails, that’s where
all the examples will come from.
The most basic and most important principle of integrating web apps today is sharing data. A
good webapp helps its users make distinctive structured data (whether directly or indirectly)
and does useful things with it.
Sharing Data
The most basic and most important principle of integrating web apps today is sharing data. A
good webapp helps its users make distinctive structured data (whether directly or indirectly)
and does useful things with it.
The simplest way to expose data in a webapp is to supply feeds in machine-readable
formats. Dopplr gives its users a “my trips” feed. As a newsfeed, it’s not all that useful as it
tells you things you already know (the trips that you’ve added). As a lightweight read-only
API, it works very well. We mark up our feed with all the appropriate machine-readable
formats that we can find: GeoRSS, hCalendar and Google Calendar GData.

This means it’s trivial to plug it into other systems like Yahoo Pipes, and mash it up with
other data.
The simplest way to expose data in a webapp is to supply feeds in machine-readable
formats. Dopplr gives its users a “my trips” feed. As a newsfeed, it’s not all that useful as it
tells you things you already know (the trips that you’ve added). As a lightweight read-only
API, it works very well. We mark up our feed with all the appropriate machine-readable
formats that we can find: GeoRSS, hCalendar and Google Calendar GData.

This means it’s trivial to plug it into other systems like Yahoo Pipes, and mash it up with
other data.
The simplest way to expose data in a webapp is to supply feeds in machine-readable
formats. Dopplr gives its users a “my trips” feed. As a newsfeed, it’s not all that useful as it
tells you things you already know (the trips that you’ve added). As a lightweight read-only
API, it works very well. We mark up our feed with all the appropriate machine-readable
formats that we can find: GeoRSS, hCalendar and Google Calendar GData.

This means it’s trivial to plug it into other systems like Yahoo Pipes, and mash it up with
other data.
It’s also easy to transform our data into KML and view it in Google Earth.
And NetNewsWire lets you import trip details in iCal because of the hCalendar.
We also mark up our contact lists using hCard.
We also mark up our contact lists using hCard.
http://www.hauntedcastle.org/castle/
And via our API, users are starting to create interesting tools like this Carbon Calculator.
If we want to integrate your Dopplr data with your data from elsewhere, we need to know
who you are on other sites.
User Identity
If we want to integrate your Dopplr data with your data from elsewhere, we need to know
who you are on other sites.
DOPPLR
                         DOPPLR
                DOPPLR
People have different identities spread across many sites.


      Where next?
      Where next?
      Where next?
OpenID is the obvious solution to this mess - if you use the same URL everywhere then sites
sharing data can be sure that you are the same person.

It’s not just for login. OpenID can also be used to prove you own an identity. You may not
want to use your AOL Instant Messenger identity as a login, but Dopplr can use the AOL
OpenID provider to let you prove what your AIM ID is. This lets us write an AIM bot that talks
to you by IM secure in the knowledge that we’re not leaking your information to an impostor.
OpenID is the obvious solution to this mess - if you use the same URL everywhere then sites
sharing data can be sure that you are the same person.

It’s not just for login. OpenID can also be used to prove you own an identity. You may not
want to use your AOL Instant Messenger identity as a login, but Dopplr can use the AOL
OpenID provider to let you prove what your AIM ID is. This lets us write an AIM bot that talks
to you by IM secure in the knowledge that we’re not leaking your information to an impostor.
“OpenId is the
                                                           game changer for
                                                           social networks,
                                                           allowing for
                                                           portability of the
                                                           social graph and
                                                           preferences.”
                                                                           –Simon Willison


                  ©2007 Julian Cash
                  flickr.com/photos/juliancash/673891099/

For more about OpenID, read Simon Willison’s many talks and writings. He knows.
Once we know who you are on other sites, we’d like to help you import your social network
from those sites to Dopplr.
Social Network
Once we know who you are on other sites, we’d like to help you import your social network
from those sites to Dopplr.
For example, Twitter mark up their contact lists with XFN and hCard. Using the heuristic of “if
you use the same username and real name on two systems, you’re probably the same
person”, we can show our users a suggested list of users who might be the same on Twitter
and Dopplr.
http://mofo.rubyforge.org




           http://code.whytheluckystiff.net/hpricot/




We use the Mofo library to parse microformats, and Hpricot to scrape raw HTML.
class Traveller < ActiveRecord::Base
         matches_identities
       end




              http://identity-matcher.googlecode.com/

We’re releasing the code we use to match identities across sites as a Rails plugin.
http://identity-matcher.googlecode.com/

This is an example of running the “match_twitter” call on Chris Messina’s profile.
>> Traveller.match_twitter(quot;factoryjoequot;)
          [0].map(&:name)




              http://identity-matcher.googlecode.com/

This is an example of running the “match_twitter” call on Chris Messina’s profile.
>> Traveller.match_twitter(quot;factoryjoequot;)
          [0].map(&:name)
       => [quot;Alexander Ljungquot;, quot;George Kellyquot;, quot;Amy
       Raymondquot;, quot;Andrew Crowquot;, quot;Jonathan
       Greenequot;, quot;Aubrey Sabalaquot;, quot;Matt Jonesquot;,
       quot;Blaine Cookquot;, quot;Brian Oberkirchquot;, quot;Buzz
       Andersenquot;, quot;David Ulevitchquot;, quot;Michael
       Buffingtonquot;, quot;Eric Costelloquot;, quot;Kaustubh
       Srikanthquot;, quot;Brian Del Vecchioquot;, quot;Jack Dorseyquot;,
       quot;joshua schachterquot;, quot;Kevin Lawverquot;, quot;Scott
       Bealequot;, quot;Lisa McMillanquot;, quot;Mary Hodderquot;, quot;Dan
       Safferquot;, quot;Rob Hayesquot;, quot;Thomas Vander Walquot;,
       quot;James Walkerquot;]
              http://identity-matcher.googlecode.com/

This is an example of running the “match_twitter” call on Chris Messina’s profile.
“the best way for you
                                                       to manage your
                                                     network is to stop
                                                   thinking about all of
                                                   the little pieces and
                                                   to start focusing on
                                                        the big picture”




As Gavin Bell has been telling us for a while, the tools for social network portability are
reaching maturity. David Recordon (pictured) is working on open systems at Six Apart to
aggregate and share social network information.
To make interesting mashups, we often need to delegate authority to 3rd-party automated
services. Code running elsewhere needs to have access to users’ accounts to act on their
behalf.
Delegating Authority
To make interesting mashups, we often need to delegate authority to 3rd-party automated
services. Code running elsewhere needs to have access to users’ accounts to act on their
behalf.
The worst way to do this (we’re guilty too) is for the 3rd-party to ask for the users login
details and fake a login as them. This is not only bad for privacy but also teaches users
terrible habits.
BBAuth
                                        AuthSub
                                        Authentication
                                        OpenAuth


There are several standards for delegating API access to a 3rd-party but they all work slightly
differently.
“An open protocol to
                allow secure API
                authentication in a
                simple and standard
                method from desktop
                and web applications.”
                                 http://oauth.net
So the OAuth project is standardising a single protocol that everyone can use. This will mean
one client library per language (rather than one per language per site) and an easier
landscape for users to understand.
There are many ways to get a piece of screen real-estate on other sites.
Widgets & Plugins
There are many ways to get a piece of screen real-estate on other sites.
Dopplr has a Facebook app that puts a Dopplr profile box on your profile page. It doesn’t try
to cram the Dopplr user experience into a small box; it just displays a useful summary of
your travel information.
It also publishes cute little items in your mini-feed.
The Facebook F8 platform is actually very nice to work with. There are a few gotchas:

1. Pages served under apps.facebook.com are proxied directly to your server at request time.
This makes development versions a bit of a pain as your dev server must be visible on the
internet. We do this with an SSH tunnel.
2. FBML is a subset of XHTML with some extra elements in the Facebook namespace.
Facebook rewrite all your IDs and classes in the HTML and CSS so that you can’t accidentally
change another app’s style.
proxies directly to your server




The Facebook F8 platform is actually very nice to work with. There are a few gotchas:

1. Pages served under apps.facebook.com are proxied directly to your server at request time.
This makes development versions a bit of a pain as your dev server must be visible on the
internet. We do this with an SSH tunnel.
2. FBML is a subset of XHTML with some extra elements in the Facebook namespace.
Facebook rewrite all your IDs and classes in the HTML and CSS so that you can’t accidentally
change another app’s style.
proxies directly to your server

                       rewrites your HTML, CSS and JS




The Facebook F8 platform is actually very nice to work with. There are a few gotchas:

1. Pages served under apps.facebook.com are proxied directly to your server at request time.
This makes development versions a bit of a pain as your dev server must be visible on the
internet. We do this with an SSH tunnel.
2. FBML is a subset of XHTML with some extra elements in the Facebook namespace.
Facebook rewrite all your IDs and classes in the HTML and CSS so that you can’t accidentally
change another app’s style.
proxies directly to your server

                       rewrites your HTML, CSS and JS


                       caches what it can




The Facebook F8 platform is actually very nice to work with. There are a few gotchas:

1. Pages served under apps.facebook.com are proxied directly to your server at request time.
This makes development versions a bit of a pain as your dev server must be visible on the
internet. We do this with an SSH tunnel.
2. FBML is a subset of XHTML with some extra elements in the Facebook namespace.
Facebook rewrite all your IDs and classes in the HTML and CSS so that you can’t accidentally
change another app’s style.
proxies directly to your server

                       rewrites your HTML, CSS and JS


                       caches what it can


                       needs you to respond quickly


The Facebook F8 platform is actually very nice to work with. There are a few gotchas:

1. Pages served under apps.facebook.com are proxied directly to your server at request time.
This makes development versions a bit of a pain as your dev server must be visible on the
internet. We do this with an SSH tunnel.
2. FBML is a subset of XHTML with some extra elements in the Facebook namespace.
Facebook rewrite all your IDs and classes in the HTML and CSS so that you can’t accidentally
change another app’s style.
http://rfacebook.rubyforge.org




We use the RFacebook library to abstract a lot of the low-level details away. It helps.
We also have a blog badge that follows the same style as the Facebook profilebox.
<div id=quot;dopplr-blog-badgequot;>
            <script
              src=quot;dopplr.com/blogbadge/...quot;>
            </script>
           </div>




The user only has to paste a tiny piece of code into their template to enable it. It looks for its
div and insert HTML and CSS there.
“Javascript is the
                                                  extra layer above the
                                                  mark-up ‘what is this
                                                  text’ and the CSS
                                                  ‘how should it be
                                                  displayed’. It adds a
                                                  new dimension,
                                                  ‘how should this
                                                  element behave.’”
                                                             –Christian Heilmann




This follows the principle of unobstrusive Javascript.
(function(i) {u = navigator.userAgent; e = /*@cc_on!@*/false; st = setTimeout;
      if(/webkit/i.test(u)){st(function(){dr = document.readyState;if(dr==quot;loadedquot;||
      dr==quot;completequot;){i();}else{st(arguments.callee,10);}},10);}else if((/mozilla/i.
      test(u)&&!/(compati)/.test(u))||(/opera/i.test(u))){document.addEventListener
      (quot;DOMContentLoadedquot;,i,false);} else if(e){(function(){t=document.createElement
      ('doc:ready');try{t.doScroll('left');i();t= null;}catch(e){st(arguments.callee,
      0);}})();}else{window.onload = i;}})(function() {
        // make the badge
      });




       http://www.kryogenix.org/days/2007/09/26/shortloaded


We also avoid the need for pulling in a full Javascript library such as jQuery just to get a
proper ‘page is loaded’ event, using this code.
Even application hosting is starting to become an on-demand commodity.
Utility Computing
Even application hosting is starting to become an on-demand commodity.
We’re currently experimenting with using Amazon S3 for MySQL backups, and EC2 to run a
complete copy of the Dopplr application and a MySQL slave replicated over an SSH tunnel
from live. This is looking like a good way to scale, and it’s a great way to run stats reports
and live backups without disturbing our main servers.
S3 Data Storage




We’re currently experimenting with using Amazon S3 for MySQL backups, and EC2 to run a
complete copy of the Dopplr application and a MySQL slave replicated over an SSH tunnel
from live. This is looking like a good way to scale, and it’s a great way to run stats reports
and live backups without disturbing our main servers.
S3 Data Storage


         Pre-built EC2 Rails



We’re currently experimenting with using Amazon S3 for MySQL backups, and EC2 to run a
complete copy of the Dopplr application and a MySQL slave replicated over an SSH tunnel
from live. This is looking like a good way to scale, and it’s a great way to run stats reports
and live backups without disturbing our main servers.
S3 Data Storage


         Pre-built EC2 Rails


                         MySQL Slave
We’re currently experimenting with using Amazon S3 for MySQL backups, and EC2 to run a
complete copy of the Dopplr application and a MySQL slave replicated over an SSH tunnel
from live. This is looking like a good way to scale, and it’s a great way to run stats reports
and live backups without disturbing our main servers.
Sharing Data
       User Identity
     Social Network
Delegating Authority
  Widgets & Plugins
  Utility Computing
Thank you


    Matt Biddulph




                    DOPPLR
           DOPPLR
  DOPPLR




Where next?

More Related Content

What's hot

Why the iPad UI matters, And how it differs from the Tablet PC, but also from...
Why the iPad UI matters, And how it differs from the Tablet PC, but also from...Why the iPad UI matters, And how it differs from the Tablet PC, but also from...
Why the iPad UI matters, And how it differs from the Tablet PC, but also from...Fabien Marry
 
iPhone Development: Zero to Sixty
iPhone Development: Zero to SixtyiPhone Development: Zero to Sixty
iPhone Development: Zero to SixtyThomas Swift
 
iPhone - Human Interface Guidelines
iPhone - Human Interface GuidelinesiPhone - Human Interface Guidelines
iPhone - Human Interface GuidelinesMartin Ebner
 
iOS Human Interface Guidelines (HCI)
iOS Human Interface Guidelines (HCI)iOS Human Interface Guidelines (HCI)
iOS Human Interface Guidelines (HCI)Mohammad Khalil
 
How to market your app
How to market your appHow to market your app
How to market your appOuriel Ohayon
 
如何變成iOS App開發魔法師
如何變成iOS App開發魔法師如何變成iOS App開發魔法師
如何變成iOS App開發魔法師彼得潘 Pan
 
Programing for the iPhone
Programing for the iPhonePrograming for the iPhone
Programing for the iPhoneMike Qaissaunee
 
iPhone transfer software
iPhone transfer softwareiPhone transfer software
iPhone transfer softwarejohnjuly123
 
不能承受的感動 - iOS App實機測試
不能承受的感動 - iOS App實機測試不能承受的感動 - iOS App實機測試
不能承受的感動 - iOS App實機測試彼得潘 Pan
 
iPad/iPhone - UI Design Resources
iPad/iPhone - UI Design ResourcesiPad/iPhone - UI Design Resources
iPad/iPhone - UI Design ResourcesMichael Moir
 
7 User Experience Lessons from the iPhone (Introducing UX)
7 User Experience Lessons from the iPhone (Introducing UX)7 User Experience Lessons from the iPhone (Introducing UX)
7 User Experience Lessons from the iPhone (Introducing UX)Stephen Anderson
 
iPhone Development Overview
iPhone Development OverviewiPhone Development Overview
iPhone Development OverviewWilliam Taysom
 
Building windows phone_apps_-_a_developers_guide_v7_no_cover
Building windows phone_apps_-_a_developers_guide_v7_no_coverBuilding windows phone_apps_-_a_developers_guide_v7_no_cover
Building windows phone_apps_-_a_developers_guide_v7_no_coverPhan Sanh
 
Best Practice iPhone SDK App Design
Best Practice iPhone SDK App DesignBest Practice iPhone SDK App Design
Best Practice iPhone SDK App DesignBess Ho
 
Ju chun ko-about-all-with-linked in-mit
Ju chun ko-about-all-with-linked in-mitJu chun ko-about-all-with-linked in-mit
Ju chun ko-about-all-with-linked in-mitJu Chun Ko
 
Orta Therox
Orta TheroxOrta Therox
Orta TheroxCodeFest
 
Introduction to iPhone App Development - midVentures DESIGN+DEVELOP
Introduction to iPhone App Development - midVentures DESIGN+DEVELOPIntroduction to iPhone App Development - midVentures DESIGN+DEVELOP
Introduction to iPhone App Development - midVentures DESIGN+DEVELOPKeyLimeTie
 

What's hot (20)

Why the iPad UI matters, And how it differs from the Tablet PC, but also from...
Why the iPad UI matters, And how it differs from the Tablet PC, but also from...Why the iPad UI matters, And how it differs from the Tablet PC, but also from...
Why the iPad UI matters, And how it differs from the Tablet PC, but also from...
 
iPhone Development: Zero to Sixty
iPhone Development: Zero to SixtyiPhone Development: Zero to Sixty
iPhone Development: Zero to Sixty
 
iPhone Applications & Luxury Brands - Updated May 5, 2010
iPhone Applications & Luxury Brands - Updated May 5, 2010iPhone Applications & Luxury Brands - Updated May 5, 2010
iPhone Applications & Luxury Brands - Updated May 5, 2010
 
iPhone - Human Interface Guidelines
iPhone - Human Interface GuidelinesiPhone - Human Interface Guidelines
iPhone - Human Interface Guidelines
 
iOS Human Interface Guidelines (HCI)
iOS Human Interface Guidelines (HCI)iOS Human Interface Guidelines (HCI)
iOS Human Interface Guidelines (HCI)
 
How to market your app
How to market your appHow to market your app
How to market your app
 
如何變成iOS App開發魔法師
如何變成iOS App開發魔法師如何變成iOS App開發魔法師
如何變成iOS App開發魔法師
 
Programing for the iPhone
Programing for the iPhonePrograming for the iPhone
Programing for the iPhone
 
iPhone transfer software
iPhone transfer softwareiPhone transfer software
iPhone transfer software
 
不能承受的感動 - iOS App實機測試
不能承受的感動 - iOS App實機測試不能承受的感動 - iOS App實機測試
不能承受的感動 - iOS App實機測試
 
iPad/iPhone - UI Design Resources
iPad/iPhone - UI Design ResourcesiPad/iPhone - UI Design Resources
iPad/iPhone - UI Design Resources
 
7 User Experience Lessons from the iPhone (Introducing UX)
7 User Experience Lessons from the iPhone (Introducing UX)7 User Experience Lessons from the iPhone (Introducing UX)
7 User Experience Lessons from the iPhone (Introducing UX)
 
Smart phones
Smart phonesSmart phones
Smart phones
 
iPhone Development Overview
iPhone Development OverviewiPhone Development Overview
iPhone Development Overview
 
Building windows phone_apps_-_a_developers_guide_v7_no_cover
Building windows phone_apps_-_a_developers_guide_v7_no_coverBuilding windows phone_apps_-_a_developers_guide_v7_no_cover
Building windows phone_apps_-_a_developers_guide_v7_no_cover
 
Best Practice iPhone SDK App Design
Best Practice iPhone SDK App DesignBest Practice iPhone SDK App Design
Best Practice iPhone SDK App Design
 
Ju chun ko-about-all-with-linked in-mit
Ju chun ko-about-all-with-linked in-mitJu chun ko-about-all-with-linked in-mit
Ju chun ko-about-all-with-linked in-mit
 
Doran-C4L2010
Doran-C4L2010Doran-C4L2010
Doran-C4L2010
 
Orta Therox
Orta TheroxOrta Therox
Orta Therox
 
Introduction to iPhone App Development - midVentures DESIGN+DEVELOP
Introduction to iPhone App Development - midVentures DESIGN+DEVELOPIntroduction to iPhone App Development - midVentures DESIGN+DEVELOP
Introduction to iPhone App Development - midVentures DESIGN+DEVELOP
 

Viewers also liked

Pownce Lessons Learned
Pownce Lessons LearnedPownce Lessons Learned
Pownce Lessons Learnedleahculver
 
Ruby On Rails Overview
Ruby On Rails OverviewRuby On Rails Overview
Ruby On Rails Overviewjonkinney
 
Rails Cookbook
Rails CookbookRails Cookbook
Rails Cookbookjonkinney
 
The Open, Social Web
The Open, Social WebThe Open, Social Web
The Open, Social WebChris Messina
 
Ruby on Rails Presentation
Ruby on Rails PresentationRuby on Rails Presentation
Ruby on Rails PresentationJoost Hietbrink
 
SXSW09: The Future Of Social Networks
SXSW09: The Future Of Social NetworksSXSW09: The Future Of Social Networks
SXSW09: The Future Of Social NetworksCharlene Li
 
OpenID Bootcamp Tutorial
OpenID Bootcamp TutorialOpenID Bootcamp Tutorial
OpenID Bootcamp TutorialDavid Recordon
 
OpenID Foundation Foundation Financial API (FAPI) WG
OpenID Foundation Foundation Financial API (FAPI) WGOpenID Foundation Foundation Financial API (FAPI) WG
OpenID Foundation Foundation Financial API (FAPI) WGNat Sakimura
 
Ruby on Rails Presentation
Ruby on Rails PresentationRuby on Rails Presentation
Ruby on Rails Presentationadamcookeuk
 
Implications Of OpenID (Google Tech Talk)
Implications Of OpenID (Google Tech Talk)Implications Of OpenID (Google Tech Talk)
Implications Of OpenID (Google Tech Talk)Simon Willison
 
OpenID Foundation Retail Advisory Committee Webinar
OpenID Foundation Retail Advisory Committee WebinarOpenID Foundation Retail Advisory Committee Webinar
OpenID Foundation Retail Advisory Committee WebinarMatterport
 
Portable Social Graphs - Imagining their Potential
Portable Social Graphs - Imagining their PotentialPortable Social Graphs - Imagining their Potential
Portable Social Graphs - Imagining their PotentialShiv Singh
 
Beyond Squishy: The Principles of Adaptive Design
Beyond Squishy: The Principles of Adaptive DesignBeyond Squishy: The Principles of Adaptive Design
Beyond Squishy: The Principles of Adaptive DesignBrad Frost
 

Viewers also liked (14)

Pownce Lessons Learned
Pownce Lessons LearnedPownce Lessons Learned
Pownce Lessons Learned
 
Ruby On Rails Overview
Ruby On Rails OverviewRuby On Rails Overview
Ruby On Rails Overview
 
Rails Cookbook
Rails CookbookRails Cookbook
Rails Cookbook
 
The Open, Social Web
The Open, Social WebThe Open, Social Web
The Open, Social Web
 
Ruby on Rails Presentation
Ruby on Rails PresentationRuby on Rails Presentation
Ruby on Rails Presentation
 
SXSW09: The Future Of Social Networks
SXSW09: The Future Of Social NetworksSXSW09: The Future Of Social Networks
SXSW09: The Future Of Social Networks
 
OpenID Bootcamp Tutorial
OpenID Bootcamp TutorialOpenID Bootcamp Tutorial
OpenID Bootcamp Tutorial
 
OpenID Foundation Foundation Financial API (FAPI) WG
OpenID Foundation Foundation Financial API (FAPI) WGOpenID Foundation Foundation Financial API (FAPI) WG
OpenID Foundation Foundation Financial API (FAPI) WG
 
Advanced Django
Advanced DjangoAdvanced Django
Advanced Django
 
Ruby on Rails Presentation
Ruby on Rails PresentationRuby on Rails Presentation
Ruby on Rails Presentation
 
Implications Of OpenID (Google Tech Talk)
Implications Of OpenID (Google Tech Talk)Implications Of OpenID (Google Tech Talk)
Implications Of OpenID (Google Tech Talk)
 
OpenID Foundation Retail Advisory Committee Webinar
OpenID Foundation Retail Advisory Committee WebinarOpenID Foundation Retail Advisory Committee Webinar
OpenID Foundation Retail Advisory Committee Webinar
 
Portable Social Graphs - Imagining their Potential
Portable Social Graphs - Imagining their PotentialPortable Social Graphs - Imagining their Potential
Portable Social Graphs - Imagining their Potential
 
Beyond Squishy: The Principles of Adaptive Design
Beyond Squishy: The Principles of Adaptive DesignBeyond Squishy: The Principles of Adaptive Design
Beyond Squishy: The Principles of Adaptive Design
 

Similar to Coding on the Shoulders of Giants

moscow_developer_day
moscow_developer_daymoscow_developer_day
moscow_developer_dayxlight
 
The Internet
The InternetThe Internet
The Internetajf0310
 
New Assumptions for Designing for the Social Web
New Assumptions for Designing for the Social WebNew Assumptions for Designing for the Social Web
New Assumptions for Designing for the Social WebChris Messina
 
The Browser is Dead, Long Live the Web!
The Browser is Dead, Long Live the Web!The Browser is Dead, Long Live the Web!
The Browser is Dead, Long Live the Web!Jonathan Stark
 
The Browser is Dead, Long Live the Web! (Jonathan Stark)
 The Browser is Dead, Long Live the Web! (Jonathan Stark) The Browser is Dead, Long Live the Web! (Jonathan Stark)
The Browser is Dead, Long Live the Web! (Jonathan Stark)Future Insights
 
MIS Project Joseph Hernandez
MIS Project Joseph HernandezMIS Project Joseph Hernandez
MIS Project Joseph HernandezJoseph Hernandez
 
Web 2.0 Expo Berlin: Open Platforms and the Social Graph
Web 2.0 Expo Berlin: Open Platforms and the Social GraphWeb 2.0 Expo Berlin: Open Platforms and the Social Graph
Web 2.0 Expo Berlin: Open Platforms and the Social GraphDavid Recordon
 
Social media and challenges ahead by Petter Warnsberg
Social media and challenges ahead by Petter WarnsbergSocial media and challenges ahead by Petter Warnsberg
Social media and challenges ahead by Petter WarnsbergDina El-sofy
 
Implementing the Social Web
Implementing the Social WebImplementing the Social Web
Implementing the Social WebChris Messina
 
web 2.0 Implementing the Social Web
web 2.0 Implementing the Social Webweb 2.0 Implementing the Social Web
web 2.0 Implementing the Social WebAnabelle P
 
Catalike - Find like-minded strangers near you
Catalike - Find like-minded strangers near youCatalike - Find like-minded strangers near you
Catalike - Find like-minded strangers near youjaxomlotus
 
Catalike plan (5)
Catalike plan (5)Catalike plan (5)
Catalike plan (5)jaxomlotus
 
Data as Seductive Material, Spring Summit, Umeå March09
Data as Seductive Material, Spring Summit, Umeå March09Data as Seductive Material, Spring Summit, Umeå March09
Data as Seductive Material, Spring Summit, Umeå March09Matt Jones
 
The Next Wave of AR: Mobile Social Interaction, Right Here, Right Now!
The Next Wave of AR: Mobile Social Interaction, Right Here, Right Now!The Next Wave of AR: Mobile Social Interaction, Right Here, Right Now!
The Next Wave of AR: Mobile Social Interaction, Right Here, Right Now!Tish Shute
 
The Next Wave of AR: Mobile Social Interaction Right Here, Right Now!
The Next Wave of AR: Mobile Social Interaction Right Here, Right Now!The Next Wave of AR: Mobile Social Interaction Right Here, Right Now!
The Next Wave of AR: Mobile Social Interaction Right Here, Right Now!Tish Shute
 
It's The People Stupid!
It's The People Stupid!It's The People Stupid!
It's The People Stupid!Addison Berry
 
Society doesn't exist
Society doesn't existSociety doesn't exist
Society doesn't existJodi Dean
 
HDSMT Technical Report - X14109824
HDSMT Technical Report - X14109824HDSMT Technical Report - X14109824
HDSMT Technical Report - X14109824Tadhg
 

Similar to Coding on the Shoulders of Giants (20)

moscow_developer_day
moscow_developer_daymoscow_developer_day
moscow_developer_day
 
Foaf Openid Milan
Foaf Openid MilanFoaf Openid Milan
Foaf Openid Milan
 
The Internet
The InternetThe Internet
The Internet
 
New Assumptions for Designing for the Social Web
New Assumptions for Designing for the Social WebNew Assumptions for Designing for the Social Web
New Assumptions for Designing for the Social Web
 
The Browser is Dead, Long Live the Web!
The Browser is Dead, Long Live the Web!The Browser is Dead, Long Live the Web!
The Browser is Dead, Long Live the Web!
 
The Browser is Dead, Long Live the Web! (Jonathan Stark)
 The Browser is Dead, Long Live the Web! (Jonathan Stark) The Browser is Dead, Long Live the Web! (Jonathan Stark)
The Browser is Dead, Long Live the Web! (Jonathan Stark)
 
MIS Project Joseph Hernandez
MIS Project Joseph HernandezMIS Project Joseph Hernandez
MIS Project Joseph Hernandez
 
Web 2.0 Expo Berlin: Open Platforms and the Social Graph
Web 2.0 Expo Berlin: Open Platforms and the Social GraphWeb 2.0 Expo Berlin: Open Platforms and the Social Graph
Web 2.0 Expo Berlin: Open Platforms and the Social Graph
 
Social media and challenges ahead by Petter Warnsberg
Social media and challenges ahead by Petter WarnsbergSocial media and challenges ahead by Petter Warnsberg
Social media and challenges ahead by Petter Warnsberg
 
Implementing the Social Web
Implementing the Social WebImplementing the Social Web
Implementing the Social Web
 
web 2.0 Implementing the Social Web
web 2.0 Implementing the Social Webweb 2.0 Implementing the Social Web
web 2.0 Implementing the Social Web
 
Catalike - Find like-minded strangers near you
Catalike - Find like-minded strangers near youCatalike - Find like-minded strangers near you
Catalike - Find like-minded strangers near you
 
Catalike plan (5)
Catalike plan (5)Catalike plan (5)
Catalike plan (5)
 
The DiSo Project
The DiSo ProjectThe DiSo Project
The DiSo Project
 
Data as Seductive Material, Spring Summit, Umeå March09
Data as Seductive Material, Spring Summit, Umeå March09Data as Seductive Material, Spring Summit, Umeå March09
Data as Seductive Material, Spring Summit, Umeå March09
 
The Next Wave of AR: Mobile Social Interaction, Right Here, Right Now!
The Next Wave of AR: Mobile Social Interaction, Right Here, Right Now!The Next Wave of AR: Mobile Social Interaction, Right Here, Right Now!
The Next Wave of AR: Mobile Social Interaction, Right Here, Right Now!
 
The Next Wave of AR: Mobile Social Interaction Right Here, Right Now!
The Next Wave of AR: Mobile Social Interaction Right Here, Right Now!The Next Wave of AR: Mobile Social Interaction Right Here, Right Now!
The Next Wave of AR: Mobile Social Interaction Right Here, Right Now!
 
It's The People Stupid!
It's The People Stupid!It's The People Stupid!
It's The People Stupid!
 
Society doesn't exist
Society doesn't existSociety doesn't exist
Society doesn't exist
 
HDSMT Technical Report - X14109824
HDSMT Technical Report - X14109824HDSMT Technical Report - X14109824
HDSMT Technical Report - X14109824
 

More from Matt Biddulph

The IoT Conversation
The IoT ConversationThe IoT Conversation
The IoT ConversationMatt Biddulph
 
EAN’s World of Data: Prototyping apps using real data
EAN’s World of Data: Prototyping apps using real dataEAN’s World of Data: Prototyping apps using real data
EAN’s World of Data: Prototyping apps using real dataMatt Biddulph
 
Where 2012 prototyping workshop
Where 2012 prototyping workshopWhere 2012 prototyping workshop
Where 2012 prototyping workshopMatt Biddulph
 
Monkigras 2012: Networks Of Data
Monkigras 2012: Networks Of DataMonkigras 2012: Networks Of Data
Monkigras 2012: Networks Of DataMatt Biddulph
 
Science Hackday: using visualisation to understand your data
Science Hackday: using visualisation to understand your dataScience Hackday: using visualisation to understand your data
Science Hackday: using visualisation to understand your dataMatt Biddulph
 
Place graphs are the new social graphs
Place graphs are the new social graphsPlace graphs are the new social graphs
Place graphs are the new social graphsMatt Biddulph
 
Cognitive Cities: City analytics
Cognitive Cities: City analyticsCognitive Cities: City analytics
Cognitive Cities: City analyticsMatt Biddulph
 
Prototyping with data at Nokia
Prototyping with data at NokiaPrototyping with data at Nokia
Prototyping with data at NokiaMatt Biddulph
 
Mobile Social Location (Web Directions @media version)
Mobile Social Location (Web Directions @media version)Mobile Social Location (Web Directions @media version)
Mobile Social Location (Web Directions @media version)Matt Biddulph
 
Mobile Social Location (Web 2.0 NYC edition)
Mobile Social Location (Web 2.0 NYC edition)Mobile Social Location (Web 2.0 NYC edition)
Mobile Social Location (Web 2.0 NYC edition)Matt Biddulph
 
iPhone Coding For Web Developers
iPhone Coding For Web DevelopersiPhone Coding For Web Developers
iPhone Coding For Web DevelopersMatt Biddulph
 
Tinkering with game controllers
Tinkering with game controllersTinkering with game controllers
Tinkering with game controllersMatt Biddulph
 
SXSW 2008: Creative Collaboration
SXSW 2008: Creative CollaborationSXSW 2008: Creative Collaboration
SXSW 2008: Creative CollaborationMatt Biddulph
 
Connecting First And Second Life
Connecting First And Second LifeConnecting First And Second Life
Connecting First And Second LifeMatt Biddulph
 
Coders need to learn hardware hacking NOW
Coders need to learn hardware hacking NOWCoders need to learn hardware hacking NOW
Coders need to learn hardware hacking NOWMatt Biddulph
 

More from Matt Biddulph (16)

The IoT Conversation
The IoT ConversationThe IoT Conversation
The IoT Conversation
 
EAN’s World of Data: Prototyping apps using real data
EAN’s World of Data: Prototyping apps using real dataEAN’s World of Data: Prototyping apps using real data
EAN’s World of Data: Prototyping apps using real data
 
Where 2012 prototyping workshop
Where 2012 prototyping workshopWhere 2012 prototyping workshop
Where 2012 prototyping workshop
 
Monkigras 2012: Networks Of Data
Monkigras 2012: Networks Of DataMonkigras 2012: Networks Of Data
Monkigras 2012: Networks Of Data
 
Science Hackday: using visualisation to understand your data
Science Hackday: using visualisation to understand your dataScience Hackday: using visualisation to understand your data
Science Hackday: using visualisation to understand your data
 
Place graphs are the new social graphs
Place graphs are the new social graphsPlace graphs are the new social graphs
Place graphs are the new social graphs
 
Cognitive Cities: City analytics
Cognitive Cities: City analyticsCognitive Cities: City analytics
Cognitive Cities: City analytics
 
Prototyping with data at Nokia
Prototyping with data at NokiaPrototyping with data at Nokia
Prototyping with data at Nokia
 
Mobile Social Location (Web Directions @media version)
Mobile Social Location (Web Directions @media version)Mobile Social Location (Web Directions @media version)
Mobile Social Location (Web Directions @media version)
 
Mobile Social Location (Web 2.0 NYC edition)
Mobile Social Location (Web 2.0 NYC edition)Mobile Social Location (Web 2.0 NYC edition)
Mobile Social Location (Web 2.0 NYC edition)
 
iPhone Coding For Web Developers
iPhone Coding For Web DevelopersiPhone Coding For Web Developers
iPhone Coding For Web Developers
 
Tinkering with game controllers
Tinkering with game controllersTinkering with game controllers
Tinkering with game controllers
 
The Realtime Web
The Realtime WebThe Realtime Web
The Realtime Web
 
SXSW 2008: Creative Collaboration
SXSW 2008: Creative CollaborationSXSW 2008: Creative Collaboration
SXSW 2008: Creative Collaboration
 
Connecting First And Second Life
Connecting First And Second LifeConnecting First And Second Life
Connecting First And Second Life
 
Coders need to learn hardware hacking NOW
Coders need to learn hardware hacking NOWCoders need to learn hardware hacking NOW
Coders need to learn hardware hacking NOW
 

Recently uploaded

TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 

Recently uploaded (20)

TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 

Coding on the Shoulders of Giants

  • 1. Coding on the Shoulders of Giants Matt Biddulph DOPPLR DOPPLR Dopplr is a service for frequent travellers and their friends. It lets you share your travel plans with a group of trusted people that you choose. DOPPLR This worldmap shows where everyone on Dopplr came to London from on October 4th 2007 (the day this talk was given at FOWA) Where next?
  • 2. DOPPLR DOPPLR Dopplr is a service for frequent travellers and their friends. It lets you share your travel plans with a group of trusted people that you choose. DOPPLR This worldmap shows where everyone on Dopplr came to London from on October 4th 2007 (the day this talk was given at FOWA) Where next?
  • 3. A quot;platformquot; is a system that can be programmed and therefore customized by outside developers – users – and in that way, adapted to countless needs and niches that the platform's original developers could not have possibly contemplated, much less had time to accommodate. –Marc Andreessen, http://blog.pmarca.com/2007/09/the-three-kinds.html Today I’m going to talk about using the internet as a platform that your webapps can build on top of.
  • 4. A quot;platformquot; is a system that can be programmed and therefore customized by outside developers – users – and in that way, adapted to countless needs and niches that the platform's original developers could not have possibly contemplated, much less had time to accommodate. –Marc Andreessen, http://blog.pmarca.com/2007/09/the-three-kinds.html It’s impossible to predict all possible uses that your users might want to make of your app and its data, so we’re going to look at the technologies that developers can use today that maximise possibilities for integration and reuse.
  • 5. Dopplr is a very targeted web application, and we have no wish to reinvent the wheel on any technology or function that isn’t part of our core mission to find serendipity in travel. We designed Dopplr from the start to be a Small Piece, Loosely Joined. We believe that your data belongs to you, and that you should be able to have it anywhere you want it - even if you don’t frequently visit dopplr.com
  • 6. Everything in this talk is based on live code that’s running on dopplr.com today. I’ll be pointing out what libraries we used. Because Dopplr’s written in Ruby on Rails, that’s where all the examples will come from.
  • 7. The most basic and most important principle of integrating web apps today is sharing data. A good webapp helps its users make distinctive structured data (whether directly or indirectly) and does useful things with it.
  • 8. Sharing Data The most basic and most important principle of integrating web apps today is sharing data. A good webapp helps its users make distinctive structured data (whether directly or indirectly) and does useful things with it.
  • 9. The simplest way to expose data in a webapp is to supply feeds in machine-readable formats. Dopplr gives its users a “my trips” feed. As a newsfeed, it’s not all that useful as it tells you things you already know (the trips that you’ve added). As a lightweight read-only API, it works very well. We mark up our feed with all the appropriate machine-readable formats that we can find: GeoRSS, hCalendar and Google Calendar GData. This means it’s trivial to plug it into other systems like Yahoo Pipes, and mash it up with other data.
  • 10. The simplest way to expose data in a webapp is to supply feeds in machine-readable formats. Dopplr gives its users a “my trips” feed. As a newsfeed, it’s not all that useful as it tells you things you already know (the trips that you’ve added). As a lightweight read-only API, it works very well. We mark up our feed with all the appropriate machine-readable formats that we can find: GeoRSS, hCalendar and Google Calendar GData. This means it’s trivial to plug it into other systems like Yahoo Pipes, and mash it up with other data.
  • 11. The simplest way to expose data in a webapp is to supply feeds in machine-readable formats. Dopplr gives its users a “my trips” feed. As a newsfeed, it’s not all that useful as it tells you things you already know (the trips that you’ve added). As a lightweight read-only API, it works very well. We mark up our feed with all the appropriate machine-readable formats that we can find: GeoRSS, hCalendar and Google Calendar GData. This means it’s trivial to plug it into other systems like Yahoo Pipes, and mash it up with other data.
  • 12. It’s also easy to transform our data into KML and view it in Google Earth.
  • 13. And NetNewsWire lets you import trip details in iCal because of the hCalendar.
  • 14. We also mark up our contact lists using hCard.
  • 15. We also mark up our contact lists using hCard.
  • 16. http://www.hauntedcastle.org/castle/ And via our API, users are starting to create interesting tools like this Carbon Calculator.
  • 17. If we want to integrate your Dopplr data with your data from elsewhere, we need to know who you are on other sites.
  • 18. User Identity If we want to integrate your Dopplr data with your data from elsewhere, we need to know who you are on other sites.
  • 19. DOPPLR DOPPLR DOPPLR People have different identities spread across many sites. Where next? Where next? Where next?
  • 20. OpenID is the obvious solution to this mess - if you use the same URL everywhere then sites sharing data can be sure that you are the same person. It’s not just for login. OpenID can also be used to prove you own an identity. You may not want to use your AOL Instant Messenger identity as a login, but Dopplr can use the AOL OpenID provider to let you prove what your AIM ID is. This lets us write an AIM bot that talks to you by IM secure in the knowledge that we’re not leaking your information to an impostor.
  • 21. OpenID is the obvious solution to this mess - if you use the same URL everywhere then sites sharing data can be sure that you are the same person. It’s not just for login. OpenID can also be used to prove you own an identity. You may not want to use your AOL Instant Messenger identity as a login, but Dopplr can use the AOL OpenID provider to let you prove what your AIM ID is. This lets us write an AIM bot that talks to you by IM secure in the knowledge that we’re not leaking your information to an impostor.
  • 22. “OpenId is the game changer for social networks, allowing for portability of the social graph and preferences.” –Simon Willison ©2007 Julian Cash flickr.com/photos/juliancash/673891099/ For more about OpenID, read Simon Willison’s many talks and writings. He knows.
  • 23. Once we know who you are on other sites, we’d like to help you import your social network from those sites to Dopplr.
  • 24. Social Network Once we know who you are on other sites, we’d like to help you import your social network from those sites to Dopplr.
  • 25. For example, Twitter mark up their contact lists with XFN and hCard. Using the heuristic of “if you use the same username and real name on two systems, you’re probably the same person”, we can show our users a suggested list of users who might be the same on Twitter and Dopplr.
  • 26. http://mofo.rubyforge.org http://code.whytheluckystiff.net/hpricot/ We use the Mofo library to parse microformats, and Hpricot to scrape raw HTML.
  • 27. class Traveller < ActiveRecord::Base matches_identities end http://identity-matcher.googlecode.com/ We’re releasing the code we use to match identities across sites as a Rails plugin.
  • 28. http://identity-matcher.googlecode.com/ This is an example of running the “match_twitter” call on Chris Messina’s profile.
  • 29. >> Traveller.match_twitter(quot;factoryjoequot;) [0].map(&:name) http://identity-matcher.googlecode.com/ This is an example of running the “match_twitter” call on Chris Messina’s profile.
  • 30. >> Traveller.match_twitter(quot;factoryjoequot;) [0].map(&:name) => [quot;Alexander Ljungquot;, quot;George Kellyquot;, quot;Amy Raymondquot;, quot;Andrew Crowquot;, quot;Jonathan Greenequot;, quot;Aubrey Sabalaquot;, quot;Matt Jonesquot;, quot;Blaine Cookquot;, quot;Brian Oberkirchquot;, quot;Buzz Andersenquot;, quot;David Ulevitchquot;, quot;Michael Buffingtonquot;, quot;Eric Costelloquot;, quot;Kaustubh Srikanthquot;, quot;Brian Del Vecchioquot;, quot;Jack Dorseyquot;, quot;joshua schachterquot;, quot;Kevin Lawverquot;, quot;Scott Bealequot;, quot;Lisa McMillanquot;, quot;Mary Hodderquot;, quot;Dan Safferquot;, quot;Rob Hayesquot;, quot;Thomas Vander Walquot;, quot;James Walkerquot;] http://identity-matcher.googlecode.com/ This is an example of running the “match_twitter” call on Chris Messina’s profile.
  • 31. “the best way for you to manage your network is to stop thinking about all of the little pieces and to start focusing on the big picture” As Gavin Bell has been telling us for a while, the tools for social network portability are reaching maturity. David Recordon (pictured) is working on open systems at Six Apart to aggregate and share social network information.
  • 32. To make interesting mashups, we often need to delegate authority to 3rd-party automated services. Code running elsewhere needs to have access to users’ accounts to act on their behalf.
  • 33. Delegating Authority To make interesting mashups, we often need to delegate authority to 3rd-party automated services. Code running elsewhere needs to have access to users’ accounts to act on their behalf.
  • 34. The worst way to do this (we’re guilty too) is for the 3rd-party to ask for the users login details and fake a login as them. This is not only bad for privacy but also teaches users terrible habits.
  • 35. BBAuth AuthSub Authentication OpenAuth There are several standards for delegating API access to a 3rd-party but they all work slightly differently.
  • 36. “An open protocol to allow secure API authentication in a simple and standard method from desktop and web applications.” http://oauth.net So the OAuth project is standardising a single protocol that everyone can use. This will mean one client library per language (rather than one per language per site) and an easier landscape for users to understand.
  • 37. There are many ways to get a piece of screen real-estate on other sites.
  • 38. Widgets & Plugins There are many ways to get a piece of screen real-estate on other sites.
  • 39. Dopplr has a Facebook app that puts a Dopplr profile box on your profile page. It doesn’t try to cram the Dopplr user experience into a small box; it just displays a useful summary of your travel information.
  • 40. It also publishes cute little items in your mini-feed.
  • 41. The Facebook F8 platform is actually very nice to work with. There are a few gotchas: 1. Pages served under apps.facebook.com are proxied directly to your server at request time. This makes development versions a bit of a pain as your dev server must be visible on the internet. We do this with an SSH tunnel. 2. FBML is a subset of XHTML with some extra elements in the Facebook namespace. Facebook rewrite all your IDs and classes in the HTML and CSS so that you can’t accidentally change another app’s style.
  • 42. proxies directly to your server The Facebook F8 platform is actually very nice to work with. There are a few gotchas: 1. Pages served under apps.facebook.com are proxied directly to your server at request time. This makes development versions a bit of a pain as your dev server must be visible on the internet. We do this with an SSH tunnel. 2. FBML is a subset of XHTML with some extra elements in the Facebook namespace. Facebook rewrite all your IDs and classes in the HTML and CSS so that you can’t accidentally change another app’s style.
  • 43. proxies directly to your server rewrites your HTML, CSS and JS The Facebook F8 platform is actually very nice to work with. There are a few gotchas: 1. Pages served under apps.facebook.com are proxied directly to your server at request time. This makes development versions a bit of a pain as your dev server must be visible on the internet. We do this with an SSH tunnel. 2. FBML is a subset of XHTML with some extra elements in the Facebook namespace. Facebook rewrite all your IDs and classes in the HTML and CSS so that you can’t accidentally change another app’s style.
  • 44. proxies directly to your server rewrites your HTML, CSS and JS caches what it can The Facebook F8 platform is actually very nice to work with. There are a few gotchas: 1. Pages served under apps.facebook.com are proxied directly to your server at request time. This makes development versions a bit of a pain as your dev server must be visible on the internet. We do this with an SSH tunnel. 2. FBML is a subset of XHTML with some extra elements in the Facebook namespace. Facebook rewrite all your IDs and classes in the HTML and CSS so that you can’t accidentally change another app’s style.
  • 45. proxies directly to your server rewrites your HTML, CSS and JS caches what it can needs you to respond quickly The Facebook F8 platform is actually very nice to work with. There are a few gotchas: 1. Pages served under apps.facebook.com are proxied directly to your server at request time. This makes development versions a bit of a pain as your dev server must be visible on the internet. We do this with an SSH tunnel. 2. FBML is a subset of XHTML with some extra elements in the Facebook namespace. Facebook rewrite all your IDs and classes in the HTML and CSS so that you can’t accidentally change another app’s style.
  • 46. http://rfacebook.rubyforge.org We use the RFacebook library to abstract a lot of the low-level details away. It helps.
  • 47. We also have a blog badge that follows the same style as the Facebook profilebox.
  • 48.
  • 49.
  • 50. <div id=quot;dopplr-blog-badgequot;> <script src=quot;dopplr.com/blogbadge/...quot;> </script> </div> The user only has to paste a tiny piece of code into their template to enable it. It looks for its div and insert HTML and CSS there.
  • 51. “Javascript is the extra layer above the mark-up ‘what is this text’ and the CSS ‘how should it be displayed’. It adds a new dimension, ‘how should this element behave.’” –Christian Heilmann This follows the principle of unobstrusive Javascript.
  • 52. (function(i) {u = navigator.userAgent; e = /*@cc_on!@*/false; st = setTimeout; if(/webkit/i.test(u)){st(function(){dr = document.readyState;if(dr==quot;loadedquot;|| dr==quot;completequot;){i();}else{st(arguments.callee,10);}},10);}else if((/mozilla/i. test(u)&&!/(compati)/.test(u))||(/opera/i.test(u))){document.addEventListener (quot;DOMContentLoadedquot;,i,false);} else if(e){(function(){t=document.createElement ('doc:ready');try{t.doScroll('left');i();t= null;}catch(e){st(arguments.callee, 0);}})();}else{window.onload = i;}})(function() { // make the badge }); http://www.kryogenix.org/days/2007/09/26/shortloaded We also avoid the need for pulling in a full Javascript library such as jQuery just to get a proper ‘page is loaded’ event, using this code.
  • 53. Even application hosting is starting to become an on-demand commodity.
  • 54. Utility Computing Even application hosting is starting to become an on-demand commodity.
  • 55. We’re currently experimenting with using Amazon S3 for MySQL backups, and EC2 to run a complete copy of the Dopplr application and a MySQL slave replicated over an SSH tunnel from live. This is looking like a good way to scale, and it’s a great way to run stats reports and live backups without disturbing our main servers.
  • 56. S3 Data Storage We’re currently experimenting with using Amazon S3 for MySQL backups, and EC2 to run a complete copy of the Dopplr application and a MySQL slave replicated over an SSH tunnel from live. This is looking like a good way to scale, and it’s a great way to run stats reports and live backups without disturbing our main servers.
  • 57. S3 Data Storage Pre-built EC2 Rails We’re currently experimenting with using Amazon S3 for MySQL backups, and EC2 to run a complete copy of the Dopplr application and a MySQL slave replicated over an SSH tunnel from live. This is looking like a good way to scale, and it’s a great way to run stats reports and live backups without disturbing our main servers.
  • 58. S3 Data Storage Pre-built EC2 Rails MySQL Slave We’re currently experimenting with using Amazon S3 for MySQL backups, and EC2 to run a complete copy of the Dopplr application and a MySQL slave replicated over an SSH tunnel from live. This is looking like a good way to scale, and it’s a great way to run stats reports and live backups without disturbing our main servers.
  • 59.
  • 60. Sharing Data User Identity Social Network Delegating Authority Widgets & Plugins Utility Computing
  • 61. Thank you Matt Biddulph DOPPLR DOPPLR DOPPLR Where next?