SlideShare una empresa de Scribd logo
1 de 47
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

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
 

La actualidad más candente (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 a 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 a 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
 

Último

The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
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
 
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
 
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
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
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
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
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
 
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
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
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
 
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
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 

Último (20)

The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
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 ...
 
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...
 
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
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
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
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
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
 
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
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 

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/