Updates about the OpenSocial ecosystem at Google developer days Madrid including presentations from Netlog and Viadeo.
OpenSocial is an open specification defining a common API that works on many different social websites, including MySpace, Plaxo, Hi5, Ning, orkut, Friendster Salesforce.com and LinkedIn, among others. This allows developers to learn one API, then write a social application for any of those sites: Learn once, write anywhere.
In addition, in order to make it easier for developers of social sites to implement the API and make their site an OpenSocial container, the Apache project Shindig provides reference implementations for OpenSocial containers in two languages (Java, PHP). Shindig will define a language specific Service Provider Interface (SPI) that a social site can implement to connect Shindig to People, Persistence and Activities backend services for the social site. Shindig will then expose these services as OpenSocial JavaScript and REST APIs.
In this session we will explain what OpenSocial is, show examples of OpenSocial containers and applications, demonstrate how to create an OpenSocial application, and explain how to leverage Apache Shindig in order to implement an OpenSocial container.
15. 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
16. How do we socialize objects
online
without having to create yet
another social network?
18. The Trouble with Developing Social Apps
Which site do I build my app for?
19. Let’s work on that…
Using OpenSocial, I can build apps for
all of these sites!
20. 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
24. What’s in OpenSocial?
• JavaScript API - Now
• REST Protocol - New
• Templates - Prototype in Shindig
25. 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
26. 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
27. 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
28. Try out templates today!
• Samples and docs:
http://ostemplates-demo.appspot.com
• Sample app:
http://ostemplates-demo.appspot.com/friends.html
• Discussion group:
http://tech.groups.yahoo.com/group/os-templates/
• Code is all in Shindig, can download, use, and even
submit patches to improve
• So…
o Get involved and provide comments, and
o Build some apps
29. 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/
30. 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
36. People & Friends Example
Requesting friend Info
function getFriendData() {
var req = opensocial.newDataRequest();
req.add(
req.newFetchPersonRequest(VIEWER), 'viewer');
req.add(
req.newFetchPeopleRequest(VIEWER_FRIENDS),
'viewerFriends');
req.send(onLoadFriends);
}
37. People & Friends Example
Callback function for returned friend data
function onLoadFriends(resp) {
var viewer = resp.get('viewer').getData();
var viewerFriends = resp.get('viewerFriends').getData();
var html = 'Friends of ' +
viewer.getDisplayName() + ‘:<br><ul>’;
viewerFriends.each(function(person) {
html += '<li>' + person.getDisplayName()+'</li>';});
html += '</ul>';
document.getElementById('friends').innerHTML += html;
}
38. Activities Example
Posting 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);
}
postActivity(
quot;This is a sample activity, created at quot; +
new Date().toString());
39. Persistence Example
Persisting data
function populateMyAppData() {
var req = opensocial.newDataRequest();
var data1 = Math.random() * 5;
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);
}
40. Persistence Example
Fetching persisted data
function requestMyData() {
var req = opensocial.newDataRequest();
var fields = [quot;AppField1quot;, quot;AppField2quot;];
req.add(req.newFetchPersonRequest(
opensocial.DataRequest.PersonId.VIEWER), quot;viewerquot;);
req.add(req.newFetchPersonAppDataRequest(quot;VIEWERquot;,
fields), quot;viewer_dataquot;);
req.send(handleReturnedData);
}
41. Persistence Example
Displaying fetched (persisted) data
function handleReturnedData(data) {
var mydata = data.get(quot;viewer_dataquot;);
var viewer = data.get(quot;viewerquot;);
me = viewer.getData(); // me is global var
var data = mydata[me.getId()];
htmlout += quot;AppField1: quot; + data[quot;AppField1quot;] + quot;<br/>quot;;
htmlout += quot;AppField2: quot; + data[quot;AppField2quot;] + quot;<br/>quot;;
var div = document.getElementById('content_div');
div.innerHTML = htmlout;
}
45. Hosting OpenSocial apps
In addition to using the provided persistence API...
• Establish a quot;homequot; site where gadget can phone
home to retrieve, post data
• Can host home site on your own, or use services:
o Amazon EC2
o Joyent
o Google AppEngine
• Zembly: is the world's first cloud-based
development environment for social apps. Full
OpenSocial support
46. Google AppEngine and OpenSocial
• Create an App Engine app as your backend!
o Use makeRequest() to call back to your AppEngine
server
o Utilize AppEngine's datastore
• New OpenSocial Apps are coming online
o BuddyPoke,
• Checkout Lane Liabraaten’s OpenSocial-AppEngine
integration article
o http://code.google.com/apis/opensocial/articles/appengine.html
• Google IO Code Lab about OpenSocial Apps in the Cloud
48. 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
49. 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
50. 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. More than 23 languages
• 23 languages and alot more coming!
o 8,000,000 Spanish & Catalan speaking members
Nederlands Svenska
slovenščina
Deutsch
Magyar
Русский English Italiano česky
français
Dansk suomi
Polski Hrvatski
Türkçe
Afrikaans
Slovenčina
Eesti Català
Español
Português
Latviešu
Română valoda български
Lietuvių kalba Norsk (bokmål)
72. Whitelisting Requirements
• an application should be fully integrated
o no external login should be needed...
o no external links
• no ads in “profile” view
• no spamming through activities/requests
• localised & translated
o We can help you!
77. What’s in it for you?
• Branding, co-branding, sponsorships
• 100% revenue from vertical rectangle or skyscraper
on your application page
• Credit economy with Netlog OpenSocial extension
78. Credit Economy
• Virtual Currency
• Use Cases
o charge credits for app installation
o charge credits for certain features
o charge credits for buying items
o charge credits for...
79. Questions?
• Developer pages:
o http://es.netlog.com/go/developer/
• OpenSocial sandbox:
o http://es.netlog.com/go/developer/opensocial/sandbox=1
82. Agenda
• A few words about Viadeo
• What to offer to Viadeo’s members
• Sandbox presentation
83. Viadeo
• 3 groups of Use :
o Social Network,
o Business Tool
o Career Management
• 5 +m Members mainly :
o Europe
o China
• Strong activity
o 7, 000 new members/day
o 10, 000 connections/day
o +120, 000 consulted profiles/day
o 1,3 M hubs registration
84. International Footprint : 5+m Members
France
• 1.8m members(1)
Other European countries
• 150K members(1)
Belgium
• 100k members(1)
UK/Ireland
• 150 k members(1) China
Switzerland • 2.2m members(1)
• 50K members(1)
Spain/Portugal Italy
• 350k members(1) • 300k members(1)
(1) end of August 2008
85. Benefits Viadeo can offer to developers
• 8 languages (European + China)
• Professional oriented
• Distribution of Members among all the Industries
• Mainly “A Level” profiles
• Members with High Revenues => Strong capabilities of
monetization
88. Apps for Professional Social Network…
Helping to :
• Find Customers / Partners / Suppliers
• Organize Meetings/Events
• Share information and expertise
But also ...
• Get headhunted…
• …and recruit
• Etc…
95. Becoming an OpenSocial Container
• Question:
o How do you become an OpenSocial container?
• Answer:
o The Apache incubator project “Shindig” serves this
purpose!
96. 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;
97. Introduction to Shindig Architecture
• Gadget Server
• Social Data Server
• Gadget Container JavaScript
100. 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
101. 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 {
...
}
103. 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!
104. Implementing - Scale it Out!
• Prevent Concurrency issues
• Reduce Latency
• Add Caching
• Add more caching!
105. Usage Example: Sample Container
• Static html sample container
• No effort to get up and running
• No database or features
106. 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
107. 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)
108. 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/
109. 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/
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120. 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