SlideShare uma empresa Scribd logo
1 de 89
OpenSocial
  in the
Enterprise

      Tim Moore
 Atlassian Developer
Atlassian
8 products • 15,000 customers • 113 countries


 Collaboration Tools         Development Tools




     Confluence                       JIRA
   Largest enterprise wiki   FishEye, Crucible, Bamboo,
                               Clover, IDE Connectors
Our Problem
Today   Enterprise apps are silos
Source Code




Today   Enterprise apps are silos
Source Code



                Issues & Tasks




Today   Enterprise apps are silos
Source Code



                Issues & Tasks



               Wiki




Today   Enterprise apps are silos
Too Many Dashboards
Too Many Dashboards
Integration with
Non-Atlassian apps
N:M Versions Problem
Solution:
OpenSocial Gadgets
What is OpenSocial?
Social Data Model
Web Service APIs
Gadgets
Gadget Benefits
Gadget Benefits


•   Easy!
Gadget Benefits


•   Easy!
•   Safe
Gadget Benefits


•   Easy!
•   Safe
•   Write Once, Display Everywhere
Gadgets are a Great
   Solution for
   Dashboards
Open standard for enterprise
OpenSocial   application connection
view complete project
single activity stream
 comment & interact




                         Open standard for enterprise
   OpenSocial            application connection
Not just about portals,
Managers Do Email   or internal applications.
view activity & status
        create issues




                             Not just about portals,
Managers Do Email            or internal applications.
Open Standards,
Industry Support
Apache Shindig
Anatomy of a Gadget
Anatomy of a Gadget

•   XML Spec File
    •   Metadata, HTML Content, and JavaScript
Anatomy of a Gadget

•   XML Spec File
    •   Metadata, HTML Content, and JavaScript

•   Core JavaScript API
    •   Access Preferences, Make Requests
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
Architecture
XML Spec File
<ModulePrefs>
<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>
<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>
<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>
<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"/>
<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"/>
<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"/>
<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>
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);
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);
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);
Requesting Data from
   Web Services
Requesting Data from
       Web Services

•   AJAX + DOM
Requesting Data from
       Web Services

•   AJAX + DOM
•   Request Proxy
Requesting Data from
       Web Services

•   AJAX + DOM
•   Request Proxy
•   OAuth
gadgets io
       . .makeRequest )
                     (
What Can You Call?
What Can You Call?

•   Any URL
What Can You Call?

•   Any URL
•   XML and JSON are the most
    useful
What Can You Call?

•   Any URL
•   XML and JSON are the most
    useful
•   REST-style APIs are the most
    convenient
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);
}
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();
}
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();
}
Challenges
Enterprise Readiness
Enterprise Readiness

•   SSO/Security
Enterprise Readiness

•   SSO/Security
•   Assumes big container,
    little app servers
Enterprise Readiness

•   SSO/Security
•   Assumes big container,
    little app servers
•   Low awareness of enterprise
    needs
Running
Behind the Firewall
Running
     Behind the Firewall

•   Deployment issues
Running
     Behind the Firewall

•   Deployment issues
•   Portable gadgets
Running
     Behind the Firewall

•   Deployment issues
•   Portable gadgets
•   Google Analytics in gadgets
Immaturity
Immaturity

•   No 1.0 spec yet
Immaturity

•   No 1.0 spec yet
•   Shindig still incubating
Immaturity

•   No 1.0 spec yet
•   Shindig still incubating
•   Compatibility:
    more theory than reality
Whatʼs Next?
OpenSocial 1.0
OpenSocial 1.0

•   In progress now
OpenSocial 1.0

•   In progress now
•   Focus on clean up & clarification
OpenSocial 1.0

•   In progress now
•   Focus on clean up & clarification
•   Compliance tests
OpenSocial 1.0

•   In progress now
•   Focus on clean up & clarification
•   Compliance tests
•   Extension process
OpenSocial 1.0

•   In progress now
•   Focus on clean up & clarification
•   Compliance tests
•   Extension process
•   You can join in
PubSub
Caja
Caja

•   Safer JavaScript & CSS
Caja

•   Safer JavaScript & CSS
•   Helps prevent phishing, script
    injection, history sniffing, etc.
Caja

•   Safer JavaScript & CSS
•   Helps prevent phishing, script
    injection, history sniffing, etc.
•   In production, but still tricky to use
Questions?

Mais conteúdo relacionado

Mais procurados

Build Amazing Add-ons for Atlassian JIRA and Confluence
Build Amazing Add-ons for Atlassian JIRA and ConfluenceBuild Amazing Add-ons for Atlassian JIRA and Confluence
Build Amazing Add-ons for Atlassian JIRA and ConfluenceK15t
 
What's New in Jira Cloud for Developers
What's New in Jira Cloud for DevelopersWhat's New in Jira Cloud for Developers
What's New in Jira Cloud for DevelopersAtlassian
 
Top Ten Proactive Web Security Controls v5
Top Ten Proactive Web Security Controls v5Top Ten Proactive Web Security Controls v5
Top Ten Proactive Web Security Controls v5Jim Manico
 
Discover the Possibilities of the Jira Cloud Asset API
Discover the Possibilities of the Jira Cloud Asset APIDiscover the Possibilities of the Jira Cloud Asset API
Discover the Possibilities of the Jira Cloud Asset APIAtlassian
 
Top 10 HTML5 features every developer should know!
Top 10 HTML5 features every developer should know!Top 10 HTML5 features every developer should know!
Top 10 HTML5 features every developer should know!Gill Cleeren
 
How to avoid top 10 security risks in Java EE applications and how to avoid them
How to avoid top 10 security risks in Java EE applications and how to avoid themHow to avoid top 10 security risks in Java EE applications and how to avoid them
How to avoid top 10 security risks in Java EE applications and how to avoid themMasoud Kalali
 
What Does Jira Next-Gen Mean for Cloud Apps?
What Does Jira Next-Gen Mean for Cloud Apps?What Does Jira Next-Gen Mean for Cloud Apps?
What Does Jira Next-Gen Mean for Cloud Apps?Atlassian
 
Top Ten Java Defense for Web Applications v2
Top Ten Java Defense for Web Applications v2Top Ten Java Defense for Web Applications v2
Top Ten Java Defense for Web Applications v2Jim Manico
 
Top Ten Web Application Defenses v12
Top Ten Web Application Defenses v12Top Ten Web Application Defenses v12
Top Ten Web Application Defenses v12Jim Manico
 
5 Common Mistakes You are Making on your Website
 5 Common Mistakes You are Making on your Website 5 Common Mistakes You are Making on your Website
5 Common Mistakes You are Making on your WebsiteAcquia
 
Access Control Pitfalls v2
Access Control Pitfalls v2Access Control Pitfalls v2
Access Control Pitfalls v2Jim Manico
 
The Modern Java Web Developer - Denver JUG 2013
The Modern Java Web Developer - Denver JUG 2013The Modern Java Web Developer - Denver JUG 2013
The Modern Java Web Developer - Denver JUG 2013Matt Raible
 
Development Security Framework based on Owasp Esapi for JSF2.0
Development Security Framework based on Owasp Esapi for JSF2.0Development Security Framework based on Owasp Esapi for JSF2.0
Development Security Framework based on Owasp Esapi for JSF2.0Rakesh Kachhadiya
 
D2W Branding Using jQuery ThemeRoller
D2W Branding Using jQuery ThemeRollerD2W Branding Using jQuery ThemeRoller
D2W Branding Using jQuery ThemeRollerWO Community
 
HATEOAS 101 - Opinionated Introduction to a REST API Style
HATEOAS 101 - Opinionated Introduction to a REST API StyleHATEOAS 101 - Opinionated Introduction to a REST API Style
HATEOAS 101 - Opinionated Introduction to a REST API StyleApigee | Google Cloud
 
Access to User Activities - Activity Platform APIs
Access to User Activities - Activity Platform APIsAccess to User Activities - Activity Platform APIs
Access to User Activities - Activity Platform APIsAtlassian
 
4 Changes We're Making to Help you be Successful in the Cloud
4 Changes We're Making to Help you be Successful in the Cloud4 Changes We're Making to Help you be Successful in the Cloud
4 Changes We're Making to Help you be Successful in the CloudAtlassian
 
Front End Development for Back End Developers - Denver Startup Week 2017
Front End Development for Back End Developers - Denver Startup Week 2017Front End Development for Back End Developers - Denver Startup Week 2017
Front End Development for Back End Developers - Denver Startup Week 2017Matt Raible
 

Mais procurados (20)

Build Amazing Add-ons for Atlassian JIRA and Confluence
Build Amazing Add-ons for Atlassian JIRA and ConfluenceBuild Amazing Add-ons for Atlassian JIRA and Confluence
Build Amazing Add-ons for Atlassian JIRA and Confluence
 
What's New in Jira Cloud for Developers
What's New in Jira Cloud for DevelopersWhat's New in Jira Cloud for Developers
What's New in Jira Cloud for Developers
 
Top Ten Proactive Web Security Controls v5
Top Ten Proactive Web Security Controls v5Top Ten Proactive Web Security Controls v5
Top Ten Proactive Web Security Controls v5
 
Discover the Possibilities of the Jira Cloud Asset API
Discover the Possibilities of the Jira Cloud Asset APIDiscover the Possibilities of the Jira Cloud Asset API
Discover the Possibilities of the Jira Cloud Asset API
 
Top 10 HTML5 features every developer should know!
Top 10 HTML5 features every developer should know!Top 10 HTML5 features every developer should know!
Top 10 HTML5 features every developer should know!
 
How to avoid top 10 security risks in Java EE applications and how to avoid them
How to avoid top 10 security risks in Java EE applications and how to avoid themHow to avoid top 10 security risks in Java EE applications and how to avoid them
How to avoid top 10 security risks in Java EE applications and how to avoid them
 
What Does Jira Next-Gen Mean for Cloud Apps?
What Does Jira Next-Gen Mean for Cloud Apps?What Does Jira Next-Gen Mean for Cloud Apps?
What Does Jira Next-Gen Mean for Cloud Apps?
 
Top Ten Java Defense for Web Applications v2
Top Ten Java Defense for Web Applications v2Top Ten Java Defense for Web Applications v2
Top Ten Java Defense for Web Applications v2
 
Top Ten Web Application Defenses v12
Top Ten Web Application Defenses v12Top Ten Web Application Defenses v12
Top Ten Web Application Defenses v12
 
5 Common Mistakes You are Making on your Website
 5 Common Mistakes You are Making on your Website 5 Common Mistakes You are Making on your Website
5 Common Mistakes You are Making on your Website
 
Access Control Pitfalls v2
Access Control Pitfalls v2Access Control Pitfalls v2
Access Control Pitfalls v2
 
The Modern Java Web Developer - Denver JUG 2013
The Modern Java Web Developer - Denver JUG 2013The Modern Java Web Developer - Denver JUG 2013
The Modern Java Web Developer - Denver JUG 2013
 
Development Security Framework based on Owasp Esapi for JSF2.0
Development Security Framework based on Owasp Esapi for JSF2.0Development Security Framework based on Owasp Esapi for JSF2.0
Development Security Framework based on Owasp Esapi for JSF2.0
 
SEA Open Hack - YQL
SEA Open Hack - YQLSEA Open Hack - YQL
SEA Open Hack - YQL
 
Real World MVC
Real World MVCReal World MVC
Real World MVC
 
D2W Branding Using jQuery ThemeRoller
D2W Branding Using jQuery ThemeRollerD2W Branding Using jQuery ThemeRoller
D2W Branding Using jQuery ThemeRoller
 
HATEOAS 101 - Opinionated Introduction to a REST API Style
HATEOAS 101 - Opinionated Introduction to a REST API StyleHATEOAS 101 - Opinionated Introduction to a REST API Style
HATEOAS 101 - Opinionated Introduction to a REST API Style
 
Access to User Activities - Activity Platform APIs
Access to User Activities - Activity Platform APIsAccess to User Activities - Activity Platform APIs
Access to User Activities - Activity Platform APIs
 
4 Changes We're Making to Help you be Successful in the Cloud
4 Changes We're Making to Help you be Successful in the Cloud4 Changes We're Making to Help you be Successful in the Cloud
4 Changes We're Making to Help you be Successful in the Cloud
 
Front End Development for Back End Developers - Denver Startup Week 2017
Front End Development for Back End Developers - Denver Startup Week 2017Front End Development for Back End Developers - Denver Startup Week 2017
Front End Development for Back End Developers - Denver Startup Week 2017
 

Destaque

Qa 3 best practices
Qa 3 best practicesQa 3 best practices
Qa 3 best practicesJorge Boria
 
Intro Open Social and Dashboards
Intro Open Social and DashboardsIntro Open Social and Dashboards
Intro Open Social and DashboardsAtlassian
 
Embracing Capybara
Embracing CapybaraEmbracing Capybara
Embracing CapybaraTim Moore
 
Plugin Testing
Plugin TestingPlugin Testing
Plugin TestingTim Moore
 
Ruby’s Magical case Statement
Ruby’s Magical case StatementRuby’s Magical case Statement
Ruby’s Magical case StatementTim Moore
 
Go Silicon Valley - INVESTOR: BEST PRACTICE + Q&A
Go Silicon Valley - INVESTOR: BEST PRACTICE + Q&AGo Silicon Valley - INVESTOR: BEST PRACTICE + Q&A
Go Silicon Valley - INVESTOR: BEST PRACTICE + Q&Ai5invest
 

Destaque (6)

Qa 3 best practices
Qa 3 best practicesQa 3 best practices
Qa 3 best practices
 
Intro Open Social and Dashboards
Intro Open Social and DashboardsIntro Open Social and Dashboards
Intro Open Social and Dashboards
 
Embracing Capybara
Embracing CapybaraEmbracing Capybara
Embracing Capybara
 
Plugin Testing
Plugin TestingPlugin Testing
Plugin Testing
 
Ruby’s Magical case Statement
Ruby’s Magical case StatementRuby’s Magical case Statement
Ruby’s Magical case Statement
 
Go Silicon Valley - INVESTOR: BEST PRACTICE + Q&A
Go Silicon Valley - INVESTOR: BEST PRACTICE + Q&AGo Silicon Valley - INVESTOR: BEST PRACTICE + Q&A
Go Silicon Valley - INVESTOR: BEST PRACTICE + Q&A
 

Semelhante a OpenSocial in the Enterprise: Connecting Apps with Gadgets

Go, Go, Gadgets: Building Gadgets for Atlassian Products - Atlassian Summit 2010
Go, Go, Gadgets: Building Gadgets for Atlassian Products - Atlassian Summit 2010Go, Go, Gadgets: Building Gadgets for Atlassian Products - Atlassian Summit 2010
Go, Go, Gadgets: Building Gadgets for Atlassian Products - Atlassian Summit 2010Atlassian
 
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)Doris Chen
 
Building and Supporting Billion Dollar Ships with JIRA - Greg Warner
Building and Supporting Billion Dollar Ships with JIRA - Greg WarnerBuilding and Supporting Billion Dollar Ships with JIRA - Greg Warner
Building and Supporting Billion Dollar Ships with JIRA - Greg WarnerAtlassian
 
Django Overview
Django OverviewDjango Overview
Django OverviewBrian Tol
 
John Resig Beijing 2010 (English Version)
John Resig Beijing 2010 (English Version)John Resig Beijing 2010 (English Version)
John Resig Beijing 2010 (English Version)Jia Mi
 
Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on RailsAvi Kedar
 
Working Software Over Comprehensive Documentation
Working Software Over Comprehensive DocumentationWorking Software Over Comprehensive Documentation
Working Software Over Comprehensive DocumentationAndrii Dzynia
 
Continuous Delivery - Automate & Build Better Software with Travis CI
Continuous Delivery - Automate & Build Better Software with Travis CIContinuous Delivery - Automate & Build Better Software with Travis CI
Continuous Delivery - Automate & Build Better Software with Travis CIwajrcs
 
(Updated) SharePoint & jQuery Guide
(Updated) SharePoint & jQuery Guide(Updated) SharePoint & jQuery Guide
(Updated) SharePoint & jQuery GuideMark Rackley
 
Developing for the Atlassian Ecosystem
Developing for the Atlassian EcosystemDeveloping for the Atlassian Ecosystem
Developing for the Atlassian EcosystemAlex Henderson
 
Getting your mobile test automation process in place - using Cucumber and Cal...
Getting your mobile test automation process in place - using Cucumber and Cal...Getting your mobile test automation process in place - using Cucumber and Cal...
Getting your mobile test automation process in place - using Cucumber and Cal...Niels Frydenholm
 
Testing Ext JS and Sencha Touch
Testing Ext JS and Sencha TouchTesting Ext JS and Sencha Touch
Testing Ext JS and Sencha TouchMats Bryntse
 
Testing ASP.NET - Progressive.NET
Testing ASP.NET - Progressive.NETTesting ASP.NET - Progressive.NET
Testing ASP.NET - Progressive.NETBen Hall
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...Fabio Franzini
 
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012 Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012 Atlassian
 
An Introduction to Web Components
An Introduction to Web ComponentsAn Introduction to Web Components
An Introduction to Web ComponentsRed Pill Now
 
Accessible UIs with jQuery and Infusion
Accessible UIs with jQuery and InfusionAccessible UIs with jQuery and Infusion
Accessible UIs with jQuery and Infusioncolinbdclark
 
Android lessons you won't learn in school
Android lessons you won't learn in schoolAndroid lessons you won't learn in school
Android lessons you won't learn in schoolMichael Galpin
 
Progressive Web Apps. What, why and how
Progressive Web Apps. What, why and howProgressive Web Apps. What, why and how
Progressive Web Apps. What, why and howRiza Fahmi
 

Semelhante a OpenSocial in the Enterprise: Connecting Apps with Gadgets (20)

Go, Go, Gadgets: Building Gadgets for Atlassian Products - Atlassian Summit 2010
Go, Go, Gadgets: Building Gadgets for Atlassian Products - Atlassian Summit 2010Go, Go, Gadgets: Building Gadgets for Atlassian Products - Atlassian Summit 2010
Go, Go, Gadgets: Building Gadgets for Atlassian Products - Atlassian Summit 2010
 
XPages Mobile, #dd13
XPages Mobile, #dd13XPages Mobile, #dd13
XPages Mobile, #dd13
 
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
 
Building and Supporting Billion Dollar Ships with JIRA - Greg Warner
Building and Supporting Billion Dollar Ships with JIRA - Greg WarnerBuilding and Supporting Billion Dollar Ships with JIRA - Greg Warner
Building and Supporting Billion Dollar Ships with JIRA - Greg Warner
 
Django Overview
Django OverviewDjango Overview
Django Overview
 
John Resig Beijing 2010 (English Version)
John Resig Beijing 2010 (English Version)John Resig Beijing 2010 (English Version)
John Resig Beijing 2010 (English Version)
 
Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on Rails
 
Working Software Over Comprehensive Documentation
Working Software Over Comprehensive DocumentationWorking Software Over Comprehensive Documentation
Working Software Over Comprehensive Documentation
 
Continuous Delivery - Automate & Build Better Software with Travis CI
Continuous Delivery - Automate & Build Better Software with Travis CIContinuous Delivery - Automate & Build Better Software with Travis CI
Continuous Delivery - Automate & Build Better Software with Travis CI
 
(Updated) SharePoint & jQuery Guide
(Updated) SharePoint & jQuery Guide(Updated) SharePoint & jQuery Guide
(Updated) SharePoint & jQuery Guide
 
Developing for the Atlassian Ecosystem
Developing for the Atlassian EcosystemDeveloping for the Atlassian Ecosystem
Developing for the Atlassian Ecosystem
 
Getting your mobile test automation process in place - using Cucumber and Cal...
Getting your mobile test automation process in place - using Cucumber and Cal...Getting your mobile test automation process in place - using Cucumber and Cal...
Getting your mobile test automation process in place - using Cucumber and Cal...
 
Testing Ext JS and Sencha Touch
Testing Ext JS and Sencha TouchTesting Ext JS and Sencha Touch
Testing Ext JS and Sencha Touch
 
Testing ASP.NET - Progressive.NET
Testing ASP.NET - Progressive.NETTesting ASP.NET - Progressive.NET
Testing ASP.NET - Progressive.NET
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
 
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012 Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
Plugins on OnDemand with Remote Apps - Atlassian Summit 2012
 
An Introduction to Web Components
An Introduction to Web ComponentsAn Introduction to Web Components
An Introduction to Web Components
 
Accessible UIs with jQuery and Infusion
Accessible UIs with jQuery and InfusionAccessible UIs with jQuery and Infusion
Accessible UIs with jQuery and Infusion
 
Android lessons you won't learn in school
Android lessons you won't learn in schoolAndroid lessons you won't learn in school
Android lessons you won't learn in school
 
Progressive Web Apps. What, why and how
Progressive Web Apps. What, why and howProgressive Web Apps. What, why and how
Progressive Web Apps. What, why and how
 

Último

WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 

Último (20)

WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 

OpenSocial in the Enterprise: Connecting Apps with Gadgets

  • 1. OpenSocial in the Enterprise Tim Moore Atlassian Developer
  • 2. Atlassian 8 products • 15,000 customers • 113 countries Collaboration Tools Development Tools Confluence JIRA Largest enterprise wiki FishEye, Crucible, Bamboo, Clover, IDE Connectors
  • 4. Today Enterprise apps are silos
  • 5. Source Code Today Enterprise apps are silos
  • 6. Source Code Issues & Tasks Today Enterprise apps are silos
  • 7. Source Code Issues & Tasks Wiki Today Enterprise apps are silos
  • 10.
  • 11.
  • 14.
  • 15.
  • 16.
  • 17.
  • 23.
  • 26. Gadget Benefits • Easy! • Safe
  • 27. Gadget Benefits • Easy! • Safe • Write Once, Display Everywhere
  • 28. Gadgets are a Great Solution for Dashboards
  • 29. Open standard for enterprise OpenSocial application connection
  • 30. view complete project single activity stream comment & interact Open standard for enterprise OpenSocial application connection
  • 31. Not just about portals, Managers Do Email or internal applications.
  • 32. view activity & status create issues Not just about portals, Managers Do Email or internal applications.
  • 35. Anatomy of a Gadget
  • 36. Anatomy of a Gadget • XML Spec File • Metadata, HTML Content, and JavaScript
  • 37. Anatomy of a Gadget • XML Spec File • Metadata, HTML Content, and JavaScript • Core JavaScript API • Access Preferences, Make Requests
  • 38. 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
  • 42. <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>
  • 43. <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>
  • 44. <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>
  • 45. <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"/>
  • 46. <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"/>
  • 47. <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"/>
  • 48. <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>
  • 49. 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);
  • 50. 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);
  • 51. 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);
  • 52. Requesting Data from Web Services
  • 53. Requesting Data from Web Services • AJAX + DOM
  • 54. Requesting Data from Web Services • AJAX + DOM • Request Proxy
  • 55. Requesting Data from Web Services • AJAX + DOM • Request Proxy • OAuth
  • 56. gadgets io . .makeRequest ) (
  • 57. What Can You Call?
  • 58. What Can You Call? • Any URL
  • 59. What Can You Call? • Any URL • XML and JSON are the most useful
  • 60. What Can You Call? • Any URL • XML and JSON are the most useful • REST-style APIs are the most convenient
  • 61. 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); }
  • 62. 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(); }
  • 63. 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(); }
  • 66. Enterprise Readiness • SSO/Security
  • 67. Enterprise Readiness • SSO/Security • Assumes big container, little app servers
  • 68. Enterprise Readiness • SSO/Security • Assumes big container, little app servers • Low awareness of enterprise needs
  • 70. Running Behind the Firewall • Deployment issues
  • 71. Running Behind the Firewall • Deployment issues • Portable gadgets
  • 72. Running Behind the Firewall • Deployment issues • Portable gadgets • Google Analytics in gadgets
  • 74. Immaturity • No 1.0 spec yet
  • 75. Immaturity • No 1.0 spec yet • Shindig still incubating
  • 76. Immaturity • No 1.0 spec yet • Shindig still incubating • Compatibility: more theory than reality
  • 79. OpenSocial 1.0 • In progress now
  • 80. OpenSocial 1.0 • In progress now • Focus on clean up & clarification
  • 81. OpenSocial 1.0 • In progress now • Focus on clean up & clarification • Compliance tests
  • 82. OpenSocial 1.0 • In progress now • Focus on clean up & clarification • Compliance tests • Extension process
  • 83. OpenSocial 1.0 • In progress now • Focus on clean up & clarification • Compliance tests • Extension process • You can join in
  • 85. Caja
  • 86. Caja • Safer JavaScript & CSS
  • 87. Caja • Safer JavaScript & CSS • Helps prevent phishing, script injection, history sniffing, etc.
  • 88. Caja • Safer JavaScript & CSS • Helps prevent phishing, script injection, history sniffing, etc. • In production, but still tricky to use

Notas do Editor

  1. &amp;#x2022; Atlassian makes development and collaboration tools &amp;#x2022; HQ in Sydney, Australia, with offices in SF &amp; Amsterdam &amp;#x2022; At Atlassian since October 2007 &amp;#x2022; Developer in the San Francisco office &amp;#x2022; Started project to build a new Atlassian Dashboard component last July &amp;#x2022; I&amp;#x2019;ll talk about: &amp;#x2022; Why we made it &amp;#x2022; How we made it &amp;#x2022; Why we chose OpenSocial gadgets &amp;#x2022; How OpenSocial gadgets work &amp;#x2022; Some challenges we faced &amp;#x2022; Future directions for OpenSocial
  2. &amp;#x2022; Our flagship product, JIRA has had a customizable dashboard since 2003 &amp;#x2022; We wanted to reinvent JIRA&amp;#x2019;s dashboard for version 4.0
  3. &amp;#x2022; All Atlassian products have dashboards &amp;#x2022; None have the flexibility or extensibility of JIRA&amp;#x2019;s &amp;#x2022; We wanted a dashboard component independent from JIRA, could be added to all of the products &amp;#x2022; Beyond dashboard in every app, combine information from different apps in one place
  4. &amp;#x2022; All Atlassian products have dashboards &amp;#x2022; None have the flexibility or extensibility of JIRA&amp;#x2019;s &amp;#x2022; We wanted a dashboard component independent from JIRA, could be added to all of the products &amp;#x2022; Beyond dashboard in every app, combine information from different apps in one place
  5. &amp;#x2022; All Atlassian products have dashboards &amp;#x2022; None have the flexibility or extensibility of JIRA&amp;#x2019;s &amp;#x2022; We wanted a dashboard component independent from JIRA, could be added to all of the products &amp;#x2022; Beyond dashboard in every app, combine information from different apps in one place
  6. &amp;#x2022; All Atlassian products have dashboards &amp;#x2022; None have the flexibility or extensibility of JIRA&amp;#x2019;s &amp;#x2022; We wanted a dashboard component independent from JIRA, could be added to all of the products &amp;#x2022; Beyond dashboard in every app, combine information from different apps in one place
  7. &amp;#x2022; All Atlassian products have dashboards &amp;#x2022; None have the flexibility or extensibility of JIRA&amp;#x2019;s &amp;#x2022; We wanted a dashboard component independent from JIRA, could be added to all of the products &amp;#x2022; Beyond dashboard in every app, combine information from different apps in one place
  8. &amp;#x2022; Not just cross-app, but cross-instance &amp;#x2022; Could be gadgets from multiple installations of JIRA &amp;#x2022; Not just cross-Atlassian-app, either&amp;#x2026;
  9. &amp;#x2022; Intended to enable improved integration with other applications &amp;#x2022; Most companies use a variety of tools from a variety of vendors &amp;#x2022; Make it easier to show info from these sys w/ issues, doc, and source code
  10. &amp;#x2022; Prev. attempts to integrate resulted in compatibility issues &amp;#x2022; JIRA FishEye plugin had to be revised due to changes in JIRA or in FishEye
  11. &amp;#x2022; Broader view: emphasize &lt;click&gt; teams, &lt;click&gt; projects, &lt;click&gt; tasks over tools &amp;#x2022; See how a project is going, by looking at project dashboard &amp;#x2022; Not checking a dozen different dashboards for tools that the project team happens to use &amp;#x2022; We discovered that a technology that was intended for a very different purpose is actually ideally suited to solve these problems.
  12. &amp;#x2022; Broader view: emphasize &lt;click&gt; teams, &lt;click&gt; projects, &lt;click&gt; tasks over tools &amp;#x2022; See how a project is going, by looking at project dashboard &amp;#x2022; Not checking a dozen different dashboards for tools that the project team happens to use &amp;#x2022; We discovered that a technology that was intended for a very different purpose is actually ideally suited to solve these problems.
  13. &amp;#x2022; Broader view: emphasize &lt;click&gt; teams, &lt;click&gt; projects, &lt;click&gt; tasks over tools &amp;#x2022; See how a project is going, by looking at project dashboard &amp;#x2022; Not checking a dozen different dashboards for tools that the project team happens to use &amp;#x2022; We discovered that a technology that was intended for a very different purpose is actually ideally suited to solve these problems.
  14. &amp;#x2022; Broader view: emphasize &lt;click&gt; teams, &lt;click&gt; projects, &lt;click&gt; tasks over tools &amp;#x2022; See how a project is going, by looking at project dashboard &amp;#x2022; Not checking a dozen different dashboards for tools that the project team happens to use &amp;#x2022; We discovered that a technology that was intended for a very different purpose is actually ideally suited to solve these problems.
  15. &amp;#x2022; Broader view: emphasize &lt;click&gt; teams, &lt;click&gt; projects, &lt;click&gt; tasks over tools &amp;#x2022; See how a project is going, by looking at project dashboard &amp;#x2022; Not checking a dozen different dashboards for tools that the project team happens to use &amp;#x2022; We discovered that a technology that was intended for a very different purpose is actually ideally suited to solve these problems.
  16. &amp;#x2022; Broader view: emphasize &lt;click&gt; teams, &lt;click&gt; projects, &lt;click&gt; tasks over tools &amp;#x2022; See how a project is going, by looking at project dashboard &amp;#x2022; Not checking a dozen different dashboards for tools that the project team happens to use &amp;#x2022; We discovered that a technology that was intended for a very different purpose is actually ideally suited to solve these problems.
  17. &amp;#x2022; The solution we found was part of the OpenSocial standard &amp;#x2022; OpenSocial: Emerging technology intended to provide a standard way to share social data across the web &amp;#x2022; Created to be a more open alternative to Facebook applications. &amp;#x2022; Published as an open standard &amp;#x2022; Participation from community members representing &amp;#x2022; Social networks &amp;#x2022; &amp;#x201C;Portal&amp;#x201D; sites &amp;#x2022; Enterprise applications &amp;#x2022; Open source applications &amp;#x2022; Participation is open to anyone
  18. &amp;#x2022; Three main components&amp;#x2026;
  19. &amp;#x2022; Social data model &amp;#x2022; Standard way to describe people, relationships, activity, and other info commonly found in social websites
  20. &amp;#x2022; Web service APIs for accessing that social data &amp;#x2022; REST and RPC versions &amp;#x2022; Representations of that data as XML, JSON, and Atom.
  21. &amp;#x2022; OpenSocial Gadgets specification &amp;#x2014;&amp;#xA0;the part we&amp;#x2019;re using &amp;#x2022; Gadgets are web-based components, or mini-applications, based on HTML, CSS, &amp; JavaScript &amp;#x2022; Published from one site, displayed on others &amp;#x2014; called &amp;#x201C;containers&amp;#x201D; &amp;#x2022; Different contexts that it doesn&amp;#x2019;t need to be aware of &amp;#x2022; Dashboard like JIRA&amp;#x2019;s &amp;#x2022; User profile page &amp;#x2022; Blog sidebar &amp;#x2022; Isolated from one another and from the container using iframes &amp;#x2022; Can communicate using well-defined, safe channels &amp;#x2022; OpenSocial Gadgets: standardized derivative of iGoogle Gadgets
  22. &amp;#x2022; Extensible dashboard &amp;#x2022; Allows you to syndicate content from all over the internet and display it in one place
  23. &amp;#x2022; Based on simple, standard web technologies &amp;#x2022; No Java needed in many cases &amp;#x2022; Gadgets are protected from each other &amp;#x2022; Sandboxed in iframes &amp;#x2022; Avoids problems with markup, scripts, exceptions, slow performance &amp;#x2022; Gadgets can be displayed in different contexts &amp;#x2022; Can be displayed in other containers, such as iGoogle or Gmail
  24. &amp;#x2022; Based on simple, standard web technologies &amp;#x2022; No Java needed in many cases &amp;#x2022; Gadgets are protected from each other &amp;#x2022; Sandboxed in iframes &amp;#x2022; Avoids problems with markup, scripts, exceptions, slow performance &amp;#x2022; Gadgets can be displayed in different contexts &amp;#x2022; Can be displayed in other containers, such as iGoogle or Gmail
  25. &amp;#x2022; Based on simple, standard web technologies &amp;#x2022; No Java needed in many cases &amp;#x2022; Gadgets are protected from each other &amp;#x2022; Sandboxed in iframes &amp;#x2022; Avoids problems with markup, scripts, exceptions, slow performance &amp;#x2022; Gadgets can be displayed in different contexts &amp;#x2022; Can be displayed in other containers, such as iGoogle or Gmail
  26. &amp;#x2022; Designed &amp; built for sharing content between heterogenous apps &amp;#x2022; This is exactly what it&amp;#x2019;s used for in iGoogle, and exactly what it&amp;#x2019;s used for in OpenSocial
  27. &amp;#x2022; Open standard &amp;#x2022; Based on other emerging standards &amp;#x2022; Portable Contacts &amp;#x2022; OAuth &amp;#x2022; Basic web technology like HTML, CSS, &amp; JavaScript &amp;#x2022; Substantial industry support &amp;#x2022; Social networks &amp;#x2022; Increasingly, among business and enterprise-oriented vendors &amp;#x2022; These are the better-known companies, but the list keeps growing &amp;#x2022; Also support from the open source world
  28. &amp;#x2022; Apache Shindig is the open-source reference implementation of the OpenSocial standard. &amp;#x2022; Comes in PHP &amp; Java versions. &amp;#x2022; Part of the Apache project &amp;#x2022; Friendly license for commercial software &amp;#x2022; Contributed by Google from the same code that runs iGoogle &amp;#x2022; Already being used in production by most OpenSocial containers
  29. &amp;#x2022; OpenSocial Gadgets spec defines three main parts &amp;#x2022; &lt;click&gt; XML spec file: description of everything that makes up your gadget &amp;#x2022; Metadata, such as the title &amp; directory information &amp;#x2022; Content that fills the gadget iframe &amp;#x2022; Can be hosted on any web server &amp;#x2022; Gadget containers can be configured with a list of gadget spec URLs &amp;#x2022; Fetch the gadget spec XML to render or display in the directory &amp;#x2022; To avoid too much HTTP traffic, containers cache specs &amp;#x2022; Spec file needs to be more or less static &amp;#x2022; If it changes on each request, users won&amp;#x2019;t see those changes &amp;#x2022; To make the gadget do something interesting, use JavaScript &amp;#x2022; Inline or with a link to an external script file &amp;#x2022; &lt;click&gt; JavaScript makes use of the core gadgets JavaScript API &amp;#x2022; Automatically made available to all gadgets &amp;#x2022; Access configurable preferences &amp;#x2022; Make requests to web services &amp;#x2022; &lt;click&gt; Features: gadgets can use them by declaring them in spec &amp;#x2022; Additional capabilities for gadgets &amp;#x2022; Often new APIs that the gadget can call in its JavaScript code &amp;#x2022; Can provide UI features: tabs or banners &amp;#x2022; Can provide container integration features: resizing or renaming &amp;#x2022; Some are defined in the spec, but may not be provided by all containers, others are container specific &amp;#x2022; We use a custom feature to let us know which directory categories a gadget should be included in &amp;#x2022; Gadgets can decide to require the feature &amp;#x2022; Won&amp;#x2019;t work in containers that don&amp;#x2019;t provide it &amp;#x2022; Or make it optional &amp;#x2022; Gadget must test for feature before using it
  30. &amp;#x2022; OpenSocial Gadgets spec defines three main parts &amp;#x2022; &lt;click&gt; XML spec file: description of everything that makes up your gadget &amp;#x2022; Metadata, such as the title &amp; directory information &amp;#x2022; Content that fills the gadget iframe &amp;#x2022; Can be hosted on any web server &amp;#x2022; Gadget containers can be configured with a list of gadget spec URLs &amp;#x2022; Fetch the gadget spec XML to render or display in the directory &amp;#x2022; To avoid too much HTTP traffic, containers cache specs &amp;#x2022; Spec file needs to be more or less static &amp;#x2022; If it changes on each request, users won&amp;#x2019;t see those changes &amp;#x2022; To make the gadget do something interesting, use JavaScript &amp;#x2022; Inline or with a link to an external script file &amp;#x2022; &lt;click&gt; JavaScript makes use of the core gadgets JavaScript API &amp;#x2022; Automatically made available to all gadgets &amp;#x2022; Access configurable preferences &amp;#x2022; Make requests to web services &amp;#x2022; &lt;click&gt; Features: gadgets can use them by declaring them in spec &amp;#x2022; Additional capabilities for gadgets &amp;#x2022; Often new APIs that the gadget can call in its JavaScript code &amp;#x2022; Can provide UI features: tabs or banners &amp;#x2022; Can provide container integration features: resizing or renaming &amp;#x2022; Some are defined in the spec, but may not be provided by all containers, others are container specific &amp;#x2022; We use a custom feature to let us know which directory categories a gadget should be included in &amp;#x2022; Gadgets can decide to require the feature &amp;#x2022; Won&amp;#x2019;t work in containers that don&amp;#x2019;t provide it &amp;#x2022; Or make it optional &amp;#x2022; Gadget must test for feature before using it
  31. &amp;#x2022; OpenSocial Gadgets spec defines three main parts &amp;#x2022; &lt;click&gt; XML spec file: description of everything that makes up your gadget &amp;#x2022; Metadata, such as the title &amp; directory information &amp;#x2022; Content that fills the gadget iframe &amp;#x2022; Can be hosted on any web server &amp;#x2022; Gadget containers can be configured with a list of gadget spec URLs &amp;#x2022; Fetch the gadget spec XML to render or display in the directory &amp;#x2022; To avoid too much HTTP traffic, containers cache specs &amp;#x2022; Spec file needs to be more or less static &amp;#x2022; If it changes on each request, users won&amp;#x2019;t see those changes &amp;#x2022; To make the gadget do something interesting, use JavaScript &amp;#x2022; Inline or with a link to an external script file &amp;#x2022; &lt;click&gt; JavaScript makes use of the core gadgets JavaScript API &amp;#x2022; Automatically made available to all gadgets &amp;#x2022; Access configurable preferences &amp;#x2022; Make requests to web services &amp;#x2022; &lt;click&gt; Features: gadgets can use them by declaring them in spec &amp;#x2022; Additional capabilities for gadgets &amp;#x2022; Often new APIs that the gadget can call in its JavaScript code &amp;#x2022; Can provide UI features: tabs or banners &amp;#x2022; Can provide container integration features: resizing or renaming &amp;#x2022; Some are defined in the spec, but may not be provided by all containers, others are container specific &amp;#x2022; We use a custom feature to let us know which directory categories a gadget should be included in &amp;#x2022; Gadgets can decide to require the feature &amp;#x2022; Won&amp;#x2019;t work in containers that don&amp;#x2019;t provide it &amp;#x2022; Or make it optional &amp;#x2022; Gadget must test for feature before using it
  32. &amp;#x2022; XML spec file in more detail &amp;#x2022; Gadget that loads a issues from JIRA and displays them in a list &amp;#x2022; Simple, but gives a good overview of how to write a gadget &amp;#x2022; I&amp;#x2019;ll go through it one section at a time
  33. &amp;#x2022; XML Banner. &amp;#x2022; &lt;Module&gt; Element. This is the root element for a gadget. &amp;#x2022; &lt;ModulePrefs&gt; Element. This is where gadget metadata goes. &amp;#x2022; Attributes are for directory and title bar &lt;click&gt; &amp;#x2022; &lt;Require&gt; elements declare features that this gadget needs to use &amp;#x2022; minimessage: simple API for displaying a brief message in the gadget &amp;#x2022; We&amp;#x2019;ll use it to display a &amp;#x201C;loading&amp;#x201D; message &amp;#x2022; dynamic-height: allows the gadget to resize itself &amp;#x2022; We&amp;#x2019;ll use this after loading issues to adjust the height of the gadget to fit the list
  34. &amp;#x2022; XML Banner. &amp;#x2022; &lt;Module&gt; Element. This is the root element for a gadget. &amp;#x2022; &lt;ModulePrefs&gt; Element. This is where gadget metadata goes. &amp;#x2022; Attributes are for directory and title bar &lt;click&gt; &amp;#x2022; &lt;Require&gt; elements declare features that this gadget needs to use &amp;#x2022; minimessage: simple API for displaying a brief message in the gadget &amp;#x2022; We&amp;#x2019;ll use it to display a &amp;#x201C;loading&amp;#x201D; message &amp;#x2022; dynamic-height: allows the gadget to resize itself &amp;#x2022; We&amp;#x2019;ll use this after loading issues to adjust the height of the gadget to fit the list
  35. &amp;#x2022; XML Banner. &amp;#x2022; &lt;Module&gt; Element. This is the root element for a gadget. &amp;#x2022; &lt;ModulePrefs&gt; Element. This is where gadget metadata goes. &amp;#x2022; Attributes are for directory and title bar &lt;click&gt; &amp;#x2022; &lt;Require&gt; elements declare features that this gadget needs to use &amp;#x2022; minimessage: simple API for displaying a brief message in the gadget &amp;#x2022; We&amp;#x2019;ll use it to display a &amp;#x201C;loading&amp;#x201D; message &amp;#x2022; dynamic-height: allows the gadget to resize itself &amp;#x2022; We&amp;#x2019;ll use this after loading issues to adjust the height of the gadget to fit the list
  36. &amp;#x2022; XML Banner. &amp;#x2022; &lt;Module&gt; Element. This is the root element for a gadget. &amp;#x2022; &lt;ModulePrefs&gt; Element. This is where gadget metadata goes. &amp;#x2022; Attributes are for directory and title bar &lt;click&gt; &amp;#x2022; &lt;Require&gt; elements declare features that this gadget needs to use &amp;#x2022; minimessage: simple API for displaying a brief message in the gadget &amp;#x2022; We&amp;#x2019;ll use it to display a &amp;#x201C;loading&amp;#x201D; message &amp;#x2022; dynamic-height: allows the gadget to resize itself &amp;#x2022; We&amp;#x2019;ll use this after loading issues to adjust the height of the gadget to fit the list
  37. &amp;#x2022; XML Banner. &amp;#x2022; &lt;Module&gt; Element. This is the root element for a gadget. &amp;#x2022; &lt;ModulePrefs&gt; Element. This is where gadget metadata goes. &amp;#x2022; Attributes are for directory and title bar &lt;click&gt; &amp;#x2022; &lt;Require&gt; elements declare features that this gadget needs to use &amp;#x2022; minimessage: simple API for displaying a brief message in the gadget &amp;#x2022; We&amp;#x2019;ll use it to display a &amp;#x201C;loading&amp;#x201D; message &amp;#x2022; dynamic-height: allows the gadget to resize itself &amp;#x2022; We&amp;#x2019;ll use this after loading issues to adjust the height of the gadget to fit the list
  38. &amp;#x2022; Simple configuration parameters &amp;#x2022; Allow the user to customize the gadget&amp;#x2019;s appearance or behavior &amp;#x2022; Framework automatically generates a configuration UI &lt;click&gt; &amp;#x2022; Access through the gadget drop-down menu by choosing &amp;#x201C;Edit&amp;#x201D;
  39. &amp;#x2022; Simple configuration parameters &amp;#x2022; Allow the user to customize the gadget&amp;#x2019;s appearance or behavior &amp;#x2022; Framework automatically generates a configuration UI &lt;click&gt; &amp;#x2022; Access through the gadget drop-down menu by choosing &amp;#x201C;Edit&amp;#x201D;
  40. &amp;#x2022; Describes the content of the gadget iframe. &amp;#x2022; Wrap everything with a CDATA section &amp;#x2022; Tells XML processors to automatically escape everything within that block &amp;#x2022; Otherwise, the parser would try to parse the embedded HTML as XML &amp;#x2022; Link to an external stylesheet &amp;#x2022; Empty DIV &amp;#x2014; this is where we&amp;#x2019;re going to insert the issues that are loaded from JIRA &amp;#x2022; External JavaScript file &amp;#x2022; Script file is where the interesting stuff happens
  41. &amp;#x2022; Uses minimessage to create a loading message &lt;click&gt; &amp;#x2022; Uses core preference API to fetch the current values of each pref &amp;#x2022; Uses a core gadget API to register an on-load handler &amp;#x2022; Passing the name of a function defined later on in the script
  42. &amp;#x2022; Uses minimessage to create a loading message &lt;click&gt; &amp;#x2022; Uses core preference API to fetch the current values of each pref &amp;#x2022; Uses a core gadget API to register an on-load handler &amp;#x2022; Passing the name of a function defined later on in the script
  43. &amp;#x2022; Uses minimessage to create a loading message &lt;click&gt; &amp;#x2022; Uses core preference API to fetch the current values of each pref &amp;#x2022; Uses a core gadget API to register an on-load handler &amp;#x2022; Passing the name of a function defined later on in the script
  44. &amp;#x2022; &lt;click&gt; Gadgets make AJAX requests to retrieve data &amp;#x2022; JavaScript DOM manipulation to display it &amp;#x2022; &lt;click&gt; Cross-domain restrictions require the use of a proxy &amp;#x2022; OpenSocial containers include a request proxy &amp;#x2022; Allows gadgets to make AJAX requests to web services on other hosts &amp;#x2022; Proxy requires server-to-server authorization. &amp;#x2022; Can&amp;#x2019;t use cookies, due to cross-domain restrictions &amp;#x2022; OAuth is the authorization solution built into OpenSocial &amp;#x2022; Open standard independent of OpenSocial &amp;#x2022; Used by Twitter, Photobucket, TripIt, many more &amp;#x2022; Allows secure communication between gadget request proxy and web services that gadgets call &amp;#x2022; Doesn&amp;#x2019;t require container to have username and password &amp;#x2022; Instead, user is directed to the application that the gadget is trying to contact, and asked to authorize the gadget &amp;#x2022; Like using a Facebook app or Facebook Connect &amp;#x2022; If this all sounds kind of complicated, it is &amp;#x2022; The gadgets core API provides a function that makes it easy
  45. &amp;#x2022; &lt;click&gt; Gadgets make AJAX requests to retrieve data &amp;#x2022; JavaScript DOM manipulation to display it &amp;#x2022; &lt;click&gt; Cross-domain restrictions require the use of a proxy &amp;#x2022; OpenSocial containers include a request proxy &amp;#x2022; Allows gadgets to make AJAX requests to web services on other hosts &amp;#x2022; Proxy requires server-to-server authorization. &amp;#x2022; Can&amp;#x2019;t use cookies, due to cross-domain restrictions &amp;#x2022; OAuth is the authorization solution built into OpenSocial &amp;#x2022; Open standard independent of OpenSocial &amp;#x2022; Used by Twitter, Photobucket, TripIt, many more &amp;#x2022; Allows secure communication between gadget request proxy and web services that gadgets call &amp;#x2022; Doesn&amp;#x2019;t require container to have username and password &amp;#x2022; Instead, user is directed to the application that the gadget is trying to contact, and asked to authorize the gadget &amp;#x2022; Like using a Facebook app or Facebook Connect &amp;#x2022; If this all sounds kind of complicated, it is &amp;#x2022; The gadgets core API provides a function that makes it easy
  46. &amp;#x2022; &lt;click&gt; Gadgets make AJAX requests to retrieve data &amp;#x2022; JavaScript DOM manipulation to display it &amp;#x2022; &lt;click&gt; Cross-domain restrictions require the use of a proxy &amp;#x2022; OpenSocial containers include a request proxy &amp;#x2022; Allows gadgets to make AJAX requests to web services on other hosts &amp;#x2022; Proxy requires server-to-server authorization. &amp;#x2022; Can&amp;#x2019;t use cookies, due to cross-domain restrictions &amp;#x2022; OAuth is the authorization solution built into OpenSocial &amp;#x2022; Open standard independent of OpenSocial &amp;#x2022; Used by Twitter, Photobucket, TripIt, many more &amp;#x2022; Allows secure communication between gadget request proxy and web services that gadgets call &amp;#x2022; Doesn&amp;#x2019;t require container to have username and password &amp;#x2022; Instead, user is directed to the application that the gadget is trying to contact, and asked to authorize the gadget &amp;#x2022; Like using a Facebook app or Facebook Connect &amp;#x2022; If this all sounds kind of complicated, it is &amp;#x2022; The gadgets core API provides a function that makes it easy
  47. &amp;#x2022; The most important API in the entire gadgets specification &amp;#x2022; Almost every gadget will use it &amp;#x2022; Allows AJAX requests through the gadget request proxy &amp;#x2022; Provides option to use OAuth &amp;#x2022; Helpful options to automatically parse XML and JSON data &amp;#x2022; Calls a JavaScript function within your gadget to process results
  48. &amp;#x2022; Starts with a hard-coded URL &amp;#x2022; Search on JAC for most recent 20 unresolved issues, returns XML &amp;#x2022; Builds up parameter object to describe attributes of the request &amp;#x2022; In this case, only the type of content we&amp;#x2019;re retrieving &amp;#x2022; DOM says that we expect an XML or HTML response &amp;#x2022; Automatically parsed into a DOM tree for us &amp;#x2022; This data is mostly public, so ignore authentication for now &amp;#x2022; Use makeRequest to call that URL &amp;#x2022; Pass the &amp;#x201C;handleResponse&amp;#x201D; function to it &amp;#x2022; When the request returns, invokes that function with the results
  49. &amp;#x2022; Object passed in contains parsed XML DOM in its &amp;#x201C;data&amp;#x201D; field &amp;#x2022; Pass it to the getTitle and getItems functions to extract out a list of issues &amp;#x2022; Pass the resulting objects to renderJiraIssues &amp;#x2022; I won&amp;#x2019;t get into the details of those methods, not gadget-specific &amp;#x2022; Look at the source code online if you&amp;#x2019;re curious &amp;#x2022; First dismisses the loading message we displayed earlier &amp;#x2022; Second adjusts height to exactly fit the list of issues we&amp;#x2019;ve rendered &amp;#x2022; &lt;click&gt; This is what it looks like when it&amp;#x2019;s done
  50. &amp;#x2022; Object passed in contains parsed XML DOM in its &amp;#x201C;data&amp;#x201D; field &amp;#x2022; Pass it to the getTitle and getItems functions to extract out a list of issues &amp;#x2022; Pass the resulting objects to renderJiraIssues &amp;#x2022; I won&amp;#x2019;t get into the details of those methods, not gadget-specific &amp;#x2022; Look at the source code online if you&amp;#x2019;re curious &amp;#x2022; First dismisses the loading message we displayed earlier &amp;#x2022; Second adjusts height to exactly fit the list of issues we&amp;#x2019;ve rendered &amp;#x2022; &lt;click&gt; This is what it looks like when it&amp;#x2019;s done
  51. &amp;#x2022; Doesn&amp;#x2019;t address single-sign on. OAuth-based security model is unconventional &amp;#x2022; Built for situations where apps are written by small developers, targeting big social networks &amp;#x2022; Works for peer-to-peer type situations, but not optimal &amp;#x2022; In general, spec authors &amp; Shindig implementors have low awareness of enterprise needs &amp;#x2022; This is getting better&amp;#x2026;
  52. &amp;#x2022; Doesn&amp;#x2019;t address single-sign on. OAuth-based security model is unconventional &amp;#x2022; Built for situations where apps are written by small developers, targeting big social networks &amp;#x2022; Works for peer-to-peer type situations, but not optimal &amp;#x2022; In general, spec authors &amp; Shindig implementors have low awareness of enterprise needs &amp;#x2022; This is getting better&amp;#x2026;
  53. &amp;#x2022; Doesn&amp;#x2019;t address single-sign on. OAuth-based security model is unconventional &amp;#x2022; Built for situations where apps are written by small developers, targeting big social networks &amp;#x2022; Works for peer-to-peer type situations, but not optimal &amp;#x2022; In general, spec authors &amp; Shindig implementors have low awareness of enterprise needs &amp;#x2022; This is getting better&amp;#x2026;
  54. &amp;#x2022; A typical OpenSocial/Shindig deployment requires Shindig to run on a different domain than the containing app &amp;#x2022; Not realistic for install-it-yourself software &amp;#x2022; We had to compromise security model, rely on admins &amp;#x2022; Hard to write gadgets that work with multiple installations of a server &amp;#x2022;&amp;#xA0;We implemented gadget pre-processing with a simple macro language to customize gadgets for each server URL &amp;#x2022; Many gadgets rely on resources on the web, particularly ganalytics &amp;#x2022; Unsuitable for secure or disconnected environments
  55. &amp;#x2022; A typical OpenSocial/Shindig deployment requires Shindig to run on a different domain than the containing app &amp;#x2022; Not realistic for install-it-yourself software &amp;#x2022; We had to compromise security model, rely on admins &amp;#x2022; Hard to write gadgets that work with multiple installations of a server &amp;#x2022;&amp;#xA0;We implemented gadget pre-processing with a simple macro language to customize gadgets for each server URL &amp;#x2022; Many gadgets rely on resources on the web, particularly ganalytics &amp;#x2022; Unsuitable for secure or disconnected environments
  56. &amp;#x2022; A typical OpenSocial/Shindig deployment requires Shindig to run on a different domain than the containing app &amp;#x2022; Not realistic for install-it-yourself software &amp;#x2022; We had to compromise security model, rely on admins &amp;#x2022; Hard to write gadgets that work with multiple installations of a server &amp;#x2022;&amp;#xA0;We implemented gadget pre-processing with a simple macro language to customize gadgets for each server URL &amp;#x2022; Many gadgets rely on resources on the web, particularly ganalytics &amp;#x2022; Unsuitable for secure or disconnected environments
  57. &amp;#x2022; OpenSocial 1.0 still in development, spec has been incomplete and sometimes unstable &amp;#x2022; Shindig in Apache incubator &amp;#x2022; Does not release often, has been very unstable &amp;#x2022; Cross-container compatibility issues are common
  58. &amp;#x2022; OpenSocial 1.0 still in development, spec has been incomplete and sometimes unstable &amp;#x2022; Shindig in Apache incubator &amp;#x2022; Does not release often, has been very unstable &amp;#x2022; Cross-container compatibility issues are common
  59. &amp;#x2022; OpenSocial 1.0 still in development, spec has been incomplete and sometimes unstable &amp;#x2022; Shindig in Apache incubator &amp;#x2022; Does not release often, has been very unstable &amp;#x2022; Cross-container compatibility issues are common
  60. &amp;#x2022; OpenSocial 1.0 spec effort is currently underway &amp;#x2022; No new features in 1.0 &amp;#x2022; Defines a new extension process to allow innovation outside of the core &amp;#x2022; Anyone can join the spec list and take part
  61. &amp;#x2022; OpenSocial 1.0 spec effort is currently underway &amp;#x2022; No new features in 1.0 &amp;#x2022; Defines a new extension process to allow innovation outside of the core &amp;#x2022; Anyone can join the spec list and take part
  62. &amp;#x2022; OpenSocial 1.0 spec effort is currently underway &amp;#x2022; No new features in 1.0 &amp;#x2022; Defines a new extension process to allow innovation outside of the core &amp;#x2022; Anyone can join the spec list and take part
  63. &amp;#x2022; OpenSocial 1.0 spec effort is currently underway &amp;#x2022; No new features in 1.0 &amp;#x2022; Defines a new extension process to allow innovation outside of the core &amp;#x2022; Anyone can join the spec list and take part
  64. &amp;#x2022; OpenSocial 1.0 spec effort is currently underway &amp;#x2022; No new features in 1.0 &amp;#x2022; Defines a new extension process to allow innovation outside of the core &amp;#x2022; Anyone can join the spec list and take part
  65. &amp;#x2022; Experimental feature to allow gadgets to exchange messages with each other and with the container &amp;#x2022; Will allow for context-aware gadgets
  66. &amp;#x2022; Allows iframe-free gadgets &amp;#x2022; Used by YAP, experimentally available on iGoogle &amp;#x2022; We&amp;#x2019;re very interested, but not ready for prime time
  67. &amp;#x2022; Allows iframe-free gadgets &amp;#x2022; Used by YAP, experimentally available on iGoogle &amp;#x2022; We&amp;#x2019;re very interested, but not ready for prime time
  68. &amp;#x2022; Allows iframe-free gadgets &amp;#x2022; Used by YAP, experimentally available on iGoogle &amp;#x2022; We&amp;#x2019;re very interested, but not ready for prime time