SlideShare a Scribd company logo
1 of 101
Download to read offline
OpenSocial
       a standard for the social web




Patrick Chanezon            Singapore
chanezon@google.com         October 28th 2008
Agenda

•   OpenSocial introduction
•   How to build OpenSocial applications
•   Hosting social applications
•   Social applications monetization
•   OpenSocial containers
•   Becoming an OpenSocial container
•   Google Friend Connect
•   Summary
http://twitter.com/googledevapac
OpenSocial Introduction
Patrick Chanezon
Making the web better
 by making it social

What does social mean?
What does Social mean?




     Eliette what do you do with your friends?
This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License
This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License
This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License
This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License
This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License
This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License
Raoul: a social object for Charlotte (3 year old)
Jaiku’s Jyri Engeström's 5 rules for social
 networks: social objects
1. What is your object?
2. What are your verbs?
3. How can people share the objects?
4. What is the gift in the invitation?
5. Are you charging the publishers or the spectators?
http://tinyurl.com/yus8gw
How do we socialize objects
          online
without having to create yet
 another social network?
OpenSocial

A common API for social applications
     across multiple web sites
The Trouble with Developing Social Apps




                                 Which site do I build my app for?
Let’s work on that…




                      Using OpenSocial, I can build apps for all
                      of these sites!
What’s offered by OpenSocial?


• Activities
   o   What are people up to on the web

• People/Profile Info
   o   Who do I know, etc.

• Persistent datastore
   o   Handles key/value pairs
Today: 375 Million User Reach
Where is OpenSocial live today?


Live to Users:              Live Developer Sandboxes:
 • MySpace                   • iGoogle
 • orkut                     • imeem
 • hi5                       • CityIN
 • Freebar                   • Tianya
 • Friendster                • Ning
 • Webon from Lycos          • Plaxo Pulse
 • IDtail                    • Mail.ru
 • YiQi                      • lokalisten - New!
 • Netlog - New!             • Viadeo - New!
 • Hyves - New!              • 51.com - New!




Individual Developer Links:
http://code.google.com/apis/opensocial/gettingstarted.html
OpenSocial “Containers”
Containers in the region
What’s in OpenSocial?


• JavaScript API - Now

• REST Protocol - New

• Templates - Prototype in Shindig
OpenSocial’s JavaScript API


• OpenSocial JS API
• Gadget JS API
• Gadget XML schema

• OpenSocial v0.7 is live
• OpenSocial v0.8 is being deployed now

• Specs and release notes: http://opensocial.org
OpenSocial’s REST Protocol


•   Access social data without JavaScript
•   Works on 3rd party websites / phones / etc
•   Uses OAuth to allow secure access
•   Open source client libraries in development
    o   Java, PHP, Python, <your fav language here>

• Being deployed with OpenSocial v0.8

• Spec’s available at http://opensocial.org
OpenSocial Templates


• Writing JavaScript is hard
• Writing templates is easy
• Templates also give
   o   Consistent UI across containers
   o   Easy way to localize
   o   More interesting content options when inlining
       into container (activities, profile views)
   o   Ability to serve millions of dynamic pages per
       day without a server
Design principles

Create a template language that is:

• Simple
   o Easy markup for creating UI and binding data

• Fast
   o Supports server-side optimizations

• Extensible
   o Standard reusable controls (buttons, lists, links, etc.)

• Everywhere
   o Only need to include a single JavaScript file
Concepts:

• Markup
  o A set of standard tags and behaviors that provide
    developers with a simple, declarative language for
    assembling apps.

• Templating
   o A set of standard elements implemented by containers.
   o A method for taking structured data and rendering UI
     elements in an arbitrary markup.

• Data Pipelining
  o A method for grabbing OpenSocial and third-party data
    declaratively (or in script) and joining it to templates.
Example: os:Image

<os:Image key=quot;http://...quot;/>
Example: osTabs, os:ShowPerson

<os:Tabs name=quot;tabGroupquot;>
 <tab>
   <title>Tab 1</title>
   <body>This is the first tab.</body>
 </tab>
 ...
 <tab>
   <title>Tab 3</title>
   <body>
     <os:ShowPerson person=quot;${Viewer}quot;/>
     <div repeat=quot;ViewerFriendsquot;>
      <os:ShowPerson person=quot;${$this}quot;/>
     </div>
   </body>
 </tab>
</os:Tabs>
Example: Friends list (no templates)
Example: Friends list (with templates)
Template Status

• High-level specification complete:
  o http://wiki.opensocial-templates.org

• Prototype implementation available:
   o http://ostemplates-demo.appspot.com

• GET INVOLVED! Tag feedback/suggestions appreciated:
  o http://tech.groups.yahoo.com/group/os-templates/

• Code for templates is in Shindig: patches welcome:-)
OpenSocial is what you make it.


•   OpenSocial is an open source project.
•   The spec is controlled by the community.
•   Anyone can contribute and have a voice.
•   http://groups.google.com/group/opensocial/
    o   “OpenSocial and Gadgets spec” subgroup

• OpenSocial Foundation
    o   Get involved to nominate and elect board reps
    o   http://www.opensocial.org/opensocial-foundation/
A note on compliance


• OpenSocial is designed for many sites

• Building an app:
   o   Technology
   o   Policy

• OpenSocial Compliance Tests
   o   http://code.google.com/p/opensocial-
       resources/wiki/ComplianceTests
OpenSocial Compliance test in orkut
OpenSocial Compliance Matrix
      http://opensocial-compliance.appspot.com
Other comments


• Portable Contacts Alignment

• Caja for JavaScript security
A standard for everyone




   This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License
How To Build OpenSocial
Applications
Owner and Viewer Relationship

                     Applications
               has                  views


    Owner                                   Viewer

    has                                        has

     Friends                                Friends
Understanding the Gadget XML
                                                                       ModulePrefs define
               <?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?> characteristics of the
               <Module>                                         gadget, such as title,
                                                                     author, etc.
                     <ModulePrefs title=quot;Hello World!quot;>
   Module node         <Require feature=quot;opensocial-0.7quot; />
defines the gadget.
                     </ModulePrefs>
                     <Content type=quot;htmlquot;>           Require nodes should
                                                       be added for all
                       <![CDATA[                       desired features
                             <script>
                           function init(){
                              alert(quot;hello worldquot;);
                         }
                         gadgets.util.registerOnLoadHandler(init);
  Define your gadget
               </script>
 html within Content
         node          ]]>
                     </Content>
               </Module>
Retrieve Friend Information
function getFriendData() {
  var req = opensocial.newDataRequest();
  req.add(req.newFetchPersonRequest(VIEWER), 'viewer');
  req.add(req.newFetchPeopleRequest(VIEWER_FRIENDS),
'viewerFriends');               Place an         Create a new data
  req.send(onLoadFriends); asynchronous call to
                              the container.
                                                 request object and
                                                add the desired sub-
}                                                    requests.


function onLoadFriends(response) {
  var viewer = response.get('viewer').getData();
  var viewerFriends = response.get('viewerFriends').getData();
  ///More code
}                                       Handle the returned
                                             data in callback
Persisting Data
function populateMyAppData() {
                                                     Use a
var req = opensocial.newDataRequest();       newUpdatePersonAppDa
var data1 = Math.random() * 5;                 taRequest() to update
                                                      data.
var data2 = Math.random() * 100;

req.add(req.newUpdatePersonAppDataRequest(
quot;VIEWERquot;,quot;AppField1quot;, data1));
req.add(req.newUpdatePersonAppDataRequest(
quot;VIEWERquot;,quot;AppField2quot;, data2));
req.send(requestMyData);
}
Fetching persisted data
function requestMyData() {                                    Use a
var req = opensocial.newDataRequest();                 newFetchPersonAppD
var fields = [quot;AppField1quot;, quot;AppField2quot;];                ataRequest() to fetch
                                                               data.

req.add(req.newFetchPersonRequest(
opensocial.DataRequest.PersonId.VIEWER),quot;viewerquot;);
req.add(req.newFetchPersonAppDataRequest(quot;VIEWERquot;,
fields), quot;viewer_dataquot;);
req.send(handleReturnedData);
                                               AppData is returned as a
}                                              2-level Map, with person
                                                        id as the first key and
function handleReturnedData(data) {                     propertyname as the
                                                               next key
var mydata = data.get(quot;viewer_dataquot;);
var viewer = data.get(quot;viewerquot;);
me = viewer.getData();
var appField1 = mydata[me.getId()][quot;AppField1quot;];
 ///More code
}
Posting an Activity
function postActivity(text) {
var params = {};                           requestCreateActivity is
                                              a request, a specific
params[opensocial.Activity.Field.TITLE] = text; may choose to
                                            container
var activity = opensocial.newActivity(params); ignore it.
opensocial.requestCreateActivity(activity,
opensocial.CreateActivityPriority.HIGH,
callback);
}

postActivity(quot;This is a sample activity, created
at quot; + new Date().toString())
How to build an OpenSocial application
Best Practices
Best practices : Check for errors
• Both the request and sub-requests can have
  errors, use hadError() to check.

function response(data) {
 if (!data.hadError()) {
     ...
} else {
   if (data.get(quot;reqquot;).hadError()) {
     alert(data.get(quot;reqquot;).getErrorMessage());
   }
 } else {
     alert('Unknown error occurred');
};
Best practices : Be specific
• Specify which fields you want to use:
  only ID, NAME and THUMBNAIL_URL are returned
  by default
function request() {
 var req = opensocial.newDataRequest();
 var params = {};
 params[opensocial.DataRequest.PeopleRequestFields
     .PROFILE_DETAILS] = [
    opensocial.Person.Field.PROFILE_URL
 ];
 req.add(req.newFetchPersonRequest(
    opensocial.DataRequest.PersonId.VIEWER, params),
    quot;reqquot;);
 req.send(response);
};
Best practices : Capability Discovery
• Check for supported features and fields

var supportsAboutMe =
  opensocial.getEnvironment().supportsField(
     opensocial.Environment.ObjectType.PERSON,
     opensocial.Person.Field.ABOUT_ME
  );

if (gadgets.util.hasFeature('hi5')) {
  mediaItem.setField(
    hi5.ActivityMediaItemField.LINK,
    quot;http://linkurlquot;);
}
Best Practises : Use the container's cache

Use the container's content cache
 function showImage() {
    imgUrl = 'http://foo.com/bar.png';
    cachedUrl = gadgets.io.getProxyUrl(imgUrl);
    html = ['<img src=quot;', cachedUrl, 'quot;>'];
    document.getElementById('dom_handle').innerHTML =
      html.join('');
 };
 showImage();

• Also check out
   o Content-Rewriter feature
   o Preloading
   o Using App Data as content cache
Best practises : Web development 101

 • Control the caching of your content, http headers:
   o Cache-Control
   o Last-Modified
   o Expires
   o E-Tag
 • Reduce number of http requests
   o Combine JS and CSS files into one file
   o Combine images into single sprite + CSS positioning
 • Use Google's AJAX libraries API
   o <script src=quot;http://ajax.googleapis.com/.../prototype.js
 • Other techniques:
   o GZip content
   o Minify JS and CSS
   o See YSlow!
Hosting your application

 • Host it anywhere you want to, with any back-end
 • Keep in mind:
    o Popular apps like iLike get > 200k req / minute peak
    o Means dealing with lots of scalability issues!
    o DB Sharding, memcache pools, server farms..
 • Why not use a cloud service like:
    o Google App Engine
    o Joyent.com
    o Amazon EC2
Application Development Resources
Specification
http://opensocial.org/
http://groups.google.com/group/opensocial-and-gadgets-spec

Code Samples and Tools
http://code.google.com/opensocial
http://code.google.com/p/opensocial-resources/

Getting started guide
http://code.google.com/apis/opensocial/articles/tutorial/tutorial-
0.8.html
Social Apps monetization
Patrick Chanezon
OpenSocial Monetization
 • Ads from Ad Networks
     o   AdSense, RightMedia
     o   BuddyPoke, Rate My Friend
 • Brand/Private Label App
     o   Sony Ericsson MTV Roadies app on orkut
 •   Sell virtual or real goods
 •   Free -> Freemium
 •   Referrals
 •   Virtual currency
Success Story: Buddy Poke




 •   #1 OpenSocial app on orkut
 •   8M installs for orkut, hi5, MySpace
 •   $1-2 CPM
 •   #1 App for App Engine w/ millions daily PV
Success Story: PhotoBuzz




•   6M+ installs on hi5 and orkut
•   CPM $1-3, especially good on orkut
•   4M buzzes per day
•   Small team of 4 people, profitable
Container specifics
Container Specific Extensions
MySpace
• photo albums
• videos

hi5
 • status
 • presence
 • photo albums

Netlog
 • credits api extension
 • translation tool for free

Imeem
 • music metadata api
Becoming an OpenSocial Container
Bruno Rovagnati, Globant
Becoming an OpenSocial Container


• Question:
   o How do you become an OpenSocial container?
• Answer:
   o The Apache incubator project “Shindig” serves this
     purpose!
What is Shindig ?

• Open source reference implementation of OpenSocial &
  Gadgets specification
• An Apache Software Incubator project
• Available in Java & PHP
• http://incubator.apache.org/shindig


 It’s Goal:
 “Shindig's goal is to allow new sites to start hosting social apps
in under an hour's worth of workquot;
Introduction to Shindig Architecture
• Gadget Server
• Social Data Server
• Gadget Container JavaScript
Gadget Server
Social Server
Social Server - RESTful API
• Preview available on
   o iGoogle
   o Orkut
   o Hi5
• New development models
   o Server to server & Mobile!
• Try it out:
  curl http://localhost:8080/social/rest/people/john.doe/@all
Shindig Server Side (Java) Architecture
Shindig Client Side Libraries
Opensocial – JS Library
Implementing Shindig - Data sources
• Integrate with your own data sources
   o People Service
   o Activities Service
   o App Data Service

class MyPeopleService implements PeopleService {
...
}

class MyAppDataService implements AppDataService {
...
}

class MyActivitiesService implements ActivitiesService {
...
}
Implementing Shindig - PHP
 • Implement functions

function getActivities($ids)
{
   $activities = array();
   $res = mysqli_query($this->db, ”SELECT…quot;);
   while ($row = @mysqli_fetch_array($res, MYSQLI_ASSOC)) {
      $activity = new Activity($row['activityId'],
               $row['personId']);
      $activity->setStreamTitle($row['activityStream']);
      $activity->setTitle($row['activityTitle']);
      $activity->setBody($row['activityBody']);
      $activity->setPostedTime($row['created']);
      $activities[] = $activity;
      }
   return $activities;
}
Implementing Shindig - Java
Code at http://chrisschalk.com/shindig_docs/io/shindig-io.html
import org.apache.shindig.social.opensocial.ActivitiesService;

public class SQLActivitiesService implements ActivitiesService {

  private SQLDataLayer sqlLayer;

  @Inject
  public SQLActivitiesService(SQLDataLayer sqlLayer) {
    this.sqlLayer = sqlLayer;
  }
Implementing Shindig - Java
public ResponseItem<List<Activity>> getActivities(List<String> ids,
  SecurityToken token) {

    Map<String, List<Activity>> allActivities = sqlLayer.getActivities();

    List<Activity> activities = new ArrayList<Activity>();

    for (String id : ids) {
      List<Activity> personActivities = allActivities.get(id);
      if (personActivities != null) {
        activities.addAll(personActivities);
      }
    }
    return new ResponseItem<List<Activity>>(activities);
}
Implementing - Make it a platform
• Add UI Elements
   o App Gallery
   o App Canvas
   o App Invites
   o Notification Browser
• Developer Resources
   o Developer Console
   o Application Gallery
• Scale it Out!
Implementing - Scale it Out!
•   Prevent Concurrency issues
•   Reduce Latency
•   Add Caching
•   Add more caching!
Usage Example: Sample Container
• Static html sample container
• No effort to get up and running
• No database or features
Usage Example: Partuza
•   Partuza is a Example social network site, written in PHP
•   Allows for local gadget development & testing too
•   Use as inspiration (or copy) for creating your own social site
•   http://code.google.com/p/partuza
OpenSocial for intranet, portals
Sun Microsystems
 • Socialsite: Shindig + gadget based UI written in Java
 • Open Source https://socialsite.dev.java.net/




Upcoming from Impetus
• Zest: Shindig + Drupal (PHP)
• Zeal: Shindig + Liferay (Java)
OpenSocial for the Enterprise: Exo
Platforms
Summary
• Become an OpenSocial Container
   o Get Shindig (PHP or Java)
   o Look at examples & documentation
   o Implement Services
   o Add UI
   o Scale it out

• Resources & Links:
  o http://www.chabotc.com/gdd/
What is Friend Connect?
Allows any site to become an OpenSocial container by simply
        copying a few snippets of code into your site




     http://www.google.com/friendconnect/
Friend Connect gives ...

• Users
  o ...   more ways to do more things with my friends

• Site owners
  o ... more (and more engaged) traffic for my site

• App developers
  o ... more reach for my apps


                  and ... make it easy
OpenSocial Gadget Contest for Southeast Asia

•   To support the developer community and encourage innovation on the
    OpenSocial platform in Southeast Asia
•   Countries: Malaysia, Philippines, Singapore, Thailand, Vietnam
•   4 winners per country: Nintendo Wii, Apple iPod Touch prizes
•   Judging panel: Google, eXo Platform, Friendster, Globant, hi5
•   Dates:
     o   Registration opens: Nov 15, 2008
     o   Registration ends: Jan 10, 2009
     o   Winners notified: Jan 23, 2009
     o   Results announced: Feb 6, 2009
•   The REAL reward for local developers: winning gadgets to be promoted on
    OpenSocial partner websites to potentially reach hundreds of millions of Internet
    users worldwide
•   http://code.google.com/events/apacdevfest/contest
Learn more
code.google.com
Q&A
Google Devfest Singapore - OpenSocial

More Related Content

What's hot

Using Web Services with JavaScript - Fronttrends 2010
Using Web Services with JavaScript - Fronttrends 2010Using Web Services with JavaScript - Fronttrends 2010
Using Web Services with JavaScript - Fronttrends 2010Christian Heilmann
 
Android ui layouts ,cntls,webservices examples codes
Android ui layouts ,cntls,webservices examples codesAndroid ui layouts ,cntls,webservices examples codes
Android ui layouts ,cntls,webservices examples codesAravindharamanan S
 
Spiffy Applications With JavaScript
Spiffy Applications With JavaScriptSpiffy Applications With JavaScript
Spiffy Applications With JavaScriptMark Casias
 
Local SQLite Database with Node for beginners
Local SQLite Database with Node for beginnersLocal SQLite Database with Node for beginners
Local SQLite Database with Node for beginnersLaurence Svekis ✔
 

What's hot (9)

Javascript projects Course
Javascript projects CourseJavascript projects Course
Javascript projects Course
 
Using Web Services with JavaScript - Fronttrends 2010
Using Web Services with JavaScript - Fronttrends 2010Using Web Services with JavaScript - Fronttrends 2010
Using Web Services with JavaScript - Fronttrends 2010
 
Opensocial Codelab
Opensocial CodelabOpensocial Codelab
Opensocial Codelab
 
Android ui layouts ,cntls,webservices examples codes
Android ui layouts ,cntls,webservices examples codesAndroid ui layouts ,cntls,webservices examples codes
Android ui layouts ,cntls,webservices examples codes
 
Spiffy Applications With JavaScript
Spiffy Applications With JavaScriptSpiffy Applications With JavaScript
Spiffy Applications With JavaScript
 
Local SQLite Database with Node for beginners
Local SQLite Database with Node for beginnersLocal SQLite Database with Node for beginners
Local SQLite Database with Node for beginners
 
The Devil and HTML5
The Devil and HTML5The Devil and HTML5
The Devil and HTML5
 
jQuery
jQueryjQuery
jQuery
 
my test
my testmy test
my test
 

Viewers also liked

Presentacion De La Empresa 10 De Mayo De 2010
Presentacion De La Empresa 10 De Mayo De 2010Presentacion De La Empresa 10 De Mayo De 2010
Presentacion De La Empresa 10 De Mayo De 2010juanignaciogarcia
 
Cloud Foundry, the Open Platform as a Service - Oscon - July 2012
Cloud Foundry, the Open Platform as a Service - Oscon - July 2012Cloud Foundry, the Open Platform as a Service - Oscon - July 2012
Cloud Foundry, the Open Platform as a Service - Oscon - July 2012Patrick Chanezon
 
Swdc google app_engine_for_business
Swdc google app_engine_for_businessSwdc google app_engine_for_business
Swdc google app_engine_for_businessPatrick Chanezon
 
AFCEA C4I Symposium: The 4th C in C4I Stands for Cloud:Factors Driving Adopti...
AFCEA C4I Symposium: The 4th C in C4I Stands for Cloud:Factors Driving Adopti...AFCEA C4I Symposium: The 4th C in C4I Stands for Cloud:Factors Driving Adopti...
AFCEA C4I Symposium: The 4th C in C4I Stands for Cloud:Factors Driving Adopti...Patrick Chanezon
 
Leweb09 Building Wave Robots
Leweb09 Building Wave RobotsLeweb09 Building Wave Robots
Leweb09 Building Wave RobotsPatrick Chanezon
 

Viewers also liked (6)

Presentacion De La Empresa 10 De Mayo De 2010
Presentacion De La Empresa 10 De Mayo De 2010Presentacion De La Empresa 10 De Mayo De 2010
Presentacion De La Empresa 10 De Mayo De 2010
 
Cloud Foundry, the Open Platform as a Service - Oscon - July 2012
Cloud Foundry, the Open Platform as a Service - Oscon - July 2012Cloud Foundry, the Open Platform as a Service - Oscon - July 2012
Cloud Foundry, the Open Platform as a Service - Oscon - July 2012
 
Swdc google app_engine_for_business
Swdc google app_engine_for_businessSwdc google app_engine_for_business
Swdc google app_engine_for_business
 
State Of Opensocial
State Of OpensocialState Of Opensocial
State Of Opensocial
 
AFCEA C4I Symposium: The 4th C in C4I Stands for Cloud:Factors Driving Adopti...
AFCEA C4I Symposium: The 4th C in C4I Stands for Cloud:Factors Driving Adopti...AFCEA C4I Symposium: The 4th C in C4I Stands for Cloud:Factors Driving Adopti...
AFCEA C4I Symposium: The 4th C in C4I Stands for Cloud:Factors Driving Adopti...
 
Leweb09 Building Wave Robots
Leweb09 Building Wave RobotsLeweb09 Building Wave Robots
Leweb09 Building Wave Robots
 

Similar to Google Devfest Singapore - OpenSocial

Goodle Developer Days Madrid 2008 - Open Social Update
Goodle Developer Days Madrid 2008 - Open Social UpdateGoodle Developer Days Madrid 2008 - Open Social Update
Goodle Developer Days Madrid 2008 - Open Social UpdatePatrick Chanezon
 
Developing for LinkedIn's Application Platform
Developing for LinkedIn's Application PlatformDeveloping for LinkedIn's Application Platform
Developing for LinkedIn's Application PlatformTaylor Singletary
 
Goodle Developer Days Munich 2008 - Open Social Update
Goodle Developer Days Munich 2008 - Open Social UpdateGoodle Developer Days Munich 2008 - Open Social Update
Goodle Developer Days Munich 2008 - Open Social UpdatePatrick Chanezon
 
Goodle Developer Days London 2008 - Open Social Update
Goodle Developer Days London 2008 - Open Social UpdateGoodle Developer Days London 2008 - Open Social Update
Goodle Developer Days London 2008 - Open Social UpdatePatrick Chanezon
 
OpenSocial Intro
OpenSocial IntroOpenSocial Intro
OpenSocial IntroPamela Fox
 
BarCamp KL H20 Open Social Hackathon
BarCamp KL H20 Open Social HackathonBarCamp KL H20 Open Social Hackathon
BarCamp KL H20 Open Social Hackathonmarvin337
 
Ajaxworld Opensocial Presentation
Ajaxworld Opensocial PresentationAjaxworld Opensocial Presentation
Ajaxworld Opensocial PresentationChris Schalk
 
Futuropolis 2058 Singapore - OpenSocial, a standard for the social web
Futuropolis 2058 Singapore - OpenSocial, a standard for the social webFuturopolis 2058 Singapore - OpenSocial, a standard for the social web
Futuropolis 2058 Singapore - OpenSocial, a standard for the social webPatrick Chanezon
 
The Open & Social Web - Kings of Code 2009
The Open & Social Web - Kings of Code 2009The Open & Social Web - Kings of Code 2009
The Open & Social Web - Kings of Code 2009Chris Chabot
 
Open Social Summit Korea Overview
Open Social Summit Korea OverviewOpen Social Summit Korea Overview
Open Social Summit Korea OverviewChris Schalk
 
Opensocial Haifa Seminar - 2008.04.08
Opensocial Haifa Seminar - 2008.04.08Opensocial Haifa Seminar - 2008.04.08
Opensocial Haifa Seminar - 2008.04.08Ari Leichtberg
 
Javapolis GWT Gadget OpenSocial
Javapolis GWT Gadget OpenSocialJavapolis GWT Gadget OpenSocial
Javapolis GWT Gadget OpenSocialDidier Girard
 
Open Social Presentation - GSP West 2008
Open Social Presentation - GSP West 2008Open Social Presentation - GSP West 2008
Open Social Presentation - GSP West 2008Patrick Chanezon
 
OSML and OpenSocial 0.9
OSML and OpenSocial 0.9OSML and OpenSocial 0.9
OSML and OpenSocial 0.9MySpaceDevTeam
 
Moving from Web 1.0 to Web 2.0
Moving from Web 1.0 to Web 2.0Moving from Web 1.0 to Web 2.0
Moving from Web 1.0 to Web 2.0Estelle Weyl
 
OGCE Project Overview
OGCE Project OverviewOGCE Project Overview
OGCE Project Overviewmarpierc
 

Similar to Google Devfest Singapore - OpenSocial (20)

Goodle Developer Days Madrid 2008 - Open Social Update
Goodle Developer Days Madrid 2008 - Open Social UpdateGoodle Developer Days Madrid 2008 - Open Social Update
Goodle Developer Days Madrid 2008 - Open Social Update
 
Developing for LinkedIn's Application Platform
Developing for LinkedIn's Application PlatformDeveloping for LinkedIn's Application Platform
Developing for LinkedIn's Application Platform
 
Goodle Developer Days Munich 2008 - Open Social Update
Goodle Developer Days Munich 2008 - Open Social UpdateGoodle Developer Days Munich 2008 - Open Social Update
Goodle Developer Days Munich 2008 - Open Social Update
 
Goodle Developer Days London 2008 - Open Social Update
Goodle Developer Days London 2008 - Open Social UpdateGoodle Developer Days London 2008 - Open Social Update
Goodle Developer Days London 2008 - Open Social Update
 
OpenSocial Intro
OpenSocial IntroOpenSocial Intro
OpenSocial Intro
 
Open social
Open socialOpen social
Open social
 
BarCamp KL H20 Open Social Hackathon
BarCamp KL H20 Open Social HackathonBarCamp KL H20 Open Social Hackathon
BarCamp KL H20 Open Social Hackathon
 
Ajaxworld Opensocial Presentation
Ajaxworld Opensocial PresentationAjaxworld Opensocial Presentation
Ajaxworld Opensocial Presentation
 
Futuropolis 2058 Singapore - OpenSocial, a standard for the social web
Futuropolis 2058 Singapore - OpenSocial, a standard for the social webFuturopolis 2058 Singapore - OpenSocial, a standard for the social web
Futuropolis 2058 Singapore - OpenSocial, a standard for the social web
 
The Open & Social Web - Kings of Code 2009
The Open & Social Web - Kings of Code 2009The Open & Social Web - Kings of Code 2009
The Open & Social Web - Kings of Code 2009
 
Open Social Summit Korea Overview
Open Social Summit Korea OverviewOpen Social Summit Korea Overview
Open Social Summit Korea Overview
 
Opensocial
OpensocialOpensocial
Opensocial
 
Opensocial Haifa Seminar - 2008.04.08
Opensocial Haifa Seminar - 2008.04.08Opensocial Haifa Seminar - 2008.04.08
Opensocial Haifa Seminar - 2008.04.08
 
Javapolis GWT Gadget OpenSocial
Javapolis GWT Gadget OpenSocialJavapolis GWT Gadget OpenSocial
Javapolis GWT Gadget OpenSocial
 
Open Social Presentation - GSP West 2008
Open Social Presentation - GSP West 2008Open Social Presentation - GSP West 2008
Open Social Presentation - GSP West 2008
 
Open Social
Open SocialOpen Social
Open Social
 
OSML and OpenSocial 0.9
OSML and OpenSocial 0.9OSML and OpenSocial 0.9
OSML and OpenSocial 0.9
 
Moving from Web 1.0 to Web 2.0
Moving from Web 1.0 to Web 2.0Moving from Web 1.0 to Web 2.0
Moving from Web 1.0 to Web 2.0
 
SearchMonkey
SearchMonkeySearchMonkey
SearchMonkey
 
OGCE Project Overview
OGCE Project OverviewOGCE Project Overview
OGCE Project Overview
 

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

What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
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
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
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
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 

Recently uploaded (20)

What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
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
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
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
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 

Google Devfest Singapore - OpenSocial

  • 1. OpenSocial a standard for the social web Patrick Chanezon Singapore chanezon@google.com October 28th 2008
  • 2. Agenda • OpenSocial introduction • How to build OpenSocial applications • Hosting social applications • Social applications monetization • OpenSocial containers • Becoming an OpenSocial container • Google Friend Connect • Summary
  • 5. Making the web better by making it social What does social mean?
  • 6.
  • 7. What does Social mean? Eliette what do you do with your friends?
  • 8. This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License
  • 9. This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License
  • 10. This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License
  • 11. This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License
  • 12. This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License
  • 13. This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License
  • 14. Raoul: a social object for Charlotte (3 year old)
  • 15.
  • 16. Jaiku’s Jyri Engeström's 5 rules for social networks: social objects 1. What is your object? 2. What are your verbs? 3. How can people share the objects? 4. What is the gift in the invitation? 5. Are you charging the publishers or the spectators? http://tinyurl.com/yus8gw
  • 17. How do we socialize objects online without having to create yet another social network?
  • 18. OpenSocial A common API for social applications across multiple web sites
  • 19. The Trouble with Developing Social Apps Which site do I build my app for?
  • 20. Let’s work on that… Using OpenSocial, I can build apps for all of these sites!
  • 21. What’s offered by OpenSocial? • Activities o What are people up to on the web • People/Profile Info o Who do I know, etc. • Persistent datastore o Handles key/value pairs
  • 22. Today: 375 Million User Reach
  • 23. Where is OpenSocial live today? Live to Users: Live Developer Sandboxes: • MySpace • iGoogle • orkut • imeem • hi5 • CityIN • Freebar • Tianya • Friendster • Ning • Webon from Lycos • Plaxo Pulse • IDtail • Mail.ru • YiQi • lokalisten - New! • Netlog - New! • Viadeo - New! • Hyves - New! • 51.com - New! Individual Developer Links: http://code.google.com/apis/opensocial/gettingstarted.html
  • 26. What’s in OpenSocial? • JavaScript API - Now • REST Protocol - New • Templates - Prototype in Shindig
  • 27. OpenSocial’s JavaScript API • OpenSocial JS API • Gadget JS API • Gadget XML schema • OpenSocial v0.7 is live • OpenSocial v0.8 is being deployed now • Specs and release notes: http://opensocial.org
  • 28. OpenSocial’s REST Protocol • Access social data without JavaScript • Works on 3rd party websites / phones / etc • Uses OAuth to allow secure access • Open source client libraries in development o Java, PHP, Python, <your fav language here> • Being deployed with OpenSocial v0.8 • Spec’s available at http://opensocial.org
  • 29. OpenSocial Templates • Writing JavaScript is hard • Writing templates is easy • Templates also give o Consistent UI across containers o Easy way to localize o More interesting content options when inlining into container (activities, profile views) o Ability to serve millions of dynamic pages per day without a server
  • 30. Design principles Create a template language that is: • Simple o Easy markup for creating UI and binding data • Fast o Supports server-side optimizations • Extensible o Standard reusable controls (buttons, lists, links, etc.) • Everywhere o Only need to include a single JavaScript file
  • 31. Concepts: • Markup o A set of standard tags and behaviors that provide developers with a simple, declarative language for assembling apps. • Templating o A set of standard elements implemented by containers. o A method for taking structured data and rendering UI elements in an arbitrary markup. • Data Pipelining o A method for grabbing OpenSocial and third-party data declaratively (or in script) and joining it to templates.
  • 33. Example: osTabs, os:ShowPerson <os:Tabs name=quot;tabGroupquot;> <tab> <title>Tab 1</title> <body>This is the first tab.</body> </tab> ... <tab> <title>Tab 3</title> <body> <os:ShowPerson person=quot;${Viewer}quot;/> <div repeat=quot;ViewerFriendsquot;> <os:ShowPerson person=quot;${$this}quot;/> </div> </body> </tab> </os:Tabs>
  • 34. Example: Friends list (no templates)
  • 35. Example: Friends list (with templates)
  • 36. Template Status • High-level specification complete: o http://wiki.opensocial-templates.org • Prototype implementation available: o http://ostemplates-demo.appspot.com • GET INVOLVED! Tag feedback/suggestions appreciated: o http://tech.groups.yahoo.com/group/os-templates/ • Code for templates is in Shindig: patches welcome:-)
  • 37. OpenSocial is what you make it. • OpenSocial is an open source project. • The spec is controlled by the community. • Anyone can contribute and have a voice. • http://groups.google.com/group/opensocial/ o “OpenSocial and Gadgets spec” subgroup • OpenSocial Foundation o Get involved to nominate and elect board reps o http://www.opensocial.org/opensocial-foundation/
  • 38. A note on compliance • OpenSocial is designed for many sites • Building an app: o Technology o Policy • OpenSocial Compliance Tests o http://code.google.com/p/opensocial- resources/wiki/ComplianceTests
  • 40. OpenSocial Compliance Matrix http://opensocial-compliance.appspot.com
  • 41. Other comments • Portable Contacts Alignment • Caja for JavaScript security
  • 42. A standard for everyone This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License
  • 43. How To Build OpenSocial Applications
  • 44. Owner and Viewer Relationship Applications has views Owner Viewer has has Friends Friends
  • 45. Understanding the Gadget XML ModulePrefs define <?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?> characteristics of the <Module> gadget, such as title, author, etc. <ModulePrefs title=quot;Hello World!quot;> Module node <Require feature=quot;opensocial-0.7quot; /> defines the gadget. </ModulePrefs> <Content type=quot;htmlquot;> Require nodes should be added for all <![CDATA[ desired features <script> function init(){ alert(quot;hello worldquot;); } gadgets.util.registerOnLoadHandler(init); Define your gadget </script> html within Content node ]]> </Content> </Module>
  • 46. Retrieve Friend Information function getFriendData() { var req = opensocial.newDataRequest(); req.add(req.newFetchPersonRequest(VIEWER), 'viewer'); req.add(req.newFetchPeopleRequest(VIEWER_FRIENDS), 'viewerFriends'); Place an Create a new data req.send(onLoadFriends); asynchronous call to the container. request object and add the desired sub- } requests. function onLoadFriends(response) { var viewer = response.get('viewer').getData(); var viewerFriends = response.get('viewerFriends').getData(); ///More code } Handle the returned data in callback
  • 47. Persisting Data function populateMyAppData() { Use a var req = opensocial.newDataRequest(); newUpdatePersonAppDa var data1 = Math.random() * 5; taRequest() to update data. var data2 = Math.random() * 100; req.add(req.newUpdatePersonAppDataRequest( quot;VIEWERquot;,quot;AppField1quot;, data1)); req.add(req.newUpdatePersonAppDataRequest( quot;VIEWERquot;,quot;AppField2quot;, data2)); req.send(requestMyData); }
  • 48. Fetching persisted data function requestMyData() { Use a var req = opensocial.newDataRequest(); newFetchPersonAppD var fields = [quot;AppField1quot;, quot;AppField2quot;]; ataRequest() to fetch data. req.add(req.newFetchPersonRequest( opensocial.DataRequest.PersonId.VIEWER),quot;viewerquot;); req.add(req.newFetchPersonAppDataRequest(quot;VIEWERquot;, fields), quot;viewer_dataquot;); req.send(handleReturnedData); AppData is returned as a } 2-level Map, with person id as the first key and function handleReturnedData(data) { propertyname as the next key var mydata = data.get(quot;viewer_dataquot;); var viewer = data.get(quot;viewerquot;); me = viewer.getData(); var appField1 = mydata[me.getId()][quot;AppField1quot;]; ///More code }
  • 49. Posting an Activity function postActivity(text) { var params = {}; requestCreateActivity is a request, a specific params[opensocial.Activity.Field.TITLE] = text; may choose to container var activity = opensocial.newActivity(params); ignore it. opensocial.requestCreateActivity(activity, opensocial.CreateActivityPriority.HIGH, callback); } postActivity(quot;This is a sample activity, created at quot; + new Date().toString())
  • 50. How to build an OpenSocial application Best Practices
  • 51. Best practices : Check for errors • Both the request and sub-requests can have errors, use hadError() to check. function response(data) { if (!data.hadError()) { ... } else { if (data.get(quot;reqquot;).hadError()) { alert(data.get(quot;reqquot;).getErrorMessage()); } } else { alert('Unknown error occurred'); };
  • 52. Best practices : Be specific • Specify which fields you want to use: only ID, NAME and THUMBNAIL_URL are returned by default function request() { var req = opensocial.newDataRequest(); var params = {}; params[opensocial.DataRequest.PeopleRequestFields .PROFILE_DETAILS] = [ opensocial.Person.Field.PROFILE_URL ]; req.add(req.newFetchPersonRequest( opensocial.DataRequest.PersonId.VIEWER, params), quot;reqquot;); req.send(response); };
  • 53. Best practices : Capability Discovery • Check for supported features and fields var supportsAboutMe = opensocial.getEnvironment().supportsField( opensocial.Environment.ObjectType.PERSON, opensocial.Person.Field.ABOUT_ME ); if (gadgets.util.hasFeature('hi5')) { mediaItem.setField( hi5.ActivityMediaItemField.LINK, quot;http://linkurlquot;); }
  • 54. Best Practises : Use the container's cache Use the container's content cache function showImage() { imgUrl = 'http://foo.com/bar.png'; cachedUrl = gadgets.io.getProxyUrl(imgUrl); html = ['<img src=quot;', cachedUrl, 'quot;>']; document.getElementById('dom_handle').innerHTML = html.join(''); }; showImage(); • Also check out o Content-Rewriter feature o Preloading o Using App Data as content cache
  • 55. Best practises : Web development 101 • Control the caching of your content, http headers: o Cache-Control o Last-Modified o Expires o E-Tag • Reduce number of http requests o Combine JS and CSS files into one file o Combine images into single sprite + CSS positioning • Use Google's AJAX libraries API o <script src=quot;http://ajax.googleapis.com/.../prototype.js • Other techniques: o GZip content o Minify JS and CSS o See YSlow!
  • 56. Hosting your application • Host it anywhere you want to, with any back-end • Keep in mind: o Popular apps like iLike get > 200k req / minute peak o Means dealing with lots of scalability issues! o DB Sharding, memcache pools, server farms.. • Why not use a cloud service like: o Google App Engine o Joyent.com o Amazon EC2
  • 57. Application Development Resources Specification http://opensocial.org/ http://groups.google.com/group/opensocial-and-gadgets-spec Code Samples and Tools http://code.google.com/opensocial http://code.google.com/p/opensocial-resources/ Getting started guide http://code.google.com/apis/opensocial/articles/tutorial/tutorial- 0.8.html
  • 59. OpenSocial Monetization • Ads from Ad Networks o AdSense, RightMedia o BuddyPoke, Rate My Friend • Brand/Private Label App o Sony Ericsson MTV Roadies app on orkut • Sell virtual or real goods • Free -> Freemium • Referrals • Virtual currency
  • 60. Success Story: Buddy Poke • #1 OpenSocial app on orkut • 8M installs for orkut, hi5, MySpace • $1-2 CPM • #1 App for App Engine w/ millions daily PV
  • 61. Success Story: PhotoBuzz • 6M+ installs on hi5 and orkut • CPM $1-3, especially good on orkut • 4M buzzes per day • Small team of 4 people, profitable
  • 63. Container Specific Extensions MySpace • photo albums • videos hi5 • status • presence • photo albums Netlog • credits api extension • translation tool for free Imeem • music metadata api
  • 64. Becoming an OpenSocial Container Bruno Rovagnati, Globant
  • 65. Becoming an OpenSocial Container • Question: o How do you become an OpenSocial container? • Answer: o The Apache incubator project “Shindig” serves this purpose!
  • 66. What is Shindig ? • Open source reference implementation of OpenSocial & Gadgets specification • An Apache Software Incubator project • Available in Java & PHP • http://incubator.apache.org/shindig It’s Goal: “Shindig's goal is to allow new sites to start hosting social apps in under an hour's worth of workquot;
  • 67. Introduction to Shindig Architecture • Gadget Server • Social Data Server • Gadget Container JavaScript
  • 70. Social Server - RESTful API • Preview available on o iGoogle o Orkut o Hi5 • New development models o Server to server & Mobile! • Try it out: curl http://localhost:8080/social/rest/people/john.doe/@all
  • 71. Shindig Server Side (Java) Architecture
  • 72. Shindig Client Side Libraries
  • 73. Opensocial – JS Library
  • 74. Implementing Shindig - Data sources • Integrate with your own data sources o People Service o Activities Service o App Data Service class MyPeopleService implements PeopleService { ... } class MyAppDataService implements AppDataService { ... } class MyActivitiesService implements ActivitiesService { ... }
  • 75. Implementing Shindig - PHP • Implement functions function getActivities($ids) { $activities = array(); $res = mysqli_query($this->db, ”SELECT…quot;); while ($row = @mysqli_fetch_array($res, MYSQLI_ASSOC)) { $activity = new Activity($row['activityId'], $row['personId']); $activity->setStreamTitle($row['activityStream']); $activity->setTitle($row['activityTitle']); $activity->setBody($row['activityBody']); $activity->setPostedTime($row['created']); $activities[] = $activity; } return $activities; }
  • 76. Implementing Shindig - Java Code at http://chrisschalk.com/shindig_docs/io/shindig-io.html import org.apache.shindig.social.opensocial.ActivitiesService; public class SQLActivitiesService implements ActivitiesService { private SQLDataLayer sqlLayer; @Inject public SQLActivitiesService(SQLDataLayer sqlLayer) { this.sqlLayer = sqlLayer; }
  • 77. Implementing Shindig - Java public ResponseItem<List<Activity>> getActivities(List<String> ids, SecurityToken token) { Map<String, List<Activity>> allActivities = sqlLayer.getActivities(); List<Activity> activities = new ArrayList<Activity>(); for (String id : ids) { List<Activity> personActivities = allActivities.get(id); if (personActivities != null) { activities.addAll(personActivities); } } return new ResponseItem<List<Activity>>(activities); }
  • 78. Implementing - Make it a platform • Add UI Elements o App Gallery o App Canvas o App Invites o Notification Browser • Developer Resources o Developer Console o Application Gallery • Scale it Out!
  • 79. Implementing - Scale it Out! • Prevent Concurrency issues • Reduce Latency • Add Caching • Add more caching!
  • 80. Usage Example: Sample Container • Static html sample container • No effort to get up and running • No database or features
  • 81. Usage Example: Partuza • Partuza is a Example social network site, written in PHP • Allows for local gadget development & testing too • Use as inspiration (or copy) for creating your own social site • http://code.google.com/p/partuza
  • 82. OpenSocial for intranet, portals Sun Microsystems • Socialsite: Shindig + gadget based UI written in Java • Open Source https://socialsite.dev.java.net/ Upcoming from Impetus • Zest: Shindig + Drupal (PHP) • Zeal: Shindig + Liferay (Java)
  • 83. OpenSocial for the Enterprise: Exo Platforms
  • 84. Summary • Become an OpenSocial Container o Get Shindig (PHP or Java) o Look at examples & documentation o Implement Services o Add UI o Scale it out • Resources & Links: o http://www.chabotc.com/gdd/
  • 85. What is Friend Connect? Allows any site to become an OpenSocial container by simply copying a few snippets of code into your site http://www.google.com/friendconnect/
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96. Friend Connect gives ... • Users o ... more ways to do more things with my friends • Site owners o ... more (and more engaged) traffic for my site • App developers o ... more reach for my apps and ... make it easy
  • 97. OpenSocial Gadget Contest for Southeast Asia • To support the developer community and encourage innovation on the OpenSocial platform in Southeast Asia • Countries: Malaysia, Philippines, Singapore, Thailand, Vietnam • 4 winners per country: Nintendo Wii, Apple iPod Touch prizes • Judging panel: Google, eXo Platform, Friendster, Globant, hi5 • Dates: o Registration opens: Nov 15, 2008 o Registration ends: Jan 10, 2009 o Winners notified: Jan 23, 2009 o Results announced: Feb 6, 2009 • The REAL reward for local developers: winning gadgets to be promoted on OpenSocial partner websites to potentially reach hundreds of millions of Internet users worldwide • http://code.google.com/events/apacdevfest/contest
  • 99.
  • 100. Q&A