SlideShare une entreprise Scribd logo
1  sur  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/

Contenu connexe

Tendances

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 20CodeValue
 
Progressive Web Application - Advanced Topics
Progressive Web Application - Advanced TopicsProgressive Web Application - Advanced Topics
Progressive Web Application - Advanced TopicsHiren Dave
 
Intro to web development - kingscel
Intro to web development - kingscelIntro to web development - kingscel
Intro to web development - kingscelKingsley Mensah
 
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 SiteSeWP Engine
 
Lazy load Website Assets
Lazy load Website AssetsLazy load Website Assets
Lazy load Website AssetsChris Love
 
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?BizTalk360
 
Lessons learned with HTML5
Lessons learned with HTML5Lessons learned with HTML5
Lessons learned with HTML5Neil Turner
 
Essential On-Page SEO
Essential On-Page SEOEssential On-Page SEO
Essential On-Page SEORaven Tools
 
Host, deploy & scale Blazor Server Apps
Host, deploy & scale Blazor Server AppsHost, deploy & scale Blazor Server Apps
Host, deploy & scale Blazor Server AppsJose Javier Columbie
 
Microsoft WebMatrix Platform Overview
Microsoft WebMatrix Platform OverviewMicrosoft WebMatrix Platform Overview
Microsoft WebMatrix Platform OverviewSpiffy
 
Front end optimization
Front end optimizationFront end optimization
Front end optimizationAbhishek Anand
 
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 GearKevin Griffin
 
WordPress Hosting Survival Guide
WordPress Hosting Survival Guide WordPress Hosting Survival Guide
WordPress Hosting Survival Guide WordCamp Sydney
 
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 WordPressClementYo
 
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 2014David Vogelpohl
 
Mobile web apps in pure Java
Mobile web apps in pure JavaMobile web apps in pure Java
Mobile web apps in pure JavaThomas Mattsson
 
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 CDNNils De Moor
 

Tendances (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
 

En vedette

Xero Client Presentation
Xero Client PresentationXero Client Presentation
Xero Client Presentationhlsbs
 
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 ComputingCraig Walker
 
What is Xero cloud accounting software?
What is Xero cloud accounting software?What is Xero cloud accounting software?
What is Xero cloud accounting software?MarketInvoice
 

En vedette (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?
 

Similaire à Sencha @ Xero: How ExtJS powers Xero's business platform

Bd conf sencha touch workshop
Bd conf sencha touch workshopBd conf sencha touch workshop
Bd conf sencha touch workshopJames Pearce
 
GEL Architecture
GEL ArchitectureGEL Architecture
GEL Architectureukdpe
 
XRX Presentation to Minnesota OTUG
XRX Presentation to Minnesota OTUGXRX Presentation to Minnesota OTUG
XRX Presentation to Minnesota OTUGOptum
 
ASPNET Roadmap
ASPNET RoadmapASPNET Roadmap
ASPNET Roadmapukdpe
 
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 ConnectedJeremy Likness
 
Developing your first application using FIWARE
Developing your first application using FIWAREDeveloping your first application using FIWARE
Developing your first application using FIWAREFIWARE
 
Normalizing x pages web development
Normalizing x pages web development Normalizing x pages web development
Normalizing x pages web development Shean McManus
 
Scaling the Content Repository with Elasticsearch
Scaling the Content Repository with ElasticsearchScaling the Content Repository with Elasticsearch
Scaling the Content Repository with ElasticsearchNuxeo
 
20141002 delapsley-socalangularjs-final
20141002 delapsley-socalangularjs-final20141002 delapsley-socalangularjs-final
20141002 delapsley-socalangularjs-finalDavid Lapsley
 
Silverlight Developer Introduction
Silverlight   Developer IntroductionSilverlight   Developer Introduction
Silverlight Developer IntroductionTomy Ismail
 
Ajax Performance Tuning and Best Practices
Ajax Performance Tuning and Best PracticesAjax Performance Tuning and Best Practices
Ajax Performance Tuning and Best PracticesDoris 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
 
An Introduction to Web Components
An Introduction to Web ComponentsAn Introduction to Web Components
An Introduction to Web ComponentsRed Pill Now
 

Similaire à Sencha @ Xero: How ExtJS powers Xero's business platform (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
 

Dernier

Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
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 Nanonetsnaman860154
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
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 textsMaria Levchenko
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
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 AutomationSafe Software
 
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 MenDelhi Call girls
 
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.pdfEnterprise Knowledge
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 

Dernier (20)

Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
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
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
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
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
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
 
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
 
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
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 

Sencha @ Xero: How ExtJS powers Xero's business platform

  • 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!