Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Open Social In The Enterprise

1,447 views

Published on

Published in: Technology, Business
  • Be the first to comment

Open Social In The Enterprise

  1. 1. OpenSocial in the Enterprise Tim Moore Atlassian Developer
  2. 2. Atlassian 8 products • 15,000 customers • 113 countries Collaboration Tools Development Tools Confluence JIRA Largest enterprise wiki FishEye, Crucible, Bamboo, Clover, IDE Connectors
  3. 3. Our Problem
  4. 4. Today Enterprise apps are silos
  5. 5. Source Code Today Enterprise apps are silos
  6. 6. Source Code Issues & Tasks Today Enterprise apps are silos
  7. 7. Source Code Issues & Tasks Wiki Today Enterprise apps are silos
  8. 8. Too Many Dashboards
  9. 9. Too Many Dashboards
  10. 10. Integration with Non-Atlassian apps
  11. 11. N:M Versions Problem
  12. 12. Solution: OpenSocial Gadgets
  13. 13. What is OpenSocial?
  14. 14. Social Data Model
  15. 15. Web Service APIs
  16. 16. Gadgets
  17. 17. Gadget Benefits
  18. 18. Gadget Benefits • Easy!
  19. 19. Gadget Benefits • Easy! • Safe
  20. 20. Gadget Benefits • Easy! • Safe • Write Once, Display Everywhere
  21. 21. Gadgets are a Great Solution for Dashboards
  22. 22. Open standard for enterprise OpenSocial application connection
  23. 23. view complete project single activity stream comment & interact Open standard for enterprise OpenSocial application connection
  24. 24. Not just about portals, Managers Do Email or internal applications.
  25. 25. view activity & status create issues Not just about portals, Managers Do Email or internal applications.
  26. 26. Open Standards, Industry Support
  27. 27. Apache Shindig
  28. 28. Anatomy of a Gadget
  29. 29. Anatomy of a Gadget • XML Spec File • Metadata, HTML Content, and JavaScript
  30. 30. Anatomy of a Gadget • XML Spec File • Metadata, HTML Content, and JavaScript • Core JavaScript API • Access Preferences, Make Requests
  31. 31. Anatomy of a Gadget • XML Spec File • Metadata, HTML Content, and JavaScript • Core JavaScript API • Access Preferences, Make Requests • Gadget Features • Additional, Optional Capabilities & APIs
  32. 32. Architecture
  33. 33. XML Spec File
  34. 34. <ModulePrefs>
  35. 35. <ModulePrefs> <?xml version="1.0" encoding="UTF-8" ?> <Module> <ModulePrefs title="JIRA Issues" author="Atlassian" thumbnail="http://labs.atlassian.com/svn/GADGETS/ trunk/jira-issues/basic/jira-issues-thumbnail.png" description="A list of recently created Issues"> <Require feature="minimessage" /> <Require feature="dynamic-height" /> </ModulePrefs>
  36. 36. <ModulePrefs> <?xml version="1.0" encoding="UTF-8" ?> <Module> <ModulePrefs title="JIRA Issues" author="Atlassian" thumbnail="http://labs.atlassian.com/svn/GADGETS/ trunk/jira-issues/basic/jira-issues-thumbnail.png" description="A list of recently created Issues"> <Require feature="minimessage" /> <Require feature="dynamic-height" /> </ModulePrefs>
  37. 37. <ModulePrefs> <?xml version="1.0" encoding="UTF-8" ?> <Module> <ModulePrefs title="JIRA Issues" author="Atlassian" thumbnail="http://labs.atlassian.com/svn/GADGETS/ trunk/jira-issues/basic/jira-issues-thumbnail.png" description="A list of recently created Issues"> <Require feature="minimessage" /> <Require feature="dynamic-height" /> </ModulePrefs>
  38. 38. <UserPref> <UserPref name="show_date" display_name="Show Dates?" datatype="bool" default_value="true"/> <UserPref name="show_summ" display_name="Show Summaries?" datatype="bool" default_value="true"/> <UserPref name="num_entries" display_name="Number of Entries:" default_value="5" required="true"/>
  39. 39. <UserPref> <UserPref name="show_date" display_name="Show Dates?" datatype="bool" default_value="true"/> <UserPref name="show_summ" display_name="Show Summaries?" datatype="bool" default_value="true"/> <UserPref name="num_entries" display_name="Number of Entries:" default_value="5" required="true"/>
  40. 40. <UserPref> <UserPref name="show_date" display_name="Show Dates?" datatype="bool" default_value="true"/> <UserPref name="show_summ" display_name="Show Summaries?" datatype="bool" default_value="true"/> <UserPref name="num_entries" display_name="Number of Entries:" default_value="5" required="true"/>
  41. 41. <Content> <Content type="html"><![CDATA[ <link rel="stylesheet" href="http://labs.atlassian.com/svn/GADGETS/trunk/ jira-issues/basic/jira-issues.css"> <div id="content_div"></div> <script type="text/javascript" src="http://labs.atlassian.com/svn/GADGETS/trunk/ jira-issues/basic/jira-issues.js"></script> ]]></Content> </Module>
  42. 42. JavaScript // Create minimessage factory var msg = new gadgets.MiniMessage(); // Show a small loading message to the user var loadMessage = msg.createStaticMessage("loading..."); // Get configured user prefs var prefs = new gadgets.Prefs(); var showDate = prefs.getBool("show_date"); var showSummary = prefs.getBool("show_summ"); var numEntries = prefs.getInt("num_entries"); // Fetch issues when the gadget loads gadgets.util.registerOnLoadHandler(fetchIssues);
  43. 43. JavaScript // Create minimessage factory var msg = new gadgets.MiniMessage(); // Show a small loading message to the user var loadMessage = msg.createStaticMessage("loading..."); // Get configured user prefs var prefs = new gadgets.Prefs(); var showDate = prefs.getBool("show_date"); var showSummary = prefs.getBool("show_summ"); var numEntries = prefs.getInt("num_entries"); // Fetch issues when the gadget loads gadgets.util.registerOnLoadHandler(fetchIssues);
  44. 44. JavaScript // Create minimessage factory var msg = new gadgets.MiniMessage(); // Show a small loading message to the user var loadMessage = msg.createStaticMessage("loading..."); // Get configured user prefs var prefs = new gadgets.Prefs(); var showDate = prefs.getBool("show_date"); var showSummary = prefs.getBool("show_summ"); var numEntries = prefs.getInt("num_entries"); // Fetch issues when the gadget loads gadgets.util.registerOnLoadHandler(fetchIssues);
  45. 45. Requesting Data from Web Services
  46. 46. Requesting Data from Web Services • AJAX + DOM
  47. 47. Requesting Data from Web Services • AJAX + DOM • Request Proxy
  48. 48. Requesting Data from Web Services • AJAX + DOM • Request Proxy • OAuth
  49. 49. gadgets io . .makeRequest ) (
  50. 50. What Can You Call?
  51. 51. What Can You Call? • Any URL
  52. 52. What Can You Call? • Any URL • XML and JSON are the most useful
  53. 53. What Can You Call? • Any URL • XML and JSON are the most useful • REST-style APIs are the most convenient
  54. 54. Fetching Issues function fetchIssues() { var url = "http://jira.atlassian.com/sr/" + "jira.issueviews:searchrequest-xml" + "/temp/SearchRequest.xml?" + "created%3Aprevious=-1w&resolution=-1" + "&sorter/field=issuekey&sorter/order=DESC" + "&sorter/field=created&sorter/order=DESC" + "&tempMax=20"; var params = {}; params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.DOM; gadgets.io.makeRequest(url, handleResponse, params); }
  55. 55. Handling the Response function handleResponse(obj) { var domData = obj.data; var jiraIssues = { title : getTitle(domData), items : getItems(domData) }; renderJiraIssues(jiraIssues); msg.dismissMessage(loadMessage); gadgets.window.adjustHeight(); }
  56. 56. Handling the Response function handleResponse(obj) { var domData = obj.data; var jiraIssues = { title : getTitle(domData), items : getItems(domData) }; renderJiraIssues(jiraIssues); msg.dismissMessage(loadMessage); gadgets.window.adjustHeight(); }
  57. 57. Challenges
  58. 58. Enterprise Readiness
  59. 59. Enterprise Readiness • SSO/Security
  60. 60. Enterprise Readiness • SSO/Security • Assumes big container, little app servers
  61. 61. Enterprise Readiness • SSO/Security • Assumes big container, little app servers • Low awareness of enterprise needs
  62. 62. Running Behind the Firewall
  63. 63. Running Behind the Firewall • Deployment issues
  64. 64. Running Behind the Firewall • Deployment issues • Portable gadgets
  65. 65. Running Behind the Firewall • Deployment issues • Portable gadgets • Google Analytics in gadgets
  66. 66. Immaturity
  67. 67. Immaturity • No 1.0 spec yet
  68. 68. Immaturity • No 1.0 spec yet • Shindig still incubating
  69. 69. Immaturity • No 1.0 spec yet • Shindig still incubating • Compatibility: more theory than reality
  70. 70. Whatʼs Next?
  71. 71. OpenSocial 1.0
  72. 72. OpenSocial 1.0 • In progress now
  73. 73. OpenSocial 1.0 • In progress now • Focus on clean up & clarification
  74. 74. OpenSocial 1.0 • In progress now • Focus on clean up & clarification • Compliance tests
  75. 75. OpenSocial 1.0 • In progress now • Focus on clean up & clarification • Compliance tests • Extension process
  76. 76. OpenSocial 1.0 • In progress now • Focus on clean up & clarification • Compliance tests • Extension process • You can join in
  77. 77. PubSub
  78. 78. Caja
  79. 79. Caja • Safer JavaScript & CSS
  80. 80. Caja • Safer JavaScript & CSS • Helps prevent phishing, script injection, history sniffing, etc.
  81. 81. Caja • Safer JavaScript & CSS • Helps prevent phishing, script injection, history sniffing, etc. • In production, but still tricky to use
  82. 82. Questions?

×