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




Patrick Chanezon            Bangkok
chanezon@google.com         October 31 2008
                                              1
OpenSocial’s goal:
Make the web more social




                           2
What does “social” mean?




           “Eliette, what do you do with your friends?”


                                                          3
What does “social” mean?




    This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License
                                                                                                             4
What does “social” mean?




    This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License
                                                                                                             5
What does “social” mean?




    This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License
                                                                                                             6
What does “social” mean?




    This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License
                                                                                                             7
What does “social” mean?




    This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License
                                                                                                             8
What does “social” mean?




    This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License
                                                                                                             9
What does “social” mean?




           “Internet, what do you do with your friends?”

                                                           10
“We look at each other”




                          11
“Talking”




            12
“Laughing”




             13
“We help each other”




                       14
“We read together”




                     15
“We do projects together”

                            16
The social internet
A social website..
•Provides a feature that becomes more engaging as the number of users
grows.
•Uses relationships between people to present users interesting information.




                                                                        17
The social internet
Some social websites...




                          18
The social internet
A social website..
•Has overhead to manage users and relationships.
•Grows slowly because users must sign up to use the site.

What if we remove
the overhead?
•Developers can focus
on providing
features, not
managing users.




                                                            19
The social internet
A social network..
•Manages large numbers of users and relationships.
•Is slow to add new features.




                                                     20
The social internet
Many social networks...




                          21
The social internet
How do we add new features to social networks?
•Make the social network a platform.
•Give creative developers the tools to add the features themselves.




                                                                      22
The social internet
A social application...
•Lets the social network manage users and relationships.
•Adds new features to the social network.
•Lets users “install” the application without signing up for new accounts.
•Grows quickly because users are already communicating with each other.




                                                                       23
The social internet
Lots of social apps...




                         24
Need for a social API
How do we put apps in social networks?




                                         25
A day in the life of a social app developer




                                              26
A day in the life of a social app developer




                                              27
A day in the life of a social app developer




                                              28
A day in the life of a social app developer




                                              29
A day in the life of a social app developer




                                              30
A day in the life of a social app developer




                                              31
Introduction to OpenSocial
Numbers:
•19+ implemented Containers
•40+ committed Containers
•3000+ applications
•400,000,000+ of users

In Thailand:

               8 M users




                              32
Today: 375 Million User Reach   33
OpenSocial “Containers”




                          34
Where is OpenSocial live today?




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

 Full List:
 http://code.google.com/apis/opensocial/gettingstarted.html
                                                              35
Containers in the region




                           36
The OpenSocial APIs
Versions:
•0.6 - Client-side APIs introduced
•0.7 - Server-side APIs introduced
•0.81 (current) - Server-side APIs finalized
Client-side:
•Gadgets XML
•Gadgets JavaScript
•OpenSocial JavaScript
Server-side:
•RESTful protocol
•RPC protocol



                                               37
OpenSocial is moving fast: bews from this week!
• LinkedIn launched to 100% of users, and has a REST endpoint
• Mail.ru launched to users
• 51.com (large Chinese network) launched
 http://developers.51.com

• Yahoo! launch launched a sandbox --
• Tools:
• Announced the OpenSocial Dev App
• http://wiki.opensocial.org is live
• Community updates:
• OpenSocial is having a birthday event on November 13 in San Francisco
• OpenSocial Foundation community election: vote by Monday!
                                                                          38
Popular OpenSocial apps on hi5 in Thailand



• Engrish
• Daily Pablo -- get a new Picasso painting on your profile every day
• Kitten Club & KittyPix -- pictures of kittens
• PuppyPix -- pictures of puppies
• BuddyPoke! -- Poke your friends, powered by Google App Engine
• Soccer
• Speed Racing! -- design your car and engine and race your friends.


                                                                        39
Gadgets
Not widgets, not sprockets, not gidgets, not wadgets




                                                       40
Gadgets
A gadget spec:
•Is an XML file.
•Defines metadata about an OpenSocial app.
•Is highly cacheable and does not need a high performance server.
Gadgets use existing web standards
•XML to define metadata.
•HTML for markup.
•JavaScript for interactivity.
•CSS for presentation.




                                                                    41
Gadgets
A gadget server:
•Takes the gadget spec as input.
•Performs optimizations on the gadget spec.
•Outputs HTML, JavaScript, and CSS as one document.




                                                      42
Gadgets

A container:
•Displays the social network’s user interface.
•Opens an IFrame to the rendered gadget.




Containers and gadget
servers are both run by
the social network, but
do not need to be on
the same machine, or
even domain.


                                                 43
Gadgets
Example gadget XML spec:
•Uses HTML to print “Hello World”.
•Colors the text red with CSS.
•Dynamically adjusts the height of the gadget with JavaScript.


     <?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?><Module>
     <ModulePrefs title=quot;Hello World!quot;> <Require feature=quot;dynamic-
     heightquot; /> </ModulePrefs> <Content type=quot;htmlquot;> <![CDATA[
     <h1>Hello World</h1>
             <style type=quot;text/cssquot;>
               h1 { color: #dd0000; }
             </style>
             <script type=quot;text/javascriptquot;>
               gadgets.window.adjustHeight();
     </script> ]]> </Content></Module>



                                                                     44
Gadgets
Requesting the gadget XML spec:
1. The client requests an app to be rendered.




                                                45
Gadgets
Requesting the gadget XML spec:
1. The client requests an app to be rendered.
2. The container fetches the gadget XML spec from its host.




                                                              46
Gadgets
Requesting the gadget XML spec:
1. The client requests an app to be rendered.
2. The container fetches the gadget XML spec from its host.
3. The container renders the gadget into HTML, which is displayed
 to the client.




                                                                    47
Gadgets
Requesting the gadget XML spec:
•Because the gadget spec is simple, it can be cached easily.
•Caching reduces the load on your server, great when you have millions of
users.




                                                                      48
Gadgets
Requesting a cached gadget XML spec:
1.The client requests an app to be rendered. The container already
 has a copy of the spec stored in its cache.




                                                                     49
Gadgets
Requesting a cached gadget XML spec:
1.The client requests an app to be rendered. The container already
 has a copy of the spec stored in its cache.
2.The container renders the gadget into HTML, which is displayed
 to the client.




                                                                     50
Gadgets
What kind of rewriting is done by the gadget server?
•Rewrite links to use content proxies.
•Rewrite relative links to full paths (some containers).
•Return only content for the current view.




                                                           51
Gadgets
What are views?
•Gadgets can render in different locations on a container.
•Rendering area changes from small to large.
•Certain pages might be public, some are private.
•Containers may have different policies depending on the page,
especially when the gadget displays ads.
•Views provide a way for gadgets to provide different functionality depending
on where it is rendered.




                                                                        52
Gadgets




iGoogle quot;homequot; view:
•On iGoogle, the quot;homequot; view is a small,
private page that does not allow ads.

                                           53
Gadgets




          iGoogle quot;canvasquot; view:
          •Large private view, allows ads.


                                             54
Gadgets
Working with views in the gadget XML:
•<Content> sections are repeated for each view.
•Add a view=quot;view namequot; attribute to each section.
•Content sections may support multiple views, for example
view=quot;home,canvasquot;




    <?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?><Module>
    <ModulePrefs title=quot;Hello World!quot;> <Require feature=quot;dynamic-
    heightquot; /> </ModulePrefs>
      <Content type=quot;htmlquot; view=quot;homequot;> <![CDATA[       ... ]]>
    </Content> <Content type=quot;htmlquot; view=quot;canvasquot;> <![CDATA[
    ... ]]> </Content></Module>




                                                                    55
Gadgets
JavaScript utility functions for gadgets:
•gadgets.io.makeRequest()
Make cross-domain AJAX calls to remote servers.
•gadgets.json.parse() and gadgets.json.stringify()
Native JSON support.
•gadgets.util.escapeString()
Make text safe for display via innerHTML.
•gadgets.util.registerOnLoadHandler()
Execute code when the page is finished loading.




                                                     56
Gadgets

gadgets.io.makeRequest():
•Make cross-domain AJAX calls to remote servers.


Remote content:
•Most interesting gadgets will need to
work with content stored on different
servers.
•AJAX cannot cross domains, so you
cannot request content from your own
server.
•JSONP is only really good for one-way
data transfer.
•Gadgets with millions of users can
overwhelm a remote site.
                                                   57
Gadgets
Requesting remote content:
1.The rendered app calls gadgets.io.makeRequest() to fetch
 remote content. This call is sent to the container.




                                                             58
Gadgets
Requesting remote content:
1.The rendered app calls gadgets.io.makeRequest() to fetch
 remote content. This call is sent to the container.
2.The container requests content from the specified URL.




                                                             59
Gadgets
Requesting remote content:
1.The rendered app calls gadgets.io.makeRequest() to fetch
 remote content. This call is sent to the container.
2.The container requests content from the specified URL.
3.The container returns the response to the application, which renders
 the data.




                                                                         60
Gadgets

Add extra features to your gadget:
•dynamic-height - Change the size of your gadget in the container.
•views - Navigate between different surfaces of the container.
•skins - Make your gadget change its styles to match the container.
•Containers may offer custom features...


            <?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?><Module>
            <ModulePrefs title=quot;Hello World!quot;> <Require feature=quot;dynamic-
            heightquot; /> </ModulePrefs> <Content type=quot;htmlquot;> <![CDATA[
            ... ]]> </Content></Module>




                                                                            61
Gadgets




          <?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?><Module>
          <ModulePrefs title=quot;Hello Social!quot;> <Require
          feature=quot;opensocial-0.8quot; /> </ModulePrefs> <Content
          type=quot;htmlquot;> <![CDATA[       ... ]]>
          </Content></Module>




      The OpenSocial JavaScript API is a gadget feature, too!




                                                                62
The OpenSocial JavaScript API
“It's people!”




                                63
The OpenSocial JavaScript API
Representing users:
•Client-side, users must work with the VIEWER and the OWNER.




                                                               64
The OpenSocial JavaScript API
Multiple personalities:
•When you visit your own profile, you are both the VIEWER and the OWNER.




                                                                   65
The OpenSocial JavaScript API
 OpenSocial requests:
 •An OpenSocial DataRequest is created.
 •Requests are added to the DataRequest.
 •The DataRequest is sent to the server asynchronously.
 •When the request finishes, the supplied callback will be called.
function request() { var req = opensocial.newDataRequest();
req.add(req.newFetchPersonRequest(quot;OWNERquot;), quot;get_ownerquot;);
  req.add(req.newFetchPersonRequest(quot;VIEWERquot;), quot;get_viewerquot;);
  req.add(req.newFetchActivitiesRequest(quot;VIEWERquot;), quot;vactivitiesquot;);
  req.add(req.newFetchPersonAppDataRequest(quot;OWNERquot;, quot;*quot;), quot;odataquot;);
  ...
  req.send(response);};

function response(data) { ... };

gadgets.util.registerOnLoadHandler(request);




                                                                      66
The OpenSocial JavaScript API
OpenSocial responses:
•Responses are bundled according to the keys specified in the request.
•Check for an error at the global response level.
•Check for an error at the specific response level.
•Use getData() to retrieve the actual information in a request.
         function response(data) {
           if (data.hadError()) {
             if (data.get(quot;get_ownerquot;).hadError()) {
               ...
             }
             if (data.get(quot;get_viewerquot;).hadError()) {
               ...
             }
             ...
           }
           var owner = data.get(quot;get_ownerquot;).getData();
           var viewer = data.get(quot;get_viewerquot;).getData();
         };


                                                                         67
The OpenSocial JavaScript API
Working with people:
 • opensocial.Person - JavaScript representation of a user.




                                                              68
The OpenSocial JavaScript API
Request one person:
   req.add(req.newFetchPersonRequest(idspec, opt_params), quot;keyquot;);

 • idspec can be either “VIEWER”, “OWNER” or an ID number.
 • opt_params contains extra request parameters, such as which profile
   fields to fetch.

newFetchPersonRequest responses:
   var owner = data.get(quot;keyquot;).getData();
   alert(owner.getDisplayName());

 • Data contains a single opensocial.Person
   object.
 • Person objects can contain lots of information,
   such as addresses, companies, phone numbers,
   favorite movies, and thumbnail urls.


                                                                     69
The OpenSocial JavaScript API
Methods available on an OpenSocial Person:
• getDisplayName()
 Gets a text display name for this person; guaranteed to return a useful
 string. getField(key, opt_params)
 Gets data for this person that is associated with the specified key. getId()
 Gets an ID that can be permanently associated with this person.
 isOwner()
 Returns true if this person object represents the owner
 of the current page. isViewer()
 Returns true if this person object represents the
 currently logged in user.




                                                                          70
The OpenSocial JavaScript API
 An OpenSocial Person's fields:
• ABOUT_MEACTIVITIESADDRESSESAGEBODY_TYPEBOOKSCARSCHILDRENCURRENT_
                     • JOB_INTERESTSJOBSLANGUAGES_SPOKEN
                                           • SEXUAL_ORIENTATION
                     • LIVING_ARRANGEMENTLOOKING_FORMOVIESMUSICNAMENETW
                                           • SMOKER
  LOCATIONDATE_OF_BIRTHDRINKEREMAILSETHNICITYFASHIONFOODGENDERHAPPIE
  ST_WHENHAS_APPHEROESHUMORIDINTERESTS • SPORTSSTATUSTAGS
                       NAMEPETSPHONE_NUMBERSPOLITICAL_VIEWSPROFILE_SONG
                                           • THUMBNAIL_URL
                       _VIDEOQUOTESRELATIONSHIP_STATUSRELIGIONROMANCESCA
                                           • TIME_ZONETURN_OFFSTURN_ONSTV




                                                                   71
The OpenSocial JavaScript API
Working with people:
 • A Collection represents many opensocial.Person objects.




                                                             72
The OpenSocial JavaScript API
Request many people:
   var idspec = opensocial.newIdSpec({
     “userId” : “OWNER”,
     “groupId” : “FRIENDS”
   });
   req.add(req.newFetchPeopleRequest(idspec, opt_params), quot;keyquot;);
 • idspec is an object that can represent groups of people.    “userId” can be
   “VIEWER” or “OWNER” or an ID, and “groupId” can be “SELF”,
   “FRIENDS”, or the name of a group.
 • opt_params contains extra request parameters, such as which profile
   fields to fetch, and how to order or filter the returned people.
newFetchPersonRequest responses:
   var owner_friends = data.get(quot;keyquot;).getData();
   owner_friends.each(function (person) {
     alert(person.getDisplayName());
   });
• Data contains a Collection of opensocial.Person
  objects. Iterate over these by using the each() method.
                                                                          73
The OpenSocial JavaScript API
Working with data:
 • Persistent data gives apps key, value storage directly on the container.
 • String only, but conversion to JSON allows for storage of complex objects.
 • Storage per app per user - scales well with growth.
 • Ideal for settings, customizations.




                                                                       74
The OpenSocial JavaScript API
Set persistent data:
   req.add(req.newUpdatePersonAppDataRequest(idspec, key, value));

  • idspec can only be “VIEWER”.
  • key is the name under which this data will be stored.
  • value is a string representing the data to store.




                                                                     75
The OpenSocial JavaScript API
Fetch persistent data:
   var idspec = opensocial.newIdSpec({
     quot;userIdquot; : quot;OWNERquot;,
     quot;groupIdquot; : quot;SELFquot;
   });
   req.add(req.newFetchPersonAppDataRequest(idspec, keys),
       quot;keyquot;);
   req.add(req.newFetchPersonRequest(quot;OWNERquot;), quot;ownerkeyquot;);

  • idspec is an object that can represent groups of people, the same as
    newFetchPeopleRequest.
  • keys is a list of persistent data keys to retrieve the data for.
  • The owner is requested because the data returned is indexed by user ID
    and we want the owner’s data.

newFetchPersonAppDataRequest responses:
   var app_data = data.get(quot;keyquot;).getData();
   var value = app_data[owner.getId()][key];

                                                                           76
The OpenSocial JavaScript API
Fetch persistent data:
  • Data is returned as an object indexed by ID number, then as an object
   indexed by key name, even if there is only data returned for one user!
   { quot;1234567890quot; : { quot;key1quot; : quot;value1quot; } }


  • One person, multiple keys:
   {
       quot;1234567890quot; : {
                 quot;key1quot; : quot;value1quot;,
                 quot;key2quot; : quot;value2quot;
               }
   }


  • Multiple people:
   {
       quot;1234567890quot; : { quot;key1quot; : quot;value1quot; },
       quot;2345678901quot; : { quot;key1quot; : quot;value2quot; }
   }
                                                                        77
The OpenSocial JavaScript API
Working with activities:
 • API to post information about what users are doing with your app.
 • Many containers have support for images and some HTML.
 • Channel to grow your application.




 orkut                    MySpace                     hi5




                                                                       78
The OpenSocial JavaScript API
Post an activity:
   function postActivity(text) {
      var params = {};
      params[opensocial.Activity.Field.TITLE] = text;
      var activity = opensocial.newActivity(params);
      opensocial.requestCreateActivity(activity,
       opensocial.CreateActivityPriority.HIGH, callback);
   };

  • Assign the activity text to the TITLE field.
  • Call opensocial.newActivity() to create a new Activity instance.
  • Call opensocial.requestCreateActivity() to post the activity to the
   container.




                                                                          79
RESTful and RPC protocols
Servers talking to servers




                             80
RESTful and RPC protocols
Opens new development models
•Background processing.
•Easier Flash integration.
•Mobile applications.




                               81
RESTful and RPC protocols
Communication methods:
•RESTful (Representational State Transfer)
•RPC (Remote Procedure Call)
Formats:
•XML
•JSON
•AtomPub




                                             82
RESTful and RPC protocols
REST:
•Resources are URLs.
Example - People:
 • All people connected to the given user:
     /people/{guid}/@all

 • All friends of the given user:
     /people/{guid}/@friends

 • Profile of the given user:
     /people/{guid}/@self

 • Profile of the authenticated user:
     /people/@me/@self

 • Supported Person fields:
     /people/@supportedFields


                                             83
RESTful and RPC protocols
Querystring parameters customize requests:
 • Response format (JSON, XML, AtomPub)
   format={format}

 • Request extra fields
   fields={-join|,|field}.

 • Filtering:
   filterBy={fieldname}
   filterOp={operation}filterValue={value}
   updatedSince={xsdDateTime}
   networkDistance={networkDistance}

 • Paging:
   count={count}
   sortBy={fieldname}            sortOrder={order}
   startIndex={startIndex}

                                                     84
RESTful and RPC protocols
REST responses (Person):
 • JSON:

 { quot;idquot; : quot;example.org:34KJDCSKJN2HHF0DW20394quot;, quot;displayNamequot; : quot;Janeyquot;,
 quot;namequot; : {quot;unstructuredquot; : quot;Jane Doequot;}, quot;genderquot; : quot;femalequot;}



 • XML:

 <person xmlns=quot;http://ns.opensocial.org/2008/opensocialquot;> <id></id>
 <displayName></displayName> <name> <unstructured>Jane Doe</unstructured>
 </name> <gender>female</gender></person>




                                                                            85
RESTful and RPC protocols
REST responses (Person):
 • AtomPub:



 <entry xmlns=quot;http://www.w3.org/2005/Atomquot;> <content type=quot;application/xmlquot;>
 <person xmlns=quot;http://ns.opensocial.org/2008/opensocialquot;>   <name>
 <unstructured>Jane Doe</unstructured>      </name>     <gender>female</gender>
 </person> </content> <title/> <updated>2003-12-13T18:30:02Z</updated>
 <author/> <id>urn:guid:example.org:34KJDCSKJN2HHF0DW20394</id></entry>




                                                                                  86
RESTful and RPC protocols
REST:
•Perform operations using different HTTP methods on each URL.

               CRUD:            HTTP:
               •Create          •POST
               •Retrieve        •GET
               •Update          •PUT
               •Delete          •DELETE




                                                                87
RESTful and RPC protocols
REST has some disadvantages:
•Batch support requires multiple HTTP requests, or a contrived URL
scheme.
•Specifying multiple users via querystring is difficult. Is
?uid=1234,5678 the same resource as ?uid=5678,1234 ?




                                                                     88
RESTful and RPC protocols
RPC:
•One endpoint - parameters specify methods to call.
•Batch support.
•Specify collections of users through passed arguments, not URLs.

Example - Fetch current user:
   • Request                                  • Response

POST /rpc HTTP/1.1Host:                    HTTP/1.x 207 Multi-StatusContent-Type: application/json{ quot;idquot; :
api.example.orgAuthorization: <Auth        quot;myselfquot; quot;resultquot; : { quot;idquot; :
token>Content-Type: application/json{      quot;example.org:34KJDCSKJN2HHF0DW20394quot;, quot;namequot; : {
quot;methodquot; : quot;people.getquot;, quot;idquot; : quot;myselfquot;   quot;unstructuredquot; : quot;Jane Doequot;}, quot;genderquot; : quot;femalequot; }}
quot;paramsquot; : { quot;useridquot; : quot;@mequot;,
quot;groupidquot; : quot;@selfquot; }}




                                                                                                             89
RESTful and RPC protocols
Authentication:
•Both protocols use OAuth to identify users and apps.
•Depending on what the application needs to do, it can use two-legged
or three-legged OAuth.
Two-legged OAuth:
•The application authenticates directly with the container.
•Perform non-user specific operations:
     • Update persistent data for app users.
     • Can request information for users who have shared their profile
       information with the app.
Three-legged OAuth:
•The user tells the container to give profile access to the application.
•Perform user specific operations:
    • Post activities.
    • Fetch friends of the current user.

                                                                           90
RESTful and RPC protocols
Client libraries are being created for PHP, Java, and Python.
•Help you connect to OpenSocial containers, and work with social
data on your server.


Sample: log into a container:




                                                                   91
RESTful and RPC protocols
RESTful and RPC use OAuth for authentication
•OAuth is an open standard.
•Client libraries will help make this process easier for developers.

Sample: use OAuth to get an access token for a user:




                                                                       92
RESTful and RPC protocols
•Once OAuth is used, you can store a user token for later access.

Sample: use an existing token:




                                                                    93
RESTful and RPC protocols
•Once authentication has happened, requests are easy:
Sample: Fetch the current user:




                                                        94
RESTful and RPC protocols
Sample: Fetch the current user’s friends:




                                            95
Development Models
How OpenSocial apps are built




                                96
OpenSocial Tools
What sets us apart from the animals




                                      97
Shindig
Writing a gadget server is difficult:
•Fast changing API - hard to keep up.
•Standardization is hard to get right.
•Costs ¥ / !




                                         98
Shindig
Apache Shindig to the rescue!
•Open Source project.
•Available in Java and PHP.
•Run by itself and connect to an
existing social site to add
OpenSocial support.
•Goal: Launch a
new (simple)
container in under
an hour’s worth
of work




http://incubator.apache.org/shindig/
                                       99
OpenSocial Dev App
Development tool to test out JS code in different containers




http://osda.appspot.com
                                                               100
Upcoming Features
Caja and Templates




                     101
Caja
When JavaScript goes bad
•Gadgets can be a new vector for phishing, spam, malware.Social spread of
gadgets can spread bad gadgets too.Caja reduces threats with a JavaScript
sanitizer as an additional quot;sandboxquot;
on top of iFrame protection.




                                                                     102
Caja
Caja is:

  • A capability-based Javascript sanitizer.An Open Source project from
   Google.Optional but recommended for
   OpenSocial containers.Will eventually be secure enough
   to run gadgets
   inline instead of in iframes.




http://code.google.com/p/google-caja/
                                                                          103
Templates
Need for a templating language:
•Developers need a simple way to convert OpenSocial data to HTML.
•DOM manipulation is slow and ugly.
•innerHTML is unsafe.




                                                                    104
Templates




 <script type=quot;text/javascriptquot; src=quot;http://ostemplates-demo.appspot.com/ostemplates.jsquot;></script>
ype=quot;text/os-templatequot;> <b>${owner.displayName}'s friends</b> <ul>             <li
epeat=quot;friendsquot;>${displayName}</li> </ul> </script> <script type=quot;text/javascriptquot;> function load
ar req = opensocial.newDataRequest();         req.add(req.newFetchPersonRequest('OWNER'), 'owner
ar idSpecFriends = opensocial.newIdSpec(           {'userId':'OWNER', 'groupId':'FRIENDS'});
eq.add(req.newFetchPeopleRequest(idSpecFriends), 'friends');         req.send(function(data) {
 s.Container.processDocument(data);        }); } gadgets.util.registerOnLoadHandler(loadData); <




                                                   http://ostemplates-demo.appspot.com/
                                                                                          105
Templates
Templates developer application available:




http://ostemplates-devapp.appspot.com/
                                             106
The OpenSocial specification process
“We can fix it, we have the technology”




                                          107
The OpenSocial specification process




                                       108
The OpenSocial specification process




                                       109
The OpenSocial specification process




                                       110
The OpenSocial specification process




                                       111
The OpenSocial specification process




                                       112
Challenges
Nobody said this was going to be easy




                                        113
Challenges


    This lumberjack will
    thank anyone who
       helps solve the
   following problems...




                       David Glazer, Director of Engineering, Google
                          OpenSocial Foundation board member




                                                                       114
Challenges
Cross container development is still tricky:
•Containers may not follow the standard.
•Containers may follow the standard but have different policies.
•Follow best practices:
http://tinyurl.com/4nuzll




                                                                   115
Challenges
No central directory
•Hard for apps to spread to many containers.
•Apps need to work with different install processes.
•Directory approval requirements vary from container to container.




                                                                     116
Challenges
Scaling is hard:
•Easy to start and get some users.




                                     117
Challenges
Scaling is hard:
•Being popular on one social network
can push your server to the limit...




                                       118
Scaling is hard:
•...being popular on many networks
will push you right over.




                                     119
Resources




            120
Resources

•   OpenSocial Tutorial: http://rurl.org/ss3

•   OpenSocial Spec, Foundation, Reference: http://opensocial.org

•   Caja: http://code.google.com/p/google-caja/

•   Shindig: http://incubator.apache.org/shindig/

•   OpenSocial Across Containers video: http://tinyurl.com/4nuzll

•   OpenSocial Templates: http://ostemplates-demo.appspot.com/

•   OpenSocial Dev App: http://osda.appspot.com

•   Partuza: http://partuza.nl

•   OpenSocial Specification Proposals:
    http://groups.google.com/group/opensocial-and-gadgets-spec/topics


                                                                        121
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:
   Registration opens: Nov 15, 2008
   Registration ends: Jan 10, 2009
   Winners notified: Jan 23, 2009
                                                      122
   Results announced: Feb 6, 2009
Learn more
code.google.com




                  123

More Related Content

Similar to Google Devfest Bangkok - OpenSocial

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
 
Creating Value In Social Networking
Creating Value In Social NetworkingCreating Value In Social Networking
Creating Value In Social NetworkingLars Trieloff
 
Integrating OpenSocial & SalesForce.com
Integrating OpenSocial & SalesForce.comIntegrating OpenSocial & SalesForce.com
Integrating OpenSocial & SalesForce.comChris Schalk
 
Open Social Technical Update for Java developers - Presented at sv-gtug.org m...
Open Social Technical Update for Java developers - Presented at sv-gtug.org m...Open Social Technical Update for Java developers - Presented at sv-gtug.org m...
Open Social Technical Update for Java developers - Presented at sv-gtug.org m...Chris Schalk
 
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
 
Open Social Shindig Preso for FB and OpenSocial Meetup
Open Social Shindig Preso for FB and OpenSocial MeetupOpen Social Shindig Preso for FB and OpenSocial Meetup
Open Social Shindig Preso for FB and OpenSocial MeetupChris Schalk
 
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
 
Barcamphanoi Opensocial Application Development
Barcamphanoi Opensocial Application DevelopmentBarcamphanoi Opensocial Application Development
Barcamphanoi Opensocial Application DevelopmentHoat Le
 
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
 
Digital Identity: From Silos To Usercentric
Digital Identity: From Silos To UsercentricDigital Identity: From Silos To Usercentric
Digital Identity: From Silos To UsercentricPascal Van Hecke
 
Transformational eGov - GTC SW 2009
Transformational eGov - GTC SW 2009Transformational eGov - GTC SW 2009
Transformational eGov - GTC SW 2009Hillary Hartley
 
Introduction to Enterprise 2.0
Introduction to Enterprise 2.0Introduction to Enterprise 2.0
Introduction to Enterprise 2.0David Saitta
 
Evolution to Digital Business Ecosystems
Evolution to Digital Business EcosystemsEvolution to Digital Business Ecosystems
Evolution to Digital Business EcosystemsRobbie Kiama
 
Community 2.0 Community Bootcamp: the technology part by Tara Hunt
Community 2.0 Community Bootcamp: the technology part by Tara HuntCommunity 2.0 Community Bootcamp: the technology part by Tara Hunt
Community 2.0 Community Bootcamp: the technology part by Tara HuntTara Hunt
 
OKCon Code for Europe
OKCon Code for EuropeOKCon Code for Europe
OKCon Code for EuropeIvonne Jansen
 
Summer Presentation A L L
Summer Presentation  A L LSummer Presentation  A L L
Summer Presentation A L Lcameronparkins
 
Make Your Website Work for You, March 27, 2009
Make Your Website Work for You, March 27, 2009Make Your Website Work for You, March 27, 2009
Make Your Website Work for You, March 27, 2009abcboston
 

Similar to Google Devfest Bangkok - OpenSocial (20)

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
 
Creating Value In Social Networking
Creating Value In Social NetworkingCreating Value In Social Networking
Creating Value In Social Networking
 
Integrating OpenSocial & SalesForce.com
Integrating OpenSocial & SalesForce.comIntegrating OpenSocial & SalesForce.com
Integrating OpenSocial & SalesForce.com
 
Open Social Technical Update for Java developers - Presented at sv-gtug.org m...
Open Social Technical Update for Java developers - Presented at sv-gtug.org m...Open Social Technical Update for Java developers - Presented at sv-gtug.org m...
Open Social Technical Update for Java developers - Presented at sv-gtug.org m...
 
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
 
Open Social Shindig Preso for FB and OpenSocial Meetup
Open Social Shindig Preso for FB and OpenSocial MeetupOpen Social Shindig Preso for FB and OpenSocial Meetup
Open Social Shindig Preso for FB and OpenSocial Meetup
 
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
 
Barcamphanoi Opensocial Application Development
Barcamphanoi Opensocial Application DevelopmentBarcamphanoi Opensocial Application Development
Barcamphanoi Opensocial Application Development
 
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
 
Digital Identity: From Silos To Usercentric
Digital Identity: From Silos To UsercentricDigital Identity: From Silos To Usercentric
Digital Identity: From Silos To Usercentric
 
Transformational eGov - GTC SW 2009
Transformational eGov - GTC SW 2009Transformational eGov - GTC SW 2009
Transformational eGov - GTC SW 2009
 
What is Web 2.0?
What is Web 2.0?What is Web 2.0?
What is Web 2.0?
 
Introduction to Enterprise 2.0
Introduction to Enterprise 2.0Introduction to Enterprise 2.0
Introduction to Enterprise 2.0
 
Evolution to Digital Business Ecosystems
Evolution to Digital Business EcosystemsEvolution to Digital Business Ecosystems
Evolution to Digital Business Ecosystems
 
Community 2.0 Community Bootcamp: the technology part by Tara Hunt
Community 2.0 Community Bootcamp: the technology part by Tara HuntCommunity 2.0 Community Bootcamp: the technology part by Tara Hunt
Community 2.0 Community Bootcamp: the technology part by Tara Hunt
 
OKCon Code for Europe
OKCon Code for EuropeOKCon Code for Europe
OKCon Code for Europe
 
Summer Presentation A L L
Summer Presentation  A L LSummer Presentation  A L L
Summer Presentation A L L
 
Tel Vortrag
Tel VortragTel Vortrag
Tel Vortrag
 
Tmc tools final
Tmc tools finalTmc tools final
Tmc tools final
 
Make Your Website Work for You, March 27, 2009
Make Your Website Work for You, March 27, 2009Make Your Website Work for You, March 27, 2009
Make Your Website Work for You, March 27, 2009
 

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

Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Brian Pichman
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfDaniel Santiago Silva Capera
 
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesMd Hossain Ali
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopBachir Benyammi
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...DianaGray10
 
Linked Data in Production: Moving Beyond Ontologies
Linked Data in Production: Moving Beyond OntologiesLinked Data in Production: Moving Beyond Ontologies
Linked Data in Production: Moving Beyond OntologiesDavid Newbury
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPathCommunity
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXTarek Kalaji
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureEric D. Schabell
 
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfJamie (Taka) Wang
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Commit University
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDELiveplex
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationIES VE
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfAijun Zhang
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8DianaGray10
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...Aggregage
 
Cybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxCybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxGDSC PJATK
 
COMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a WebsiteCOMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a Websitedgelyza
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemAsko Soukka
 

Recently uploaded (20)

Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
 
20230104 - machine vision
20230104 - machine vision20230104 - machine vision
20230104 - machine vision
 
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 Workshop
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
 
Linked Data in Production: Moving Beyond Ontologies
Linked Data in Production: Moving Beyond OntologiesLinked Data in Production: Moving Beyond Ontologies
Linked Data in Production: Moving Beyond Ontologies
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation Developers
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBX
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability Adventure
 
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdf
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
 
Cybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxCybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptx
 
COMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a WebsiteCOMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a Website
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystem
 

Google Devfest Bangkok - OpenSocial

  • 1. OpenSocial a standard for the social web Patrick Chanezon Bangkok chanezon@google.com October 31 2008 1
  • 2. OpenSocial’s goal: Make the web more social 2
  • 3. What does “social” mean? “Eliette, what do you do with your friends?” 3
  • 4. What does “social” mean? This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License 4
  • 5. What does “social” mean? This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License 5
  • 6. What does “social” mean? This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License 6
  • 7. What does “social” mean? This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License 7
  • 8. What does “social” mean? This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License 8
  • 9. What does “social” mean? This work by Eliette Chanezon is licensed under a Creative Commons Attribution-Share Alike 3.0 License 9
  • 10. What does “social” mean? “Internet, what do you do with your friends?” 10
  • 11. “We look at each other” 11
  • 14. “We help each other” 14
  • 16. “We do projects together” 16
  • 17. The social internet A social website.. •Provides a feature that becomes more engaging as the number of users grows. •Uses relationships between people to present users interesting information. 17
  • 18. The social internet Some social websites... 18
  • 19. The social internet A social website.. •Has overhead to manage users and relationships. •Grows slowly because users must sign up to use the site. What if we remove the overhead? •Developers can focus on providing features, not managing users. 19
  • 20. The social internet A social network.. •Manages large numbers of users and relationships. •Is slow to add new features. 20
  • 21. The social internet Many social networks... 21
  • 22. The social internet How do we add new features to social networks? •Make the social network a platform. •Give creative developers the tools to add the features themselves. 22
  • 23. The social internet A social application... •Lets the social network manage users and relationships. •Adds new features to the social network. •Lets users “install” the application without signing up for new accounts. •Grows quickly because users are already communicating with each other. 23
  • 24. The social internet Lots of social apps... 24
  • 25. Need for a social API How do we put apps in social networks? 25
  • 26. A day in the life of a social app developer 26
  • 27. A day in the life of a social app developer 27
  • 28. A day in the life of a social app developer 28
  • 29. A day in the life of a social app developer 29
  • 30. A day in the life of a social app developer 30
  • 31. A day in the life of a social app developer 31
  • 32. Introduction to OpenSocial Numbers: •19+ implemented Containers •40+ committed Containers •3000+ applications •400,000,000+ of users In Thailand: 8 M users 32
  • 33. Today: 375 Million User Reach 33
  • 35. Where is OpenSocial live today? • Live to Users: Live Developer Sandboxes: • MySpace • iGoogle • orkut • imeem • hi5 • Freebar • CityIN • Friendster • Tianya • Webon from Lycos • Ning • IDtail • Plaxo Pulse • YiQi • Mail.ru • Netlog • lokalisten • Hyves • LinkedIn - New! • Viadeo • 51.com - New! • Yahoo! - New! • MyAOL! - New! Full List: http://code.google.com/apis/opensocial/gettingstarted.html 35
  • 36. Containers in the region 36
  • 37. The OpenSocial APIs Versions: •0.6 - Client-side APIs introduced •0.7 - Server-side APIs introduced •0.81 (current) - Server-side APIs finalized Client-side: •Gadgets XML •Gadgets JavaScript •OpenSocial JavaScript Server-side: •RESTful protocol •RPC protocol 37
  • 38. OpenSocial is moving fast: bews from this week! • LinkedIn launched to 100% of users, and has a REST endpoint • Mail.ru launched to users • 51.com (large Chinese network) launched http://developers.51.com • Yahoo! launch launched a sandbox -- • Tools: • Announced the OpenSocial Dev App • http://wiki.opensocial.org is live • Community updates: • OpenSocial is having a birthday event on November 13 in San Francisco • OpenSocial Foundation community election: vote by Monday! 38
  • 39. Popular OpenSocial apps on hi5 in Thailand • Engrish • Daily Pablo -- get a new Picasso painting on your profile every day • Kitten Club & KittyPix -- pictures of kittens • PuppyPix -- pictures of puppies • BuddyPoke! -- Poke your friends, powered by Google App Engine • Soccer • Speed Racing! -- design your car and engine and race your friends. 39
  • 40. Gadgets Not widgets, not sprockets, not gidgets, not wadgets 40
  • 41. Gadgets A gadget spec: •Is an XML file. •Defines metadata about an OpenSocial app. •Is highly cacheable and does not need a high performance server. Gadgets use existing web standards •XML to define metadata. •HTML for markup. •JavaScript for interactivity. •CSS for presentation. 41
  • 42. Gadgets A gadget server: •Takes the gadget spec as input. •Performs optimizations on the gadget spec. •Outputs HTML, JavaScript, and CSS as one document. 42
  • 43. Gadgets A container: •Displays the social network’s user interface. •Opens an IFrame to the rendered gadget. Containers and gadget servers are both run by the social network, but do not need to be on the same machine, or even domain. 43
  • 44. Gadgets Example gadget XML spec: •Uses HTML to print “Hello World”. •Colors the text red with CSS. •Dynamically adjusts the height of the gadget with JavaScript. <?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?><Module> <ModulePrefs title=quot;Hello World!quot;> <Require feature=quot;dynamic- heightquot; /> </ModulePrefs> <Content type=quot;htmlquot;> <![CDATA[ <h1>Hello World</h1> <style type=quot;text/cssquot;> h1 { color: #dd0000; } </style> <script type=quot;text/javascriptquot;> gadgets.window.adjustHeight(); </script> ]]> </Content></Module> 44
  • 45. Gadgets Requesting the gadget XML spec: 1. The client requests an app to be rendered. 45
  • 46. Gadgets Requesting the gadget XML spec: 1. The client requests an app to be rendered. 2. The container fetches the gadget XML spec from its host. 46
  • 47. Gadgets Requesting the gadget XML spec: 1. The client requests an app to be rendered. 2. The container fetches the gadget XML spec from its host. 3. The container renders the gadget into HTML, which is displayed to the client. 47
  • 48. Gadgets Requesting the gadget XML spec: •Because the gadget spec is simple, it can be cached easily. •Caching reduces the load on your server, great when you have millions of users. 48
  • 49. Gadgets Requesting a cached gadget XML spec: 1.The client requests an app to be rendered. The container already has a copy of the spec stored in its cache. 49
  • 50. Gadgets Requesting a cached gadget XML spec: 1.The client requests an app to be rendered. The container already has a copy of the spec stored in its cache. 2.The container renders the gadget into HTML, which is displayed to the client. 50
  • 51. Gadgets What kind of rewriting is done by the gadget server? •Rewrite links to use content proxies. •Rewrite relative links to full paths (some containers). •Return only content for the current view. 51
  • 52. Gadgets What are views? •Gadgets can render in different locations on a container. •Rendering area changes from small to large. •Certain pages might be public, some are private. •Containers may have different policies depending on the page, especially when the gadget displays ads. •Views provide a way for gadgets to provide different functionality depending on where it is rendered. 52
  • 53. Gadgets iGoogle quot;homequot; view: •On iGoogle, the quot;homequot; view is a small, private page that does not allow ads. 53
  • 54. Gadgets iGoogle quot;canvasquot; view: •Large private view, allows ads. 54
  • 55. Gadgets Working with views in the gadget XML: •<Content> sections are repeated for each view. •Add a view=quot;view namequot; attribute to each section. •Content sections may support multiple views, for example view=quot;home,canvasquot; <?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?><Module> <ModulePrefs title=quot;Hello World!quot;> <Require feature=quot;dynamic- heightquot; /> </ModulePrefs> <Content type=quot;htmlquot; view=quot;homequot;> <![CDATA[ ... ]]> </Content> <Content type=quot;htmlquot; view=quot;canvasquot;> <![CDATA[ ... ]]> </Content></Module> 55
  • 56. Gadgets JavaScript utility functions for gadgets: •gadgets.io.makeRequest() Make cross-domain AJAX calls to remote servers. •gadgets.json.parse() and gadgets.json.stringify() Native JSON support. •gadgets.util.escapeString() Make text safe for display via innerHTML. •gadgets.util.registerOnLoadHandler() Execute code when the page is finished loading. 56
  • 57. Gadgets gadgets.io.makeRequest(): •Make cross-domain AJAX calls to remote servers. Remote content: •Most interesting gadgets will need to work with content stored on different servers. •AJAX cannot cross domains, so you cannot request content from your own server. •JSONP is only really good for one-way data transfer. •Gadgets with millions of users can overwhelm a remote site. 57
  • 58. Gadgets Requesting remote content: 1.The rendered app calls gadgets.io.makeRequest() to fetch remote content. This call is sent to the container. 58
  • 59. Gadgets Requesting remote content: 1.The rendered app calls gadgets.io.makeRequest() to fetch remote content. This call is sent to the container. 2.The container requests content from the specified URL. 59
  • 60. Gadgets Requesting remote content: 1.The rendered app calls gadgets.io.makeRequest() to fetch remote content. This call is sent to the container. 2.The container requests content from the specified URL. 3.The container returns the response to the application, which renders the data. 60
  • 61. Gadgets Add extra features to your gadget: •dynamic-height - Change the size of your gadget in the container. •views - Navigate between different surfaces of the container. •skins - Make your gadget change its styles to match the container. •Containers may offer custom features... <?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?><Module> <ModulePrefs title=quot;Hello World!quot;> <Require feature=quot;dynamic- heightquot; /> </ModulePrefs> <Content type=quot;htmlquot;> <![CDATA[ ... ]]> </Content></Module> 61
  • 62. Gadgets <?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?><Module> <ModulePrefs title=quot;Hello Social!quot;> <Require feature=quot;opensocial-0.8quot; /> </ModulePrefs> <Content type=quot;htmlquot;> <![CDATA[ ... ]]> </Content></Module> The OpenSocial JavaScript API is a gadget feature, too! 62
  • 63. The OpenSocial JavaScript API “It's people!” 63
  • 64. The OpenSocial JavaScript API Representing users: •Client-side, users must work with the VIEWER and the OWNER. 64
  • 65. The OpenSocial JavaScript API Multiple personalities: •When you visit your own profile, you are both the VIEWER and the OWNER. 65
  • 66. The OpenSocial JavaScript API OpenSocial requests: •An OpenSocial DataRequest is created. •Requests are added to the DataRequest. •The DataRequest is sent to the server asynchronously. •When the request finishes, the supplied callback will be called. function request() { var req = opensocial.newDataRequest(); req.add(req.newFetchPersonRequest(quot;OWNERquot;), quot;get_ownerquot;); req.add(req.newFetchPersonRequest(quot;VIEWERquot;), quot;get_viewerquot;); req.add(req.newFetchActivitiesRequest(quot;VIEWERquot;), quot;vactivitiesquot;); req.add(req.newFetchPersonAppDataRequest(quot;OWNERquot;, quot;*quot;), quot;odataquot;); ... req.send(response);}; function response(data) { ... }; gadgets.util.registerOnLoadHandler(request); 66
  • 67. The OpenSocial JavaScript API OpenSocial responses: •Responses are bundled according to the keys specified in the request. •Check for an error at the global response level. •Check for an error at the specific response level. •Use getData() to retrieve the actual information in a request. function response(data) { if (data.hadError()) { if (data.get(quot;get_ownerquot;).hadError()) { ... } if (data.get(quot;get_viewerquot;).hadError()) { ... } ... } var owner = data.get(quot;get_ownerquot;).getData(); var viewer = data.get(quot;get_viewerquot;).getData(); }; 67
  • 68. The OpenSocial JavaScript API Working with people: • opensocial.Person - JavaScript representation of a user. 68
  • 69. The OpenSocial JavaScript API Request one person: req.add(req.newFetchPersonRequest(idspec, opt_params), quot;keyquot;); • idspec can be either “VIEWER”, “OWNER” or an ID number. • opt_params contains extra request parameters, such as which profile fields to fetch. newFetchPersonRequest responses: var owner = data.get(quot;keyquot;).getData(); alert(owner.getDisplayName()); • Data contains a single opensocial.Person object. • Person objects can contain lots of information, such as addresses, companies, phone numbers, favorite movies, and thumbnail urls. 69
  • 70. The OpenSocial JavaScript API Methods available on an OpenSocial Person: • getDisplayName() Gets a text display name for this person; guaranteed to return a useful string. getField(key, opt_params) Gets data for this person that is associated with the specified key. getId() Gets an ID that can be permanently associated with this person. isOwner() Returns true if this person object represents the owner of the current page. isViewer() Returns true if this person object represents the currently logged in user. 70
  • 71. The OpenSocial JavaScript API An OpenSocial Person's fields: • ABOUT_MEACTIVITIESADDRESSESAGEBODY_TYPEBOOKSCARSCHILDRENCURRENT_ • JOB_INTERESTSJOBSLANGUAGES_SPOKEN • SEXUAL_ORIENTATION • LIVING_ARRANGEMENTLOOKING_FORMOVIESMUSICNAMENETW • SMOKER LOCATIONDATE_OF_BIRTHDRINKEREMAILSETHNICITYFASHIONFOODGENDERHAPPIE ST_WHENHAS_APPHEROESHUMORIDINTERESTS • SPORTSSTATUSTAGS NAMEPETSPHONE_NUMBERSPOLITICAL_VIEWSPROFILE_SONG • THUMBNAIL_URL _VIDEOQUOTESRELATIONSHIP_STATUSRELIGIONROMANCESCA • TIME_ZONETURN_OFFSTURN_ONSTV 71
  • 72. The OpenSocial JavaScript API Working with people: • A Collection represents many opensocial.Person objects. 72
  • 73. The OpenSocial JavaScript API Request many people: var idspec = opensocial.newIdSpec({ “userId” : “OWNER”, “groupId” : “FRIENDS” }); req.add(req.newFetchPeopleRequest(idspec, opt_params), quot;keyquot;); • idspec is an object that can represent groups of people. “userId” can be “VIEWER” or “OWNER” or an ID, and “groupId” can be “SELF”, “FRIENDS”, or the name of a group. • opt_params contains extra request parameters, such as which profile fields to fetch, and how to order or filter the returned people. newFetchPersonRequest responses: var owner_friends = data.get(quot;keyquot;).getData(); owner_friends.each(function (person) { alert(person.getDisplayName()); }); • Data contains a Collection of opensocial.Person objects. Iterate over these by using the each() method. 73
  • 74. The OpenSocial JavaScript API Working with data: • Persistent data gives apps key, value storage directly on the container. • String only, but conversion to JSON allows for storage of complex objects. • Storage per app per user - scales well with growth. • Ideal for settings, customizations. 74
  • 75. The OpenSocial JavaScript API Set persistent data: req.add(req.newUpdatePersonAppDataRequest(idspec, key, value)); • idspec can only be “VIEWER”. • key is the name under which this data will be stored. • value is a string representing the data to store. 75
  • 76. The OpenSocial JavaScript API Fetch persistent data: var idspec = opensocial.newIdSpec({ quot;userIdquot; : quot;OWNERquot;, quot;groupIdquot; : quot;SELFquot; }); req.add(req.newFetchPersonAppDataRequest(idspec, keys), quot;keyquot;); req.add(req.newFetchPersonRequest(quot;OWNERquot;), quot;ownerkeyquot;); • idspec is an object that can represent groups of people, the same as newFetchPeopleRequest. • keys is a list of persistent data keys to retrieve the data for. • The owner is requested because the data returned is indexed by user ID and we want the owner’s data. newFetchPersonAppDataRequest responses: var app_data = data.get(quot;keyquot;).getData(); var value = app_data[owner.getId()][key]; 76
  • 77. The OpenSocial JavaScript API Fetch persistent data: • Data is returned as an object indexed by ID number, then as an object indexed by key name, even if there is only data returned for one user! { quot;1234567890quot; : { quot;key1quot; : quot;value1quot; } } • One person, multiple keys: { quot;1234567890quot; : { quot;key1quot; : quot;value1quot;, quot;key2quot; : quot;value2quot; } } • Multiple people: { quot;1234567890quot; : { quot;key1quot; : quot;value1quot; }, quot;2345678901quot; : { quot;key1quot; : quot;value2quot; } } 77
  • 78. The OpenSocial JavaScript API Working with activities: • API to post information about what users are doing with your app. • Many containers have support for images and some HTML. • Channel to grow your application. orkut MySpace hi5 78
  • 79. The OpenSocial JavaScript API Post an activity: function postActivity(text) { var params = {}; params[opensocial.Activity.Field.TITLE] = text; var activity = opensocial.newActivity(params); opensocial.requestCreateActivity(activity, opensocial.CreateActivityPriority.HIGH, callback); }; • Assign the activity text to the TITLE field. • Call opensocial.newActivity() to create a new Activity instance. • Call opensocial.requestCreateActivity() to post the activity to the container. 79
  • 80. RESTful and RPC protocols Servers talking to servers 80
  • 81. RESTful and RPC protocols Opens new development models •Background processing. •Easier Flash integration. •Mobile applications. 81
  • 82. RESTful and RPC protocols Communication methods: •RESTful (Representational State Transfer) •RPC (Remote Procedure Call) Formats: •XML •JSON •AtomPub 82
  • 83. RESTful and RPC protocols REST: •Resources are URLs. Example - People: • All people connected to the given user: /people/{guid}/@all • All friends of the given user: /people/{guid}/@friends • Profile of the given user: /people/{guid}/@self • Profile of the authenticated user: /people/@me/@self • Supported Person fields: /people/@supportedFields 83
  • 84. RESTful and RPC protocols Querystring parameters customize requests: • Response format (JSON, XML, AtomPub) format={format} • Request extra fields fields={-join|,|field}. • Filtering: filterBy={fieldname} filterOp={operation}filterValue={value} updatedSince={xsdDateTime} networkDistance={networkDistance} • Paging: count={count} sortBy={fieldname} sortOrder={order} startIndex={startIndex} 84
  • 85. RESTful and RPC protocols REST responses (Person): • JSON: { quot;idquot; : quot;example.org:34KJDCSKJN2HHF0DW20394quot;, quot;displayNamequot; : quot;Janeyquot;, quot;namequot; : {quot;unstructuredquot; : quot;Jane Doequot;}, quot;genderquot; : quot;femalequot;} • XML: <person xmlns=quot;http://ns.opensocial.org/2008/opensocialquot;> <id></id> <displayName></displayName> <name> <unstructured>Jane Doe</unstructured> </name> <gender>female</gender></person> 85
  • 86. RESTful and RPC protocols REST responses (Person): • AtomPub: <entry xmlns=quot;http://www.w3.org/2005/Atomquot;> <content type=quot;application/xmlquot;> <person xmlns=quot;http://ns.opensocial.org/2008/opensocialquot;> <name> <unstructured>Jane Doe</unstructured> </name> <gender>female</gender> </person> </content> <title/> <updated>2003-12-13T18:30:02Z</updated> <author/> <id>urn:guid:example.org:34KJDCSKJN2HHF0DW20394</id></entry> 86
  • 87. RESTful and RPC protocols REST: •Perform operations using different HTTP methods on each URL. CRUD: HTTP: •Create •POST •Retrieve •GET •Update •PUT •Delete •DELETE 87
  • 88. RESTful and RPC protocols REST has some disadvantages: •Batch support requires multiple HTTP requests, or a contrived URL scheme. •Specifying multiple users via querystring is difficult. Is ?uid=1234,5678 the same resource as ?uid=5678,1234 ? 88
  • 89. RESTful and RPC protocols RPC: •One endpoint - parameters specify methods to call. •Batch support. •Specify collections of users through passed arguments, not URLs. Example - Fetch current user: • Request • Response POST /rpc HTTP/1.1Host: HTTP/1.x 207 Multi-StatusContent-Type: application/json{ quot;idquot; : api.example.orgAuthorization: <Auth quot;myselfquot; quot;resultquot; : { quot;idquot; : token>Content-Type: application/json{ quot;example.org:34KJDCSKJN2HHF0DW20394quot;, quot;namequot; : { quot;methodquot; : quot;people.getquot;, quot;idquot; : quot;myselfquot; quot;unstructuredquot; : quot;Jane Doequot;}, quot;genderquot; : quot;femalequot; }} quot;paramsquot; : { quot;useridquot; : quot;@mequot;, quot;groupidquot; : quot;@selfquot; }} 89
  • 90. RESTful and RPC protocols Authentication: •Both protocols use OAuth to identify users and apps. •Depending on what the application needs to do, it can use two-legged or three-legged OAuth. Two-legged OAuth: •The application authenticates directly with the container. •Perform non-user specific operations: • Update persistent data for app users. • Can request information for users who have shared their profile information with the app. Three-legged OAuth: •The user tells the container to give profile access to the application. •Perform user specific operations: • Post activities. • Fetch friends of the current user. 90
  • 91. RESTful and RPC protocols Client libraries are being created for PHP, Java, and Python. •Help you connect to OpenSocial containers, and work with social data on your server. Sample: log into a container: 91
  • 92. RESTful and RPC protocols RESTful and RPC use OAuth for authentication •OAuth is an open standard. •Client libraries will help make this process easier for developers. Sample: use OAuth to get an access token for a user: 92
  • 93. RESTful and RPC protocols •Once OAuth is used, you can store a user token for later access. Sample: use an existing token: 93
  • 94. RESTful and RPC protocols •Once authentication has happened, requests are easy: Sample: Fetch the current user: 94
  • 95. RESTful and RPC protocols Sample: Fetch the current user’s friends: 95
  • 97. OpenSocial Tools What sets us apart from the animals 97
  • 98. Shindig Writing a gadget server is difficult: •Fast changing API - hard to keep up. •Standardization is hard to get right. •Costs ¥ / ! 98
  • 99. Shindig Apache Shindig to the rescue! •Open Source project. •Available in Java and PHP. •Run by itself and connect to an existing social site to add OpenSocial support. •Goal: Launch a new (simple) container in under an hour’s worth of work http://incubator.apache.org/shindig/ 99
  • 100. OpenSocial Dev App Development tool to test out JS code in different containers http://osda.appspot.com 100
  • 101. Upcoming Features Caja and Templates 101
  • 102. Caja When JavaScript goes bad •Gadgets can be a new vector for phishing, spam, malware.Social spread of gadgets can spread bad gadgets too.Caja reduces threats with a JavaScript sanitizer as an additional quot;sandboxquot; on top of iFrame protection. 102
  • 103. Caja Caja is: • A capability-based Javascript sanitizer.An Open Source project from Google.Optional but recommended for OpenSocial containers.Will eventually be secure enough to run gadgets inline instead of in iframes. http://code.google.com/p/google-caja/ 103
  • 104. Templates Need for a templating language: •Developers need a simple way to convert OpenSocial data to HTML. •DOM manipulation is slow and ugly. •innerHTML is unsafe. 104
  • 105. Templates <script type=quot;text/javascriptquot; src=quot;http://ostemplates-demo.appspot.com/ostemplates.jsquot;></script> ype=quot;text/os-templatequot;> <b>${owner.displayName}'s friends</b> <ul> <li epeat=quot;friendsquot;>${displayName}</li> </ul> </script> <script type=quot;text/javascriptquot;> function load ar req = opensocial.newDataRequest(); req.add(req.newFetchPersonRequest('OWNER'), 'owner ar idSpecFriends = opensocial.newIdSpec( {'userId':'OWNER', 'groupId':'FRIENDS'}); eq.add(req.newFetchPeopleRequest(idSpecFriends), 'friends'); req.send(function(data) { s.Container.processDocument(data); }); } gadgets.util.registerOnLoadHandler(loadData); < http://ostemplates-demo.appspot.com/ 105
  • 106. Templates Templates developer application available: http://ostemplates-devapp.appspot.com/ 106
  • 107. The OpenSocial specification process “We can fix it, we have the technology” 107
  • 113. Challenges Nobody said this was going to be easy 113
  • 114. Challenges This lumberjack will thank anyone who helps solve the following problems... David Glazer, Director of Engineering, Google OpenSocial Foundation board member 114
  • 115. Challenges Cross container development is still tricky: •Containers may not follow the standard. •Containers may follow the standard but have different policies. •Follow best practices: http://tinyurl.com/4nuzll 115
  • 116. Challenges No central directory •Hard for apps to spread to many containers. •Apps need to work with different install processes. •Directory approval requirements vary from container to container. 116
  • 117. Challenges Scaling is hard: •Easy to start and get some users. 117
  • 118. Challenges Scaling is hard: •Being popular on one social network can push your server to the limit... 118
  • 119. Scaling is hard: •...being popular on many networks will push you right over. 119
  • 120. Resources 120
  • 121. Resources • OpenSocial Tutorial: http://rurl.org/ss3 • OpenSocial Spec, Foundation, Reference: http://opensocial.org • Caja: http://code.google.com/p/google-caja/ • Shindig: http://incubator.apache.org/shindig/ • OpenSocial Across Containers video: http://tinyurl.com/4nuzll • OpenSocial Templates: http://ostemplates-demo.appspot.com/ • OpenSocial Dev App: http://osda.appspot.com • Partuza: http://partuza.nl • OpenSocial Specification Proposals: http://groups.google.com/group/opensocial-and-gadgets-spec/topics 121
  • 122. 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: Registration opens: Nov 15, 2008 Registration ends: Jan 10, 2009 Winners notified: Jan 23, 2009 122 Results announced: Feb 6, 2009