This document discusses an OpenSocial ecosystem update presented on September 16, 2008. It includes an introduction to OpenSocial, how to build OpenSocial applications, hosting social applications, monetizing social applications, demos of OpenSocial containers from sites like Hyves and Netlog, and how to become an OpenSocial container using the Shindig open source project.
3. Agenda
OpenSocial introduction
How to build OpenSocial applications
Hosting social applications
Social applications monetization
OpenSocial container demos
Becoming an OpenSocial container
Kinds of Containers
Google Friend Connect
Summary
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
What are people up to on the web
People/Profile Info
Who do I know, etc.
Persistent datastore
Handles key/value pairs
22. Where is OpenSocial live today?
Live to Users: Live Developer Sandboxes:
MySpace iGoogle
orkut imeem
Hi5 CityIN
Freebar Tianya
Friendster Ning
Webon from Lycos Plaxo Pulse
IDtail Mail.ru
YiQi
Netlog - New!
Hyves - New!
Individual Developer Links:
http://code.google.com/apis/opensocial/gettingstared.html
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
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
Consistent UI across containers
Easy way to localize
More interesting content options when inlining
into container (activities, profile views)
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…
Get involved and provide comments, and
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/
“OpenSocial and Gadgets spec” subgroup
OpenSocial Foundation
Get involved to nominate and elect board reps
http://www.opensocial.org/opensocial-
foundation/
30. A note on compliance
OpenSocial is designed for many sites
Building an app:
Technology
Policy
OpenSocial Compliance Tests
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;
}
44. 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:
Amazon EC2
Joyent
Google AppEngine
Zembly: is the world's first cloud-based
development environment for social apps. Full
OpenSocial support
45. Google AppEngine and OpenSocial
Create an App Engine app as your backend!
Use makeRequest() to call back to your AppEngine
server
Utilize AppEngine's datastore
New OpenSocial Apps are coming online
BuddyPoke,
Checkout Lane Liabraaten’s OpenSocial-AppEngine
integration article
http://code.google.com/apis/opensocial/articles/appengine.html
Google IO Code Lab about OpenSocial Apps in the Cloud
47. OpenSocial Monetization
Ads from Ad Networks
AdSense, RightMedia
BuddyPoke, Rate My Friend
Brand/Private Label App
Sony Ericsson MTV Roadies app on orkut
Sell virtual or real goods
Free -> Freemium
Referrals
Virtual currency
48. 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
49. 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
54. OpenSocial on Hyves
Launching OpenSocial today
OS 0.7, working on 0.8 release
(traditional) API intergration
Gadget gallery waiting for good
apps to be featured
Contact irene@hyves.nl
59. Thanks for your
attention
Reinoud, Derk, Youri, Marijn, Frank
& Yme are here today if you have
any questions
Contact irene@hyves.nl for
inclusion in the Gadget Gallery
http://trac.hyves-api.nl/hyves-
api/wiki/opensocial
69. How are we doing?
More than 35,000,000 unique members
More than 6,000,000,000 pageviews/Month
23 languages and alot more coming!
Nederland Svensk
slovenščin s a
a Deutsch
Magya
Русски Englis Italiano česky
r
й h françai
Dansk s suomi
Polski Hrvatski
Türkçe
Afrikaan
Slovenčin s 中文
Eesti a Català
Españo
Portuguê l Latviešu
Română s
valoda българск
Lietuvių Norsk (bokmål) и
kalba
79. Whitelisting Requirements
an application should be fully integrated
no external login should be needed...
no external links
no ads in “profile” view
no spamming through activities/requests
localised & translated
We can help you!
84. 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
charge credits for app installation
charge credits for certain features
charge credits for buying items
charge credits for...
90. Agenda
A few words about Viadeo
What to offer to Viadeo’s members
(Sandbox presentation)
91. Viadeo
3 groups of Use :
Social Network,
Business Tool
Career Management
5 +m Members mainly :
Europe
China
Strong activity
7, 000 new members/day
10, 000 connections/day
+120, 000 consulted profiles/day
1,3 M hubs registration
92. 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
93. What to offer to Viadeo’s Members
7 languages (European + China)
Professional oriented
Mainly “A Level” profiles
Split by Industry
Members with High Revenues => Strong capabilities of
monetization
96. 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…
98. Becoming an OpenSocial Container
Question:
How do you become an OpenSocial container?
Answer:
The Apache incubator project “Shindig” serves this
purpose!
99. 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;
100. Introduction to Shindig Architecture
Gadget Server
Social Data Server
Gadget Container JavaScript
103. Social Server - RESTful API
Preview available on
iGoogle
Orkut
Hi5
New development models
Server to server & Mobile!
Try it out:
curl http://localhost:8080/social/rest/people/john.doe/@all
104. Implementing Shindig - Data sources
Integrate with your own data sources
People Service
Activities Service
App Data Service
class MyPeopleService implements PeopleService {
...
}
class MyAppDataService implements AppDataService {
...
}
class MyActivitiesService implements ActivitiesService {
...
}
105. Implementing Shindig - Data sources
Implement functions
function getActivities($ids)
{
$activities = array();
$res = mysqli_query($this->db, ”SELECT…quot;);
while ($row = @mysqli_fetch_array($res, MYSQLI_ASSOC)) {
$activity = new Activity($row['activityId'],
$row['personId']);
$activity->setStreamTitle($row['activityStream']);
$activity->setTitle($row['activityTitle']);
$activity->setBody($row['activityBody']);
$activity->setPostedTime($row['created']);
$activities[] = $activity;
}
return $activities;
}
106. Implementing - Make it a platform
Add UI Elements
App Gallery
App Canvas
App Invites
Notification Browser
Developer Resources
Developer Console
Application Gallery
Scale it Out!
107. Implementing - Scale it Out!
Prevent Concurrency issues
Reduce Latency
Add Caching
Add more caching!
Pre-populate Cache
108. Usage Example: Sample Container
Static html sample container
No effort to get up and running
No database or features
109. 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
110. 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)
111. Summary
Become an OpenSocial Container
Get Shindig (PHP or Java)
Look at examples & documentation
Implement Services
Add UI
Scale it out
Resources & Links:
http://www.chabotc.com/gdd/
113. Not just Social Network Sites
Social network sites - Profiles and home pages
Personal dashboards
Sites based around a Social Object
Corporate CRM systems
Any web site
How do we abstract these out?
Viewer + friends
Owner + friends
116. Owner and Viewer
are defined by Container
The Application gets IDs and connections to other IDs
117. the Owner need not be a Person
It could be an organisation
or a social object
118. Kinds of container - Social network
sites
Profile pages
Owner is profile page owner
Viewer may not be known, may be owner or other
member
Home pages
Owner is Viewer (must be logged in to see)
Examples
MySpace
Hi5
Orkut
119. Kinds of container - Personal
dashboard
like Home pages
Owner is Viewer (must be logged in to see)
Friends may not be defined
Example:
iGoogle, My Yahoo
120. Kinds of container - Social Object site
Pages reflect the object - movie, picture, product
Owner is the object
Owner friends are people connected to the object
may be authors or fans
Viewer is looking at it, Viewer friends are people you
may want to share with
Example:
Imeem is a bit like this
- opportunity for sites like Flickr, YouTube
121. Kinds of container - CRM systems
Pages reflect the customer
Owner is the customer
Owner friends are people connected to the customer
may be your colleagues, or other customers
Viewer is you, Viewer friends are your colleagues or
customers
Example:
Oracle CRM, Salesforce
122. Kinds of container - Any web site
Owner is the site
Owner friends are site users
Viewer is you,
Viewer friends are your friends who have visited this site
Example:
Google Friend Connect will enable this for any site
123. 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/
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134. Friend Connect gives ...
Users
... more ways to do more things with my friends
Site owners
... more (and more engaged) traffic for my site
App developers
... more reach for my apps
and ... make it easy