SlideShare une entreprise Scribd logo
1  sur  108
Télécharger pour lire hors ligne
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

Contenu connexe

Similaire à 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
 

Similaire à 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)
 

Dernier

Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfAijun Zhang
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Commit University
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Will Schroeder
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6DianaGray10
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Brian Pichman
 
Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.YounusS2
 
UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7DianaGray10
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemAsko Soukka
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDELiveplex
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...DianaGray10
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXTarek Kalaji
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1DianaGray10
 
How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?IES VE
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopBachir Benyammi
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPathCommunity
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfDianaGray10
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAshyamraj55
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsSeth Reyes
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Adtran
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationIES VE
 

Dernier (20)

Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdf
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )
 
Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.
 
UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystem
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBX
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
 
How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 Workshop
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation Developers
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and Hazards
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
 

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