SlideShare una empresa de Scribd logo
1 de 41
Sencha @ Xero Craig Walker, Chief Technology Officer www.xero.com
ExtJS @ Xero Craig Walker, Chief Technology Officer www.xero.com
@storminwalker Craig Walker, Chief Technology Officer www.xero.com
Who is Xero? Started in 2006 by Rod Drury and Hamish Edwards IPO in June 2007 100 staff in 7 locations (HQ in Wellington) and over 27,000 customers in over 50 countries A New Zealand business with global aspirations
What is Xero? Software-as-a-Service small business platform starting as an online accounting system Revolutionising the way small businesses are managed Staff and advisors all connected and unconstrained by legacy process or technology
Xero Business
The Xero Framework Pure end-to-end web development framework designed from the ground up to be the platform for Xero HTML, JavaScript ASP.NET 4.0/XSLT/ExtJS XSLT ASP.NET Business event (transaction) engine C#/WCF Multi-dimensional general ledger Object relational model LLBLGen Pro Multi-tenanted data model SQL Server 2008
XSLT & ASP.NET MVC pattern using ASP.NET as a platform and XSLT as the view engine Combined with integrated conventions XSLT is a robust and fast view engine Allows our designers to incorporate their designs into the application without needing to be programmers It’s all about painting screens
PrototypeScript.aculo.us
The Invoice Grid
What we liked The grid! Pretty out-of-the-box Ability to theme using pure CSS Impressive component library Object-oriented Event subsystem Performance
What we didn’t Wicked learning curve HTML is fugly (heavy DOM) Theming was harder than expected Lack of a distribution builder Maintainability – very easy to write very bad code Performance
UI ExtJS J S O N Server
UI ExtJS J S O N J S O N J S O N Server Server Server
Progressive Enhancement
UI ExtJS HTML J S O N H T M L HTTPHandler ASP.NET
Evolution
Static classes Ext.ns(“XERO”, “XERO.yada”); XERO.yada.MyClass = { init: function() {     new Ext.Panel({ renderTo: “divId”, cls: “xero-panel”,      items: [         new Ext.grid.GridPanel({ … })      ]     });   } }  console.log(XERO.yada.MyClass.init());
Componentised Ext.ns(“XERO”, “XERO.yada”); XERO.yada.MyPanel = Ext.extend(Ext.Panel, { cls: “xero-panel”, renderTo: “divId”, initComponent: function() { this.grid = new Ext.grid.GridPanel({ … }); this.items = [ this.grid ]; XERO.yada.MyPanel.superclass.initComponent.call(this);  } }); Ext.reg(“xero-panels-mypanel”, XERO.yada.MyPanel); varmyPanel = Ext.create({  xtype: “xero-panels-mypanel”,  renderTo: “anotherDivId”  });
Xero Help
UI ExtJS J S O N ASP.NET MVC
Xero Personal
UI ExtJS HTML J S O N H T M L ASP.NET MVC
Xero Touch
UI Sencha Touch J S O N ASP.NET MVC
Why Sencha Touch? Cross-platform Looks native, feels native Faster, cheaper, easier to build with Highly customisable Flexible deployment HTML5/CSS3 goodness
Sencha Touch ≈ ExtJS 4.0
Ext.regController Controller Model View Ext.regModel Ext.regStore Ext.extend(Ext.Panel {  ... }
Theming SASS & Compass (compass-style.org) CSS3 is awesome – SCSS is awesomer @import “compass/css3/gradient”; $width: 100px; .button {   width: $width;   .linear { @include linear-gradient( color-stops(white, #c39 30%, #b7f 70%, #aaa)    );   } } .button {   width: 100px; } .button .linear { background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-    stop(0%, #ffffff), color-stop(30%, #cc3399), color-stop(70%,     #bb77ff), color-stop(100%, #aaaaaa));  background-image: -moz-linear-gradient(top, #ffffff 0%, #cc3399     30%, #bb77ff 70%, #aaaaaa 100%); background-image: linear-gradient(top, #ffffff 0%, #cc3399 30%,     #bb77ff 70%, #aaaaaa 100%); }
Tips & Tricks
Tools Browsers – obviously Firebug (getfirebug.com) Illumination (illumination-for-developers.com) Web Inspector YSlow (developer.yahoo.com/yslow)
Object-oriented Use namespaces to define your library Define components – code for reusability Extend first, write plugins second (not at all if possible)
Events rock! Use events to communicate between components Use an event manager Use event delegation Ext.get('header').on('click', function(e,target){   if (Ext.get(target).is('.item')){   } }, this, {   delegate: 'a.menu’ })
Override appropriately Do not edit the library files DO NOT EDIT THE LIBRARY FILES! Use an overrides file if you need to override the framework Do the same with CSS (but you should be using cls properties)
Define a directory structure Break your code into small files Use build tools to compile for performance Use extjs-debug-all.js& extjs-debug-base.js during dev(but never prod!) Keep the framework up-to-date – upgrade as often as you can
Worry about performance Understand client-side performance rules & use them concatenate, minify, compress!
Theming Use CSS Understand XTemplate
Sencha.com Read the forums Read the docs Read the source!
Any questions? www.xero.com
We’re always hiring!www.xero.com/careers/

Más contenido relacionado

La actualidad más candente

Microsoft WebMatrix Platform Overview
Microsoft WebMatrix Platform OverviewMicrosoft WebMatrix Platform Overview
Microsoft WebMatrix Platform Overview
Spiffy
 
Front end optimization
Front end optimizationFront end optimization
Front end optimization
Abhishek Anand
 

La actualidad más candente (20)

Vered Flis: Because performance matters! Architecture Next 20
Vered Flis: Because performance matters! Architecture Next 20Vered Flis: Because performance matters! Architecture Next 20
Vered Flis: Because performance matters! Architecture Next 20
 
Progressive Web Application - Advanced Topics
Progressive Web Application - Advanced TopicsProgressive Web Application - Advanced Topics
Progressive Web Application - Advanced Topics
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Apps
 
Intro to web development - kingscel
Intro to web development - kingscelIntro to web development - kingscel
Intro to web development - kingscel
 
Security Webinar: Harden the Heart of Your WordPress SiteSe
Security Webinar: Harden the Heart of Your WordPress SiteSeSecurity Webinar: Harden the Heart of Your WordPress SiteSe
Security Webinar: Harden the Heart of Your WordPress SiteSe
 
Lazy load Website Assets
Lazy load Website AssetsLazy load Website Assets
Lazy load Website Assets
 
What’s right & wrong with WCF-WebHTTP Adapter?
What’s right & wrong with WCF-WebHTTP Adapter?What’s right & wrong with WCF-WebHTTP Adapter?
What’s right & wrong with WCF-WebHTTP Adapter?
 
Lessons learned with HTML5
Lessons learned with HTML5Lessons learned with HTML5
Lessons learned with HTML5
 
Essential On-Page SEO
Essential On-Page SEOEssential On-Page SEO
Essential On-Page SEO
 
Host, deploy & scale Blazor Server Apps
Host, deploy & scale Blazor Server AppsHost, deploy & scale Blazor Server Apps
Host, deploy & scale Blazor Server Apps
 
Fully Optimized
Fully OptimizedFully Optimized
Fully Optimized
 
Microsoft WebMatrix Platform Overview
Microsoft WebMatrix Platform OverviewMicrosoft WebMatrix Platform Overview
Microsoft WebMatrix Platform Overview
 
Front end optimization
Front end optimizationFront end optimization
Front end optimization
 
ASP.NET Quick Wins - 20 Tips and Tricks To Shift Your Application into High Gear
ASP.NET Quick Wins - 20 Tips and Tricks To Shift Your Application into High GearASP.NET Quick Wins - 20 Tips and Tricks To Shift Your Application into High Gear
ASP.NET Quick Wins - 20 Tips and Tricks To Shift Your Application into High Gear
 
WordPress Hosting Survival Guide
WordPress Hosting Survival Guide WordPress Hosting Survival Guide
WordPress Hosting Survival Guide
 
Core Web Vitals Optimization for any website, especially WordPress
Core Web Vitals Optimization for any website, especially WordPressCore Web Vitals Optimization for any website, especially WordPress
Core Web Vitals Optimization for any website, especially WordPress
 
AEM responsive
AEM responsiveAEM responsive
AEM responsive
 
WordPress Affiliate Toolkit - Affiliate Summit East 2014
WordPress Affiliate Toolkit - Affiliate Summit East 2014WordPress Affiliate Toolkit - Affiliate Summit East 2014
WordPress Affiliate Toolkit - Affiliate Summit East 2014
 
Mobile web apps in pure Java
Mobile web apps in pure JavaMobile web apps in pure Java
Mobile web apps in pure Java
 
Living on the Edge: Elevating your SEO toolkit to the CDN
Living on the Edge: Elevating your SEO toolkit to the CDNLiving on the Edge: Elevating your SEO toolkit to the CDN
Living on the Edge: Elevating your SEO toolkit to the CDN
 

Destacado

Xero Client Presentation
Xero Client PresentationXero Client Presentation
Xero Client Presentation
hlsbs
 

Destacado (6)

Xero News is Good News
Xero News is Good NewsXero News is Good News
Xero News is Good News
 
Xero accounting
Xero accountingXero accounting
Xero accounting
 
Xero Client Presentation
Xero Client PresentationXero Client Presentation
Xero Client Presentation
 
Xero | Better by Design
Xero | Better by DesignXero | Better by Design
Xero | Better by Design
 
Cloud Xero #1 - Intro to Cloud Computing
Cloud Xero #1 - Intro to Cloud ComputingCloud Xero #1 - Intro to Cloud Computing
Cloud Xero #1 - Intro to Cloud Computing
 
What is Xero cloud accounting software?
What is Xero cloud accounting software?What is Xero cloud accounting software?
What is Xero cloud accounting software?
 

Similar a Sencha At Xero

Bd conf sencha touch workshop
Bd conf sencha touch workshopBd conf sencha touch workshop
Bd conf sencha touch workshop
James Pearce
 
Developing your first application using FIWARE
Developing your first application using FIWAREDeveloping your first application using FIWARE
Developing your first application using FIWARE
FIWARE
 
Ajax Performance Tuning and Best Practices
Ajax Performance Tuning and Best PracticesAjax Performance Tuning and Best Practices
Ajax Performance Tuning and Best Practices
Doris Chen
 
Codebits 2012 - Fast relational web site construction.
Codebits 2012 - Fast relational web site construction.Codebits 2012 - Fast relational web site construction.
Codebits 2012 - Fast relational web site construction.
Nelson Gomes
 

Similar a Sencha At Xero (20)

Bd conf sencha touch workshop
Bd conf sencha touch workshopBd conf sencha touch workshop
Bd conf sencha touch workshop
 
GEL Architecture
GEL ArchitectureGEL Architecture
GEL Architecture
 
XRX Presentation to Minnesota OTUG
XRX Presentation to Minnesota OTUGXRX Presentation to Minnesota OTUG
XRX Presentation to Minnesota OTUG
 
ASPNET Roadmap
ASPNET RoadmapASPNET Roadmap
ASPNET Roadmap
 
WinRT and the Web: Keeping Windows Store Apps Alive and Connected
WinRT and the Web: Keeping Windows Store Apps Alive and ConnectedWinRT and the Web: Keeping Windows Store Apps Alive and Connected
WinRT and the Web: Keeping Windows Store Apps Alive and Connected
 
Developing your first application using FIWARE
Developing your first application using FIWAREDeveloping your first application using FIWARE
Developing your first application using FIWARE
 
Ext JS Introduction
Ext JS IntroductionExt JS Introduction
Ext JS Introduction
 
php
phpphp
php
 
Kickstart sencha extjs
Kickstart sencha extjsKickstart sencha extjs
Kickstart sencha extjs
 
Normalizing x pages web development
Normalizing x pages web development Normalizing x pages web development
Normalizing x pages web development
 
Scaling the Content Repository with Elasticsearch
Scaling the Content Repository with ElasticsearchScaling the Content Repository with Elasticsearch
Scaling the Content Repository with Elasticsearch
 
20141002 delapsley-socalangularjs-final
20141002 delapsley-socalangularjs-final20141002 delapsley-socalangularjs-final
20141002 delapsley-socalangularjs-final
 
Aspmvc
AspmvcAspmvc
Aspmvc
 
Wt unit 2 ppts client sied technology
Wt unit 2 ppts client sied technologyWt unit 2 ppts client sied technology
Wt unit 2 ppts client sied technology
 
Wt unit 2 ppts client side technology
Wt unit 2 ppts client side technologyWt unit 2 ppts client side technology
Wt unit 2 ppts client side technology
 
Silverlight Developer Introduction
Silverlight   Developer IntroductionSilverlight   Developer Introduction
Silverlight Developer Introduction
 
Ajax Performance Tuning and Best Practices
Ajax Performance Tuning and Best PracticesAjax Performance Tuning and Best Practices
Ajax Performance Tuning and Best Practices
 
Codebits 2012 - Fast relational web site construction.
Codebits 2012 - Fast relational web site construction.Codebits 2012 - Fast relational web site construction.
Codebits 2012 - Fast relational web site construction.
 
Ext Js
Ext JsExt Js
Ext Js
 
An Introduction to Web Components
An Introduction to Web ComponentsAn Introduction to Web Components
An Introduction to Web Components
 

Último

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Último (20)

The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 

Sencha At Xero

  • 1. Sencha @ Xero Craig Walker, Chief Technology Officer www.xero.com
  • 2. ExtJS @ Xero Craig Walker, Chief Technology Officer www.xero.com
  • 3. @storminwalker Craig Walker, Chief Technology Officer www.xero.com
  • 4. Who is Xero? Started in 2006 by Rod Drury and Hamish Edwards IPO in June 2007 100 staff in 7 locations (HQ in Wellington) and over 27,000 customers in over 50 countries A New Zealand business with global aspirations
  • 5. What is Xero? Software-as-a-Service small business platform starting as an online accounting system Revolutionising the way small businesses are managed Staff and advisors all connected and unconstrained by legacy process or technology
  • 7. The Xero Framework Pure end-to-end web development framework designed from the ground up to be the platform for Xero HTML, JavaScript ASP.NET 4.0/XSLT/ExtJS XSLT ASP.NET Business event (transaction) engine C#/WCF Multi-dimensional general ledger Object relational model LLBLGen Pro Multi-tenanted data model SQL Server 2008
  • 8. XSLT & ASP.NET MVC pattern using ASP.NET as a platform and XSLT as the view engine Combined with integrated conventions XSLT is a robust and fast view engine Allows our designers to incorporate their designs into the application without needing to be programmers It’s all about painting screens
  • 11. What we liked The grid! Pretty out-of-the-box Ability to theme using pure CSS Impressive component library Object-oriented Event subsystem Performance
  • 12. What we didn’t Wicked learning curve HTML is fugly (heavy DOM) Theming was harder than expected Lack of a distribution builder Maintainability – very easy to write very bad code Performance
  • 13. UI ExtJS J S O N Server
  • 14. UI ExtJS J S O N J S O N J S O N Server Server Server
  • 16.
  • 17. UI ExtJS HTML J S O N H T M L HTTPHandler ASP.NET
  • 19. Static classes Ext.ns(“XERO”, “XERO.yada”); XERO.yada.MyClass = { init: function() { new Ext.Panel({ renderTo: “divId”, cls: “xero-panel”, items: [ new Ext.grid.GridPanel({ … }) ] }); } } console.log(XERO.yada.MyClass.init());
  • 20. Componentised Ext.ns(“XERO”, “XERO.yada”); XERO.yada.MyPanel = Ext.extend(Ext.Panel, { cls: “xero-panel”, renderTo: “divId”, initComponent: function() { this.grid = new Ext.grid.GridPanel({ … }); this.items = [ this.grid ]; XERO.yada.MyPanel.superclass.initComponent.call(this); } }); Ext.reg(“xero-panels-mypanel”, XERO.yada.MyPanel); varmyPanel = Ext.create({ xtype: “xero-panels-mypanel”, renderTo: “anotherDivId” });
  • 22. UI ExtJS J S O N ASP.NET MVC
  • 24. UI ExtJS HTML J S O N H T M L ASP.NET MVC
  • 26. UI Sencha Touch J S O N ASP.NET MVC
  • 27. Why Sencha Touch? Cross-platform Looks native, feels native Faster, cheaper, easier to build with Highly customisable Flexible deployment HTML5/CSS3 goodness
  • 28. Sencha Touch ≈ ExtJS 4.0
  • 29. Ext.regController Controller Model View Ext.regModel Ext.regStore Ext.extend(Ext.Panel { ... }
  • 30. Theming SASS & Compass (compass-style.org) CSS3 is awesome – SCSS is awesomer @import “compass/css3/gradient”; $width: 100px; .button { width: $width; .linear { @include linear-gradient( color-stops(white, #c39 30%, #b7f 70%, #aaa) ); } } .button { width: 100px; } .button .linear { background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color- stop(0%, #ffffff), color-stop(30%, #cc3399), color-stop(70%, #bb77ff), color-stop(100%, #aaaaaa)); background-image: -moz-linear-gradient(top, #ffffff 0%, #cc3399 30%, #bb77ff 70%, #aaaaaa 100%); background-image: linear-gradient(top, #ffffff 0%, #cc3399 30%, #bb77ff 70%, #aaaaaa 100%); }
  • 32. Tools Browsers – obviously Firebug (getfirebug.com) Illumination (illumination-for-developers.com) Web Inspector YSlow (developer.yahoo.com/yslow)
  • 33. Object-oriented Use namespaces to define your library Define components – code for reusability Extend first, write plugins second (not at all if possible)
  • 34. Events rock! Use events to communicate between components Use an event manager Use event delegation Ext.get('header').on('click', function(e,target){ if (Ext.get(target).is('.item')){ } }, this, { delegate: 'a.menu’ })
  • 35. Override appropriately Do not edit the library files DO NOT EDIT THE LIBRARY FILES! Use an overrides file if you need to override the framework Do the same with CSS (but you should be using cls properties)
  • 36. Define a directory structure Break your code into small files Use build tools to compile for performance Use extjs-debug-all.js& extjs-debug-base.js during dev(but never prod!) Keep the framework up-to-date – upgrade as often as you can
  • 37. Worry about performance Understand client-side performance rules & use them concatenate, minify, compress!
  • 38. Theming Use CSS Understand XTemplate
  • 39. Sencha.com Read the forums Read the docs Read the source!