SlideShare a Scribd company logo
1 of 68
Download to read offline
Designing OpenSocial
Apps For Speed and Scale
Patrick Chanezon
with slides from
Arne Roomann-Kurrik & Chris Chabot
June 9 2009
Success In A Social Market

• Social application eCPM is lower than average




• Direct access to millions of signed in users
   o Growth functionality built into social platforms
• Small margins x Lots of users = Small Tweaks Matter

Chart from Pubmatic AdPrice Index 2008: http://pubmatic.com/adpriceindex/index.html
quot;Improving our latency is really, really
importantquot;
+0.5 seconds costs Google 20% search
traffic




Marissa Mayer, Google
http://bit.ly/idItc ~12:50
quot;Even very small delays would result in
substantial and costly drops in revenuequot;
+0.1 seconds costs Amazon 1% of sales




Greg Linden, Amazon
http://glinden.blogspot.com/2006/11/marissa-mayer-at-web-20.html
http://home.blarg.net/~glinden/StanfordDataMining.2006-11-29.ppt
quot;If you make a product faster, you get that
back in terms of increased usagequot;
-30KB gave Google Maps 30% growth in 3
weeks




Marissa Mayer, Google
http://www.youtube.com/watch?v=6x0cAzQ7PVs ~18:10
A monk asked Joshu:
                               “Will my web application have
                                Buddha-nature if I optimize for
                                speed or number of features?”
                               Joshu answered:
                               “Mu”

                                Liberally adapted from “Zen Flesh, Zen Bones”
                                Jōshū Jūshin (778–897)


Image Source http://en.wikipedia.org/wiki/Image:BodhidharmaYoshitoshi1887.jpg
public domain
This Presentation

• Measure impact of changes on large scale apps

• Sample OpenSocial application
   o Different strategies
   o Real performance numbers


• Goals
  o Deliver a fast user experience
  o Minimize costs of running a large social app
  o Highlight new OpenSocial features
Introducing Quartermile




Photo by Phil McElhinney http://www.flickr.com/photos/philmcelhinney/1000986005/
Quartermile UI
Building Quartermile

• Backend:
   o Built on Google App Engine
   o Remote Procedure Calls
   o JSON


• Frontend:
   o Gadgets on many containers
   o JavaScript library for RPC calls


• View the source: http://bit.ly/quartermile-src
• XML spec: http://bit.ly/quartermile-app
Measuring Quartermile

• Request types
   o Quartermile API
   o OpenSocial API
   o Assets (images, JS, CSS)


• Metrics
  o Bandwidth / PV (KB)
  o Requests / PV (#)
  o Latency / PV (ms)
  o CPU time (megacycles)


• Measuring each individually is important
• Have more control over some than others
Quartermile 'Naive' Implementation Metrics



                            Bandwidth /   Requests / PV   Latency   CPU time
                              PV(kb)                       (ms)     (megacycles)




    Quartermile API calls
                              4.21             4          6490 2078
    Social requests
                             1.45              2          804           0
    Assets
                            135.6            22           3152          0
Quartermile 'Naive' Implementation Costs
Web Development
Best Practices*




* Gadgets are web pages too!
Photo by rudolf_schuba http://www.flickr.com/photos/rudolf_schuba/153225000/
Web Development Best Practices
 Gadgets are web pages too!
• We're interested in the following metrics:
  o Application size
  o Request count
  o Latency of initial load
• Measuring
  o Safari: Web Inspector
  o Firefox: Firebug & YSlow
  o IE: HttpWatch
Web Development Best Practices
 Minify JavaScript & CSS
• Concatenate JavaScript & CSS files
   o Reduces latency
   o Reduces HTTP Requests
• Compress JavaScript and CSS
   o Reduces download size

var foo = ['1','2','3','4'];
for (var i = 0 ; i < 4 ; i++) {
  alert(foo[i]);
}


var foo=[quot;1quot;,quot;2quot;,quot;3quot;,quot;4quot;];for(var i=0;i<4;i++){alert(foo[i])}
Web Development Best Practices
Determining application size
Quartermile Improvement
After JavaScript + CSS Minification (YUI Compressor)
Web Development Best Practices
Measuring Latency
Web Development Best Practices
Measuring latency
Web Development Best Practices
Latency is not a static number
Web Development Best Practices
 Decreasing latency increases user happiness and engagement
• Measure from different locations
• Measure often
Web Development Best Practices
 Automatically collecting latency measurements


• JavaScript code for recording gadget latency:
var startTime = new Date();
var imgElement = new Image()
imgElement.onload = function() {
  var endTime = new Date();
  var latency = endTime. getTime() - startTime.getTime();
  // report latency back to your server
}
imgElement.src = quot;http://your.server.com/ping.gifquot;;
Web Development Best Practices
 Spriting Images

• Concatenate images into a single file (sprite) and use
  CSS to selectively display portions of the sprite
   o Reduce # of requests
   o Reduce latency
Web Development Best Practices
Determining Request Count With YSlow!
Quartermile Improvement
After Image Spriting
Web Development Best Practices
 Adjusting Cache Headers

• Use the browser's cache for static data
   o Reduces total bandwidth & requests
   o Reduces latency
• Apache configuration example:
 <FilesMatch quot;.(css|js|gif|jpe?g|png)$quot;>
   Header set Cache-Control quot;max-age=290304000, publicquot;
 </FilesMatch>


• Use Cache-busting to force refresh
 http://example.org/css/style.css?v=3
Server Assisted
                                                                           Optimizations




Photo by zappowbang http://www.flickr.com/photos/zappowbang/3202362752/
Server Assisted Optimizations

• Social gadget:
   o Small tweak == big gain
• Social network
   o Many small tweaks == very big gain


• Social network advantages:
   o Control over the HTML they output
   o Better network infrastructure
Static Content Proxies

• Social network willing to absorb some traffic for you
   o Could use content delivery networks (CDNs)
   o Distributed network, great for serving static content
     all over the world
• Important for clients further away from your servers!

 var div = $(quot;#flashcontainerquot;);
 var url = gadgets.io.getProxyUrl(
           quot;http://me.com/flash.swfquot;);
 gadgets.flash.embedFlash(url, div, 10);
Content Rewriting

• Social network has control over its own output
   o CSS first, JS last
   o Concatenate, Minify
   o Rewrite URLs for static proxy
• Caching controls in your gadget spec:

 <Module>
   <ModulePrefs>
     <Optional feature=quot;content-rewritequot;>
        <Param name=quot;include-urlsquot;></Param>
        <Param name=quot;exclude-urlsquot;>.*</
 Param>
        <Param name=quot;include-tagsquot;></Param>
     </Optional>
   ...
OpenSocial Best




Image by Paul Downey http://www.flickr.com/photos/psd/2841928867/in/datetaken
                                                                                Practices
OpenSocial: Designed For Social Apps

• Some optimizations only make sense in a social
  application context
• OpenSocial offers conveniences to social app
  developers

• Learn from the OpenSocial API when designing your
  own application interfaces
Batching
 One API call == 1 HTTP request:
osapi.people.getViewer().execute(onVwr);
osapi.people.getOwner().execute(onOwnr);
osapi.people.getViewerFriends().execute(onFr
nd);
osapi.people.getOwnerFriends().execute(onOFr
nd);
varas much as osapi.newBatch()
 Do batch = you can in a single trip:
  .add(quot;vwrquot;, osapi.people.getViewer())
  .add(quot;vfdquot;,
osapi.people.getViewerFriends())
  .add(quot;owrquot;, osapi.people.getOwner())
  .add(quot;ofdquot;,
osapi.people.getOwnerFriends())
  .execute(onData);
 2 -> 1 OpenSocial requests
 4 -> 1 Quartermile API requests
Quartermile Improvement
After Request Batching
OpenSocial Best Practices
 Data Pipelining + Proxied Content


• The Naive implementation makes a lot of requests
• How can we improve on that?
OpenSocial Best Practices
 Data Pipelining + Proxied Content

• Using OpenSocial 0.9's Data-Pipelining, we can
  declare which social data to POST to your server
• Your server operates on the data and returns the
  HTML to display
• Available in iGoogle & orkut sandboxes, coming to a
  container near you soon(tm)
OpenSocial Best Practices
Data Pipelining + Proxied Content



 <Module>
  <ModulePrefs ... etc .../>
  <Content type=quot;htmlquot; view=quot;profilequot;
           href=quot;http://yoursite.com/proxied.phpquot;
           authz=quot;signedquot;>
   <os:ViewerRequest key=quot;vwrDataquot; fields=quot;id,displayNamequot;/>
   <os:OwnerRequest key=quot;ownDataquot;/>
   <os:PeopleRequest key=quot;ownFriendsquot;
            userId=quot;@ownerquot; groupId=quot;@selfquot;/>
  </Content>
 </Module>
OpenSocial Best Practices
Data Pipelining + Proxied Content


<?php

$postData = json_decode(file_get_contents(quot;php://inputquot;));

echo quot;<h1>Hello {$postData['vwrData']['name']}</h1>quot;;
echo quot;These are {$postData['ownData']['name']}'s friends:quot;;
echo quot;<br/>quot;;

foreach ($postData['ownFriends'] as $friend) {
  echo quot;{$friend['name']}<br/>quot;;
}
Quartermile Improvement
After Data Pipelining
OpenSocial Best Practices
 Invalidation Pattern

• New application design pattern available with the
  features introduced in 0.9
• When your internal state changes on the application
  server, use REST/RPC calls to invalidate data:
   o Per user or url
   o Application ID is determined by 2 Legged OAuth
     call
OpenSocial Best Practices
 Invalidation Pattern

• Calling the invalidation API:


  POST /api/rest/cache/invalidate
  HOST opensocial.example.org
  Content-Type: application/json
  {
    invalidationKeys : [
     quot;http://www.myapp.com/gadgetspec.xmlquot;,
     quot;http://yoursite.com/proxied.phpquot;
     quot;user:123quot;]
  }
Optimizing Your Data Store




Image by euthman http://www.flickr.com/photos/euthman/1846038389/
OpenSocial Best Practices
 Data Store Structuring

• Database joins against friend lists are generally very
  expensive
• Plan ahead if you're not using App Engine
   o Master / Slave architecture
   o Database partitioning
• Use Memcache to cache data (in App Engine too!)
   o Filter results in software, make the most of cache
• Consider storing frequently used data in JSON Blobs
  instead traditional relational storage
OpenSocial Best Practices
 Data Store Structuring

• Consider using background processing
   o Updates are slightly delayed
   o Doesn't block user interaction
   o Great for quot;What are your friends doingquot; result sets
• Use a off-the-shelf / open source Queue system or
• App Engine, use cron.yaml:

 cron:
 - description: process activities entries
   url: /tasks/processActivities
   schedule: every 1 minutes
Designing Quartermile's Data Model

• How to plan a scalable social application?

• Prefer to enforce hard limits up front, than deliver a
  poor user experience

• Decided friend queries were too expensive:
   o orkut lets you have 1000 friends
   o MySpace lets you have 100,000s+ of friends


• Do all 100,000 friends need to see your exercises?
   o Created artificial idea of quot;teamsquot;
   o Choose a subset of friends to invite to your team
   o Side effect: Drive adoption!
Dreaming Up Reasonable Limits

• Goal: Fetch all of a team's data for any given week
  in one database query

• How many users can we put on a team?

• App Engine returns 1000 entries max for any query
• 1 entry / workout
• 3 / day ~ 20 / week

• 1000 / 20 = 50 users
Limits: Made To Be Broken
 Not every app will be able to enforce such restrictions

• Goal: Implement quot;updates from your friendsquot;
  inside of the Quartermile app

• Slow!
   o Fetch all friends
   o See which updated recently
   o Sort


• Friend updates are lower priority than team updates
   o Process in the background
   o Fetch friends using 2-legged OAuth
   o Do quot;updates from friendsquot; calculation
   o Store result of calculation (can be stale)
Where To Put It?

• Database
• Memcache
• OpenSocial App Data
quot;App Data is one of the most misunderstood
and misused portions of the OpenSocial
specificationquot;
App Data is often used incorrectly




Arne Roomann-Kurrik, Google
May 2009 at Google I/O
App Data

• Data store of keys and values
   o Essentially public, so you can't put secrets here
   o User writable via JS, so you can't trust it
   o But it's fast!
• Perfect place to cache slow data

• Background process does slow calculation
• Pushes result to AppData
• When rendered, injected directly into the gadget
   o No server hit!
Container-Mandated
Optimizations




Photo by redjar http://www.flickr.com/photos/redjar/704710355/
Container-Mandated Optimizations

• 'Naive' implementation:
   o Easy to make mistakes


• Container:
   o Keep gadgets fast == keep container fast
   o Userbase affects acceptable latency values
   o Constraints to keep gadget developers honest
iGoogle's Latency
• Directory will soon be taking latency into account
• Implicit latency penalty, too:
orkut's Template-Only Profiles

• Profiles:
   o The most traffic on orkut
   o Users love gadgets!


• OpenSocial 0.9 templates
  o Can display social data
  o Can display App Data
  o No external fetches or dynamic data


• Produces an extremely fast profile render
• Great use case for AppData cache
orkut's Template-Only Profiles

<Module>
  <ModulePrefs title=quot;Templatequot;>
    <Require feature=quot;opensocial-dataquot; />
    <Require feature=quot;opensocial-templatesquot;>
      <Param name=quot;process-on-serverquot;>true</Param>
    </Require>
  </ModulePrefs>
  <Content type=quot;htmlquot; view=quot;profilequot;><![CDATA[
    <script type=quot;text/os-dataquot;>
      <os:PeopleRequest key=quot;friendsquot; userId=quot;@viewerquot;
          groupId=quot;@friendsquot;/>
    </script>
    <script type=quot;text/os-templatequot;>
      <div repeat=quot;${friends}quot;>${Cur.name.givenName}</div>
    </script>
  ]]></Content>
</Module>
Summary




Photo by peagreengirl http://www.flickr.com/photos/peagreenchick/384744358/in/photostream/
Summary
Comparison of each technique

App Size:                      Latency:
 • JS Minification              • JS Minification
 • Content Rewriting            • Spriting
 • Content Proxy                • Content Rewriting
 • Pipelining                   • Content Proxy
 • Invalidation                 • Batching
 • Cache Headers                • Data Store Optimization
                                • Background
                                • App Data Cache
Requests:
                                • Pipelining
 • JS Minification
                                • Invalidation
 • Spriting
                                • Limited Profiles
 • Content Rewriting
                                • Cache Headers
 • Cache Headers
Quartermile 'Most Optmized' Implementation
All you ever wanted to know about web apps
performance tuning

           http://stevesouders.com/




61
Performance                          ?)


A monk asked Zhaozhou to teach him.
Zhaozhou asked, quot;Have you eaten your meal?quot;
The monk replied, quot;Yes, I have.quot;
quot;Then go wash your bowlquot;, said Zhaozhou.
At that moment, the monk was enlightened.

                                   , Mumonkan



Image Source http://commons.wikimedia.org/wiki/File:Satori.svg
public domain
Page Speed Firefox Extension
• Released June 4 2009
• http://code.google.com/speed/page-speed/




63
Google Developer Relations Japan
• Google
     – Google Developer Day
     –




              http://sites.google.com/site/devreljp/
64
code.google.com
• Google
     –
     –




           http://code.google.com/intl/ja/
65
• Google Developer Day


•             2
     –
     –
         •
     –            Google Developer Relations Japan


             http://sites.google.com/site/devreljp/




66
Q&A
GDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale

More Related Content

What's hot

Design+Performance Velocity 2015
Design+Performance Velocity 2015Design+Performance Velocity 2015
Design+Performance Velocity 2015Steve Souders
 
High Performance Mobile (SF/SV Web Perf)
High Performance Mobile (SF/SV Web Perf)High Performance Mobile (SF/SV Web Perf)
High Performance Mobile (SF/SV Web Perf)Steve Souders
 
A web perf dashboard up & running in 90 minutes presentation
A web perf dashboard up & running in 90 minutes presentationA web perf dashboard up & running in 90 minutes presentation
A web perf dashboard up & running in 90 minutes presentationJustin Dorfman
 
Fast Fashion… How Missguided revolutionised their approach to site performanc...
Fast Fashion… How Missguided revolutionised their approach to site performanc...Fast Fashion… How Missguided revolutionised their approach to site performanc...
Fast Fashion… How Missguided revolutionised their approach to site performanc...Andy Davies
 
Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021Matt Raible
 
High Performance Kick Ass Web Apps (JavaScript edition)
High Performance Kick Ass Web Apps (JavaScript edition)High Performance Kick Ass Web Apps (JavaScript edition)
High Performance Kick Ass Web Apps (JavaScript edition)Stoyan Stefanov
 
International Site Speed Tweaks - ISS 2017 Barcelona
International Site Speed Tweaks - ISS 2017 BarcelonaInternational Site Speed Tweaks - ISS 2017 Barcelona
International Site Speed Tweaks - ISS 2017 BarcelonaBastian Grimm
 
Velocity EU 2012 - Third party scripts and you
Velocity EU 2012 - Third party scripts and youVelocity EU 2012 - Third party scripts and you
Velocity EU 2012 - Third party scripts and youPatrick Meenan
 
AB Testing, Ads and other 3rd party tags - SmashingConf London - 2018
AB Testing, Ads and other 3rd party tags - SmashingConf London - 2018AB Testing, Ads and other 3rd party tags - SmashingConf London - 2018
AB Testing, Ads and other 3rd party tags - SmashingConf London - 2018Andy Davies
 
High Performance Web Components
High Performance Web ComponentsHigh Performance Web Components
High Performance Web ComponentsSteve Souders
 
Not your daddy's web server
Not your daddy's web serverNot your daddy's web server
Not your daddy's web serverJim Jagielski
 
Going Fast on the Mobile Web
Going Fast on the Mobile WebGoing Fast on the Mobile Web
Going Fast on the Mobile WebJason Grigsby
 
Real World Lessons in Progressive Web Application & Service Worker Caching
Real World Lessons in Progressive Web Application & Service Worker CachingReal World Lessons in Progressive Web Application & Service Worker Caching
Real World Lessons in Progressive Web Application & Service Worker CachingChris Love
 
HTML5 WebSocket for the Real-Time Web and the Internet of Things
HTML5 WebSocket for the Real-Time Weband the Internet of ThingsHTML5 WebSocket for the Real-Time Weband the Internet of Things
HTML5 WebSocket for the Real-Time Web and the Internet of ThingsPeter Moskovits
 
Apache httpd Reverse Proxy and Tomcat
Apache httpd Reverse Proxy and TomcatApache httpd Reverse Proxy and Tomcat
Apache httpd Reverse Proxy and TomcatJim Jagielski
 
How fast are we going now?
How fast are we going now?How fast are we going now?
How fast are we going now?Steve Souders
 
The WAF book intro protection elements v1.0 lior rotkovitch
The WAF book intro protection elements v1.0 lior rotkovitchThe WAF book intro protection elements v1.0 lior rotkovitch
The WAF book intro protection elements v1.0 lior rotkovitchLior Rotkovitch
 

What's hot (20)

Hacking Web Performance
Hacking Web Performance Hacking Web Performance
Hacking Web Performance
 
Design+Performance Velocity 2015
Design+Performance Velocity 2015Design+Performance Velocity 2015
Design+Performance Velocity 2015
 
Design+Performance
Design+PerformanceDesign+Performance
Design+Performance
 
High Performance Mobile (SF/SV Web Perf)
High Performance Mobile (SF/SV Web Perf)High Performance Mobile (SF/SV Web Perf)
High Performance Mobile (SF/SV Web Perf)
 
A web perf dashboard up & running in 90 minutes presentation
A web perf dashboard up & running in 90 minutes presentationA web perf dashboard up & running in 90 minutes presentation
A web perf dashboard up & running in 90 minutes presentation
 
Fast Fashion… How Missguided revolutionised their approach to site performanc...
Fast Fashion… How Missguided revolutionised their approach to site performanc...Fast Fashion… How Missguided revolutionised their approach to site performanc...
Fast Fashion… How Missguided revolutionised their approach to site performanc...
 
Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021
 
High Performance Kick Ass Web Apps (JavaScript edition)
High Performance Kick Ass Web Apps (JavaScript edition)High Performance Kick Ass Web Apps (JavaScript edition)
High Performance Kick Ass Web Apps (JavaScript edition)
 
International Site Speed Tweaks - ISS 2017 Barcelona
International Site Speed Tweaks - ISS 2017 BarcelonaInternational Site Speed Tweaks - ISS 2017 Barcelona
International Site Speed Tweaks - ISS 2017 Barcelona
 
Velocity EU 2012 - Third party scripts and you
Velocity EU 2012 - Third party scripts and youVelocity EU 2012 - Third party scripts and you
Velocity EU 2012 - Third party scripts and you
 
AB Testing, Ads and other 3rd party tags - SmashingConf London - 2018
AB Testing, Ads and other 3rd party tags - SmashingConf London - 2018AB Testing, Ads and other 3rd party tags - SmashingConf London - 2018
AB Testing, Ads and other 3rd party tags - SmashingConf London - 2018
 
High Performance Web Components
High Performance Web ComponentsHigh Performance Web Components
High Performance Web Components
 
Not your daddy's web server
Not your daddy's web serverNot your daddy's web server
Not your daddy's web server
 
Going Fast on the Mobile Web
Going Fast on the Mobile WebGoing Fast on the Mobile Web
Going Fast on the Mobile Web
 
Real World Lessons in Progressive Web Application & Service Worker Caching
Real World Lessons in Progressive Web Application & Service Worker CachingReal World Lessons in Progressive Web Application & Service Worker Caching
Real World Lessons in Progressive Web Application & Service Worker Caching
 
High-Speed HTML5
High-Speed HTML5High-Speed HTML5
High-Speed HTML5
 
HTML5 WebSocket for the Real-Time Web and the Internet of Things
HTML5 WebSocket for the Real-Time Weband the Internet of ThingsHTML5 WebSocket for the Real-Time Weband the Internet of Things
HTML5 WebSocket for the Real-Time Web and the Internet of Things
 
Apache httpd Reverse Proxy and Tomcat
Apache httpd Reverse Proxy and TomcatApache httpd Reverse Proxy and Tomcat
Apache httpd Reverse Proxy and Tomcat
 
How fast are we going now?
How fast are we going now?How fast are we going now?
How fast are we going now?
 
The WAF book intro protection elements v1.0 lior rotkovitch
The WAF book intro protection elements v1.0 lior rotkovitchThe WAF book intro protection elements v1.0 lior rotkovitch
The WAF book intro protection elements v1.0 lior rotkovitch
 

Viewers also liked

Boomerang: How fast do users think your site is?
Boomerang: How fast do users think your site is?Boomerang: How fast do users think your site is?
Boomerang: How fast do users think your site is?Philip Tellis
 
SPIP et la gestion de la performance
SPIP et la gestion de la performanceSPIP et la gestion de la performance
SPIP et la gestion de la performanceCédric MORIN
 
Baromètre de l'Experience Marchande Connectée 2013
Baromètre de l'Experience Marchande Connectée 2013Baromètre de l'Experience Marchande Connectée 2013
Baromètre de l'Experience Marchande Connectée 2013DigitasLBi Paris
 
Progressive Enhancement & Mobile [HOW Interactive 2012]
Progressive Enhancement & Mobile [HOW Interactive 2012]Progressive Enhancement & Mobile [HOW Interactive 2012]
Progressive Enhancement & Mobile [HOW Interactive 2012]Aaron Gustafson
 
Seductive Interactions (Idea 09 Version)
Seductive Interactions (Idea 09 Version)Seductive Interactions (Idea 09 Version)
Seductive Interactions (Idea 09 Version)Stephen Anderson
 

Viewers also liked (6)

Boomerang: How fast do users think your site is?
Boomerang: How fast do users think your site is?Boomerang: How fast do users think your site is?
Boomerang: How fast do users think your site is?
 
Browser War 2009
Browser War 2009Browser War 2009
Browser War 2009
 
SPIP et la gestion de la performance
SPIP et la gestion de la performanceSPIP et la gestion de la performance
SPIP et la gestion de la performance
 
Baromètre de l'Experience Marchande Connectée 2013
Baromètre de l'Experience Marchande Connectée 2013Baromètre de l'Experience Marchande Connectée 2013
Baromètre de l'Experience Marchande Connectée 2013
 
Progressive Enhancement & Mobile [HOW Interactive 2012]
Progressive Enhancement & Mobile [HOW Interactive 2012]Progressive Enhancement & Mobile [HOW Interactive 2012]
Progressive Enhancement & Mobile [HOW Interactive 2012]
 
Seductive Interactions (Idea 09 Version)
Seductive Interactions (Idea 09 Version)Seductive Interactions (Idea 09 Version)
Seductive Interactions (Idea 09 Version)
 

Similar to GDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale

Sustainable Agile Development
Sustainable Agile DevelopmentSustainable Agile Development
Sustainable Agile DevelopmentGabriele Lana
 
Intro To Django
Intro To DjangoIntro To Django
Intro To DjangoUdi Bauman
 
iPhone Development For Experienced Web Developers
iPhone Development For Experienced Web DevelopersiPhone Development For Experienced Web Developers
iPhone Development For Experienced Web Developerslisab517
 
Castles in the Cloud: Developing with Google App Engine
Castles in the Cloud: Developing with Google App EngineCastles in the Cloud: Developing with Google App Engine
Castles in the Cloud: Developing with Google App Enginecatherinewall
 
Keys To World-Class Retail Web Performance - Expert tips for holiday web read...
Keys To World-Class Retail Web Performance - Expert tips for holiday web read...Keys To World-Class Retail Web Performance - Expert tips for holiday web read...
Keys To World-Class Retail Web Performance - Expert tips for holiday web read...SOASTA
 
Does This Theme Make My Website Look Fat? (Wordcamp SLC 2013)
Does This Theme Make My Website Look Fat? (Wordcamp SLC 2013)Does This Theme Make My Website Look Fat? (Wordcamp SLC 2013)
Does This Theme Make My Website Look Fat? (Wordcamp SLC 2013)Adam Dunford
 
H2O World - Building a Smarter Application - Tom Kraljevic
H2O World - Building a Smarter Application - Tom KraljevicH2O World - Building a Smarter Application - Tom Kraljevic
H2O World - Building a Smarter Application - Tom KraljevicSri Ambati
 
Performance Engineering - how to start!
Performance Engineering - how to start!Performance Engineering - how to start!
Performance Engineering - how to start!Yoav Weiss
 
腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站areyouok
 
腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站topgeek
 
Cvcc performance tuning
Cvcc performance tuningCvcc performance tuning
Cvcc performance tuningJohn McCaffrey
 
Ruby on Rails Performance Tuning. Make it faster, make it better (WindyCityRa...
Ruby on Rails Performance Tuning. Make it faster, make it better (WindyCityRa...Ruby on Rails Performance Tuning. Make it faster, make it better (WindyCityRa...
Ruby on Rails Performance Tuning. Make it faster, make it better (WindyCityRa...John McCaffrey
 
Windy cityrails performance_tuning
Windy cityrails performance_tuningWindy cityrails performance_tuning
Windy cityrails performance_tuningJohn McCaffrey
 
Rock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsRock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsPablo Godel
 
Mobile is slow - Over the Air 2013
Mobile is slow - Over the Air 2013Mobile is slow - Over the Air 2013
Mobile is slow - Over the Air 2013Jon Arne Sæterås
 
High Performance Web Sites
High Performance Web SitesHigh Performance Web Sites
High Performance Web SitesPáris Neto
 
High Performance Websites By Souders Steve
High Performance Websites By Souders SteveHigh Performance Websites By Souders Steve
High Performance Websites By Souders Stevew3guru
 
Progressive Web Apps for Education
Progressive Web Apps for EducationProgressive Web Apps for Education
Progressive Web Apps for EducationChris Love
 
Disrupting the application eco system with progressive web applications
Disrupting the application eco system with progressive web applicationsDisrupting the application eco system with progressive web applications
Disrupting the application eco system with progressive web applicationsChris Love
 

Similar to GDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale (20)

Sustainable Agile Development
Sustainable Agile DevelopmentSustainable Agile Development
Sustainable Agile Development
 
Intro To Django
Intro To DjangoIntro To Django
Intro To Django
 
iPhone Development For Experienced Web Developers
iPhone Development For Experienced Web DevelopersiPhone Development For Experienced Web Developers
iPhone Development For Experienced Web Developers
 
Castles in the Cloud: Developing with Google App Engine
Castles in the Cloud: Developing with Google App EngineCastles in the Cloud: Developing with Google App Engine
Castles in the Cloud: Developing with Google App Engine
 
Keys To World-Class Retail Web Performance - Expert tips for holiday web read...
Keys To World-Class Retail Web Performance - Expert tips for holiday web read...Keys To World-Class Retail Web Performance - Expert tips for holiday web read...
Keys To World-Class Retail Web Performance - Expert tips for holiday web read...
 
Does This Theme Make My Website Look Fat? (Wordcamp SLC 2013)
Does This Theme Make My Website Look Fat? (Wordcamp SLC 2013)Does This Theme Make My Website Look Fat? (Wordcamp SLC 2013)
Does This Theme Make My Website Look Fat? (Wordcamp SLC 2013)
 
H2O World - Building a Smarter Application - Tom Kraljevic
H2O World - Building a Smarter Application - Tom KraljevicH2O World - Building a Smarter Application - Tom Kraljevic
H2O World - Building a Smarter Application - Tom Kraljevic
 
Performance Engineering - how to start!
Performance Engineering - how to start!Performance Engineering - how to start!
Performance Engineering - how to start!
 
腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站
 
腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站
 
Cvcc performance tuning
Cvcc performance tuningCvcc performance tuning
Cvcc performance tuning
 
Ruby on Rails Performance Tuning. Make it faster, make it better (WindyCityRa...
Ruby on Rails Performance Tuning. Make it faster, make it better (WindyCityRa...Ruby on Rails Performance Tuning. Make it faster, make it better (WindyCityRa...
Ruby on Rails Performance Tuning. Make it faster, make it better (WindyCityRa...
 
Windy cityrails performance_tuning
Windy cityrails performance_tuningWindy cityrails performance_tuning
Windy cityrails performance_tuning
 
Rock Solid Deployment of Web Applications
Rock Solid Deployment of Web ApplicationsRock Solid Deployment of Web Applications
Rock Solid Deployment of Web Applications
 
Mobile is slow - Over the Air 2013
Mobile is slow - Over the Air 2013Mobile is slow - Over the Air 2013
Mobile is slow - Over the Air 2013
 
Plop
PlopPlop
Plop
 
High Performance Web Sites
High Performance Web SitesHigh Performance Web Sites
High Performance Web Sites
 
High Performance Websites By Souders Steve
High Performance Websites By Souders SteveHigh Performance Websites By Souders Steve
High Performance Websites By Souders Steve
 
Progressive Web Apps for Education
Progressive Web Apps for EducationProgressive Web Apps for Education
Progressive Web Apps for Education
 
Disrupting the application eco system with progressive web applications
Disrupting the application eco system with progressive web applicationsDisrupting the application eco system with progressive web applications
Disrupting the application eco system with progressive web applications
 

More from Patrick Chanezon

KubeCon 2019 - Scaling your cluster (both ways)
KubeCon 2019 - Scaling your cluster (both ways)KubeCon 2019 - Scaling your cluster (both ways)
KubeCon 2019 - Scaling your cluster (both ways)Patrick Chanezon
 
KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...
KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...
KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...Patrick Chanezon
 
Dockercon 2019 Developing Apps with Containers, Functions and Cloud Services
Dockercon 2019 Developing Apps with Containers, Functions and Cloud ServicesDockercon 2019 Developing Apps with Containers, Functions and Cloud Services
Dockercon 2019 Developing Apps with Containers, Functions and Cloud ServicesPatrick Chanezon
 
GIDS 2019: Developing Apps with Containers, Functions and Cloud Services
GIDS 2019: Developing Apps with Containers, Functions and Cloud ServicesGIDS 2019: Developing Apps with Containers, Functions and Cloud Services
GIDS 2019: Developing Apps with Containers, Functions and Cloud ServicesPatrick Chanezon
 
Docker Enterprise Workshop - Intro
Docker Enterprise Workshop - IntroDocker Enterprise Workshop - Intro
Docker Enterprise Workshop - IntroPatrick Chanezon
 
Docker Enterprise Workshop - Technical
Docker Enterprise Workshop - TechnicalDocker Enterprise Workshop - Technical
Docker Enterprise Workshop - TechnicalPatrick Chanezon
 
The Tao of Docker - ITES 2018
The Tao of Docker - ITES 2018The Tao of Docker - ITES 2018
The Tao of Docker - ITES 2018Patrick Chanezon
 
Microsoft Techsummit Zurich Docker and Microsoft
Microsoft Techsummit Zurich Docker and MicrosoftMicrosoft Techsummit Zurich Docker and Microsoft
Microsoft Techsummit Zurich Docker and MicrosoftPatrick Chanezon
 
Develop and deploy Kubernetes applications with Docker - IBM Index 2018
Develop and deploy Kubernetes  applications with Docker - IBM Index 2018Develop and deploy Kubernetes  applications with Docker - IBM Index 2018
Develop and deploy Kubernetes applications with Docker - IBM Index 2018Patrick Chanezon
 
Docker Meetup Feb 2018 Develop and deploy Kubernetes Apps with Docker
Docker Meetup Feb 2018 Develop and deploy Kubernetes Apps with DockerDocker Meetup Feb 2018 Develop and deploy Kubernetes Apps with Docker
Docker Meetup Feb 2018 Develop and deploy Kubernetes Apps with DockerPatrick Chanezon
 
The Tao of Docker - Devfest Nantes 2017
The Tao of Docker - Devfest Nantes 2017The Tao of Docker - Devfest Nantes 2017
The Tao of Docker - Devfest Nantes 2017Patrick Chanezon
 
Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...
Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...
Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...Patrick Chanezon
 
Moby Open Source Summit North America 2017
Moby Open Source Summit North America 2017Moby Open Source Summit North America 2017
Moby Open Source Summit North America 2017Patrick Chanezon
 
Moby Introduction - June 2017
Moby Introduction - June 2017Moby Introduction - June 2017
Moby Introduction - June 2017Patrick Chanezon
 
Docker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logiciels
Docker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logicielsDocker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logiciels
Docker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logicielsPatrick Chanezon
 
Weave User Group Talk - DockerCon 2017 Recap
Weave User Group Talk - DockerCon 2017 RecapWeave User Group Talk - DockerCon 2017 Recap
Weave User Group Talk - DockerCon 2017 RecapPatrick Chanezon
 
Oscon 2017: Build your own container-based system with the Moby project
Oscon 2017: Build your own container-based system with the Moby projectOscon 2017: Build your own container-based system with the Moby project
Oscon 2017: Build your own container-based system with the Moby projectPatrick Chanezon
 

More from Patrick Chanezon (20)

KubeCon 2019 - Scaling your cluster (both ways)
KubeCon 2019 - Scaling your cluster (both ways)KubeCon 2019 - Scaling your cluster (both ways)
KubeCon 2019 - Scaling your cluster (both ways)
 
KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...
KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...
KubeCon China 2019 - Building Apps with Containers, Functions and Managed Ser...
 
Dockercon 2019 Developing Apps with Containers, Functions and Cloud Services
Dockercon 2019 Developing Apps with Containers, Functions and Cloud ServicesDockercon 2019 Developing Apps with Containers, Functions and Cloud Services
Dockercon 2019 Developing Apps with Containers, Functions and Cloud Services
 
GIDS 2019: Developing Apps with Containers, Functions and Cloud Services
GIDS 2019: Developing Apps with Containers, Functions and Cloud ServicesGIDS 2019: Developing Apps with Containers, Functions and Cloud Services
GIDS 2019: Developing Apps with Containers, Functions and Cloud Services
 
Docker Enterprise Workshop - Intro
Docker Enterprise Workshop - IntroDocker Enterprise Workshop - Intro
Docker Enterprise Workshop - Intro
 
Docker Enterprise Workshop - Technical
Docker Enterprise Workshop - TechnicalDocker Enterprise Workshop - Technical
Docker Enterprise Workshop - Technical
 
The Tao of Docker - ITES 2018
The Tao of Docker - ITES 2018The Tao of Docker - ITES 2018
The Tao of Docker - ITES 2018
 
Moby KubeCon 2017
Moby KubeCon 2017Moby KubeCon 2017
Moby KubeCon 2017
 
Microsoft Techsummit Zurich Docker and Microsoft
Microsoft Techsummit Zurich Docker and MicrosoftMicrosoft Techsummit Zurich Docker and Microsoft
Microsoft Techsummit Zurich Docker and Microsoft
 
Develop and deploy Kubernetes applications with Docker - IBM Index 2018
Develop and deploy Kubernetes  applications with Docker - IBM Index 2018Develop and deploy Kubernetes  applications with Docker - IBM Index 2018
Develop and deploy Kubernetes applications with Docker - IBM Index 2018
 
Docker Meetup Feb 2018 Develop and deploy Kubernetes Apps with Docker
Docker Meetup Feb 2018 Develop and deploy Kubernetes Apps with DockerDocker Meetup Feb 2018 Develop and deploy Kubernetes Apps with Docker
Docker Meetup Feb 2018 Develop and deploy Kubernetes Apps with Docker
 
DockerCon EU 2017 Recap
DockerCon EU 2017 RecapDockerCon EU 2017 Recap
DockerCon EU 2017 Recap
 
Docker Innovation Culture
Docker Innovation CultureDocker Innovation Culture
Docker Innovation Culture
 
The Tao of Docker - Devfest Nantes 2017
The Tao of Docker - Devfest Nantes 2017The Tao of Docker - Devfest Nantes 2017
The Tao of Docker - Devfest Nantes 2017
 
Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...
Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...
Docker 之道 Modernize Traditional Applications with 无为 Create New Cloud Native ...
 
Moby Open Source Summit North America 2017
Moby Open Source Summit North America 2017Moby Open Source Summit North America 2017
Moby Open Source Summit North America 2017
 
Moby Introduction - June 2017
Moby Introduction - June 2017Moby Introduction - June 2017
Moby Introduction - June 2017
 
Docker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logiciels
Docker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logicielsDocker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logiciels
Docker Cap Gemini CloudXperience 2017 - la revolution des conteneurs logiciels
 
Weave User Group Talk - DockerCon 2017 Recap
Weave User Group Talk - DockerCon 2017 RecapWeave User Group Talk - DockerCon 2017 Recap
Weave User Group Talk - DockerCon 2017 Recap
 
Oscon 2017: Build your own container-based system with the Moby project
Oscon 2017: Build your own container-based system with the Moby projectOscon 2017: Build your own container-based system with the Moby project
Oscon 2017: Build your own container-based system with the Moby project
 

Recently uploaded

SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfjimielynbastida
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 

Recently uploaded (20)

SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdf
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 

GDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale

  • 1.
  • 2. Designing OpenSocial Apps For Speed and Scale Patrick Chanezon with slides from Arne Roomann-Kurrik & Chris Chabot June 9 2009
  • 3. Success In A Social Market • Social application eCPM is lower than average • Direct access to millions of signed in users o Growth functionality built into social platforms • Small margins x Lots of users = Small Tweaks Matter Chart from Pubmatic AdPrice Index 2008: http://pubmatic.com/adpriceindex/index.html
  • 4. quot;Improving our latency is really, really importantquot; +0.5 seconds costs Google 20% search traffic Marissa Mayer, Google http://bit.ly/idItc ~12:50
  • 5. quot;Even very small delays would result in substantial and costly drops in revenuequot; +0.1 seconds costs Amazon 1% of sales Greg Linden, Amazon http://glinden.blogspot.com/2006/11/marissa-mayer-at-web-20.html http://home.blarg.net/~glinden/StanfordDataMining.2006-11-29.ppt
  • 6. quot;If you make a product faster, you get that back in terms of increased usagequot; -30KB gave Google Maps 30% growth in 3 weeks Marissa Mayer, Google http://www.youtube.com/watch?v=6x0cAzQ7PVs ~18:10
  • 7. A monk asked Joshu: “Will my web application have Buddha-nature if I optimize for speed or number of features?” Joshu answered: “Mu” Liberally adapted from “Zen Flesh, Zen Bones” Jōshū Jūshin (778–897) Image Source http://en.wikipedia.org/wiki/Image:BodhidharmaYoshitoshi1887.jpg public domain
  • 8. This Presentation • Measure impact of changes on large scale apps • Sample OpenSocial application o Different strategies o Real performance numbers • Goals o Deliver a fast user experience o Minimize costs of running a large social app o Highlight new OpenSocial features
  • 9. Introducing Quartermile Photo by Phil McElhinney http://www.flickr.com/photos/philmcelhinney/1000986005/
  • 11. Building Quartermile • Backend: o Built on Google App Engine o Remote Procedure Calls o JSON • Frontend: o Gadgets on many containers o JavaScript library for RPC calls • View the source: http://bit.ly/quartermile-src • XML spec: http://bit.ly/quartermile-app
  • 12. Measuring Quartermile • Request types o Quartermile API o OpenSocial API o Assets (images, JS, CSS) • Metrics o Bandwidth / PV (KB) o Requests / PV (#) o Latency / PV (ms) o CPU time (megacycles) • Measuring each individually is important • Have more control over some than others
  • 13. Quartermile 'Naive' Implementation Metrics Bandwidth / Requests / PV Latency CPU time PV(kb) (ms) (megacycles) Quartermile API calls 4.21 4 6490 2078 Social requests 1.45 2 804 0 Assets 135.6 22 3152 0
  • 15. Web Development Best Practices* * Gadgets are web pages too! Photo by rudolf_schuba http://www.flickr.com/photos/rudolf_schuba/153225000/
  • 16. Web Development Best Practices Gadgets are web pages too! • We're interested in the following metrics: o Application size o Request count o Latency of initial load • Measuring o Safari: Web Inspector o Firefox: Firebug & YSlow o IE: HttpWatch
  • 17. Web Development Best Practices Minify JavaScript & CSS • Concatenate JavaScript & CSS files o Reduces latency o Reduces HTTP Requests • Compress JavaScript and CSS o Reduces download size var foo = ['1','2','3','4']; for (var i = 0 ; i < 4 ; i++) { alert(foo[i]); } var foo=[quot;1quot;,quot;2quot;,quot;3quot;,quot;4quot;];for(var i=0;i<4;i++){alert(foo[i])}
  • 18. Web Development Best Practices Determining application size
  • 19. Quartermile Improvement After JavaScript + CSS Minification (YUI Compressor)
  • 20. Web Development Best Practices Measuring Latency
  • 21. Web Development Best Practices Measuring latency
  • 22. Web Development Best Practices Latency is not a static number
  • 23. Web Development Best Practices Decreasing latency increases user happiness and engagement • Measure from different locations • Measure often
  • 24. Web Development Best Practices Automatically collecting latency measurements • JavaScript code for recording gadget latency: var startTime = new Date(); var imgElement = new Image() imgElement.onload = function() { var endTime = new Date(); var latency = endTime. getTime() - startTime.getTime(); // report latency back to your server } imgElement.src = quot;http://your.server.com/ping.gifquot;;
  • 25. Web Development Best Practices Spriting Images • Concatenate images into a single file (sprite) and use CSS to selectively display portions of the sprite o Reduce # of requests o Reduce latency
  • 26. Web Development Best Practices Determining Request Count With YSlow!
  • 28. Web Development Best Practices Adjusting Cache Headers • Use the browser's cache for static data o Reduces total bandwidth & requests o Reduces latency • Apache configuration example: <FilesMatch quot;.(css|js|gif|jpe?g|png)$quot;> Header set Cache-Control quot;max-age=290304000, publicquot; </FilesMatch> • Use Cache-busting to force refresh http://example.org/css/style.css?v=3
  • 29. Server Assisted Optimizations Photo by zappowbang http://www.flickr.com/photos/zappowbang/3202362752/
  • 30. Server Assisted Optimizations • Social gadget: o Small tweak == big gain • Social network o Many small tweaks == very big gain • Social network advantages: o Control over the HTML they output o Better network infrastructure
  • 31. Static Content Proxies • Social network willing to absorb some traffic for you o Could use content delivery networks (CDNs) o Distributed network, great for serving static content all over the world • Important for clients further away from your servers! var div = $(quot;#flashcontainerquot;); var url = gadgets.io.getProxyUrl( quot;http://me.com/flash.swfquot;); gadgets.flash.embedFlash(url, div, 10);
  • 32. Content Rewriting • Social network has control over its own output o CSS first, JS last o Concatenate, Minify o Rewrite URLs for static proxy • Caching controls in your gadget spec: <Module> <ModulePrefs> <Optional feature=quot;content-rewritequot;> <Param name=quot;include-urlsquot;></Param> <Param name=quot;exclude-urlsquot;>.*</ Param> <Param name=quot;include-tagsquot;></Param> </Optional> ...
  • 33. OpenSocial Best Image by Paul Downey http://www.flickr.com/photos/psd/2841928867/in/datetaken Practices
  • 34. OpenSocial: Designed For Social Apps • Some optimizations only make sense in a social application context • OpenSocial offers conveniences to social app developers • Learn from the OpenSocial API when designing your own application interfaces
  • 35. Batching One API call == 1 HTTP request: osapi.people.getViewer().execute(onVwr); osapi.people.getOwner().execute(onOwnr); osapi.people.getViewerFriends().execute(onFr nd); osapi.people.getOwnerFriends().execute(onOFr nd); varas much as osapi.newBatch() Do batch = you can in a single trip: .add(quot;vwrquot;, osapi.people.getViewer()) .add(quot;vfdquot;, osapi.people.getViewerFriends()) .add(quot;owrquot;, osapi.people.getOwner()) .add(quot;ofdquot;, osapi.people.getOwnerFriends()) .execute(onData); 2 -> 1 OpenSocial requests 4 -> 1 Quartermile API requests
  • 37. OpenSocial Best Practices Data Pipelining + Proxied Content • The Naive implementation makes a lot of requests • How can we improve on that?
  • 38. OpenSocial Best Practices Data Pipelining + Proxied Content • Using OpenSocial 0.9's Data-Pipelining, we can declare which social data to POST to your server • Your server operates on the data and returns the HTML to display • Available in iGoogle & orkut sandboxes, coming to a container near you soon(tm)
  • 39. OpenSocial Best Practices Data Pipelining + Proxied Content <Module> <ModulePrefs ... etc .../> <Content type=quot;htmlquot; view=quot;profilequot; href=quot;http://yoursite.com/proxied.phpquot; authz=quot;signedquot;> <os:ViewerRequest key=quot;vwrDataquot; fields=quot;id,displayNamequot;/> <os:OwnerRequest key=quot;ownDataquot;/> <os:PeopleRequest key=quot;ownFriendsquot; userId=quot;@ownerquot; groupId=quot;@selfquot;/> </Content> </Module>
  • 40. OpenSocial Best Practices Data Pipelining + Proxied Content <?php $postData = json_decode(file_get_contents(quot;php://inputquot;)); echo quot;<h1>Hello {$postData['vwrData']['name']}</h1>quot;; echo quot;These are {$postData['ownData']['name']}'s friends:quot;; echo quot;<br/>quot;; foreach ($postData['ownFriends'] as $friend) { echo quot;{$friend['name']}<br/>quot;; }
  • 42. OpenSocial Best Practices Invalidation Pattern • New application design pattern available with the features introduced in 0.9 • When your internal state changes on the application server, use REST/RPC calls to invalidate data: o Per user or url o Application ID is determined by 2 Legged OAuth call
  • 43. OpenSocial Best Practices Invalidation Pattern • Calling the invalidation API: POST /api/rest/cache/invalidate HOST opensocial.example.org Content-Type: application/json { invalidationKeys : [ quot;http://www.myapp.com/gadgetspec.xmlquot;, quot;http://yoursite.com/proxied.phpquot; quot;user:123quot;] }
  • 44. Optimizing Your Data Store Image by euthman http://www.flickr.com/photos/euthman/1846038389/
  • 45. OpenSocial Best Practices Data Store Structuring • Database joins against friend lists are generally very expensive • Plan ahead if you're not using App Engine o Master / Slave architecture o Database partitioning • Use Memcache to cache data (in App Engine too!) o Filter results in software, make the most of cache • Consider storing frequently used data in JSON Blobs instead traditional relational storage
  • 46. OpenSocial Best Practices Data Store Structuring • Consider using background processing o Updates are slightly delayed o Doesn't block user interaction o Great for quot;What are your friends doingquot; result sets • Use a off-the-shelf / open source Queue system or • App Engine, use cron.yaml: cron: - description: process activities entries url: /tasks/processActivities schedule: every 1 minutes
  • 47. Designing Quartermile's Data Model • How to plan a scalable social application? • Prefer to enforce hard limits up front, than deliver a poor user experience • Decided friend queries were too expensive: o orkut lets you have 1000 friends o MySpace lets you have 100,000s+ of friends • Do all 100,000 friends need to see your exercises? o Created artificial idea of quot;teamsquot; o Choose a subset of friends to invite to your team o Side effect: Drive adoption!
  • 48. Dreaming Up Reasonable Limits • Goal: Fetch all of a team's data for any given week in one database query • How many users can we put on a team? • App Engine returns 1000 entries max for any query • 1 entry / workout • 3 / day ~ 20 / week • 1000 / 20 = 50 users
  • 49. Limits: Made To Be Broken Not every app will be able to enforce such restrictions • Goal: Implement quot;updates from your friendsquot; inside of the Quartermile app • Slow! o Fetch all friends o See which updated recently o Sort • Friend updates are lower priority than team updates o Process in the background o Fetch friends using 2-legged OAuth o Do quot;updates from friendsquot; calculation o Store result of calculation (can be stale)
  • 50. Where To Put It? • Database • Memcache • OpenSocial App Data
  • 51. quot;App Data is one of the most misunderstood and misused portions of the OpenSocial specificationquot; App Data is often used incorrectly Arne Roomann-Kurrik, Google May 2009 at Google I/O
  • 52. App Data • Data store of keys and values o Essentially public, so you can't put secrets here o User writable via JS, so you can't trust it o But it's fast! • Perfect place to cache slow data • Background process does slow calculation • Pushes result to AppData • When rendered, injected directly into the gadget o No server hit!
  • 53. Container-Mandated Optimizations Photo by redjar http://www.flickr.com/photos/redjar/704710355/
  • 54. Container-Mandated Optimizations • 'Naive' implementation: o Easy to make mistakes • Container: o Keep gadgets fast == keep container fast o Userbase affects acceptable latency values o Constraints to keep gadget developers honest
  • 55. iGoogle's Latency • Directory will soon be taking latency into account • Implicit latency penalty, too:
  • 56. orkut's Template-Only Profiles • Profiles: o The most traffic on orkut o Users love gadgets! • OpenSocial 0.9 templates o Can display social data o Can display App Data o No external fetches or dynamic data • Produces an extremely fast profile render • Great use case for AppData cache
  • 57. orkut's Template-Only Profiles <Module> <ModulePrefs title=quot;Templatequot;> <Require feature=quot;opensocial-dataquot; /> <Require feature=quot;opensocial-templatesquot;> <Param name=quot;process-on-serverquot;>true</Param> </Require> </ModulePrefs> <Content type=quot;htmlquot; view=quot;profilequot;><![CDATA[ <script type=quot;text/os-dataquot;> <os:PeopleRequest key=quot;friendsquot; userId=quot;@viewerquot; groupId=quot;@friendsquot;/> </script> <script type=quot;text/os-templatequot;> <div repeat=quot;${friends}quot;>${Cur.name.givenName}</div> </script> ]]></Content> </Module>
  • 58. Summary Photo by peagreengirl http://www.flickr.com/photos/peagreenchick/384744358/in/photostream/
  • 59. Summary Comparison of each technique App Size: Latency: • JS Minification • JS Minification • Content Rewriting • Spriting • Content Proxy • Content Rewriting • Pipelining • Content Proxy • Invalidation • Batching • Cache Headers • Data Store Optimization • Background • App Data Cache Requests: • Pipelining • JS Minification • Invalidation • Spriting • Limited Profiles • Content Rewriting • Cache Headers • Cache Headers
  • 60. Quartermile 'Most Optmized' Implementation
  • 61. All you ever wanted to know about web apps performance tuning http://stevesouders.com/ 61
  • 62. Performance ?) A monk asked Zhaozhou to teach him. Zhaozhou asked, quot;Have you eaten your meal?quot; The monk replied, quot;Yes, I have.quot; quot;Then go wash your bowlquot;, said Zhaozhou. At that moment, the monk was enlightened. , Mumonkan Image Source http://commons.wikimedia.org/wiki/File:Satori.svg public domain
  • 63. Page Speed Firefox Extension • Released June 4 2009 • http://code.google.com/speed/page-speed/ 63
  • 64. Google Developer Relations Japan • Google – Google Developer Day – http://sites.google.com/site/devreljp/ 64
  • 65. code.google.com • Google – – http://code.google.com/intl/ja/ 65
  • 66. • Google Developer Day • 2 – – • – Google Developer Relations Japan http://sites.google.com/site/devreljp/ 66
  • 67. Q&A