Where I’ve Been™<br />Redefining the social<br />travel experience.<br />FindLocal.<br />TravelGlobally.<br />ShareEveryth...
WIB Platform<br />
Auth Layer<br />WIB Platform<br />Network<br />Abstraction<br />Layer<br />WIB Auth Layer<br />AMF<br />Facebook<br />Bebo...
Network Abstraction<br />
Template Engine<br />WIB<br />Stencil <br />Extends<br />Includes<br />FeedItem<br />Component<br />Notification<br />Emai...
Stencil Preview<br />
i18n Internationalization<br />function t($string)<br />&lt;div id=&quot;invite-friends-header-prompt&quot;&gt;<br />	&lt;...
i18n Each Page Request<br />Does this string NOT exist in the strings table in our db<br />	add it to the strings table in...
i18n Daily Cron<br />function t($string)<br />&lt;div id=&quot;invite-friends-header-prompt&quot;&gt;<br />	&lt;?= t(‘Wher...
Dynamic ImgSrv<br />Show me an image<br />User requests image<br /><ul><li>img.whereivebeen.com
dynimg.whereivebeen.com</li></ul>Facebook<br />Facebook<br />EC2<br />Machine running pound and MySql<br />WIB API<br />Ne...
Discover<br />Where I’ve Been<br />  Fresh New Design<br />  Modular site structure<br />  Local search options<br />  Sca...
Upcoming SlideShare
Loading in …5
×

Facebook Developer Garage London, Craig Ulliott, Where I've Been

867 views

Published on

Published in: Technology, Travel, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
867
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Building a network and a business around and ontop of multiple other platforms presents an interesting architecture challenge. Where I’ve Been is essentially a set of API’s and Abstraction layers mixed with a templating system that we call stencils.
  • Wrapping the Platform tier we have an authentication layer, this is the layer that users of our .com authenticate against directly. Most functionality on the .com website is preformed via AJAX, so we have a JavaScript client library for that. For each social network we release our application onto we create a client library (which is normally a wrapper of their own official library that normalizes the methods we use in our network). Finally we have a oAuth REST API which (currently in ALPHA with only one partner) which allows partners to access our technology (with the API you could potentially recreate the entire site somewhere else) We also use AMF for our flash products such as the maps.
  • We write these networks as plug-ins and once added, the functionality from that network is made available immediately. You can add multiple networks to an account and authenticatie to your account from multiple sources. When we utilize communication channels such as feed items, we just create Where I’ve Been feed items and the API will use the best available network for that user, convert to the required format and send it out. There are many advantages to this approach, but one main one is being able to adapt very quickly when things change all the time, not pointing any fingers of course (facebook)
  • Any good framework should have all the layout and content separated from the business logic, for this we created a system we call stencils. Every visible feature you see on the site has a mixture of CSS, JS, HTML, FBML, and TXT files. We can render then inside each other, they can be sent through the various communication channels, they can all be AB tested and they have standardized tracking and a real time viral coefficient
  • Facebook Developer Garage London, Craig Ulliott, Where I've Been

    1. 1. Where I’ve Been™<br />Redefining the social<br />travel experience.<br />FindLocal.<br />TravelGlobally.<br />ShareEverything.<br />
    2. 2. WIB Platform<br />
    3. 3. Auth Layer<br />WIB Platform<br />Network<br />Abstraction<br />Layer<br />WIB Auth Layer<br />AMF<br />Facebook<br />Bebo<br />Site API<br />Myspace<br />Via AJAX<br />HI5<br />Friendster<br />API (oAuth)<br />whereivebeen.com<br />Partners<br />WIB ImgSrv<br />
    4. 4. Network Abstraction<br />
    5. 5. Template Engine<br />WIB<br />Stencil <br />Extends<br />Includes<br />FeedItem<br />Component<br />Notification<br />Email<br />Text<br />FBML<br />HTML<br />Qotd<br />Edit Profile<br />
    6. 6. Stencil Preview<br />
    7. 7. i18n Internationalization<br />function t($string)<br />&lt;div id=&quot;invite-friends-header-prompt&quot;&gt;<br /> &lt;?= t(‘Where have your friends been?’) ?&gt; <br /> &lt;span&gt;&lt;?= t(‘Invite your friends. ’) ?&gt;&lt;/span&gt;<br />&lt;/div&gt;<br />Our ‘t’ function wraps its output in &lt;fb:int&gt; tags for fbml<br />
    8. 8. i18n Each Page Request<br />Does this string NOT exist in the strings table in our db<br /> add it to the strings table in our db<br />If user wants English, <br /> output string<br />Else<br /> md5 (string and language code) to make a key<br /> if the cache holds a string with this key<br /> output from cache<br /> else does our database hold a string with this key<br /> put string in cache <br /> output from database<br /> else default: <br /> //no translation yet<br /> output original string<br />function t($string)<br />&lt;div id=&quot;invite-friends-header-prompt&quot;&gt;<br /> &lt;?= t(‘Where have your friends been?’) ?&gt; <br /> &lt;span&gt;&lt;?= t(‘Invite your friends. ’) ?&gt;&lt;/span&gt;<br />&lt;/div&gt;<br />
    9. 9. i18n Daily Cron<br />function t($string)<br />&lt;div id=&quot;invite-friends-header-prompt&quot;&gt;<br /> &lt;?= t(‘Where have your friends been?’) ?&gt; <br /> &lt;span&gt;&lt;?= t(‘Invite your friends. ’) ?&gt;&lt;/span&gt;<br />&lt;/div&gt;<br />For all strings not pushed to Facebook yet<br /> Use FQL to add strings to Facebook db<br />Get all strings from Facebook via FQL, <br /> for each string we get from Facebook <br /> md5 (english string and language code) to make a key<br /> write the translation and key to our translations db<br />
    10. 10. Dynamic ImgSrv<br />Show me an image<br />User requests image<br /><ul><li>img.whereivebeen.com
    11. 11. dynimg.whereivebeen.com</li></ul>Facebook<br />Facebook<br />EC2<br />Machine running pound and MySql<br />WIB API<br />Network<br />Abstraction<br />Layer<br />img1<br />img2<br />img3<br />img4<br />img5<br />API (oAuth)<br />WIB Auth Layer<br />S3<br />Image store<br />Over 1MM<br />Bin Cache<br />2 hours<br />WIB Platform<br />
    12. 12. Discover<br />Where I’ve Been<br /> Fresh New Design<br /> Modular site structure<br /> Local search options<br /> Scalable Platform<br /> Built from the ground up<br />728 x 90<br />

    ×