SlideShare a Scribd company logo
1 of 47
Download to read offline
MULTIPLATFORM HYBRID 
DEVELOPMENT 
Darko Kukovec 
JavaScript developer at . 
@DarkoKukovec
HYBRID APPS 
• Web technologies + native wrapper 
/ 47 
2
WHY HYBRID DESKTOP APPS? 
/ 47 
3
WHY HYBRID DESKTOP APPS? 
• You don’t want to do it multiple times 
• You already probably know JavaScript 
• and HTML, CSS 
/ 47 
4
WHY HYBRID DESKTOP APPS? 
• Atwood's Law: 
“any application that can be written in JavaScript, 
will eventually be written in JavaScript” 
/ 47 
5
OUR EXPERIENCE 
• A lot of mobile hybrid apps 
• A few special cases 
/ 47 
6
DESKTOP HYBRID APP 1 
/ 47 
• Kiosk style app 
• 40” touchscreen TV 
• Windows (+ OSX) 
7
DESKTOP HYBRID APP 2 
• Users install it on their computers 
• Windows + OSX 
• Optical drive access 
• Cryptography 
• Auto-updateable 
• Rewrite of an app made with Adobe Air and CoffeScript 
/ 47 
8
MULTIPLATFORM HYBRID APP 
• Kiosk style app 
• Windows + iPads + Android tablets (+ OSX) 
• Works with 3 different APIs 
• Communication with card readers 
• Rewrite of an app made for iPads in Sencha Touch 
/ 47 
9
MULTIPLATFORM HYBRID APP 
10 / 47
Wrappers 
Applications 
Automation 
/ 47 
11
WRAPPERS 
/ 47 
12
DESKTOP WRAPPERS 
/ 47 
• Adobe Air 
• QT 
• Chrome Apps 
• app.js 
13
OUR CHOICE 
• node-webkit 
• chromium (38) + node.js (0.11) 
• Windows + Linux + OSX 
/ 47 
14
NODE-WEBKIT PROS 
• Fast development 
• A LOT of node.js modules 
• 99% of the time using existing technologies 
• GUI specific APIs 
• Chrome DevTools 
/ 47 
15
NODE-WEBKIT PROS 
• Distributed as 
• exe with a few additional dlls 
• regular OSX app 
• Updating 
• The whole exe 
• generic exe + application package (package.nw) 
/ 47 
16
NODE-WEBKIT CONS 
• Some builds can be unstable 
• Refreshing the page doesn’t clear the DOM/ 
memory (learned this the hard way) 
• No built-in auto update 
/ 47 
17
HONORABLE MENTION 
• Atom shell 
• Some differences, e.g. 
• node-webkit entry point is html 
• atom shell entry point is JavaScript 
• Better suited for multi window apps 
/ 47 
18
MOBILE WRAPPERS 
/ 47 
• PhoneGap / Cordova 
• Custom 
19
OUR CHOICE 
• Custom wrapper 
• Specific requirements 
• HTML/JS/CSS is on server, not on the device 
• Communication with different card readers 
/ 47 
• Swipe / RFID 
20
CUSTOM WRAPPER 
• Pros 
• Easily customisable 
• Complete control 
• Cons 
• Less features 
• More time, native app developers 
/ 47 
21
OUR RECOMMENDATION 
• Cordova 
• It just works (most of the time) 
• Battle tested 
• A lot of plugins 
• No need for a native developers (most of the time) 
• No need to reinvent the wheel 
/ 47 
22
AUTO-UPDATING 
/ 47 
• Kiosk apps 
• Desktop 
• Mini server in node-webkit 
• API server calls the app with a package download URL 
• App downloads the package and restarts itself 
• Tablet 
• Update the code on the server 
• Refresh the app (manually for now) 
23
AUTO-UPDATING 
/ 47 
• Desktop app 
• OSX 
• Apps are folders 
• App files aren’t locked while running 
• App downloads the update, unzips it, and recursively copies the files 
• Windows 
• App files locked while running 
24
WINDOWS AUTO-UPDATING 
• Option A: Download the update, run a bat 
script that would copy the files once the app 
closes, and starts the app again 
• Significant chance it will be blocked by 
/ 47 
Antivirus software 
25
WINDOWS AUTO-UPDATING 
• Option B: Download an installer and prompt 
the user to install the update 
• Requires the user to do some work 
/ 47 
26
APPLICATION 
/ 47 
27
APPLICATIONS 
• Backbone.js + Require.js + SCSS + Handlebars 
• Yeoman, Bower 
/ 47 
28
CODE QUALITY 
/ 47 
• JS Hint 
• SCSS Linter 
• Developers are lazy - force linting 
• Git commit hooks 
• Application building 
• During the development 
• Code editor integration 
29
(AUTOMATED) CODE REVIEW 
/ 47 
• Hosted 
• Code climate 
• Codacy 
• Plato 
30
VERSIONING 
• Git 
• Git flow 
• master - always production-ready 
• develop - latest development changes 
• feature - branches for specific features 
• release, hotfix 
/ 47 
31
GIT FLOW 
/ 47 
32
AUTOMATION 
/ 47 
33
“Automation isn’t about being lazy. 
It’s about being efficient.” 
–Addy Osmani 
/ 47 
34
35 / 47 http://xkcd.com/1205/
WHY USE A TASK RUNNER? 
/ 47 
• Improve quality 
• Ship faster 
• Easily repeatable 
36
TASK RUNNERS 
/ 47 
• Make 
• Ant 
• Maven 
• … 
• Grunt 
• Gulp 
• npm, broccoli, cake, … 
37
GRUNT 
• ~3600 plugins 
• > 2 years old 
/ 47 
38
GULP 
• ~ 800 plugins 
• > 1 year old 
/ 47 
39
GRUNT VS. GULP 
/ 47 
• Grunt 
• Based on files 
• Configuration over code 
• Gulp 
• Based on streams 
• Code over configuration 
40
OUR CHOICE 
• Grunt 
• Gulp didn’t exist yet 
• Grunt - big community, a lot of plugins 
• Gulp - easier to use, fast growing community 
41 / 47 
http://xkcd.com/1445/
SOME TASK EXAMPLES 
/ 47 
• develop 
• starts server 
• livereload 
• watch 
• compass 
• SCSS Linter 
• JS Hint 
• compile templates 
42
SOME TASK EXAMPLES 
/ 47 
• commit hooks 
• husky grunt plugin 
• SCSS Linter 
• JS Hint 
• Tests? 
• Automated code review? 
43
SOME TASK EXAMPLES 
/ 47 
• build 
• the usual 
• linters 
• compass 
• concatenate 
• minify 
• revision 
44
SOME TASK EXAMPLES 
/ 47 
• build 
• kiosk 
• zip onto package.nw 
• update the test kiosk (curl) 
• notify 
• desktop app 
• make and sign OS X app 
• make dmg 
• prepare bat script for Windows 
45
46 / 47 http://xkcd.com/1319/
47 / 47

More Related Content

What's hot

SF DevOps: Introducing Vagrant
SF DevOps: Introducing VagrantSF DevOps: Introducing Vagrant
SF DevOps: Introducing Vagrant
Mitchell Hashimoto
 
DockerCon Recap - Online Meetup by Ben Firshman
DockerCon Recap - Online Meetup by Ben FirshmanDockerCon Recap - Online Meetup by Ben Firshman
DockerCon Recap - Online Meetup by Ben Firshman
Docker, Inc.
 

What's hot (19)

Production Ready WordPress #WPLDN
Production Ready WordPress #WPLDNProduction Ready WordPress #WPLDN
Production Ready WordPress #WPLDN
 
Get acquainted with the new ASP.Net 5
Get acquainted with the new ASP.Net 5Get acquainted with the new ASP.Net 5
Get acquainted with the new ASP.Net 5
 
XPages build automation and testing
XPages build automation and testingXPages build automation and testing
XPages build automation and testing
 
SF DevOps: Introducing Vagrant
SF DevOps: Introducing VagrantSF DevOps: Introducing Vagrant
SF DevOps: Introducing Vagrant
 
How Docker simplifies CI/CD
How Docker simplifies CI/CDHow Docker simplifies CI/CD
How Docker simplifies CI/CD
 
Untangling fall2017 week2
Untangling fall2017 week2Untangling fall2017 week2
Untangling fall2017 week2
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
 
A Personal Journey
A Personal JourneyA Personal Journey
A Personal Journey
 
DockerCon Recap - Online Meetup by Ben Firshman
DockerCon Recap - Online Meetup by Ben FirshmanDockerCon Recap - Online Meetup by Ben Firshman
DockerCon Recap - Online Meetup by Ben Firshman
 
Using Docker to Develop, Test and Run Maven Projects - Wouter Danes
Using Docker to Develop, Test and Run Maven Projects - Wouter DanesUsing Docker to Develop, Test and Run Maven Projects - Wouter Danes
Using Docker to Develop, Test and Run Maven Projects - Wouter Danes
 
CI/CD Pipeline mit Gitlab CI und Kubernetes
CI/CD Pipeline mit Gitlab CI und KubernetesCI/CD Pipeline mit Gitlab CI und Kubernetes
CI/CD Pipeline mit Gitlab CI und Kubernetes
 
Thoughts on building deployable and updatable share point solutions
Thoughts on building deployable and updatable share point solutionsThoughts on building deployable and updatable share point solutions
Thoughts on building deployable and updatable share point solutions
 
Dockercon 2018 EU Updates
Dockercon 2018 EU Updates Dockercon 2018 EU Updates
Dockercon 2018 EU Updates
 
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013 .Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
 
Git and GitHub for Documentation
Git and GitHub for DocumentationGit and GitHub for Documentation
Git and GitHub for Documentation
 
OPENSHIFT CONTAINER PLATFORM CI/CD Build & Deploy
OPENSHIFT CONTAINER PLATFORM CI/CD Build & DeployOPENSHIFT CONTAINER PLATFORM CI/CD Build & Deploy
OPENSHIFT CONTAINER PLATFORM CI/CD Build & Deploy
 
Dockerizing your java development environment
Dockerizing your java development environmentDockerizing your java development environment
Dockerizing your java development environment
 
Jenkins pipeline as code
Jenkins pipeline as codeJenkins pipeline as code
Jenkins pipeline as code
 
Docker at MoneyBird
Docker at MoneyBirdDocker at MoneyBird
Docker at MoneyBird
 

Similar to Multiplatform hybrid development

Docker in pratice -chenyifei
Docker in pratice -chenyifeiDocker in pratice -chenyifei
Docker in pratice -chenyifei
dotCloud
 
Lightweight Virtualization Docker in Practice
Lightweight Virtualization Docker in PracticeLightweight Virtualization Docker in Practice
Lightweight Virtualization Docker in Practice
Docker, Inc.
 
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchAugust Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
Howard Greenberg
 

Similar to Multiplatform hybrid development (20)

Preparing your dockerised application for production deployment
Preparing your dockerised application for production deploymentPreparing your dockerised application for production deployment
Preparing your dockerised application for production deployment
 
Gocd – Kubernetes/Nomad Continuous Deployment
Gocd – Kubernetes/Nomad Continuous DeploymentGocd – Kubernetes/Nomad Continuous Deployment
Gocd – Kubernetes/Nomad Continuous Deployment
 
Docker in pratice -chenyifei
Docker in pratice -chenyifeiDocker in pratice -chenyifei
Docker in pratice -chenyifei
 
Lightweight Virtualization Docker in Practice
Lightweight Virtualization Docker in PracticeLightweight Virtualization Docker in Practice
Lightweight Virtualization Docker in Practice
 
Shift Remote: JS - Javascript Build Tools: Past & Beyond - Shedrack Akintayo
Shift Remote: JS - Javascript Build Tools: Past & Beyond - Shedrack Akintayo Shift Remote: JS - Javascript Build Tools: Past & Beyond - Shedrack Akintayo
Shift Remote: JS - Javascript Build Tools: Past & Beyond - Shedrack Akintayo
 
Cloudsolutionday 2016: DevOps workflow with Docker on AWS
Cloudsolutionday 2016: DevOps workflow with Docker on AWSCloudsolutionday 2016: DevOps workflow with Docker on AWS
Cloudsolutionday 2016: DevOps workflow with Docker on AWS
 
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchAugust Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
 
The tools & technologies behind Resin.io
The tools & technologies behind Resin.ioThe tools & technologies behind Resin.io
The tools & technologies behind Resin.io
 
Node and Azure
Node and AzureNode and Azure
Node and Azure
 
Docker With Asp.net Core
Docker With Asp.net CoreDocker With Asp.net Core
Docker With Asp.net Core
 
321 codeincontainer brewbox
321 codeincontainer brewbox321 codeincontainer brewbox
321 codeincontainer brewbox
 
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
 
Django and Docker
Django and DockerDjango and Docker
Django and Docker
 
Docker at Djangocon 2013 | Talk by Ken Cochrane
Docker at Djangocon 2013 | Talk by Ken CochraneDocker at Djangocon 2013 | Talk by Ken Cochrane
Docker at Djangocon 2013 | Talk by Ken Cochrane
 
DockerCon 2015: Docker Engine Breakout Session
DockerCon 2015: Docker Engine Breakout SessionDockerCon 2015: Docker Engine Breakout Session
DockerCon 2015: Docker Engine Breakout Session
 
DockerCon US 2015 - Engine Breakout Session
DockerCon US 2015 - Engine Breakout SessionDockerCon US 2015 - Engine Breakout Session
DockerCon US 2015 - Engine Breakout Session
 
habitat at docker bud
habitat at docker budhabitat at docker bud
habitat at docker bud
 
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
 
OpenStack Deployments with Chef
OpenStack Deployments with ChefOpenStack Deployments with Chef
OpenStack Deployments with Chef
 
Dockerize the World - presentation from Hradec Kralove
Dockerize the World - presentation from Hradec KraloveDockerize the World - presentation from Hradec Kralove
Dockerize the World - presentation from Hradec Kralove
 

Recently uploaded

Recently uploaded (20)

Extensible Python: Robustness through Addition - PyCon 2024
Extensible Python: Robustness through Addition - PyCon 2024Extensible Python: Robustness through Addition - PyCon 2024
Extensible Python: Robustness through Addition - PyCon 2024
 
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
 
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
 
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
 
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone KomSalesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
 
The UX of Automation by AJ King, Senior UX Researcher, Ocado
The UX of Automation by AJ King, Senior UX Researcher, OcadoThe UX of Automation by AJ King, Senior UX Researcher, Ocado
The UX of Automation by AJ King, Senior UX Researcher, Ocado
 
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
 
Strategic AI Integration in Engineering Teams
Strategic AI Integration in Engineering TeamsStrategic AI Integration in Engineering Teams
Strategic AI Integration in Engineering Teams
 
A Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System StrategyA Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System Strategy
 
AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101
 
ECS 2024 Teams Premium - Pretty Secure
ECS 2024   Teams Premium - Pretty SecureECS 2024   Teams Premium - Pretty Secure
ECS 2024 Teams Premium - Pretty Secure
 
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfSimplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
 
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
 
AI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří KarpíšekAI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří Karpíšek
 
PLAI - Acceleration Program for Generative A.I. Startups
PLAI - Acceleration Program for Generative A.I. StartupsPLAI - Acceleration Program for Generative A.I. Startups
PLAI - Acceleration Program for Generative A.I. Startups
 
IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024
 
The Metaverse: Are We There Yet?
The  Metaverse:    Are   We  There  Yet?The  Metaverse:    Are   We  There  Yet?
The Metaverse: Are We There Yet?
 
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
 
Optimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityOptimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through Observability
 
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
 

Multiplatform hybrid development

  • 1. MULTIPLATFORM HYBRID DEVELOPMENT Darko Kukovec JavaScript developer at . @DarkoKukovec
  • 2. HYBRID APPS • Web technologies + native wrapper / 47 2
  • 3. WHY HYBRID DESKTOP APPS? / 47 3
  • 4. WHY HYBRID DESKTOP APPS? • You don’t want to do it multiple times • You already probably know JavaScript • and HTML, CSS / 47 4
  • 5. WHY HYBRID DESKTOP APPS? • Atwood's Law: “any application that can be written in JavaScript, will eventually be written in JavaScript” / 47 5
  • 6. OUR EXPERIENCE • A lot of mobile hybrid apps • A few special cases / 47 6
  • 7. DESKTOP HYBRID APP 1 / 47 • Kiosk style app • 40” touchscreen TV • Windows (+ OSX) 7
  • 8. DESKTOP HYBRID APP 2 • Users install it on their computers • Windows + OSX • Optical drive access • Cryptography • Auto-updateable • Rewrite of an app made with Adobe Air and CoffeScript / 47 8
  • 9. MULTIPLATFORM HYBRID APP • Kiosk style app • Windows + iPads + Android tablets (+ OSX) • Works with 3 different APIs • Communication with card readers • Rewrite of an app made for iPads in Sencha Touch / 47 9
  • 13. DESKTOP WRAPPERS / 47 • Adobe Air • QT • Chrome Apps • app.js 13
  • 14. OUR CHOICE • node-webkit • chromium (38) + node.js (0.11) • Windows + Linux + OSX / 47 14
  • 15. NODE-WEBKIT PROS • Fast development • A LOT of node.js modules • 99% of the time using existing technologies • GUI specific APIs • Chrome DevTools / 47 15
  • 16. NODE-WEBKIT PROS • Distributed as • exe with a few additional dlls • regular OSX app • Updating • The whole exe • generic exe + application package (package.nw) / 47 16
  • 17. NODE-WEBKIT CONS • Some builds can be unstable • Refreshing the page doesn’t clear the DOM/ memory (learned this the hard way) • No built-in auto update / 47 17
  • 18. HONORABLE MENTION • Atom shell • Some differences, e.g. • node-webkit entry point is html • atom shell entry point is JavaScript • Better suited for multi window apps / 47 18
  • 19. MOBILE WRAPPERS / 47 • PhoneGap / Cordova • Custom 19
  • 20. OUR CHOICE • Custom wrapper • Specific requirements • HTML/JS/CSS is on server, not on the device • Communication with different card readers / 47 • Swipe / RFID 20
  • 21. CUSTOM WRAPPER • Pros • Easily customisable • Complete control • Cons • Less features • More time, native app developers / 47 21
  • 22. OUR RECOMMENDATION • Cordova • It just works (most of the time) • Battle tested • A lot of plugins • No need for a native developers (most of the time) • No need to reinvent the wheel / 47 22
  • 23. AUTO-UPDATING / 47 • Kiosk apps • Desktop • Mini server in node-webkit • API server calls the app with a package download URL • App downloads the package and restarts itself • Tablet • Update the code on the server • Refresh the app (manually for now) 23
  • 24. AUTO-UPDATING / 47 • Desktop app • OSX • Apps are folders • App files aren’t locked while running • App downloads the update, unzips it, and recursively copies the files • Windows • App files locked while running 24
  • 25. WINDOWS AUTO-UPDATING • Option A: Download the update, run a bat script that would copy the files once the app closes, and starts the app again • Significant chance it will be blocked by / 47 Antivirus software 25
  • 26. WINDOWS AUTO-UPDATING • Option B: Download an installer and prompt the user to install the update • Requires the user to do some work / 47 26
  • 28. APPLICATIONS • Backbone.js + Require.js + SCSS + Handlebars • Yeoman, Bower / 47 28
  • 29. CODE QUALITY / 47 • JS Hint • SCSS Linter • Developers are lazy - force linting • Git commit hooks • Application building • During the development • Code editor integration 29
  • 30. (AUTOMATED) CODE REVIEW / 47 • Hosted • Code climate • Codacy • Plato 30
  • 31. VERSIONING • Git • Git flow • master - always production-ready • develop - latest development changes • feature - branches for specific features • release, hotfix / 47 31
  • 32. GIT FLOW / 47 32
  • 34. “Automation isn’t about being lazy. It’s about being efficient.” –Addy Osmani / 47 34
  • 35. 35 / 47 http://xkcd.com/1205/
  • 36. WHY USE A TASK RUNNER? / 47 • Improve quality • Ship faster • Easily repeatable 36
  • 37. TASK RUNNERS / 47 • Make • Ant • Maven • … • Grunt • Gulp • npm, broccoli, cake, … 37
  • 38. GRUNT • ~3600 plugins • > 2 years old / 47 38
  • 39. GULP • ~ 800 plugins • > 1 year old / 47 39
  • 40. GRUNT VS. GULP / 47 • Grunt • Based on files • Configuration over code • Gulp • Based on streams • Code over configuration 40
  • 41. OUR CHOICE • Grunt • Gulp didn’t exist yet • Grunt - big community, a lot of plugins • Gulp - easier to use, fast growing community 41 / 47 http://xkcd.com/1445/
  • 42. SOME TASK EXAMPLES / 47 • develop • starts server • livereload • watch • compass • SCSS Linter • JS Hint • compile templates 42
  • 43. SOME TASK EXAMPLES / 47 • commit hooks • husky grunt plugin • SCSS Linter • JS Hint • Tests? • Automated code review? 43
  • 44. SOME TASK EXAMPLES / 47 • build • the usual • linters • compass • concatenate • minify • revision 44
  • 45. SOME TASK EXAMPLES / 47 • build • kiosk • zip onto package.nw • update the test kiosk (curl) • notify • desktop app • make and sign OS X app • make dmg • prepare bat script for Windows 45
  • 46. 46 / 47 http://xkcd.com/1319/