SlideShare a Scribd company logo
App in a Browser
            jQuery Conference 2010
            Boston, Massachusetts


                                     @jdsharp

Monday, October 18, 2010
Who am I?



Monday, October 18, 2010
Started developing for the web
                            in 1996

                           AOL was a popular browser of choice
                                   2400bps modem




Monday, October 18, 2010
Monday, October 18, 2010
THE jOUERY COMPANY




                           Co-founded appendTo in October 2009




                            9 employees, 3 contractors, 9 states


Monday, October 18, 2010
Cowboy after 5PM M-F & weekends

Monday, October 18, 2010
How many of you are
                               integrators?



Monday, October 18, 2010
Ready for a challenge?



Monday, October 18, 2010
you’ve got to grab hold...




                                                 Flickr @evilerin

Monday, October 18, 2010
Flickr @ prasoonpics



          ...with even more enthusiasm
Monday, October 18, 2010
App in a Browser



Monday, October 18, 2010
There’s a spectrum of
                              development...
         Party like
         it’s 1998                                              Gmail


       Server                                                 Client


        Server Side                                           Client Side
         Post back                                                Ajax
                                       Where we’ll be today




Monday, October 18, 2010
The app boot process...
                           - Download resources
                              - Execute scripts
                            - Wait for the DOM


Monday, October 18, 2010
We think of client side
                  development in a DOM centric
                   approach because that’s our
                              roots


Monday, October 18, 2010
How do we organize this?



Monday, October 18, 2010
Once again it’s a
                                 spectrum...

       Server                                      Client


           Server                                    Client
         generated                                 generated




                           ?          ?       ?
Monday, October 18, 2010
Integration driven
                               approach



Monday, October 18, 2010
Web developers are
                     integrators, they have to
                      work with a variety of
                         layers, tools and
                           technologies

Monday, October 18, 2010
Integration is the core
                     attribute of a successful
                          web developer



Monday, October 18, 2010
How do you integrate
                              successfully?



Monday, October 18, 2010
Discrete components...



Monday, October 18, 2010
Server

                           Data          HTML, CSS, JavaScript




             Request                 Core                         Other
             Manager               Application                   Services


                                    Pub / Sub


                                  View Manager

Monday, October 18, 2010
Components that...
            - consume/sync data
            - control flow
            - display/present data


Monday, October 18, 2010
How do components
                  communicate / interface?

                       This is key to a holistic
                     approach to an applications
                               lifecycle

Monday, October 18, 2010
Server

                           Data          HTML, CSS, JavaScript




             Request                 Core                         Other
             Manager               Application                   Services


                                    Pub / Sub


                                  View Manager

Monday, October 18, 2010
The data
  { “name” : “Jonathan Sharp”,
    “phone” : “402-000-0000”,
    “notes” : “Delta Flight 2022 @ 2PM”
  }




Monday, October 18, 2010
The request
                           Abstract the endpoint and transport
  amplify.request.define(“contacts”, “ajax”, {
      “url” : “/restful/api”,
      “method” : “POST”,
      “dataType” : “json”
  });

  amplify.request(“contacts”, args, function(json){
       ...
  });




Monday, October 18, 2010
Server

                           Data          HTML, CSS, JavaScript




             Request                 Core                         Other
             Manager               Application                   Services


                                    Pub / Sub


                                  View Manager

Monday, October 18, 2010
Core Application
                               Protect the global scope
                       Provide architecture for new functionality
  // App core
  (function(app) {
    app.bus = amplify.bus;
    app.request = amplify.request;
    app.ui = {};
    app.init = function() {
       // Load any scripts/resources(Async)..
       // Then initialize our components
       app.bus.trigger(“component.init”);
    };
    app.init();
  })(window.app = window.app || {});


Monday, October 18, 2010
Core Application
  // Component
  (function(app) {
    app.contacts = {};
    app.contacts.load = function() {
      app.bus.publish(“contacts.ui.load”);

               // Request our initial payload
               app.request(“contacts”, function(data) {
                 app.bus.publish(“contacts.list”, data);
               });
        };

    app.bus.subscribe(
               “component.init”, app.contacts.load);
  })(window.app);

Monday, October 18, 2010
Server

                           Data          HTML, CSS, JavaScript




             Request                 Core                         Other
             Manager               Application                   Services


                                    Pub / Sub


                                  View Manager

Monday, October 18, 2010
The View
  // Canvas manager
  (function(app) {
    app.ui.canvas = {
      add: function(panel) {
        var id = $(panel).attr(“id”) || randomId();
        $(panel).appendTo(“#panels”);

                     app.bus.publish(
                                   “ui.canvas.added”, {“id”:id});
                     return id;
               }
    };
  })(window.app);

Monday, October 18, 2010
The View
  // Panel
  (function(app) {
    app.ui.panel = {
       create: function(options) {
         var dom = $(“<div>...</div>”);
         dom.bind(“updateContacts”, function(e,data){
           // Update the DOM with new contact data
           ...
         });
         return dom;
       }
    };
  })(window.app);

Monday, October 18, 2010
The View
  // UI Controller
  (function(app) {
    app.ui.manager = {
       init: function init() {
         var p = app.ui.panel.create({...});
         app.ui.canvas.add(p);
         app.bus.subscribe(
             “contact.list”, function(data) {
               p.trigger(‘updateContacts’, data);
             });
       }
    };
    app.bus.subscribe(
            “contacts.ui.load”, app.ui.manager.init);
  })(window.app);

Monday, October 18, 2010
What have we done?
  - Protected data sources
  - Protected the DOM
  - Testing is easier
  - Scales to teams
  - Front-end backend balance
Monday, October 18, 2010
So remember...
  - Discrete components
  - “I’m an integrator”
  - and as such think about the APIs



Monday, October 18, 2010
appendTo will be releasing
               amplify as open source



Monday, October 18, 2010
...yee haw!


  Flickr @ martinvirtualtours




Monday, October 18, 2010
App in a Browser
            jQuery Conference 2010
            Boston, Massachusetts


                                     @jdsharp

Monday, October 18, 2010

More Related Content

PDF
Is these a bug
PDF
Building Distributed JavaScript Widgets with jQuery
PDF
Mobile Web Applications with jQuery
PDF
Say no to var_dump
PDF
The Mobile Web @ 2010 JSConf
PDF
Introduction to jQuery :: CharlotteJS
PDF
RubyConf UY 2010
PDF
Ruby off Rails
Is these a bug
Building Distributed JavaScript Widgets with jQuery
Mobile Web Applications with jQuery
Say no to var_dump
The Mobile Web @ 2010 JSConf
Introduction to jQuery :: CharlotteJS
RubyConf UY 2010
Ruby off Rails

Similar to App in a Browser (20)

PDF
Data driven app deploys with chef frontdev
PDF
Human APIs - expanding the mobile web or are robots coming to JavaScript?
PDF
Human APIs
PDF
Ignite iPad App: The Making Of....
PDF
5 分でキメル! (慣れれば、あなたもやれる!) たったの 5 分でできるサーバと通信できる iPhone アプリの作成
PDF
iBizLog. Smalltalking the Web
PDF
Document-Oriented Databases: Couchdb Primer
PPT
Accelerating BIM - CIB W78 Cairo 2010
PPT
BIMserver presentation at Digital Mix, BuildingSMART week Copenhagen
PPT
Building Intelligent Mashups
PDF
The Tech Side of Project Argo
PDF
[Nuxeo World 2013] Roadmap 2014 - Product part
PDF
WordPress Front End Optimizations
PDF
HTML5: Toolkits and Gaps
PDF
GDD Brazil 2010 - What's new in Google App Engine and Google App Engine For B...
PDF
GWT♥HTML5
PDF
Not Only Drupal
PDF
Dojo Mobile
PDF
PHP in a Mobile Ecosystem (Zendcon 2010)
PDF
Vital.AI Creating Intelligent Apps
Data driven app deploys with chef frontdev
Human APIs - expanding the mobile web or are robots coming to JavaScript?
Human APIs
Ignite iPad App: The Making Of....
5 分でキメル! (慣れれば、あなたもやれる!) たったの 5 分でできるサーバと通信できる iPhone アプリの作成
iBizLog. Smalltalking the Web
Document-Oriented Databases: Couchdb Primer
Accelerating BIM - CIB W78 Cairo 2010
BIMserver presentation at Digital Mix, BuildingSMART week Copenhagen
Building Intelligent Mashups
The Tech Side of Project Argo
[Nuxeo World 2013] Roadmap 2014 - Product part
WordPress Front End Optimizations
HTML5: Toolkits and Gaps
GDD Brazil 2010 - What's new in Google App Engine and Google App Engine For B...
GWT♥HTML5
Not Only Drupal
Dojo Mobile
PHP in a Mobile Ecosystem (Zendcon 2010)
Vital.AI Creating Intelligent Apps
Ad

Recently uploaded (20)

PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Electronic commerce courselecture one. Pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
Big Data Technologies - Introduction.pptx
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PPT
Teaching material agriculture food technology
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Approach and Philosophy of On baking technology
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Diabetes mellitus diagnosis method based random forest with bat algorithm
Electronic commerce courselecture one. Pdf
Advanced methodologies resolving dimensionality complications for autism neur...
Reach Out and Touch Someone: Haptics and Empathic Computing
Programs and apps: productivity, graphics, security and other tools
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
MIND Revenue Release Quarter 2 2025 Press Release
Dropbox Q2 2025 Financial Results & Investor Presentation
NewMind AI Weekly Chronicles - August'25 Week I
Big Data Technologies - Introduction.pptx
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Teaching material agriculture food technology
Digital-Transformation-Roadmap-for-Companies.pptx
Approach and Philosophy of On baking technology
20250228 LYD VKU AI Blended-Learning.pptx
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
The Rise and Fall of 3GPP – Time for a Sabbatical?
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Ad

App in a Browser

  • 1. App in a Browser jQuery Conference 2010 Boston, Massachusetts @jdsharp Monday, October 18, 2010
  • 2. Who am I? Monday, October 18, 2010
  • 3. Started developing for the web in 1996 AOL was a popular browser of choice 2400bps modem Monday, October 18, 2010
  • 5. THE jOUERY COMPANY Co-founded appendTo in October 2009 9 employees, 3 contractors, 9 states Monday, October 18, 2010
  • 6. Cowboy after 5PM M-F & weekends Monday, October 18, 2010
  • 7. How many of you are integrators? Monday, October 18, 2010
  • 8. Ready for a challenge? Monday, October 18, 2010
  • 9. you’ve got to grab hold... Flickr @evilerin Monday, October 18, 2010
  • 10. Flickr @ prasoonpics ...with even more enthusiasm Monday, October 18, 2010
  • 11. App in a Browser Monday, October 18, 2010
  • 12. There’s a spectrum of development... Party like it’s 1998 Gmail Server Client Server Side Client Side Post back Ajax Where we’ll be today Monday, October 18, 2010
  • 13. The app boot process... - Download resources - Execute scripts - Wait for the DOM Monday, October 18, 2010
  • 14. We think of client side development in a DOM centric approach because that’s our roots Monday, October 18, 2010
  • 15. How do we organize this? Monday, October 18, 2010
  • 16. Once again it’s a spectrum... Server Client Server Client generated generated ? ? ? Monday, October 18, 2010
  • 17. Integration driven approach Monday, October 18, 2010
  • 18. Web developers are integrators, they have to work with a variety of layers, tools and technologies Monday, October 18, 2010
  • 19. Integration is the core attribute of a successful web developer Monday, October 18, 2010
  • 20. How do you integrate successfully? Monday, October 18, 2010
  • 22. Server Data HTML, CSS, JavaScript Request Core Other Manager Application Services Pub / Sub View Manager Monday, October 18, 2010
  • 23. Components that... - consume/sync data - control flow - display/present data Monday, October 18, 2010
  • 24. How do components communicate / interface? This is key to a holistic approach to an applications lifecycle Monday, October 18, 2010
  • 25. Server Data HTML, CSS, JavaScript Request Core Other Manager Application Services Pub / Sub View Manager Monday, October 18, 2010
  • 26. The data { “name” : “Jonathan Sharp”, “phone” : “402-000-0000”, “notes” : “Delta Flight 2022 @ 2PM” } Monday, October 18, 2010
  • 27. The request Abstract the endpoint and transport amplify.request.define(“contacts”, “ajax”, { “url” : “/restful/api”, “method” : “POST”, “dataType” : “json” }); amplify.request(“contacts”, args, function(json){ ... }); Monday, October 18, 2010
  • 28. Server Data HTML, CSS, JavaScript Request Core Other Manager Application Services Pub / Sub View Manager Monday, October 18, 2010
  • 29. Core Application Protect the global scope Provide architecture for new functionality // App core (function(app) { app.bus = amplify.bus; app.request = amplify.request; app.ui = {}; app.init = function() { // Load any scripts/resources(Async).. // Then initialize our components app.bus.trigger(“component.init”); }; app.init(); })(window.app = window.app || {}); Monday, October 18, 2010
  • 30. Core Application // Component (function(app) { app.contacts = {}; app.contacts.load = function() { app.bus.publish(“contacts.ui.load”); // Request our initial payload app.request(“contacts”, function(data) { app.bus.publish(“contacts.list”, data); }); }; app.bus.subscribe( “component.init”, app.contacts.load); })(window.app); Monday, October 18, 2010
  • 31. Server Data HTML, CSS, JavaScript Request Core Other Manager Application Services Pub / Sub View Manager Monday, October 18, 2010
  • 32. The View // Canvas manager (function(app) { app.ui.canvas = { add: function(panel) { var id = $(panel).attr(“id”) || randomId(); $(panel).appendTo(“#panels”); app.bus.publish( “ui.canvas.added”, {“id”:id}); return id; } }; })(window.app); Monday, October 18, 2010
  • 33. The View // Panel (function(app) { app.ui.panel = { create: function(options) { var dom = $(“<div>...</div>”); dom.bind(“updateContacts”, function(e,data){ // Update the DOM with new contact data ... }); return dom; } }; })(window.app); Monday, October 18, 2010
  • 34. The View // UI Controller (function(app) { app.ui.manager = { init: function init() { var p = app.ui.panel.create({...}); app.ui.canvas.add(p); app.bus.subscribe( “contact.list”, function(data) { p.trigger(‘updateContacts’, data); }); } }; app.bus.subscribe( “contacts.ui.load”, app.ui.manager.init); })(window.app); Monday, October 18, 2010
  • 35. What have we done? - Protected data sources - Protected the DOM - Testing is easier - Scales to teams - Front-end backend balance Monday, October 18, 2010
  • 36. So remember... - Discrete components - “I’m an integrator” - and as such think about the APIs Monday, October 18, 2010
  • 37. appendTo will be releasing amplify as open source Monday, October 18, 2010
  • 38. ...yee haw! Flickr @ martinvirtualtours Monday, October 18, 2010
  • 39. App in a Browser jQuery Conference 2010 Boston, Massachusetts @jdsharp Monday, October 18, 2010