SlideShare ist ein Scribd-Unternehmen logo
1 von 66
Ample SDK: Standards-based GUI Framework  for Client-side Applications The Ajax Experience 2009 September 14-16 in Boston, MA
Sergey Ilinsky http://www.ilinsky.com http://twitter.com/ilinsky
1. The Landscape of Client-side GUI Technologies 2. Ample SDK: Das Experiment 3. Using Ample SDK: Basics 4. Extending on Ample SDK 5. Showcase 6. Resources 7. Q&A Agenda
October 17, 2007, Ajaxian.com Re-inventing XMLHttpRequest: Cross-browser implementation with sniffing capabilities
Highlights: Fully functional implementation of XHR for IE7- Some 20 issues fixed in native implementations. (New reports are still coming) Extended to support [transparent] request sniffing.
So I took on to  re-inventing (re-implementing) web browser
1. The Landscape of Client-Side GUI Technologies 1.1 Server-Side vs. Client-Side 1.2 Libraries vs. Frameworks 1.3 Web Browsers
1.1 Server-Side vs. Client-Side Server-Side - app is orchestrated on the server - data and UI communicated to client combined - client-side hooks are not welcome Client-Side - app is orchestrated on the client (browser) - data communicated separately from UI
1.2 GUI Libraries vs. Frameworks Libraries: - help executing smaller development tasks - often used to «pimp-up» web-pages Frameworks: - bring another abstraction level - used to build «rich applications»
1.3 Web Browsers Two camps: Internet Explorer vs. Modern Browsers Problems: - Incompatible (sometimes incomplete) APIs - Too many versions, cool stuf in latest versions - Poor GUI facilities
Hm..  But don't many libraries and frameworks clean that mess successfully  while adding missing glyphs?
Yes, they do. Every in its own way.
2.  Ample SDK: Das Experiment 2.1 Objectives 2.2 Solution Architecture 2.3 Browser-within-a-browser? 2.4 Ample SDK Application Lifetime 2.5 Technologies Breakdown
2.1 Objectives Do not have: - new programming model - new APIs Do have: - ease of use (eliminate learning curve if possible) - better GUI technologies - separation of concerns - extensible architecture
Meet Ample SDK Ample SDK is a piece of software that runs  transparently  in the layer between web browser and application. While running it provides the Logic of the application with standard cross-browser access to the User Interface.
2.2 Solution Architecture Runtime - runtime.js UI Languages - xhtml/xhtml.js - xul/xul.js+xul/xul.css - svg/svg.js - ...
2.3 Browser-within-a-browser? Ample SDK is in a way a web-browser (GUI aspect) - understands MLs (XHTML, XUL, SVG..) - provides DOM APIs (Core, Events, Selectors APIs) - uses CSS for styling (pseudo-classes, pseudo-elemnts)
2.4 Ample SDK Application Lifetime
2.5 Technologies Breakdown - Runtime - Scripting Technologies - XML Technologies - Styling Technologies - UI Markup Technologies
Runtime: Scripting Technologies - Document Object Model - DOM Core (Level 2) - DOM Events (Level 3) - Selectors API - XML APIs - DOMParser, XMLSerializer - XSLTProcessor - XMLHttpRequest - UI Managers - Focus Manager - Drag&Drop Manager - Resize Manager - Capture Manager - SPI History Manager - Componentization Model
Runtime: XML technologies - Xinclude 1.0 - SMIL3.0 (selected modules) - XML Schema 1.1 (datatypes module)
Runtime: Styling Technologies - CSS 2.1 - CSS3 Namespaces - CSS3-UI (pseudo-classes, pseudo-elements)
UI Markup Technologies - XHTML1 - XUL - SVG 1.2 Tiny - XHTML5 (in development) - XForms 1.1 (planned)
3. Using Ample SDK: Basics - XML for UI - CSS for Style - JavaScript for Logic
Hello World! <!DOCTYPE html> <html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;> <head> <title>Hello, World!</title> <!-- (A) Ample SDK runtime and UI language --> <script type=&quot;text/javascript&quot; src=&quot;ample/runtime.js&quot;></script> <script type=&quot;text/javascript&quot; src=&quot;ample/languages/xhtml/xhtml.js&quot;></script> <!-- (1) Styling --> <style type=&quot;text/ample+css&quot;> b { color: red; } </style> <!-- (2) Logic --> <script type=&quot;text/javascript&quot;> function alertHelloWorld(oEvent) { alert('Element &quot;' + oEvent.target.tagName + '&quot; was clicked'); } </script> </head> <body> <!-- (3) Layout --> <script type=&quot;application/ample+xml&quot;> <b onclick=&quot;alertHelloWorld(event)&quot;>Hello, World!</b> </script> </body> </html>
The Programming Model Programming against Ample SDK is as simple as doing it against... right, cross-browser browser!
3.1 Laying out Application UI Application GUI is created with XML or JS staticly:  XML (XHTML, XUL, SVG..) dynamicly:  JavaScript (DOM) or XML + importNode
Embedding XML UI into a web page a) Inline, using a script tag with type=&quot;application/ample+xml&quot; <body> <!-- other HTML code --> <script type=&quot;application/ample+xml&quot;> <!-- Ample SDK inline XML markup --> </script> <!-- other HTML code --> </body> b) Referencing a resource, using a script tag with src attribute <body> <!-- other HTML code --> <script type=&quot;application/ample+xml&quot; src=&quot;ui.xml&quot;></script> <!-- other HTML code --> </body> c) Inline, using ample.open() and ample.close() <body> <!-- other HTML code --> <script type=&quot;text/javascript&quot;>ample.open()</script> <!-- Ample SDK inline XML markup --> <script type=&quot;text/javascript&quot;>ample.close()</script> <!-- other HTML code --> </body>
Using XHTML 1 and XHTML 5 <article> <header> <h1>Apples</h1> <p>Tasty, delicious fruit!</p> </header> <p>The apple is the pomaceous fruit of the apple tree.</p> <section> <h1>Red Delicious</h1> <p>These bright red apples are the most common found in many supermarkets.</p> </section> <section> <h1>Granny Smith</h1> <p>These juicy, green apples and make a great filling for apple pies.</p> </section> <footer> <h1>Apples</h1> <p>Tasty, delicious fruit!</p> </footer> </article>
Using XUL (Mozilla technology) <xul:tabbox xmlns:xul=&quot;http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul&quot;> <xul:tabs> <xul:tab label=&quot;checkbox&quot; /> <xul:tab label=&quot;textbox&quot; /> <xul:tab label=&quot;datepicker&quot; /> </xul:tabs> <xul:tabpanels> <xul:tabpanel> <xul:checkbox /> </xul:tabpanel> <xul:tabpanel> <xul:textbox /> </xul:tabpanel> <xul:tabpanel> <xul:datepicker /> </xul:tabpanel> </xul:tabpanels> </xul:tabbox>
Using SVG1.2 Tiny <svg:svg viewBox=&quot;0,0 400,400&quot; height=&quot;400px&quot; width=&quot;400px&quot; xmlns:svg=&quot;http://www.w3.org/2000/svg&quot; xmlns:smil=&quot;http://www.w3.org/2008/SMIL30/&quot;> <svg:circle cx=&quot;200&quot; cy=&quot;200&quot; r=&quot;10&quot; fill=&quot;red&quot; opacity=&quot;1&quot; stroke=&quot;black&quot; stroke-width=&quot;1&quot;> <smil:animate begin=&quot;click&quot; decelerate=&quot;0.5&quot; to=&quot;200&quot; attributeName=&quot;r&quot; dur=&quot;500ms&quot;/> </svg:circle> </svg:svg> Works in Internet Explorer 5.5 too Modules Implemented: 5. Document Structure 8. Paths 9. Basic Shapes 10. Text 12. Animation (SMIL)
Using DOM-Core for building UI dynamically var sXULNameSpace = &quot;http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul&quot;; var popup = ample.getElementById(&quot;items-popup&quot;); var item4 =  ample.createElementNS (sXULNameSpace, &quot;xul:menuitem&quot;); popup.appendChild(item4); item3.setAttribute(&quot;label&quot;, &quot;Item 3&quot;); item3.setAttribute(&quot;value&quot;, &quot;3&quot;); var oRequest = new XMLHttpRequest; oRequest.open(&quot;GET&quot;, &quot;wizard.xml&quot;, false); oRequest.onreadystatechange = function() { if (oRequest.readyState == 4) { var oFragment =  ample.importNode (oRequest.responseXML.documentElement, true); ample.querySelector(&quot;#target&quot;).appendChild(oFragment); } }
Using XInclude to merge XML documents 1. <div xmlns:xi=&quot;http://www.w3.org/2001/XInclude&quot;> 2.  <xi:include href=&quot;Menubar.xml&quot; /> 3.  <xi:include href=&quot;Editor.xml&quot; /> 4.  <xi:include href=&quot;Statusbar.xml&quot; /> 5. </div>
3.2 Styling Application UI Styling GUI is done with CSS... nicely.
Embedding CSS stylesheets in a web page a) Inline, using a style tag with type=&quot;text/ample+css&quot; <style type=&quot;text/ample+css&quot;> /* Ample SDK inline stylesheet */ </style> b) Referencing a resource, using a link tag with href attribute <link type=&quot;text/ample+css&quot; rel=&quot;stylesheet&quot; href=&quot;stylesheet.css&quot;/>
Using CSS for styling UI 1) Namespaced selectors for styling component @namespace xul &quot;http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul&quot;; xul|menulist { width: 200px; } 2) Pseudo-class selectors for styling component state @namespace xul &quot;http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul&quot;; xul|datepicker:focus { background-color: pink; } 3) Pseudo-element selectors for styling component view @namespace xul &quot;http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul&quot;; xul|colorpicker::input { border: solid 1px blue; } xul|colorpicker::button { background-image: url(&quot;colorpicker.png&quot;); }
3.3 Writing Application Logic Implementing application [View] logic is about receiving UI events and updating UI state appropriately. In Ample SDK the Application UI is represented by a DOM tree (mainly built with UI elements), that you can access or modify in a standard and consistent way.  UI events are fired on elements in the tree with which the user interacts. Once dispatched they propagate through the tree and can be picked up for handling.
Embedding JavaScript GUI Logic into a web page a) Inline, using a script tag with type=&quot;text/javascript&quot; <script type=&quot;text/javascript&quot;> /* JavaScript UI Logic */ </script> b) Referencing a resource, using script tag with src attribute <script type=&quot;text/javascript&quot; src=&quot;application.js&quot;></script>
The ample scripting object The  ample  scripting object in the Ample SDK is similar to the  document  scripting object available in the browser
Navigating / Altering UI Document Tree a) Navigating the tree - firstChild, lastChild, previousSibling, nextSibling, childNodes, parentNode etc. - getElementById, getElementsByTagName and getElementsByTagNameNS - querySelector and querySelectorAll b) Altering the tree - setAttribute / setAttributeNS, getAttribute / getAttributeNS and removeAttribute / removeAttributeNS - createElement / createElementNS, createTextNode, appendChild, insertBefore, removeChild and replaceChild - importNode
Registering Event Handlers and Handling UI Events a) Dynamically, using the DOM Events API // Alert event current target tagName oElement.addEventListener(&quot;click&quot;, function(oEvent) { alert(oEvent.currentTarget.tagName) },  true ); // Cancel user selection (Also in IE) oElement.addEventListener(&quot;mousedown&quot;, function(oEvent) { oEvent.preventDefault(); }, false) b) Inline, using a on{event} attribute <xul:scale onchange=&quot;alert(this.getAttribute('value'))&quot; min=&quot;0&quot; max=&quot;100&quot; value=&quot;50&quot;/>
Using Drag And Drop Manager Events:  dragstart, drag, dragend, dragenter, dragleave, drop Properties:  $draggable, $droppable Pseudo-classes:  drag, drop <div xmlns:aml=&quot;http://www.amplesdk.com/ns/aml&quot; ondrop=&quot;if (event.relatedTarget.parentNode != event.target) event.target.appendChild(event.relatedTarget)&quot;> <div aml:droppable=&quot;true&quot; class=&quot;droppable&quot;> <div aml:draggable=&quot;true&quot; class=&quot;draggable&quot;> Container 1: drag me and drop to another container </div> <div aml:draggable=&quot;true&quot; class=&quot;draggable&quot;> Container 2: drag me and drop to another container </div> </div> <div aml:droppable=&quot;true&quot; class=&quot;droppable&quot;> </div> </div> .draggable { width:  100px; height: 100px; background-color: pink; border: solid 1px red; cursor: move; } .droppable { width: 300px; height: 320px; padding: 10px; float: left; background-color: lightgreen; border: solid 1px green; } div:drag { border-color: black; position: relative; } div:drop { border-style: dashed; }
Using Resize Manager Events:  resizestart, resize, resizeend CSS Pseudo-classes:  resize Properties:  $resizable <div aml:resizable=&quot;true&quot; class=&quot;resizable&quot; xmlns:aml=&quot;http://www.amplesdk.com/ns/aml&quot;> Resize me </div> @namespace &quot;http://www.w3.org/1999/xhtml&quot;; div.resizable { width:  250px; height: 250px; background-color:  pink; border: solid 1px red; max-width:  500px; } div.resizable:resize { background-color:  lightyellow; }
Using History Manager Methods:  $bookmark(state) Events:  hashchange ample.addEventListener(&quot;hashchange&quot;, function(oEvent) { // Implement logic alert(navigator.location.hash) }, false);
Using Capture Manager Methods:  $setCapture/$releaseCapture, $setModal/$releaseModal Events:  capture, modal <div> <button onclick=&quot;alert('Hello')&quot;>alert</button> <div id=&quot;dialog&quot; style=&quot;border: solid 1px red&quot;> <button onclick=&quot;this.parentNode.$releaseCapture(true)&quot;>release capture</button> </div> <button onclick=&quot;ample.getElementById('dialog').$setCapture(true)&quot;>set capture</button> </div>
Using XML APIs Transforming XML document with XSL-T example // Load stylesheet document oXMLHttpRequest.open(&quot;GET&quot;, &quot;stylesheet.xsl&quot;, false); oXMLHttpRequest.send(null); var oStylesheet = oXMLHttpRequest.responseXML; // Load input document oXMLHttpRequest.open(&quot;GET&quot;, &quot;input.xml&quot;, false); oXMLHttpRequest.send(null); var oInput  = oXMLHttpRequest.responseXML; // Create XSLTProcessor and import stylesheet into it var oXSLTProcessor  = new XSLTProcessor; oXSLTProcessor.importStylesheet(oStylesheet); // Transform input document to output document and alert result var oOutput = oXSLTProcessor.transformToDocument(oInput); alert(new XMLSerializer().serializeToString(oOutput));
JSON vs. XML JSON/XML for data XML/JSON for UI Whatever you like!
4. Extending on Ample SDK 4.1 Prototyping Objects / Creating new APIs 4.2 Creating Custom Markup Languages 4.3 Implementing Global UI Managers
4.1 Prototyping objects/ Defining new APIs Objects inheritance in Ample SDK (simplified): AMLNode:: AMLDocument AMLCharacterData:: AMLText AMLElement:: MyComponent AMLElement.prototype.listenOnce = function(sEvent, fHandler) { this.addEventListener(sEvent, function(oEvent) { // Remove event listener this.removeEventListener(sEvent, arguments.callee, false); // Handle Event fHandler.call(this, oEvent); }, false) }
4.2 Creating Custom Markup Language // Create new Namespace object var MyNamespace = new AMLNamespace; // Register new Namespace with Ample SDK ample.domConfig.setNamespace(&quot;http://www.mysite.com/ns/ui&quot;);
Creating Custom Component // Define Component Constructor var MyButton = function() { // This is the constructor }; // Set Component Prototype MyButton.prototype = new AMLElement; // Register new Component with Namespace MyNamespace.setElement(&quot;button&quot;, MyButton);
Defining Component Presentation MyCombobox.prototype.$getTagOpen = function() { return '<div class=&quot;my-combobox&quot;> <input type=&quot;text&quot;  value=&quot;' + this.getAttribute(&quot;text&quot;)+ '&quot;  class=&quot;my-combobox—input&quot; /> <div class=&quot;my-combobox—button&quot;/> <div class=&quot;my-combobox—gateway&quot;>'; } MyCombobox.prototype.$getTagClose = function() { return ' </div> </div>'; }
Specifing attribute default values MyCombobox.attributes = { disabled: &quot;false&quot; }
Handling UI Events at the Component Level Event handlers defined on component classes are executed at the bubbling or target phase only if event default action was not prevented MyCombobox.handlers = { focus: function(oEvent) { // TODO: dispatch DOMActivate event } }
Handling Attribute changes MyCombobox.handlers = { &quot;DOMAttrModified&quot;: function(oEvent) { } }
Handling Component Insertion / Removal MyCombobox.handlers = { // Component inserted into document &quot;DOMNodeInsertedIntoDocument&quot;: function(oEvent) { }, // Component removed from document &quot;DOMNodeRemovedFromDocument&quot;: function(oEvent) { } }
Defining Properties and Methods // Property MyCombobox.prototype.tabIndex = 0; // Method MyCombobox.prototype.selectItem = function(oItem) { }
A domain-specific UI markup technology?
Maybe &quot;CocoaML&quot;?
4.3 Writing Global UI Managers A UI Manager is a plugin that reacts to primitive UI events and synthetizes other more enhanced ones Mouse Gesture UI Manager?
5. Showcase
Implementation Aspects: Application Logic: PAC approach UI Technology: XHTML+XUL+Custom components Server-side — 2 services: - Static for UI - Dynamic for Data (JSON to SOAP)
Wrapping up: Why Ample SDK is relevant? - Natural programming model - Uses APIs that will stay - Better UI building bricks — XUL et alii - Enables quite a bit of SVG in Internet Explorer - Allows creating DS markup technologies
6. Resources IRC Channels #amplesdk on irc.freenode.net #amplesdk-dev on irc.freenode.net  (Framework Developers) Mailing Lists / Discussion Groups http://groups.google.com/group/amplesdk http://groups.google.com/group/amplesdk-dev   (Framework Developers) Bugtracker http://www.amplesdk.com/bugtracker/ Documentation (online/offline) http://www.amplesdk.com/reference/ Developer Tools Aptana IDE plugin Firebug plugin (in development)
Questions?
Thanks!

Weitere ähnliche Inhalte

Was ist angesagt?

Multi modularized project setup with gulp, typescript and angular.js
Multi modularized project setup with gulp, typescript and angular.jsMulti modularized project setup with gulp, typescript and angular.js
Multi modularized project setup with gulp, typescript and angular.jsDavid Amend
 
WordCamp ABQ 2013: Making the leap from Designer to Designer/Developer
WordCamp ABQ 2013: Making the leap from Designer to Designer/DeveloperWordCamp ABQ 2013: Making the leap from Designer to Designer/Developer
WordCamp ABQ 2013: Making the leap from Designer to Designer/Developermy easel
 
Taking Advantage of Client Side / JavsScript Templates in Rich Internet Appli...
Taking Advantage of Client Side / JavsScript Templates in Rich Internet Appli...Taking Advantage of Client Side / JavsScript Templates in Rich Internet Appli...
Taking Advantage of Client Side / JavsScript Templates in Rich Internet Appli...Mahbubur Rahman
 
Wordcamp abq cf-cpt
Wordcamp abq cf-cptWordcamp abq cf-cpt
Wordcamp abq cf-cptmy easel
 
How to dockerize rails application compose and rails tutorial
How to dockerize rails application compose and rails tutorialHow to dockerize rails application compose and rails tutorial
How to dockerize rails application compose and rails tutorialKaty Slemon
 
sMash at May NYPHP UG
sMash at May NYPHP UGsMash at May NYPHP UG
sMash at May NYPHP UGProject Zero
 
Game Development Using HTML 5
Game Development Using HTML 5Game Development Using HTML 5
Game Development Using HTML 5osa_ora
 
Introduction to Groovy Monkey
Introduction to Groovy MonkeyIntroduction to Groovy Monkey
Introduction to Groovy Monkeyjervin
 
Workshop: Symfony2 Intruduction: (Controller, Routing, Model)
Workshop: Symfony2 Intruduction: (Controller, Routing, Model)Workshop: Symfony2 Intruduction: (Controller, Routing, Model)
Workshop: Symfony2 Intruduction: (Controller, Routing, Model)Antonio Peric-Mazar
 
Ruby On Rails Seminar Basis Softexpo Feb2010
Ruby On Rails Seminar Basis Softexpo Feb2010Ruby On Rails Seminar Basis Softexpo Feb2010
Ruby On Rails Seminar Basis Softexpo Feb2010arif44
 
[2015/2016] Apache Cordova
[2015/2016] Apache Cordova[2015/2016] Apache Cordova
[2015/2016] Apache CordovaIvano Malavolta
 
HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1James Pearce
 
Mozilla Firefox Extension Development, Course 1: Basic
Mozilla Firefox Extension Development, Course 1: BasicMozilla Firefox Extension Development, Course 1: Basic
Mozilla Firefox Extension Development, Course 1: Basiclittlebtc
 
Powerful tools for building web solutions
Powerful tools for building web solutionsPowerful tools for building web solutions
Powerful tools for building web solutionsAndrea Tino
 
Android | Busy Java Developers Guide to Android: UI | Ted Neward
Android | Busy Java Developers Guide to Android: UI | Ted NewardAndroid | Busy Java Developers Guide to Android: UI | Ted Neward
Android | Busy Java Developers Guide to Android: UI | Ted NewardJAX London
 
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....Javier Suárez Ruiz
 

Was ist angesagt? (20)

Multi modularized project setup with gulp, typescript and angular.js
Multi modularized project setup with gulp, typescript and angular.jsMulti modularized project setup with gulp, typescript and angular.js
Multi modularized project setup with gulp, typescript and angular.js
 
WordCamp ABQ 2013: Making the leap from Designer to Designer/Developer
WordCamp ABQ 2013: Making the leap from Designer to Designer/DeveloperWordCamp ABQ 2013: Making the leap from Designer to Designer/Developer
WordCamp ABQ 2013: Making the leap from Designer to Designer/Developer
 
Taking Advantage of Client Side / JavsScript Templates in Rich Internet Appli...
Taking Advantage of Client Side / JavsScript Templates in Rich Internet Appli...Taking Advantage of Client Side / JavsScript Templates in Rich Internet Appli...
Taking Advantage of Client Side / JavsScript Templates in Rich Internet Appli...
 
Wordcamp abq cf-cpt
Wordcamp abq cf-cptWordcamp abq cf-cpt
Wordcamp abq cf-cpt
 
Jsf2 html5-jazoon
Jsf2 html5-jazoonJsf2 html5-jazoon
Jsf2 html5-jazoon
 
How to dockerize rails application compose and rails tutorial
How to dockerize rails application compose and rails tutorialHow to dockerize rails application compose and rails tutorial
How to dockerize rails application compose and rails tutorial
 
sMash at May NYPHP UG
sMash at May NYPHP UGsMash at May NYPHP UG
sMash at May NYPHP UG
 
Game Development Using HTML 5
Game Development Using HTML 5Game Development Using HTML 5
Game Development Using HTML 5
 
Introduction to Groovy Monkey
Introduction to Groovy MonkeyIntroduction to Groovy Monkey
Introduction to Groovy Monkey
 
Workshop: Symfony2 Intruduction: (Controller, Routing, Model)
Workshop: Symfony2 Intruduction: (Controller, Routing, Model)Workshop: Symfony2 Intruduction: (Controller, Routing, Model)
Workshop: Symfony2 Intruduction: (Controller, Routing, Model)
 
Ruby On Rails Seminar Basis Softexpo Feb2010
Ruby On Rails Seminar Basis Softexpo Feb2010Ruby On Rails Seminar Basis Softexpo Feb2010
Ruby On Rails Seminar Basis Softexpo Feb2010
 
[2015/2016] Apache Cordova
[2015/2016] Apache Cordova[2015/2016] Apache Cordova
[2015/2016] Apache Cordova
 
HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1HTML5 and the dawn of rich mobile web applications pt 1
HTML5 and the dawn of rich mobile web applications pt 1
 
Mozilla Firefox Extension Development, Course 1: Basic
Mozilla Firefox Extension Development, Course 1: BasicMozilla Firefox Extension Development, Course 1: Basic
Mozilla Firefox Extension Development, Course 1: Basic
 
Powerful tools for building web solutions
Powerful tools for building web solutionsPowerful tools for building web solutions
Powerful tools for building web solutions
 
Android | Busy Java Developers Guide to Android: UI | Ted Neward
Android | Busy Java Developers Guide to Android: UI | Ted NewardAndroid | Busy Java Developers Guide to Android: UI | Ted Neward
Android | Busy Java Developers Guide to Android: UI | Ted Neward
 
[2015/2016] Backbone JS
[2015/2016] Backbone JS[2015/2016] Backbone JS
[2015/2016] Backbone JS
 
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....
 
Angular js
Angular jsAngular js
Angular js
 
TRWResume-10-2016
TRWResume-10-2016TRWResume-10-2016
TRWResume-10-2016
 

Andere mochten auch

Chapter 16 2 Air Masses, Fronts And Weather Maps Andie
Chapter 16  2  Air Masses, Fronts And Weather Maps AndieChapter 16  2  Air Masses, Fronts And Weather Maps Andie
Chapter 16 2 Air Masses, Fronts And Weather Maps Andiecharsh
 
11 оригинальных способов использования Wrike
11 оригинальных способов использования Wrike11 оригинальных способов использования Wrike
11 оригинальных способов использования WrikeWrike
 
Control system
Control systemControl system
Control systemsnozza66
 
Ch 15 2 Energy And Heat Transfer
Ch 15   2 Energy And Heat TransferCh 15   2 Energy And Heat Transfer
Ch 15 2 Energy And Heat Transfercharsh
 
Invite5加入流程.
Invite5加入流程.Invite5加入流程.
Invite5加入流程.ERIC CHUANG
 
Websockets en Ruby en 5 Minutos
Websockets en Ruby en 5 MinutosWebsockets en Ruby en 5 Minutos
Websockets en Ruby en 5 Minutosdamianmarti
 
Network First Open Day presentation
Network First Open Day presentationNetwork First Open Day presentation
Network First Open Day presentationVictoria College
 
Transmedia and Augmented Reality
Transmedia and Augmented RealityTransmedia and Augmented Reality
Transmedia and Augmented RealityRobert Pratten
 
Test Analyst 3 + Yrs Manual Automation Theme
Test Analyst 3 + Yrs Manual Automation ThemeTest Analyst 3 + Yrs Manual Automation Theme
Test Analyst 3 + Yrs Manual Automation Themeamitcitm
 
Absolute Dating
Absolute DatingAbsolute Dating
Absolute Datingcharsh
 
Trend Report July 2011: Facebook, Brands & TV in Germany
Trend Report July 2011:  Facebook, Brands & TV in GermanyTrend Report July 2011:  Facebook, Brands & TV in Germany
Trend Report July 2011: Facebook, Brands & TV in GermanyZucker.Kommunikation
 
Creating a Successful Transmedia Project
Creating a Successful Transmedia ProjectCreating a Successful Transmedia Project
Creating a Successful Transmedia ProjectRobert Pratten
 
Facebook, Brands and TV Preview Next Conference 2010 Berlin
Facebook, Brands and TV  Preview Next Conference 2010 BerlinFacebook, Brands and TV  Preview Next Conference 2010 Berlin
Facebook, Brands and TV Preview Next Conference 2010 BerlinZucker.Kommunikation
 

Andere mochten auch (20)

Chapter 16 2 Air Masses, Fronts And Weather Maps Andie
Chapter 16  2  Air Masses, Fronts And Weather Maps AndieChapter 16  2  Air Masses, Fronts And Weather Maps Andie
Chapter 16 2 Air Masses, Fronts And Weather Maps Andie
 
11 оригинальных способов использования Wrike
11 оригинальных способов использования Wrike11 оригинальных способов использования Wrike
11 оригинальных способов использования Wrike
 
Control system
Control systemControl system
Control system
 
Ch 15 2 Energy And Heat Transfer
Ch 15   2 Energy And Heat TransferCh 15   2 Energy And Heat Transfer
Ch 15 2 Energy And Heat Transfer
 
Invite5加入流程.
Invite5加入流程.Invite5加入流程.
Invite5加入流程.
 
Websockets en Ruby en 5 Minutos
Websockets en Ruby en 5 MinutosWebsockets en Ruby en 5 Minutos
Websockets en Ruby en 5 Minutos
 
4.2 voorlichting
4.2 voorlichting4.2 voorlichting
4.2 voorlichting
 
150321 bagian isi
150321 bagian isi150321 bagian isi
150321 bagian isi
 
Network First Open Day presentation
Network First Open Day presentationNetwork First Open Day presentation
Network First Open Day presentation
 
Transmedia and Augmented Reality
Transmedia and Augmented RealityTransmedia and Augmented Reality
Transmedia and Augmented Reality
 
Test Analyst 3 + Yrs Manual Automation Theme
Test Analyst 3 + Yrs Manual Automation ThemeTest Analyst 3 + Yrs Manual Automation Theme
Test Analyst 3 + Yrs Manual Automation Theme
 
To be present1 eso
To be present1 esoTo be present1 eso
To be present1 eso
 
Kurikulum 2013 SMP
Kurikulum 2013 SMPKurikulum 2013 SMP
Kurikulum 2013 SMP
 
Absolute Dating
Absolute DatingAbsolute Dating
Absolute Dating
 
Trend Report July 2011: Facebook, Brands & TV in Germany
Trend Report July 2011:  Facebook, Brands & TV in GermanyTrend Report July 2011:  Facebook, Brands & TV in Germany
Trend Report July 2011: Facebook, Brands & TV in Germany
 
Reported speech
Reported speech Reported speech
Reported speech
 
Creating a Successful Transmedia Project
Creating a Successful Transmedia ProjectCreating a Successful Transmedia Project
Creating a Successful Transmedia Project
 
1st Conditional
1st Conditional1st Conditional
1st Conditional
 
Facebook, Brands and TV Preview Next Conference 2010 Berlin
Facebook, Brands and TV  Preview Next Conference 2010 BerlinFacebook, Brands and TV  Preview Next Conference 2010 Berlin
Facebook, Brands and TV Preview Next Conference 2010 Berlin
 
The Knoll 2
The Knoll 2The Knoll 2
The Knoll 2
 

Ähnlich wie Sergey Ilinsky Presentation Ample Sdk

Using SVG with Ample SDK cross browser
Using SVG with Ample SDK cross browserUsing SVG with Ample SDK cross browser
Using SVG with Ample SDK cross browserSergey Ilinsky
 
Html 5 in a big nutshell
Html 5 in a big nutshellHtml 5 in a big nutshell
Html 5 in a big nutshellLennart Schoors
 
Front-end development introduction (JavaScript). Part 2
Front-end development introduction (JavaScript). Part 2Front-end development introduction (JavaScript). Part 2
Front-end development introduction (JavaScript). Part 2Oleksii Prohonnyi
 
Angular js mobile jsday 2014 - Verona 14 may
Angular js mobile   jsday 2014 - Verona 14 mayAngular js mobile   jsday 2014 - Verona 14 may
Angular js mobile jsday 2014 - Verona 14 mayLuciano Amodio
 
Declarative and standards-based web application development with the Ample SDK
Declarative and standards-based web application development with the Ample SDKDeclarative and standards-based web application development with the Ample SDK
Declarative and standards-based web application development with the Ample SDKBéla Varga
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...Fabio Franzini
 
Apache Flex and the imperfect Web
Apache Flex and the imperfect WebApache Flex and the imperfect Web
Apache Flex and the imperfect Webmasuland
 
Hyperion EPM APIs - Added value from HFM, Workspace, FDM, Smartview, and Shar...
Hyperion EPM APIs - Added value from HFM, Workspace, FDM, Smartview, and Shar...Hyperion EPM APIs - Added value from HFM, Workspace, FDM, Smartview, and Shar...
Hyperion EPM APIs - Added value from HFM, Workspace, FDM, Smartview, and Shar...Charles Beyer
 
IPhone Web Development With Grails from CodeMash 2009
IPhone Web Development With Grails from CodeMash 2009IPhone Web Development With Grails from CodeMash 2009
IPhone Web Development With Grails from CodeMash 2009Christopher Judd
 
Building Complex GUI Apps The Right Way. With Ample SDK - SWDC2010
Building Complex GUI Apps The Right Way. With Ample SDK - SWDC2010Building Complex GUI Apps The Right Way. With Ample SDK - SWDC2010
Building Complex GUI Apps The Right Way. With Ample SDK - SWDC2010Sergey Ilinsky
 
Integrate any Angular Project into WebSphere Portal
Integrate any Angular Project into WebSphere PortalIntegrate any Angular Project into WebSphere Portal
Integrate any Angular Project into WebSphere PortalHimanshu Mendiratta
 
HTML5 and Other Modern Browser Game Tech
HTML5 and Other Modern Browser Game TechHTML5 and Other Modern Browser Game Tech
HTML5 and Other Modern Browser Game Techvincent_scheib
 
Web II - 01 - Introduction to server-side development
Web II - 01 - Introduction to server-side developmentWeb II - 01 - Introduction to server-side development
Web II - 01 - Introduction to server-side developmentRandy Connolly
 
Moving from Web 1.0 to Web 2.0
Moving from Web 1.0 to Web 2.0Moving from Web 1.0 to Web 2.0
Moving from Web 1.0 to Web 2.0Estelle Weyl
 
HTML5 and CSS3 Techniques You Can Use Today
HTML5 and CSS3 Techniques You Can Use TodayHTML5 and CSS3 Techniques You Can Use Today
HTML5 and CSS3 Techniques You Can Use TodayTodd Anglin
 
TestUpload
TestUploadTestUpload
TestUploadZarksaDS
 
Angular JS 2_0 BCS CTO_in_Res V3
Angular JS 2_0 BCS CTO_in_Res V3Angular JS 2_0 BCS CTO_in_Res V3
Angular JS 2_0 BCS CTO_in_Res V3Bruce Pentreath
 

Ähnlich wie Sergey Ilinsky Presentation Ample Sdk (20)

Using SVG with Ample SDK cross browser
Using SVG with Ample SDK cross browserUsing SVG with Ample SDK cross browser
Using SVG with Ample SDK cross browser
 
Html 5 in a big nutshell
Html 5 in a big nutshellHtml 5 in a big nutshell
Html 5 in a big nutshell
 
Location Based Services Without the Cocoa
Location Based Services Without the CocoaLocation Based Services Without the Cocoa
Location Based Services Without the Cocoa
 
Front-end development introduction (JavaScript). Part 2
Front-end development introduction (JavaScript). Part 2Front-end development introduction (JavaScript). Part 2
Front-end development introduction (JavaScript). Part 2
 
Angular js mobile jsday 2014 - Verona 14 may
Angular js mobile   jsday 2014 - Verona 14 mayAngular js mobile   jsday 2014 - Verona 14 may
Angular js mobile jsday 2014 - Verona 14 may
 
Declarative and standards-based web application development with the Ample SDK
Declarative and standards-based web application development with the Ample SDKDeclarative and standards-based web application development with the Ample SDK
Declarative and standards-based web application development with the Ample SDK
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
 
Apache Flex and the imperfect Web
Apache Flex and the imperfect WebApache Flex and the imperfect Web
Apache Flex and the imperfect Web
 
Hyperion EPM APIs - Added value from HFM, Workspace, FDM, Smartview, and Shar...
Hyperion EPM APIs - Added value from HFM, Workspace, FDM, Smartview, and Shar...Hyperion EPM APIs - Added value from HFM, Workspace, FDM, Smartview, and Shar...
Hyperion EPM APIs - Added value from HFM, Workspace, FDM, Smartview, and Shar...
 
Ajax
Ajax Ajax
Ajax
 
IPhone Web Development With Grails from CodeMash 2009
IPhone Web Development With Grails from CodeMash 2009IPhone Web Development With Grails from CodeMash 2009
IPhone Web Development With Grails from CodeMash 2009
 
Building Complex GUI Apps The Right Way. With Ample SDK - SWDC2010
Building Complex GUI Apps The Right Way. With Ample SDK - SWDC2010Building Complex GUI Apps The Right Way. With Ample SDK - SWDC2010
Building Complex GUI Apps The Right Way. With Ample SDK - SWDC2010
 
Integrate any Angular Project into WebSphere Portal
Integrate any Angular Project into WebSphere PortalIntegrate any Angular Project into WebSphere Portal
Integrate any Angular Project into WebSphere Portal
 
HTML5 and Other Modern Browser Game Tech
HTML5 and Other Modern Browser Game TechHTML5 and Other Modern Browser Game Tech
HTML5 and Other Modern Browser Game Tech
 
Web II - 01 - Introduction to server-side development
Web II - 01 - Introduction to server-side developmentWeb II - 01 - Introduction to server-side development
Web II - 01 - Introduction to server-side development
 
Moving from Web 1.0 to Web 2.0
Moving from Web 1.0 to Web 2.0Moving from Web 1.0 to Web 2.0
Moving from Web 1.0 to Web 2.0
 
HTML5 and CSS3 Techniques You Can Use Today
HTML5 and CSS3 Techniques You Can Use TodayHTML5 and CSS3 Techniques You Can Use Today
HTML5 and CSS3 Techniques You Can Use Today
 
TestUpload
TestUploadTestUpload
TestUpload
 
Angular JS 2_0 BCS CTO_in_Res V3
Angular JS 2_0 BCS CTO_in_Res V3Angular JS 2_0 BCS CTO_in_Res V3
Angular JS 2_0 BCS CTO_in_Res V3
 
Echo HTML5
Echo HTML5Echo HTML5
Echo HTML5
 

Mehr von Ajax Experience 2009

Eric Beland Ajax Load Testing Considerations
Eric Beland Ajax Load Testing ConsiderationsEric Beland Ajax Load Testing Considerations
Eric Beland Ajax Load Testing ConsiderationsAjax Experience 2009
 
Chanhao Jiang And David Wei Presentation Quickling Pagecache
Chanhao Jiang And David Wei Presentation Quickling PagecacheChanhao Jiang And David Wei Presentation Quickling Pagecache
Chanhao Jiang And David Wei Presentation Quickling PagecacheAjax Experience 2009
 
Jason.O Keefe.Genuitec.Presentation.Final
Jason.O Keefe.Genuitec.Presentation.FinalJason.O Keefe.Genuitec.Presentation.Final
Jason.O Keefe.Genuitec.Presentation.FinalAjax Experience 2009
 
Colin Clark Accessible U Is With J Query And Infusion[1]
Colin Clark Accessible U Is With J Query And Infusion[1]Colin Clark Accessible U Is With J Query And Infusion[1]
Colin Clark Accessible U Is With J Query And Infusion[1]Ajax Experience 2009
 
Scott Isaacs Presentationajaxexperience (Final)
Scott Isaacs Presentationajaxexperience (Final)Scott Isaacs Presentationajaxexperience (Final)
Scott Isaacs Presentationajaxexperience (Final)Ajax Experience 2009
 
Chris Williams Presentation Dissident
Chris Williams Presentation DissidentChris Williams Presentation Dissident
Chris Williams Presentation DissidentAjax Experience 2009
 
Ted Husted Presentation Testing Ajax Applications Ae2009
Ted Husted Presentation Testing Ajax Applications Ae2009Ted Husted Presentation Testing Ajax Applications Ae2009
Ted Husted Presentation Testing Ajax Applications Ae2009Ajax Experience 2009
 
Ted Husted Api Doc Smackdown Ae2009
Ted Husted Api Doc Smackdown Ae2009Ted Husted Api Doc Smackdown Ae2009
Ted Husted Api Doc Smackdown Ae2009Ajax Experience 2009
 
Patrick Lightbody Presentation Tae Slides
Patrick Lightbody Presentation Tae SlidesPatrick Lightbody Presentation Tae Slides
Patrick Lightbody Presentation Tae SlidesAjax Experience 2009
 
Laurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus PresentationLaurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus PresentationAjax Experience 2009
 
Jon Trelfa Presentation From Desktop To Web – Getting It Right
Jon Trelfa Presentation From Desktop To Web – Getting It RightJon Trelfa Presentation From Desktop To Web – Getting It Right
Jon Trelfa Presentation From Desktop To Web – Getting It RightAjax Experience 2009
 
Douglas Crockford Presentation Goodparts
Douglas Crockford Presentation GoodpartsDouglas Crockford Presentation Goodparts
Douglas Crockford Presentation GoodpartsAjax Experience 2009
 
Douglas Crockford Presentation Jsonsaga
Douglas Crockford Presentation JsonsagaDouglas Crockford Presentation Jsonsaga
Douglas Crockford Presentation JsonsagaAjax Experience 2009
 
David Wei And Changhao Jiang Presentation
David Wei And Changhao Jiang PresentationDavid Wei And Changhao Jiang Presentation
David Wei And Changhao Jiang PresentationAjax Experience 2009
 
Brian Le Roux Presentation Introducing Phone Gap
Brian Le Roux Presentation Introducing Phone GapBrian Le Roux Presentation Introducing Phone Gap
Brian Le Roux Presentation Introducing Phone GapAjax Experience 2009
 
Ted Husted Presentation Testing The Testers Ae2009
Ted Husted Presentation Testing The Testers Ae2009Ted Husted Presentation Testing The Testers Ae2009
Ted Husted Presentation Testing The Testers Ae2009Ajax Experience 2009
 

Mehr von Ajax Experience 2009 (20)

Eric Beland Ajax Load Testing Considerations
Eric Beland Ajax Load Testing ConsiderationsEric Beland Ajax Load Testing Considerations
Eric Beland Ajax Load Testing Considerations
 
Chanhao Jiang And David Wei Presentation Quickling Pagecache
Chanhao Jiang And David Wei Presentation Quickling PagecacheChanhao Jiang And David Wei Presentation Quickling Pagecache
Chanhao Jiang And David Wei Presentation Quickling Pagecache
 
Jason.O Keefe.Genuitec.Presentation.Final
Jason.O Keefe.Genuitec.Presentation.FinalJason.O Keefe.Genuitec.Presentation.Final
Jason.O Keefe.Genuitec.Presentation.Final
 
Jenny Donnelly
Jenny DonnellyJenny Donnelly
Jenny Donnelly
 
Colin Clark Accessible U Is With J Query And Infusion[1]
Colin Clark Accessible U Is With J Query And Infusion[1]Colin Clark Accessible U Is With J Query And Infusion[1]
Colin Clark Accessible U Is With J Query And Infusion[1]
 
Scott Isaacs Presentationajaxexperience (Final)
Scott Isaacs Presentationajaxexperience (Final)Scott Isaacs Presentationajaxexperience (Final)
Scott Isaacs Presentationajaxexperience (Final)
 
Chris Williams Presentation Dissident
Chris Williams Presentation DissidentChris Williams Presentation Dissident
Chris Williams Presentation Dissident
 
Andrew Sutherland Presentation
Andrew Sutherland PresentationAndrew Sutherland Presentation
Andrew Sutherland Presentation
 
Bill Scott Presentation
Bill Scott PresentationBill Scott Presentation
Bill Scott Presentation
 
Ted Husted Presentation Testing Ajax Applications Ae2009
Ted Husted Presentation Testing Ajax Applications Ae2009Ted Husted Presentation Testing Ajax Applications Ae2009
Ted Husted Presentation Testing Ajax Applications Ae2009
 
Ted Husted Api Doc Smackdown Ae2009
Ted Husted Api Doc Smackdown Ae2009Ted Husted Api Doc Smackdown Ae2009
Ted Husted Api Doc Smackdown Ae2009
 
Patrick Lightbody Presentation Tae Slides
Patrick Lightbody Presentation Tae SlidesPatrick Lightbody Presentation Tae Slides
Patrick Lightbody Presentation Tae Slides
 
Laurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus PresentationLaurens Van Den Oever Xopus Presentation
Laurens Van Den Oever Xopus Presentation
 
Jon Trelfa Presentation From Desktop To Web – Getting It Right
Jon Trelfa Presentation From Desktop To Web – Getting It RightJon Trelfa Presentation From Desktop To Web – Getting It Right
Jon Trelfa Presentation From Desktop To Web – Getting It Right
 
Joe Mc Cann Tae Aria Presentation
Joe Mc Cann Tae Aria PresentationJoe Mc Cann Tae Aria Presentation
Joe Mc Cann Tae Aria Presentation
 
Douglas Crockford Presentation Goodparts
Douglas Crockford Presentation GoodpartsDouglas Crockford Presentation Goodparts
Douglas Crockford Presentation Goodparts
 
Douglas Crockford Presentation Jsonsaga
Douglas Crockford Presentation JsonsagaDouglas Crockford Presentation Jsonsaga
Douglas Crockford Presentation Jsonsaga
 
David Wei And Changhao Jiang Presentation
David Wei And Changhao Jiang PresentationDavid Wei And Changhao Jiang Presentation
David Wei And Changhao Jiang Presentation
 
Brian Le Roux Presentation Introducing Phone Gap
Brian Le Roux Presentation Introducing Phone GapBrian Le Roux Presentation Introducing Phone Gap
Brian Le Roux Presentation Introducing Phone Gap
 
Ted Husted Presentation Testing The Testers Ae2009
Ted Husted Presentation Testing The Testers Ae2009Ted Husted Presentation Testing The Testers Ae2009
Ted Husted Presentation Testing The Testers Ae2009
 

Kürzlich hochgeladen

From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 

Kürzlich hochgeladen (20)

From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 

Sergey Ilinsky Presentation Ample Sdk

  • 1. Ample SDK: Standards-based GUI Framework for Client-side Applications The Ajax Experience 2009 September 14-16 in Boston, MA
  • 2. Sergey Ilinsky http://www.ilinsky.com http://twitter.com/ilinsky
  • 3. 1. The Landscape of Client-side GUI Technologies 2. Ample SDK: Das Experiment 3. Using Ample SDK: Basics 4. Extending on Ample SDK 5. Showcase 6. Resources 7. Q&A Agenda
  • 4. October 17, 2007, Ajaxian.com Re-inventing XMLHttpRequest: Cross-browser implementation with sniffing capabilities
  • 5. Highlights: Fully functional implementation of XHR for IE7- Some 20 issues fixed in native implementations. (New reports are still coming) Extended to support [transparent] request sniffing.
  • 6. So I took on to re-inventing (re-implementing) web browser
  • 7. 1. The Landscape of Client-Side GUI Technologies 1.1 Server-Side vs. Client-Side 1.2 Libraries vs. Frameworks 1.3 Web Browsers
  • 8. 1.1 Server-Side vs. Client-Side Server-Side - app is orchestrated on the server - data and UI communicated to client combined - client-side hooks are not welcome Client-Side - app is orchestrated on the client (browser) - data communicated separately from UI
  • 9. 1.2 GUI Libraries vs. Frameworks Libraries: - help executing smaller development tasks - often used to «pimp-up» web-pages Frameworks: - bring another abstraction level - used to build «rich applications»
  • 10. 1.3 Web Browsers Two camps: Internet Explorer vs. Modern Browsers Problems: - Incompatible (sometimes incomplete) APIs - Too many versions, cool stuf in latest versions - Poor GUI facilities
  • 11. Hm.. But don't many libraries and frameworks clean that mess successfully while adding missing glyphs?
  • 12. Yes, they do. Every in its own way.
  • 13. 2. Ample SDK: Das Experiment 2.1 Objectives 2.2 Solution Architecture 2.3 Browser-within-a-browser? 2.4 Ample SDK Application Lifetime 2.5 Technologies Breakdown
  • 14. 2.1 Objectives Do not have: - new programming model - new APIs Do have: - ease of use (eliminate learning curve if possible) - better GUI technologies - separation of concerns - extensible architecture
  • 15. Meet Ample SDK Ample SDK is a piece of software that runs transparently in the layer between web browser and application. While running it provides the Logic of the application with standard cross-browser access to the User Interface.
  • 16. 2.2 Solution Architecture Runtime - runtime.js UI Languages - xhtml/xhtml.js - xul/xul.js+xul/xul.css - svg/svg.js - ...
  • 17. 2.3 Browser-within-a-browser? Ample SDK is in a way a web-browser (GUI aspect) - understands MLs (XHTML, XUL, SVG..) - provides DOM APIs (Core, Events, Selectors APIs) - uses CSS for styling (pseudo-classes, pseudo-elemnts)
  • 18. 2.4 Ample SDK Application Lifetime
  • 19. 2.5 Technologies Breakdown - Runtime - Scripting Technologies - XML Technologies - Styling Technologies - UI Markup Technologies
  • 20. Runtime: Scripting Technologies - Document Object Model - DOM Core (Level 2) - DOM Events (Level 3) - Selectors API - XML APIs - DOMParser, XMLSerializer - XSLTProcessor - XMLHttpRequest - UI Managers - Focus Manager - Drag&Drop Manager - Resize Manager - Capture Manager - SPI History Manager - Componentization Model
  • 21. Runtime: XML technologies - Xinclude 1.0 - SMIL3.0 (selected modules) - XML Schema 1.1 (datatypes module)
  • 22. Runtime: Styling Technologies - CSS 2.1 - CSS3 Namespaces - CSS3-UI (pseudo-classes, pseudo-elements)
  • 23. UI Markup Technologies - XHTML1 - XUL - SVG 1.2 Tiny - XHTML5 (in development) - XForms 1.1 (planned)
  • 24. 3. Using Ample SDK: Basics - XML for UI - CSS for Style - JavaScript for Logic
  • 25. Hello World! <!DOCTYPE html> <html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;> <head> <title>Hello, World!</title> <!-- (A) Ample SDK runtime and UI language --> <script type=&quot;text/javascript&quot; src=&quot;ample/runtime.js&quot;></script> <script type=&quot;text/javascript&quot; src=&quot;ample/languages/xhtml/xhtml.js&quot;></script> <!-- (1) Styling --> <style type=&quot;text/ample+css&quot;> b { color: red; } </style> <!-- (2) Logic --> <script type=&quot;text/javascript&quot;> function alertHelloWorld(oEvent) { alert('Element &quot;' + oEvent.target.tagName + '&quot; was clicked'); } </script> </head> <body> <!-- (3) Layout --> <script type=&quot;application/ample+xml&quot;> <b onclick=&quot;alertHelloWorld(event)&quot;>Hello, World!</b> </script> </body> </html>
  • 26. The Programming Model Programming against Ample SDK is as simple as doing it against... right, cross-browser browser!
  • 27. 3.1 Laying out Application UI Application GUI is created with XML or JS staticly: XML (XHTML, XUL, SVG..) dynamicly: JavaScript (DOM) or XML + importNode
  • 28. Embedding XML UI into a web page a) Inline, using a script tag with type=&quot;application/ample+xml&quot; <body> <!-- other HTML code --> <script type=&quot;application/ample+xml&quot;> <!-- Ample SDK inline XML markup --> </script> <!-- other HTML code --> </body> b) Referencing a resource, using a script tag with src attribute <body> <!-- other HTML code --> <script type=&quot;application/ample+xml&quot; src=&quot;ui.xml&quot;></script> <!-- other HTML code --> </body> c) Inline, using ample.open() and ample.close() <body> <!-- other HTML code --> <script type=&quot;text/javascript&quot;>ample.open()</script> <!-- Ample SDK inline XML markup --> <script type=&quot;text/javascript&quot;>ample.close()</script> <!-- other HTML code --> </body>
  • 29. Using XHTML 1 and XHTML 5 <article> <header> <h1>Apples</h1> <p>Tasty, delicious fruit!</p> </header> <p>The apple is the pomaceous fruit of the apple tree.</p> <section> <h1>Red Delicious</h1> <p>These bright red apples are the most common found in many supermarkets.</p> </section> <section> <h1>Granny Smith</h1> <p>These juicy, green apples and make a great filling for apple pies.</p> </section> <footer> <h1>Apples</h1> <p>Tasty, delicious fruit!</p> </footer> </article>
  • 30. Using XUL (Mozilla technology) <xul:tabbox xmlns:xul=&quot;http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul&quot;> <xul:tabs> <xul:tab label=&quot;checkbox&quot; /> <xul:tab label=&quot;textbox&quot; /> <xul:tab label=&quot;datepicker&quot; /> </xul:tabs> <xul:tabpanels> <xul:tabpanel> <xul:checkbox /> </xul:tabpanel> <xul:tabpanel> <xul:textbox /> </xul:tabpanel> <xul:tabpanel> <xul:datepicker /> </xul:tabpanel> </xul:tabpanels> </xul:tabbox>
  • 31. Using SVG1.2 Tiny <svg:svg viewBox=&quot;0,0 400,400&quot; height=&quot;400px&quot; width=&quot;400px&quot; xmlns:svg=&quot;http://www.w3.org/2000/svg&quot; xmlns:smil=&quot;http://www.w3.org/2008/SMIL30/&quot;> <svg:circle cx=&quot;200&quot; cy=&quot;200&quot; r=&quot;10&quot; fill=&quot;red&quot; opacity=&quot;1&quot; stroke=&quot;black&quot; stroke-width=&quot;1&quot;> <smil:animate begin=&quot;click&quot; decelerate=&quot;0.5&quot; to=&quot;200&quot; attributeName=&quot;r&quot; dur=&quot;500ms&quot;/> </svg:circle> </svg:svg> Works in Internet Explorer 5.5 too Modules Implemented: 5. Document Structure 8. Paths 9. Basic Shapes 10. Text 12. Animation (SMIL)
  • 32. Using DOM-Core for building UI dynamically var sXULNameSpace = &quot;http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul&quot;; var popup = ample.getElementById(&quot;items-popup&quot;); var item4 = ample.createElementNS (sXULNameSpace, &quot;xul:menuitem&quot;); popup.appendChild(item4); item3.setAttribute(&quot;label&quot;, &quot;Item 3&quot;); item3.setAttribute(&quot;value&quot;, &quot;3&quot;); var oRequest = new XMLHttpRequest; oRequest.open(&quot;GET&quot;, &quot;wizard.xml&quot;, false); oRequest.onreadystatechange = function() { if (oRequest.readyState == 4) { var oFragment = ample.importNode (oRequest.responseXML.documentElement, true); ample.querySelector(&quot;#target&quot;).appendChild(oFragment); } }
  • 33. Using XInclude to merge XML documents 1. <div xmlns:xi=&quot;http://www.w3.org/2001/XInclude&quot;> 2. <xi:include href=&quot;Menubar.xml&quot; /> 3. <xi:include href=&quot;Editor.xml&quot; /> 4. <xi:include href=&quot;Statusbar.xml&quot; /> 5. </div>
  • 34. 3.2 Styling Application UI Styling GUI is done with CSS... nicely.
  • 35. Embedding CSS stylesheets in a web page a) Inline, using a style tag with type=&quot;text/ample+css&quot; <style type=&quot;text/ample+css&quot;> /* Ample SDK inline stylesheet */ </style> b) Referencing a resource, using a link tag with href attribute <link type=&quot;text/ample+css&quot; rel=&quot;stylesheet&quot; href=&quot;stylesheet.css&quot;/>
  • 36. Using CSS for styling UI 1) Namespaced selectors for styling component @namespace xul &quot;http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul&quot;; xul|menulist { width: 200px; } 2) Pseudo-class selectors for styling component state @namespace xul &quot;http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul&quot;; xul|datepicker:focus { background-color: pink; } 3) Pseudo-element selectors for styling component view @namespace xul &quot;http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul&quot;; xul|colorpicker::input { border: solid 1px blue; } xul|colorpicker::button { background-image: url(&quot;colorpicker.png&quot;); }
  • 37. 3.3 Writing Application Logic Implementing application [View] logic is about receiving UI events and updating UI state appropriately. In Ample SDK the Application UI is represented by a DOM tree (mainly built with UI elements), that you can access or modify in a standard and consistent way. UI events are fired on elements in the tree with which the user interacts. Once dispatched they propagate through the tree and can be picked up for handling.
  • 38. Embedding JavaScript GUI Logic into a web page a) Inline, using a script tag with type=&quot;text/javascript&quot; <script type=&quot;text/javascript&quot;> /* JavaScript UI Logic */ </script> b) Referencing a resource, using script tag with src attribute <script type=&quot;text/javascript&quot; src=&quot;application.js&quot;></script>
  • 39. The ample scripting object The ample scripting object in the Ample SDK is similar to the document scripting object available in the browser
  • 40. Navigating / Altering UI Document Tree a) Navigating the tree - firstChild, lastChild, previousSibling, nextSibling, childNodes, parentNode etc. - getElementById, getElementsByTagName and getElementsByTagNameNS - querySelector and querySelectorAll b) Altering the tree - setAttribute / setAttributeNS, getAttribute / getAttributeNS and removeAttribute / removeAttributeNS - createElement / createElementNS, createTextNode, appendChild, insertBefore, removeChild and replaceChild - importNode
  • 41. Registering Event Handlers and Handling UI Events a) Dynamically, using the DOM Events API // Alert event current target tagName oElement.addEventListener(&quot;click&quot;, function(oEvent) { alert(oEvent.currentTarget.tagName) }, true ); // Cancel user selection (Also in IE) oElement.addEventListener(&quot;mousedown&quot;, function(oEvent) { oEvent.preventDefault(); }, false) b) Inline, using a on{event} attribute <xul:scale onchange=&quot;alert(this.getAttribute('value'))&quot; min=&quot;0&quot; max=&quot;100&quot; value=&quot;50&quot;/>
  • 42. Using Drag And Drop Manager Events: dragstart, drag, dragend, dragenter, dragleave, drop Properties: $draggable, $droppable Pseudo-classes: drag, drop <div xmlns:aml=&quot;http://www.amplesdk.com/ns/aml&quot; ondrop=&quot;if (event.relatedTarget.parentNode != event.target) event.target.appendChild(event.relatedTarget)&quot;> <div aml:droppable=&quot;true&quot; class=&quot;droppable&quot;> <div aml:draggable=&quot;true&quot; class=&quot;draggable&quot;> Container 1: drag me and drop to another container </div> <div aml:draggable=&quot;true&quot; class=&quot;draggable&quot;> Container 2: drag me and drop to another container </div> </div> <div aml:droppable=&quot;true&quot; class=&quot;droppable&quot;> </div> </div> .draggable { width: 100px; height: 100px; background-color: pink; border: solid 1px red; cursor: move; } .droppable { width: 300px; height: 320px; padding: 10px; float: left; background-color: lightgreen; border: solid 1px green; } div:drag { border-color: black; position: relative; } div:drop { border-style: dashed; }
  • 43. Using Resize Manager Events: resizestart, resize, resizeend CSS Pseudo-classes: resize Properties: $resizable <div aml:resizable=&quot;true&quot; class=&quot;resizable&quot; xmlns:aml=&quot;http://www.amplesdk.com/ns/aml&quot;> Resize me </div> @namespace &quot;http://www.w3.org/1999/xhtml&quot;; div.resizable { width: 250px; height: 250px; background-color: pink; border: solid 1px red; max-width: 500px; } div.resizable:resize { background-color: lightyellow; }
  • 44. Using History Manager Methods: $bookmark(state) Events: hashchange ample.addEventListener(&quot;hashchange&quot;, function(oEvent) { // Implement logic alert(navigator.location.hash) }, false);
  • 45. Using Capture Manager Methods: $setCapture/$releaseCapture, $setModal/$releaseModal Events: capture, modal <div> <button onclick=&quot;alert('Hello')&quot;>alert</button> <div id=&quot;dialog&quot; style=&quot;border: solid 1px red&quot;> <button onclick=&quot;this.parentNode.$releaseCapture(true)&quot;>release capture</button> </div> <button onclick=&quot;ample.getElementById('dialog').$setCapture(true)&quot;>set capture</button> </div>
  • 46. Using XML APIs Transforming XML document with XSL-T example // Load stylesheet document oXMLHttpRequest.open(&quot;GET&quot;, &quot;stylesheet.xsl&quot;, false); oXMLHttpRequest.send(null); var oStylesheet = oXMLHttpRequest.responseXML; // Load input document oXMLHttpRequest.open(&quot;GET&quot;, &quot;input.xml&quot;, false); oXMLHttpRequest.send(null); var oInput = oXMLHttpRequest.responseXML; // Create XSLTProcessor and import stylesheet into it var oXSLTProcessor = new XSLTProcessor; oXSLTProcessor.importStylesheet(oStylesheet); // Transform input document to output document and alert result var oOutput = oXSLTProcessor.transformToDocument(oInput); alert(new XMLSerializer().serializeToString(oOutput));
  • 47. JSON vs. XML JSON/XML for data XML/JSON for UI Whatever you like!
  • 48. 4. Extending on Ample SDK 4.1 Prototyping Objects / Creating new APIs 4.2 Creating Custom Markup Languages 4.3 Implementing Global UI Managers
  • 49. 4.1 Prototyping objects/ Defining new APIs Objects inheritance in Ample SDK (simplified): AMLNode:: AMLDocument AMLCharacterData:: AMLText AMLElement:: MyComponent AMLElement.prototype.listenOnce = function(sEvent, fHandler) { this.addEventListener(sEvent, function(oEvent) { // Remove event listener this.removeEventListener(sEvent, arguments.callee, false); // Handle Event fHandler.call(this, oEvent); }, false) }
  • 50. 4.2 Creating Custom Markup Language // Create new Namespace object var MyNamespace = new AMLNamespace; // Register new Namespace with Ample SDK ample.domConfig.setNamespace(&quot;http://www.mysite.com/ns/ui&quot;);
  • 51. Creating Custom Component // Define Component Constructor var MyButton = function() { // This is the constructor }; // Set Component Prototype MyButton.prototype = new AMLElement; // Register new Component with Namespace MyNamespace.setElement(&quot;button&quot;, MyButton);
  • 52. Defining Component Presentation MyCombobox.prototype.$getTagOpen = function() { return '<div class=&quot;my-combobox&quot;> <input type=&quot;text&quot; value=&quot;' + this.getAttribute(&quot;text&quot;)+ '&quot; class=&quot;my-combobox—input&quot; /> <div class=&quot;my-combobox—button&quot;/> <div class=&quot;my-combobox—gateway&quot;>'; } MyCombobox.prototype.$getTagClose = function() { return ' </div> </div>'; }
  • 53. Specifing attribute default values MyCombobox.attributes = { disabled: &quot;false&quot; }
  • 54. Handling UI Events at the Component Level Event handlers defined on component classes are executed at the bubbling or target phase only if event default action was not prevented MyCombobox.handlers = { focus: function(oEvent) { // TODO: dispatch DOMActivate event } }
  • 55. Handling Attribute changes MyCombobox.handlers = { &quot;DOMAttrModified&quot;: function(oEvent) { } }
  • 56. Handling Component Insertion / Removal MyCombobox.handlers = { // Component inserted into document &quot;DOMNodeInsertedIntoDocument&quot;: function(oEvent) { }, // Component removed from document &quot;DOMNodeRemovedFromDocument&quot;: function(oEvent) { } }
  • 57. Defining Properties and Methods // Property MyCombobox.prototype.tabIndex = 0; // Method MyCombobox.prototype.selectItem = function(oItem) { }
  • 58. A domain-specific UI markup technology?
  • 60. 4.3 Writing Global UI Managers A UI Manager is a plugin that reacts to primitive UI events and synthetizes other more enhanced ones Mouse Gesture UI Manager?
  • 62. Implementation Aspects: Application Logic: PAC approach UI Technology: XHTML+XUL+Custom components Server-side — 2 services: - Static for UI - Dynamic for Data (JSON to SOAP)
  • 63. Wrapping up: Why Ample SDK is relevant? - Natural programming model - Uses APIs that will stay - Better UI building bricks — XUL et alii - Enables quite a bit of SVG in Internet Explorer - Allows creating DS markup technologies
  • 64. 6. Resources IRC Channels #amplesdk on irc.freenode.net #amplesdk-dev on irc.freenode.net (Framework Developers) Mailing Lists / Discussion Groups http://groups.google.com/group/amplesdk http://groups.google.com/group/amplesdk-dev (Framework Developers) Bugtracker http://www.amplesdk.com/bugtracker/ Documentation (online/offline) http://www.amplesdk.com/reference/ Developer Tools Aptana IDE plugin Firebug plugin (in development)