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

Production Ready WordPress #WPLDN
Production Ready WordPress #WPLDNProduction Ready WordPress #WPLDN
Production Ready WordPress #WPLDNEdmund Turbin
 
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 5Suyati Technologies
 
XPages build automation and testing
XPages build automation and testingXPages build automation and testing
XPages build automation and testingmpradny
 
SF DevOps: Introducing Vagrant
SF DevOps: Introducing VagrantSF DevOps: Introducing Vagrant
SF DevOps: Introducing VagrantMitchell Hashimoto
 
Untangling fall2017 week2
Untangling fall2017 week2Untangling fall2017 week2
Untangling fall2017 week2Derek Jacoby
 
A Personal Journey
A Personal JourneyA Personal Journey
A Personal JourneyMichael Lihs
 
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 FirshmanDocker, Inc.
 
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 DanesNLJUG
 
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 Kubernetesinovex GmbH
 
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 solutionsSerge van den Oever
 
.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 Tikal Knowledge
 
Git and GitHub for Documentation
Git and GitHub for DocumentationGit and GitHub for Documentation
Git and GitHub for DocumentationAnne Gentle
 
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 & DeployNatale Vinto
 
Dockerizing your java development environment
Dockerizing your java development environmentDockerizing your java development environment
Dockerizing your java development environmentBuhake Sindi
 
Docker at MoneyBird
Docker at MoneyBirdDocker at MoneyBird
Docker at MoneyBirdEdwin Vlieg
 

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

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 deploymentDave Ward
 
Gocd – Kubernetes/Nomad Continuous Deployment
Gocd – Kubernetes/Nomad Continuous DeploymentGocd – Kubernetes/Nomad Continuous Deployment
Gocd – Kubernetes/Nomad Continuous DeploymentLeandro Totino Pereira
 
Docker in pratice -chenyifei
Docker in pratice -chenyifeiDocker in pratice -chenyifei
Docker in pratice -chenyifeidotCloud
 
Lightweight Virtualization Docker in Practice
Lightweight Virtualization Docker in PracticeLightweight Virtualization Docker in Practice
Lightweight Virtualization Docker in PracticeDocker, Inc.
 
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 Shift Conference
 
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 AWSAWS Vietnam Community
 
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 WorkbenchHoward Greenberg
 
The tools & technologies behind Resin.io
The tools & technologies behind Resin.ioThe tools & technologies behind Resin.io
The tools & technologies behind Resin.ioGreeceJS
 
Docker With Asp.net Core
Docker With Asp.net CoreDocker With Asp.net Core
Docker With Asp.net CoreFatih Şimşek
 
321 codeincontainer brewbox
321 codeincontainer brewbox321 codeincontainer brewbox
321 codeincontainer brewboxLino Telera
 
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 2018Mandi Walls
 
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 CochranedotCloud
 
DockerCon 2015: Docker Engine Breakout Session
DockerCon 2015: Docker Engine Breakout SessionDockerCon 2015: Docker Engine Breakout Session
DockerCon 2015: Docker Engine Breakout SessionDocker, Inc.
 
DockerCon US 2015 - Engine Breakout Session
DockerCon US 2015 - Engine Breakout SessionDockerCon US 2015 - Engine Breakout Session
DockerCon US 2015 - Engine Breakout SessionArnaud Porterie
 
habitat at docker bud
habitat at docker budhabitat at docker bud
habitat at docker budMandi Walls
 
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...Paul Withers
 
OpenStack Deployments with Chef
OpenStack Deployments with ChefOpenStack Deployments with Chef
OpenStack Deployments with ChefMatt Ray
 
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 Kralovedamovsky
 

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

Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
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
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
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
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 

Recently uploaded (20)

Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
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
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 

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/