SlideShare a Scribd company logo
1 of 108
Download to read offline
Go Go Gadgets!
                           Building an OpenSocial Application



                           Mark Halvorson
                           Community Member, OpenSocial Foundation Board
                           Chief Imagineer, Atlassian Software

                           Email: mark.halvorson@atlassian.com
                           Twitter: @halv0112




                                                                           1
Monday, December 6, 2010
What is an ‘Imagineer’?
Monday, December 6, 2010
!"                   #"


                           Take things that exist...
Monday, December 6, 2010
...and make something different.




Monday, December 6, 2010
Monday, December 6, 2010
Agenda
          •What it is a Gadget
          •Why Atlassian chose OpenSocial
            • Application Portability
          •Why you should too!
            • Application Sharing




                                            6
Monday, December 6, 2010
What is OpenSocial?




                                7
Monday, December 6, 2010
Social Data Model




                              8
Monday, December 6, 2010
Web Service APIs




                             9
Monday, December 6, 2010
Gadgets




                           10
Monday, December 6, 2010
Our Problem




                           11
Monday, December 6, 2010
Before
          •Enterprise Apps are Silos
                                       FishEye
Source
Code




                                          JIRA
Issues
&
Tasks




                                       Confluence
Wiki




                                                                12
Monday, December 6, 2010
Emphasize Teams, Projects & Tasks over Tools




                                                         13
Monday, December 6, 2010
Emphasize Teams, Projects & Tasks over Tools




                                                         13
Monday, December 6, 2010
Emphasize Teams, Projects & Tasks over Tools




                                                         13
Monday, December 6, 2010
Emphasize Teams, Projects & Tasks over Tools




                                                         13
Monday, December 6, 2010
Too Many Dashboards




                                14
Monday, December 6, 2010
Too Many Dashboards




                                14
Monday, December 6, 2010
Cross-Product Sharing




                                  15
Monday, December 6, 2010
Integration with Non-Atlassian apps




                                                16
Monday, December 6, 2010
Solution: OpenSocial Gadgets




                                         17
Monday, December 6, 2010
Gadgets
            are a Great Solution for Dashboard




                                                 18
Monday, December 6, 2010
After
            Open standard for
            enterprise application
            connection


                           view
complete

                              project
                           single
acCvity


                                             19
Monday, December 6, 2010
Managers Do Email
            Not just about portals,
            or internal applications.



                           view
acCvity
&

                               status
                            create
issues

                                             20
Monday, December 6, 2010
Open Standards, Industry Support




                                             21
Monday, December 6, 2010
Why Write Gadgets?
          •They’re easy!

          •They use stable, widely accessible and understood
           technologies

          •Write once, display everywhere



                                                               22
Monday, December 6, 2010
The Obligatory Hello World Example




                                               23
Monday, December 6, 2010
The Obligatory Hello World Example




                                               23
Monday, December 6, 2010
Anatomy of a Gadget




                                24
Monday, December 6, 2010
Anatomy of a Gadget
          •XML Spec File
            • Metadata, HTML Content, and JavaScript




                                                       24
Monday, December 6, 2010
Anatomy of a Gadget
          •XML Spec File
            • Metadata, HTML Content, and JavaScript
          •Core JavaScript API
            • Access Preferences, Make Requests




                                                       24
Monday, December 6, 2010
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




                                                         24
Monday, December 6, 2010
XML Spec File




                           25
Monday, December 6, 2010
<ModulePrefs>




                           26
Monday, December 6, 2010
<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>



                                                                                                         26
Monday, December 6, 2010
<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>



                                                                                                         26
Monday, December 6, 2010
<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>



                                                                                                         26
Monday, December 6, 2010
<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"/>
                                                                 27
Monday, December 6, 2010
<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"/>
                                                                 27
Monday, December 6, 2010
<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"/>
                                                                 27
Monday, December 6, 2010
<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>




                                                                                                      28
Monday, December 6, 2010
<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>




                                                                                                      28
Monday, December 6, 2010
Views - DEFAULT view




                                 29
Monday, December 6, 2010
Views - DEFAULT view




                                 29
Monday, December 6, 2010
Views - DEFAULT view




                                 30
Monday, December 6, 2010
Views - DEFAULT view




                                 30
Monday, December 6, 2010
Views - CANVAS view




                                31
Monday, December 6, 2010
Views - CANVAS view




                                31
Monday, December 6, 2010
Views - DEFAULT view (in Gmail)




                                            32
Monday, December 6, 2010
Views - DEFAULT view (in Gmail)




                                            32
Monday, December 6, 2010
Views - CANVAS view (in Gmail)




                                           33
Monday, December 6, 2010
Views - CANVAS view (in Gmail)




                                           33
Monday, December 6, 2010
Views - Custom view




                                34
Monday, December 6, 2010
Wallboards
            Gadgets go beyond
            the
            JIRA Dashboard
            onto your wall!




                                35
Monday, December 6, 2010
Wallboards
            Gadgets go beyond
            the
            JIRA Dashboard
            onto your wall!




                                35
Monday, December 6, 2010
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);



                                                                               36
Monday, December 6, 2010
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);



                                                                               36
Monday, December 6, 2010
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);



                                                                               36
Monday, December 6, 2010
Requesting Data from Web Services
          •AJAX + DOM

          •OAuth

          •Request Proxy

          •

                                              37
Monday, December 6, 2010
38
Monday, December 6, 2010
39
Monday, December 6, 2010
40
Monday, December 6, 2010
41
Monday, December 6, 2010
gadgets io
                . .makeRequest )
                              (




                                   42
Monday, December 6, 2010
What Can You Call?
          •Any URL

          •XML and JSON are the most useful
          •




                                              43
Monday, December 6, 2010
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);
                    }
                                                                                  44
Monday, December 6, 2010
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();
                    }




                                                              45
Monday, December 6, 2010
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();
                    }




                                                              45
Monday, December 6, 2010
An Example      Text
                              Real World Example...
                                   Text
Monday, December 6, 2010
An Example      Text
                              Real World Example...
                                   Text
Monday, December 6, 2010
An Example      Text
                              Real World Example...
                                   Text
Monday, December 6, 2010
An Example      Text
                              Real World Example...
                                   Text
Monday, December 6, 2010
An Example      Text
                              Real World Example...
                                   Text
Monday, December 6, 2010
An Example      Text
                              Real World Example...
                                   Text
Monday, December 6, 2010
The Goal




                     The Goal
                                47
Monday, December 6, 2010
The Result
                                  48
Monday, December 6, 2010
The Result
                                  48
Monday, December 6, 2010
Preferences
                                   49
Monday, December 6, 2010
Statistics




                           50
Monday, December 6, 2010
Let’s Take a Step Back.




                                         51
Monday, December 6, 2010
Q: What is the purpose of an application?




                                                      52
Monday, December 6, 2010
Q: What is the purpose of an application?
          •A: DO Something. Complete some process.




                                                      52
Monday, December 6, 2010
Anatomy of an Application


                           Context   Content   Ac(on




                                                       53
Monday, December 6, 2010
An Example
                               Gmail




                           Communica(on




                             Contacts
                               Mail



                            Read
Write
                              Reply




                                          54
Monday, December 6, 2010
Q: What is the purpose of a gadget?




                                                55
Monday, December 6, 2010
Q: What is the purpose of a gadget?
          •A: DO Something. Complete some process.




                                                     55
Monday, December 6, 2010
Gadget = Reusable
                           Mini‐ApplicaCon           Atomic
                                                   Unit
of
Work




                             Context               Context


                                             •or
                            Content                Content




                             Ac(on                  Ac(on




                                                                  56
Monday, December 6, 2010
Example - “Mini-Application”

                           JIRA
Comment
Gadget




                               JIRA‐1234



                                Users

                              Comment


                             Add
Comment




                                                 57
Monday, December 6, 2010
Example - Unit of Work

                           JIRA
Comment
Gadget




                                 Context



                                Users

                              Comment


                             Add
Comment




                                                 58
Monday, December 6, 2010
Example - Unit of Work

                           JIRA
Comment
Gadget




                                 Context



                                Users

                              Comment


                             Add
Comment




                                                 58
Monday, December 6, 2010
Lesson Learned over time:
          •Gadgets as “Units of Work” are...


            • Easier to build

            • Easier to use

            • Easier to reuse




                                               59
Monday, December 6, 2010
Composite Application
                                      Gadget    Gadget    Gadget



                                      Add’l

                           Context
                                     Context   Context   Context



                           Content   Content   Content   Content



                            Ac(on    Ac(on     Ac(on     Ac(on




                                                                   60
Monday, December 6, 2010
Example - Gmail
                             Google
CommunicaCon
ApplicaCon

                                                    Google
Talk
                           Communica(on

                                                    Presence

                              Gmail


                            Contacts                   IM
                              Mail


                           Read
Write              Read
Write
                             Reply                   Reply




                                                                  61
Monday, December 6, 2010
<demo>




                           62
Monday, December 6, 2010
Get Satisfaction




                             63
Monday, December 6, 2010
Gadgets?




                           64




Monday, December 6, 2010
Gadgets?

                           Gadget?   Gadget?




                                               64




Monday, December 6, 2010
65
Monday, December 6, 2010
Gadget!
   Gadget



                           Gadget




                                    65
Monday, December 6, 2010
Get Satisfaction
          powered by JIRA




                             66
Monday, December 6, 2010
Gadgets!




                           67
Monday, December 6, 2010
Gadgets!




                           67
Monday, December 6, 2010
Gadgets!




                           Gadget!
                           Gadget!
                                     67
Monday, December 6, 2010
68
Monday, December 6, 2010
68
Monday, December 6, 2010
</demo>




                           69
Monday, December 6, 2010
Summary - Why write gadgets?
          •Easy!
            • Simple web based technologies mean anyone can write a gadget.
          •Reusable!
            • Use in any OpenSocial Container. iGoogle, Gmail, JIVE, more every day.
          •Fun!
            • Thinking about applications as atomic units of work add a new dimension to
              application design.




                                                                                           70
Monday, December 6, 2010
Questions?
               Resources
                • http://atlassian.com/opensocial

                • http://www.opensocial.org

                • http://atlassian.com/classroom




                                                    71
Monday, December 6, 2010

More Related Content

Similar to Go! Go! Gadgets. Writing an OpenSocial Application

AtlasCamp 2010 - Marketing A Plugin
AtlasCamp 2010 - Marketing A PluginAtlasCamp 2010 - Marketing A Plugin
AtlasCamp 2010 - Marketing A Pluginalexlod
 
Fcc open-developer-day
Fcc open-developer-dayFcc open-developer-day
Fcc open-developer-dayTed Drake
 
Experiences Evolving a New Analytical Platform: What Works and What's Missing
Experiences Evolving a New Analytical Platform: What Works and What's MissingExperiences Evolving a New Analytical Platform: What Works and What's Missing
Experiences Evolving a New Analytical Platform: What Works and What's MissingCloudera, Inc.
 
Must-have Plugins for Confluence & JIRA - Atlassian Summit 2010
Must-have Plugins for Confluence & JIRA - Atlassian Summit 2010Must-have Plugins for Confluence & JIRA - Atlassian Summit 2010
Must-have Plugins for Confluence & JIRA - Atlassian Summit 2010Atlassian
 
5 Thing You're Not Doing, 4 Things You Should Stop Doing & 3 Things You Shoul...
5 Thing You're Not Doing, 4 Things You Should Stop Doing & 3 Things You Shoul...5 Thing You're Not Doing, 4 Things You Should Stop Doing & 3 Things You Shoul...
5 Thing You're Not Doing, 4 Things You Should Stop Doing & 3 Things You Shoul...Atlassian
 
Joshfire Factory: Building Apps for Billion of Devices
Joshfire Factory: Building Apps for Billion of DevicesJoshfire Factory: Building Apps for Billion of Devices
Joshfire Factory: Building Apps for Billion of DevicesFrancois Daoust
 
Atlassian User Group - September 2013
Atlassian User Group - September 2013Atlassian User Group - September 2013
Atlassian User Group - September 2013Sven Peters
 
Drupal - Changing the Web by Connecting Open Minds - Josef Dabernig
Drupal - Changing the Web by Connecting Open Minds - Josef DabernigDrupal - Changing the Web by Connecting Open Minds - Josef Dabernig
Drupal - Changing the Web by Connecting Open Minds - Josef DabernigDrupalCampDN
 
Future of Data Intensive Applicaitons
Future of Data Intensive ApplicaitonsFuture of Data Intensive Applicaitons
Future of Data Intensive ApplicaitonsMilind Bhandarkar
 
DSpace RoadMap 2011
DSpace RoadMap 2011DSpace RoadMap 2011
DSpace RoadMap 2011Tim Donohue
 
GateIn - Presented at Atlanta JUG on 1/19/2010
GateIn - Presented at Atlanta JUG on 1/19/2010GateIn - Presented at Atlanta JUG on 1/19/2010
GateIn - Presented at Atlanta JUG on 1/19/2010Wesley Hales
 
Google Developer Day 2010 Japan: Part 1: Google App Engine for Business の概要 P...
Google Developer Day 2010 Japan: Part 1: Google App Engine for Business の概要 P...Google Developer Day 2010 Japan: Part 1: Google App Engine for Business の概要 P...
Google Developer Day 2010 Japan: Part 1: Google App Engine for Business の概要 P...Google Developer Relations Team
 
Html5 new sword for interactive app
Html5 new sword for interactive appHtml5 new sword for interactive app
Html5 new sword for interactive appYohan Totting
 
Big Data @ Bodensee Barcamp 2010
Big Data @ Bodensee Barcamp 2010Big Data @ Bodensee Barcamp 2010
Big Data @ Bodensee Barcamp 2010c1sc0
 
JClouds at San Francisco Java User Group
JClouds at San Francisco Java User GroupJClouds at San Francisco Java User Group
JClouds at San Francisco Java User GroupMarakana Inc.
 
OOP/MM 2017: "Seven (More) Deadly Sins of Microservices"
OOP/MM 2017: "Seven (More) Deadly Sins of Microservices"OOP/MM 2017: "Seven (More) Deadly Sins of Microservices"
OOP/MM 2017: "Seven (More) Deadly Sins of Microservices"Daniel Bryant
 
Exploring UX Techniques and Practices 4 Product Development
Exploring UX Techniques and Practices 4 Product DevelopmentExploring UX Techniques and Practices 4 Product Development
Exploring UX Techniques and Practices 4 Product DevelopmentAriadna Font Llitjos
 
Implementing MongoDB at Shutterfly (Kenny Gorman)
Implementing MongoDB at Shutterfly (Kenny Gorman)Implementing MongoDB at Shutterfly (Kenny Gorman)
Implementing MongoDB at Shutterfly (Kenny Gorman)MongoSF
 

Similar to Go! Go! Gadgets. Writing an OpenSocial Application (20)

AtlasCamp 2010 - Marketing A Plugin
AtlasCamp 2010 - Marketing A PluginAtlasCamp 2010 - Marketing A Plugin
AtlasCamp 2010 - Marketing A Plugin
 
Fcc open-developer-day
Fcc open-developer-dayFcc open-developer-day
Fcc open-developer-day
 
Experiences Evolving a New Analytical Platform: What Works and What's Missing
Experiences Evolving a New Analytical Platform: What Works and What's MissingExperiences Evolving a New Analytical Platform: What Works and What's Missing
Experiences Evolving a New Analytical Platform: What Works and What's Missing
 
Must-have Plugins for Confluence & JIRA - Atlassian Summit 2010
Must-have Plugins for Confluence & JIRA - Atlassian Summit 2010Must-have Plugins for Confluence & JIRA - Atlassian Summit 2010
Must-have Plugins for Confluence & JIRA - Atlassian Summit 2010
 
Developing XWiki
Developing XWikiDeveloping XWiki
Developing XWiki
 
5 Thing You're Not Doing, 4 Things You Should Stop Doing & 3 Things You Shoul...
5 Thing You're Not Doing, 4 Things You Should Stop Doing & 3 Things You Shoul...5 Thing You're Not Doing, 4 Things You Should Stop Doing & 3 Things You Shoul...
5 Thing You're Not Doing, 4 Things You Should Stop Doing & 3 Things You Shoul...
 
Joshfire Factory: Building Apps for Billion of Devices
Joshfire Factory: Building Apps for Billion of DevicesJoshfire Factory: Building Apps for Billion of Devices
Joshfire Factory: Building Apps for Billion of Devices
 
Atlassian User Group - September 2013
Atlassian User Group - September 2013Atlassian User Group - September 2013
Atlassian User Group - September 2013
 
Drupal - Changing the Web by Connecting Open Minds - Josef Dabernig
Drupal - Changing the Web by Connecting Open Minds - Josef DabernigDrupal - Changing the Web by Connecting Open Minds - Josef Dabernig
Drupal - Changing the Web by Connecting Open Minds - Josef Dabernig
 
Future of Data Intensive Applicaitons
Future of Data Intensive ApplicaitonsFuture of Data Intensive Applicaitons
Future of Data Intensive Applicaitons
 
DSpace RoadMap 2011
DSpace RoadMap 2011DSpace RoadMap 2011
DSpace RoadMap 2011
 
GateIn - Presented at Atlanta JUG on 1/19/2010
GateIn - Presented at Atlanta JUG on 1/19/2010GateIn - Presented at Atlanta JUG on 1/19/2010
GateIn - Presented at Atlanta JUG on 1/19/2010
 
Google Developer Day 2010 Japan: Part 1: Google App Engine for Business の概要 P...
Google Developer Day 2010 Japan: Part 1: Google App Engine for Business の概要 P...Google Developer Day 2010 Japan: Part 1: Google App Engine for Business の概要 P...
Google Developer Day 2010 Japan: Part 1: Google App Engine for Business の概要 P...
 
Html5 new sword for interactive app
Html5 new sword for interactive appHtml5 new sword for interactive app
Html5 new sword for interactive app
 
Big Data @ Bodensee Barcamp 2010
Big Data @ Bodensee Barcamp 2010Big Data @ Bodensee Barcamp 2010
Big Data @ Bodensee Barcamp 2010
 
On Storing Big Data
On Storing Big DataOn Storing Big Data
On Storing Big Data
 
JClouds at San Francisco Java User Group
JClouds at San Francisco Java User GroupJClouds at San Francisco Java User Group
JClouds at San Francisco Java User Group
 
OOP/MM 2017: "Seven (More) Deadly Sins of Microservices"
OOP/MM 2017: "Seven (More) Deadly Sins of Microservices"OOP/MM 2017: "Seven (More) Deadly Sins of Microservices"
OOP/MM 2017: "Seven (More) Deadly Sins of Microservices"
 
Exploring UX Techniques and Practices 4 Product Development
Exploring UX Techniques and Practices 4 Product DevelopmentExploring UX Techniques and Practices 4 Product Development
Exploring UX Techniques and Practices 4 Product Development
 
Implementing MongoDB at Shutterfly (Kenny Gorman)
Implementing MongoDB at Shutterfly (Kenny Gorman)Implementing MongoDB at Shutterfly (Kenny Gorman)
Implementing MongoDB at Shutterfly (Kenny Gorman)
 

Recently uploaded

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsHyundai Motor Group
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Hyundai Motor Group
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 

Recently uploaded (20)

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 

Go! Go! Gadgets. Writing an OpenSocial Application

  • 1. Go Go Gadgets! Building an OpenSocial Application Mark Halvorson Community Member, OpenSocial Foundation Board Chief Imagineer, Atlassian Software Email: mark.halvorson@atlassian.com Twitter: @halv0112 1 Monday, December 6, 2010
  • 2. What is an ‘Imagineer’? Monday, December 6, 2010
  • 3. !" #" Take things that exist... Monday, December 6, 2010
  • 4. ...and make something different. Monday, December 6, 2010
  • 6. Agenda •What it is a Gadget •Why Atlassian chose OpenSocial • Application Portability •Why you should too! • Application Sharing 6 Monday, December 6, 2010
  • 7. What is OpenSocial? 7 Monday, December 6, 2010
  • 8. Social Data Model 8 Monday, December 6, 2010
  • 9. Web Service APIs 9 Monday, December 6, 2010
  • 10. Gadgets 10 Monday, December 6, 2010
  • 11. Our Problem 11 Monday, December 6, 2010
  • 12. Before •Enterprise Apps are Silos FishEye
Source
Code JIRA
Issues
&
Tasks Confluence
Wiki 12 Monday, December 6, 2010
  • 13. Emphasize Teams, Projects & Tasks over Tools 13 Monday, December 6, 2010
  • 14. Emphasize Teams, Projects & Tasks over Tools 13 Monday, December 6, 2010
  • 15. Emphasize Teams, Projects & Tasks over Tools 13 Monday, December 6, 2010
  • 16. Emphasize Teams, Projects & Tasks over Tools 13 Monday, December 6, 2010
  • 17. Too Many Dashboards 14 Monday, December 6, 2010
  • 18. Too Many Dashboards 14 Monday, December 6, 2010
  • 19. Cross-Product Sharing 15 Monday, December 6, 2010
  • 20. Integration with Non-Atlassian apps 16 Monday, December 6, 2010
  • 21. Solution: OpenSocial Gadgets 17 Monday, December 6, 2010
  • 22. Gadgets are a Great Solution for Dashboard 18 Monday, December 6, 2010
  • 23. After Open standard for enterprise application connection view
complete
 project single
acCvity
 19 Monday, December 6, 2010
  • 24. Managers Do Email Not just about portals, or internal applications. view
acCvity
&
 status create
issues 20 Monday, December 6, 2010
  • 25. Open Standards, Industry Support 21 Monday, December 6, 2010
  • 26. Why Write Gadgets? •They’re easy! •They use stable, widely accessible and understood technologies •Write once, display everywhere 22 Monday, December 6, 2010
  • 27. The Obligatory Hello World Example 23 Monday, December 6, 2010
  • 28. The Obligatory Hello World Example 23 Monday, December 6, 2010
  • 29. Anatomy of a Gadget 24 Monday, December 6, 2010
  • 30. Anatomy of a Gadget •XML Spec File • Metadata, HTML Content, and JavaScript 24 Monday, December 6, 2010
  • 31. Anatomy of a Gadget •XML Spec File • Metadata, HTML Content, and JavaScript •Core JavaScript API • Access Preferences, Make Requests 24 Monday, December 6, 2010
  • 32. 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 24 Monday, December 6, 2010
  • 33. XML Spec File 25 Monday, December 6, 2010
  • 34. <ModulePrefs> 26 Monday, December 6, 2010
  • 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> 26 Monday, December 6, 2010
  • 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> 26 Monday, December 6, 2010
  • 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> 26 Monday, December 6, 2010
  • 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"/> 27 Monday, December 6, 2010
  • 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"/> 27 Monday, December 6, 2010
  • 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"/> 27 Monday, December 6, 2010
  • 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> 28 Monday, December 6, 2010
  • 42. <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> 28 Monday, December 6, 2010
  • 43. Views - DEFAULT view 29 Monday, December 6, 2010
  • 44. Views - DEFAULT view 29 Monday, December 6, 2010
  • 45. Views - DEFAULT view 30 Monday, December 6, 2010
  • 46. Views - DEFAULT view 30 Monday, December 6, 2010
  • 47. Views - CANVAS view 31 Monday, December 6, 2010
  • 48. Views - CANVAS view 31 Monday, December 6, 2010
  • 49. Views - DEFAULT view (in Gmail) 32 Monday, December 6, 2010
  • 50. Views - DEFAULT view (in Gmail) 32 Monday, December 6, 2010
  • 51. Views - CANVAS view (in Gmail) 33 Monday, December 6, 2010
  • 52. Views - CANVAS view (in Gmail) 33 Monday, December 6, 2010
  • 53. Views - Custom view 34 Monday, December 6, 2010
  • 54. Wallboards Gadgets go beyond the JIRA Dashboard onto your wall! 35 Monday, December 6, 2010
  • 55. Wallboards Gadgets go beyond the JIRA Dashboard onto your wall! 35 Monday, December 6, 2010
  • 56. 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); 36 Monday, December 6, 2010
  • 57. 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); 36 Monday, December 6, 2010
  • 58. 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); 36 Monday, December 6, 2010
  • 59. Requesting Data from Web Services •AJAX + DOM •OAuth •Request Proxy • 37 Monday, December 6, 2010
  • 64. gadgets io . .makeRequest ) ( 42 Monday, December 6, 2010
  • 65. What Can You Call? •Any URL •XML and JSON are the most useful • 43 Monday, December 6, 2010
  • 66. 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); } 44 Monday, December 6, 2010
  • 67. 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(); } 45 Monday, December 6, 2010
  • 68. 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(); } 45 Monday, December 6, 2010
  • 69. An Example Text Real World Example... Text Monday, December 6, 2010
  • 70. An Example Text Real World Example... Text Monday, December 6, 2010
  • 71. An Example Text Real World Example... Text Monday, December 6, 2010
  • 72. An Example Text Real World Example... Text Monday, December 6, 2010
  • 73. An Example Text Real World Example... Text Monday, December 6, 2010
  • 74. An Example Text Real World Example... Text Monday, December 6, 2010
  • 75. The Goal The Goal 47 Monday, December 6, 2010
  • 76. The Result 48 Monday, December 6, 2010
  • 77. The Result 48 Monday, December 6, 2010
  • 78. Preferences 49 Monday, December 6, 2010
  • 79. Statistics 50 Monday, December 6, 2010
  • 80. Let’s Take a Step Back. 51 Monday, December 6, 2010
  • 81. Q: What is the purpose of an application? 52 Monday, December 6, 2010
  • 82. Q: What is the purpose of an application? •A: DO Something. Complete some process. 52 Monday, December 6, 2010
  • 83. Anatomy of an Application Context Content Ac(on 53 Monday, December 6, 2010
  • 84. An Example Gmail Communica(on Contacts Mail Read
Write Reply 54 Monday, December 6, 2010
  • 85. Q: What is the purpose of a gadget? 55 Monday, December 6, 2010
  • 86. Q: What is the purpose of a gadget? •A: DO Something. Complete some process. 55 Monday, December 6, 2010
  • 87. Gadget = Reusable Mini‐ApplicaCon Atomic Unit
of
Work Context Context •or Content Content Ac(on Ac(on 56 Monday, December 6, 2010
  • 88. Example - “Mini-Application” JIRA
Comment
Gadget JIRA‐1234 Users
 Comment Add
Comment 57 Monday, December 6, 2010
  • 89. Example - Unit of Work JIRA
Comment
Gadget Context Users
 Comment Add
Comment 58 Monday, December 6, 2010
  • 90. Example - Unit of Work JIRA
Comment
Gadget Context Users
 Comment Add
Comment 58 Monday, December 6, 2010
  • 91. Lesson Learned over time: •Gadgets as “Units of Work” are... • Easier to build • Easier to use • Easier to reuse 59 Monday, December 6, 2010
  • 92. Composite Application Gadget Gadget Gadget Add’l
 Context Context Context Context Content Content Content Content Ac(on Ac(on Ac(on Ac(on 60 Monday, December 6, 2010
  • 93. Example - Gmail Google
CommunicaCon
ApplicaCon Google
Talk Communica(on Presence Gmail Contacts IM Mail Read
Write Read
Write Reply Reply 61 Monday, December 6, 2010
  • 94. <demo> 62 Monday, December 6, 2010
  • 95. Get Satisfaction 63 Monday, December 6, 2010
  • 96. Gadgets? 64 Monday, December 6, 2010
  • 97. Gadgets? Gadget? Gadget? 64 Monday, December 6, 2010
  • 99. Gadget! Gadget Gadget 65 Monday, December 6, 2010
  • 100. Get Satisfaction powered by JIRA 66 Monday, December 6, 2010
  • 101. Gadgets! 67 Monday, December 6, 2010
  • 102. Gadgets! 67 Monday, December 6, 2010
  • 103. Gadgets! Gadget! Gadget! 67 Monday, December 6, 2010
  • 106. </demo> 69 Monday, December 6, 2010
  • 107. Summary - Why write gadgets? •Easy! • Simple web based technologies mean anyone can write a gadget. •Reusable! • Use in any OpenSocial Container. iGoogle, Gmail, JIVE, more every day. •Fun! • Thinking about applications as atomic units of work add a new dimension to application design. 70 Monday, December 6, 2010
  • 108. Questions? Resources • http://atlassian.com/opensocial • http://www.opensocial.org • http://atlassian.com/classroom 71 Monday, December 6, 2010