Presentation is loading. Please wait.

Presentation is loading. Please wait.

OpenSocial Kevin Marks Chris Chabot Agenda Introduction - What is OpenSocial Building an OpenSocial Application Best Practices Kinds of container Becoming.

Similar presentations


Presentation on theme: "OpenSocial Kevin Marks Chris Chabot Agenda Introduction - What is OpenSocial Building an OpenSocial Application Best Practices Kinds of container Becoming."— Presentation transcript:

1

2 OpenSocial Kevin Marks Chris Chabot

3 Agenda Introduction - What is OpenSocial Building an OpenSocial Application Best Practices Kinds of container Becoming an OpenSocial container Netlog Presentation

4

5

6

7

8

9

10

11 Why do we have so many users in Beverly Hills and Schenectady ?

12 Why do we have so many users in 90210 and 12345 ?

13

14 The problem

15 The solution

16

17

18 Portable Contacts REST API for Person and Contacts Compatible with OpenSocial http://portablecontacts.net

19

20

21

22 How to build an OpenSocial application The Basics Chris Chabot

23 An OpenSocial Application HTML Javascript CSS Gadget XML

24 Understanding the Gadget XML <![CDATA[ function init(){ alert("hello world"); } gadgets.util.registerOnLoadHandler(init); ]]>

25 Retrieve Friend Information function getFriendData() { var req = opensocial.newDataRequest(); req.add(req.newFetchPersonRequest(VIEWER), 'viewer'); req.add(req.newFetchPeopleRequest(VIEWER_FRIENDS), 'viewerFriends'); req.send(onLoadFriends); } function onLoadFriends(response) { var viewer = response.get('viewer').getData(); var viewerFriends = response.get('viewerFriends').getData(); ///More code }

26 Persisting Data function populateMyAppData() { var req = opensocial.newDataRequest(); var data1 = Math.random() * 5; var data2 = Math.random() * 100; req.add(req.newUpdatePersonAppDataRequest( "VIEWER","AppField1", data1)); req.add(req.newUpdatePersonAppDataRequest( "VIEWER","AppField2", data2)); req.send(requestMyData); }

27 Fetching persisted data function requestMyData() { var req = opensocial.newDataRequest(); var fields = ["AppField1", "AppField2"]; req.add(req.newFetchPersonRequest( opensocial.DataRequest.PersonId.VIEWER),"viewer"); req.add(req.newFetchPersonAppDataRequest("VIEWER", fields), "viewer_data"); req.send(handleReturnedData); } function handleReturnedData(data) { var mydata = data.get("viewer_data"); var viewer = data.get("viewer"); me = viewer.getData(); var appField1 = mydata[me.getId()]["AppField1"]; ///More code }

28 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("This is a sample activity, created at " + new Date().toString())

29 How to build an OpenSocial application Best Practices Chris Chabot

30 function response(data) { if (!data.hadError()) {... } else { if (data.get("req").hadError()) { alert(data.get("req").getErrorMessage()); } } else { alert('Unknown error occurred'); }; Best practices : Check for errors Both the request and sub-requests can have errors, use hadError() to check.

31 function request() { var req = opensocial.newDataRequest(); var params = {}; params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] = [ opensocial.Person.Field.PROFILE_URL ]; req.add(req.newFetchPersonRequest( opensocial.DataRequest.PersonId.VIEWER, params), "req"); req.send(response); }; Best practices : Be specific Specify which fields you want to use: only ID, NAME and THUMBNAIL_URL are returned by default

32 var supportsAboutMe = opensocial.getEnvironment().supportsField( opensocial.Environment.ObjectType.PERSON, opensocial.Person.Field.ABOUT_ME ); if (gadgets.util.hasFeature('hi5')) { mediaItem.setField( hi5.ActivityMediaItemField.LINK, "http://linkurl"); } Best practices : Capability Discovery Check for supported features and fields

33 Best Practises : Use the container's cache function showImage() { imgUrl = 'http://foo.com/bar.png'; cachedUrl = gadgets.io.getProxyUrl(imgUrl); html = [' ']; document.getElementById('dom_handle').innerHTML = html.join(''); }; showImage(); Use the container's content cache Also check out o Content-Rewriter feature o Preloading o Using App Data as content cache

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

35 Hosting your application Host it anywhere you want to, with any back-end Keep in mind: o Popular apps like iLike get > 200k req / minute peak o Means dealing with lots of scalability issues! o DB Sharding, memcache pools, server farms.. Why not use a cloud service like: o Google App Engine o Joyent.com o Amazon EC2

36 Specification http://opensocial.org/ http://groups.google.com/group/opensocial-and-gadgets-spec Code Samples and Tools http://code.google.com/opensocial http://code.google.com/p/opensocial-resources/ Getting started guide http://code.google.com/apis/opensocial/articles/tutorial/tutorial- 0.8.html Application Development Resources

37 Kinds of Containers Kevin Marks

38 Containers provide a social context OpenSocial separates application logic from social context an app sees user ids - the container makes them people Users understand the social contract of the containers Save apps and users from re-registration hell

39 Containers don’t choose users Containers set up the social model, users choose to join they grow through homophily and affinity Network effect can bring unexpected userbasesuserbases

40 OpenSocial gets you to all their users You don't have to pick a site to specialise for You get to spread through multiple friend groups You'll be surprised by where your users are so make sure you plan to localizelocalize

41 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

42 Owner and Viewer are defined by Container The Application gets IDs and connections to other IDs

43 the Owner need not be a Person It could be an organisation or a social object

44 Kinds of container - Social network sites Profile pages o Owner is profile page owner o Viewer may not be known, may be owner or other member Home pages o Owner is Viewer (must be logged in to see) Examples MySpace Hi5 Orkut

45 Kinds of container - Personal dashboard like Home pages o Owner is Viewer (must be logged in to see) Friends may not be defined Example: iGoogle, My Yahoo

46 Kinds of container - Social Object site Pages reflect the object - movie, picture, product o Owner is the object o Owner friends are people connected to the object  may be authors or fans o 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

47 Kinds of container - CRM systems Pages reflect the customer o Owner is the customer o Owner friends are people connected to the customer  may be your colleagues, or other customers o Viewer is you, Viewer friends are your colleagues or customers Example: Oracle CRM, Salesforce

48 Kinds of container - Any web site Owner is the site o Owner friends are site users Viewer is you, o Viewer friends are your friends who have visited this site Example: Google Friend Connect will enable this for any site

49 Social Custodians

50

51

52

53 Becoming an OpenSocial Container Chris Chabot

54 Becoming an OpenSocial Container Question: o How do you become an OpenSocial container? Answer: o The Apache incubator project “Shindig” serves this purpose!

55 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 work"

56 Introduction to Shindig Architecture Gadget Server Social Data Server Gadget JavaScript

57 Gadget Server

58 Social Server

59 Implementing Shindig - PHP 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 {... }

60 Implementing Shindig - PHP Implement functions function getActivities($ids) { $activities = array(); $res = mysqli_query($this->db, ”SELECT…"); 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; }

61 Implementing Shindig - Java import org.apache.shindig.social.opensocial.ActivitiesService; public class SQLActivitiesService implements ActivitiesService { private SQLDataLayer sqlLayer; @Inject public SQLActivitiesService(SQLDataLayer sqlLayer) { this.sqlLayer = sqlLayer;....

62 public ResponseItem > getActivities(List ids, SecurityToken token) { Map > allActivities = sqlLayer.getActivities(); List activities = new ArrayList (); for (String id : ids) { List personActivities = allActivities.get(id); if (personActivities != null) { activities.addAll(personActivities); } } return new ResponseItem >(activities); } Implementing Shindig - Java

63 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 Statistics

64 Implementing - Scale it Out Prevent Concurrency issues Reduce Latency Add lots of Caching

65 Usage Example: Sample Container Static html sample container No effort to get up and running No database or features

66 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

67 OpenSocial for intranet, portals Sun Microsystems Socialsite: Shindig + gadget based UI written in Java Open Source https://socialsite.dev.java.net/ https://socialsite.dev.java.net/ Upcoming from Impetus Zest: Shindig + Drupal (PHP) Zeal: Shindig + Liferay (Java)

68 Becoming a Container - Summary Become an OpenSocial Container o Get Shindig (PHP or Java)  http://incubator.apache.org/shindig/ http://incubator.apache.org/shindig/ o Look at examples & documentation  http://www.chabotc.com/gdd http://www.chabotc.com/gdd o Implement Services o Add UI o Scale it out Get involved, join the mailing list!

69 ® friendster Who's part of OpenSocial? > 390 Million reached!

70 Learn more at code.google.com

71


Download ppt "OpenSocial Kevin Marks Chris Chabot Agenda Introduction - What is OpenSocial Building an OpenSocial Application Best Practices Kinds of container Becoming."

Similar presentations


Ads by Google