SlideShare une entreprise Scribd logo
1  sur  42
#DevoxxMA @DevoxxMA#DevoxxMA @DevoxxMA
Apache Cordova
In
Action
Hazem Saleh
#DevoxxMA @DevoxxMA
About me
experience
More than ten years of experience in Java enterprise and mobile
solutions.
Apache Committer.
Author of four technical books.
DeveloperWorks Contributing author.
Technical Speaker (JavaOne, ApacheCon, Geecon,JavaLand, Devoxx …etc)
Advisory Software Engineer in IBM.
#DevoxxMA @DevoxxMA
Agenda
Apache Cordova Introduction
Configurations
Cordova Command Line
Cordova APIs Overview
Memo Application Demo
Hello World Demo
Integration Tips with jQM and Ionic
General Performance Tips
#DevoxxMA @DevoxxMA
Apache Cordova Introduction
Platform
HTML CSS
JS
#DevoxxMA @DevoxxMA
Apache Cordova Introduction
Device native functions examples:
#DevoxxMA @DevoxxMA
Apache Cordova Introduction
Hybrid Application (Cordova) Native Application
Can be uploaded to App Store Yes Yes
Technology HTML + CSS + JavaScript Native platform Programming
Language
Cross-mobiles support Yes No
Development Speed Faster Slower
Uses Device Native Features Yes Yes
Hybrid vs Native Application
#DevoxxMA @DevoxxMA
Apache Cordova Introduction
Cordova is supported on the following platforms:
#DevoxxMA @DevoxxMA
Apache Cordova Introduction
Challenges of the current mobile apps development:
Many platforms and devices.
Different skills needed.
Different problem types.
Huge Development and Testing Effort to have a single
application on these platforms.
For Android: Java skills needed.
For iOS: Objective-C (or SWIFT) skills
needed.
For Windows: C# skills needed.
#DevoxxMA @DevoxxMA
Apache Cordova Introduction
Who can use Cordova?
If you are a web developer and wants to develop a mobile application that can
be deployed on the different app store portals.
If you are a mobile native developer and wants to develop a single application
on the different mobile platforms without having to re-implement the
application code on every platform.
#DevoxxMA @DevoxxMA
Agenda
Apache Cordova Introduction
Configurations
Cordova Command Line
Cordova APIs Overview
Memo Application Demo
Hello World Demo
Integration Tips with jQM and Ionic
General Performance Tips
#DevoxxMA @DevoxxMA
Configuration
1 2 3
Prerequisites:
Node JS.
Target SDK.
From command line:
> sudo npm install -g cordova
To know the installed
version of Cordova:
> cordova -v
GIT
#DevoxxMA @DevoxxMA
Agenda
Apache Cordova Introduction
Configurations
Cordova Command Line
Cordova APIs Overview
Memo Application Demo
Hello World Demo
Integration Tips with jQM and Ionic
General Performance Tips
#DevoxxMA @DevoxxMA
Cordova Command Line
To create an application:
> cordova create <<app_dir>> <<project_id>> <<app_title>>
To add a platform (from the app folder):
> cordova platform add <<platform_name>>
To build Cordova project:
> cordova build
To deploy the app on emulator:
> cordova emulate <<platform_name>>
#DevoxxMA @DevoxxMA
Agenda
Apache Cordova Introduction
Configurations
Cordova Command Line
Cordova APIs Overview
Memo Application Demo
Hello World Demo
Integration Tips with jQM and Ionic
General Performance Tips
#DevoxxMA @DevoxxMA#DevoxxMA @DevoxxMA
Hello World Demo
#DevoxxMA @DevoxxMA
Agenda
Apache Cordova Introduction
Configurations
Cordova Command Line
Cordova APIs Overview
Memo Application Demo
Hello World Demo
Integration Tips with jQM and Ionic
General Performance Tips
#DevoxxMA @DevoxxMA
Cordova APIs Overview
Native device functions are represented as plugins that can be added and
removed using the command line.
Adding camera plugin example:
> cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-
plugin-camera.git
Removing Camera plugin example:
> cordova plugin rm org.apache.cordova.core.camera
#DevoxxMA @DevoxxMA
Cordova APIs Overview
Device
An object that holds information about the device hardware and
software.
Device information is mainly about:
 Device name.
 Device Platform.
 Device Platform version.
 Device model.
“deviceready” event is an indicator that Cordova finishes loading and
Cordova APIs are ready to be called.
#DevoxxMA @DevoxxMA
Cordova APIs Overview
Camera
An object that provides an access to the device camera. It can be used
for:
 Capturing a photo using the device’s Camera.
 Picking a photo from the device’s gallery.
navigator.camera.getPicture(onSuccess, onFail, { quality: 50,
destinationType: Camera.DestinationType.DATA_URL
});
function onSuccess(imageData) {
var image = document.getElementById('myImage');
image.src = "data:image/jpeg;base64," + imageData;
}
function onFail(message) {
alert('Failed because: ' + message);
}
#DevoxxMA @DevoxxMA
Cordova APIs Overview
Media
An object that allows recording and playing back audio files on the
device.
var my_media = new Media("someFile.mp3", onSuccess, onError);
my_media.play();
function onSuccess() {
console.log("playAudio():Audio Success");
}
function onError(error) {
alert('code: ' + error.code + 'n' + 'message: ' + error.message + 'n');
}
#DevoxxMA @DevoxxMA
Cordova APIs Overview
Notification
An object that displays visual, audible, and tactile notification.
// Show a native looking alert
navigator.notification.alert(
'Cordova is great!', // message
'Cordova', // title
'Ok' // buttonName
);
// Beep four times
navigator.notification.beep(4);
// Vibrate for 3 seconds
navigator.notification.vibrate(3000);
#DevoxxMA @DevoxxMA
Cordova APIs Overview
Storage
Provides an access to the W3C Web Storage interface:
window.localStorage.setItem("key", "value");
var value = window.localStorage.getItem("key");
window.localStorage.removeItem("key");
window.localStorage.clear();
- Local Storage (window.localStorage).
- Session Storage (window.sessionStorage).
#DevoxxMA @DevoxxMA
Cordova APIs Overview
Storage
Provides an access to the device Web SQL Database (Full featured
database). Cordova supports IndexedDB for WP8 and Blackberry 10.
function populateDB(tx) {
tx.executeSql('DROP TABLE IF EXISTS DEMO');
tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
}
function errorCB(err) {
alert("Error processing SQL: " + err.code);
}
function successCB() {
alert("success!");
}
var db = window.openDatabase("Demos", "1.0", "Cordova Demo", 200000);
db.transaction(populateDB, errorCB, successCB);
#DevoxxMA @DevoxxMA
Cordova APIs Overview
Accelerometer (Capture device motion)
Compass (Get the device direction)
Connection (Get the device connection)
Contacts (Access to device contacts database).
File (Access to device File system based on W3C File API)
Globalization (Access to user locale information)
Events (Handle Apache Cordova life cycle events).
Geolocation (Know your mobile location. API is W3C based)
More APIs:
#DevoxxMA @DevoxxMA
Agenda
Apache Cordova Introduction
Configurations
Cordova Command Line
Cordova APIs Overview
Memo Application Demo
Hello World Demo
Integration Tips with jQM and Ionic
General Performance Tips
#DevoxxMA @DevoxxMA
Integration Tips with jQM and Ionic
Ionic and jQuery Mobile are:
Two popular and powerful User Interface frameworks for building Mobile Web
applications.
Are based on HTML5, CSS3 and JavaScript.
Compatible with most of the mobile and tablet browsers.
Ionic has the following advantages:
• Powered by AngularJS which is a powerful MVVM framework for creating structured
JavaScript applications.
• Powered by command line tooling and UI templates.
#DevoxxMA @DevoxxMA
Integration Tips with jQM and Ionic
Cordova does not restrict using any specific JavaScript library but using a JavaScript
library will save you a lot of time creating your own widgets from scratch.
jQuery Mobile is used in the demo application with Cordova to create the Memo utility.
There are also many cool frameworks you can use in your Cordova mobile apps such as:
Dojo mobile Sencha Touch Bootstrap
#DevoxxMA @DevoxxMA
jQuery Mobile Integration
Windows Phone 8 Issues:
Fixes:
Trimmed header title.
Footer is not aligned to bottom.
Set ui-header and ui-title classes’ overflow to
visible.
Hide System Tray using app config
(shell:SystemTray.isVisible = “False”).
#DevoxxMA @DevoxxMA
jQuery Mobile Integration
iOS 8 (and 9) Issues:
One of the possible workarounds:
Collision between jQM header title and iOS
device status bar.
Hide the status bar by adding and setting
two properties in the app's .plist file:
1. The Status bar is initially hidden property
set to the YES value.
2. The View controller-based status bar
appearance property set to the
NO value
#DevoxxMA @DevoxxMA
jQuery Mobile Integration
iOS 9 Issues:
One of the possible workarounds:
Popups are suddenly closed after the first
opening time!
Use data-history="false” for the data-
role="popup” component
#DevoxxMA @DevoxxMA
jQuery Mobile Integration
iOS 9 Issues:
One of the possible workarounds:
Back buttons are broken due to UIWebView
bug in iOS 9:
https://openradar.appspot.com/22186109
if (device.platform === "iOS" &&
parseInt(device.version) === 9) {
$.mobile.hashListeningEnabled=false;
} /* when the device is ready */
#DevoxxMA @DevoxxMA
jQuery Mobile Integration
In order to boost the performance of jQuery mobile with Cordova, it is
recommended to disable transition effects as follows:
$.mobile.defaultDialogTransition = 'none’;
$.mobile.defaultPageTransition = 'none';
#DevoxxMA @DevoxxMA
jQuery Mobile Integration
• Use cordova-jquery-npm module to speed up adding ready-made jQuery
mobile templates to your existing Cordova project. Available templates are:
• Multiple pages.
• Persistent Navigation bar for three pages.
• External Panel Template.
• Install it using npm as follows:
> npm install –g cordova-jquery
• All what you need to do is to run cordova-jquery command from your
project root and follow the template creation Wizard.
• cordova-jquery-npm module is an open source project that is available in:
• https://www.npmjs.com/package/cordova-jquery
#DevoxxMA @DevoxxMA
Ionic Integration
Use Native Scrolling instead of JavaScript scrolling for gaining the maximum
performance.
$ionicConfigProvider.scrolling.jsScrolling(false);  (Enabling native
scrolling for all app views)
overflow-scroll=“true”  (for a single ion-content)
#DevoxxMA @DevoxxMA
Agenda
Apache Cordova Introduction
Configurations
Cordova Command Line
Cordova APIs Overview
Memo Application Demo
Hello World Demo
Integration Tips with jQM and Ionic
General Performance Tips
#DevoxxMA @DevoxxMA
General Performance Tips
Cache Application Data as much as possible to avoid the network access delay.
Possible ways to cache application data:
 Web Storage (Local Storage), if data size is less than 5 MBs.
 Database (IndexedDB / Web SQL), if data size is larger than 5 MBs.
 File System.
Always cache static data, and define proper caching policies for dynamic data.
#DevoxxMA @DevoxxMA
General Performance Tips
Avoid the 300ms click event delay on mobile browsers:
 Mobile browsers have to wait 300ms to determine if this is a click or a
double tap event.
 Can make your user feel that your app is slow!
Possible Solutions:
 If you do not use a specific framework that handles this delay, Use
FastClick:
 https://github.com/ftlabs/fastclick
 If you are using jQuery mobile, use “vClick” event:
 https://api.jquerymobile.com/vclick/
 If you are using Ionic, use “ngTouch” module:
 https://docs.angularjs.org/api/ngTouch
#DevoxxMA @DevoxxMA
General Performance Tips
Minimize DOM Access and Insertions.
Do not do:
$("#myButton").on("click", someClickEventHandler);
$("#myButton").css("text-decoration", "underline");
$("#myButton").css("color", "blue");
$("#myButton").attr("href", "#");
Do not use JavaScript for layout creation.
Instead Do:
var myButton = $("#myButton”);
myButton.on("click", someClickEventHandler);
myButton.css("text-decoration", "underline");
myButton.css("color", "blue");
myButton.attr("href", "#");
#DevoxxMA @DevoxxMA
Agenda
Apache Cordova Introduction
Configurations
Cordova Command Line
Cordova APIs Overview
Memo Application Demo
Hello World Demo
Integration Tips with jQM and Ionic
General Performance Tips
#DevoxxMA @DevoxxMA#DevoxxMA @DevoxxMA
GitHub URL:
https://github.com/hazems/cordova-mega-app
Memo Application
#DevoxxMA @DevoxxMA
JavaScript Quiz
<script>
var someVar = "1";
var someObject = {
someVar: 2,
someMethod: function () {
var someVar = 3;
var _this = this;
setTimeout(function() {
var result = _this.someVar + this.someVar;
alert(result);
}, 10);
}
};
#DevoxxMA @DevoxxMA
Questions
Twitter: @hazems
Blog: http://www.technicaladvices.com
Email: hazems@apache.org

Contenu connexe

Tendances

Project Presentation on Advance Java
Project Presentation on Advance JavaProject Presentation on Advance Java
Project Presentation on Advance JavaVikas Goyal
 
[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...
[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...
[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...Future Processing
 
Java fx smart code econ
Java fx smart code econJava fx smart code econ
Java fx smart code econTom Schindl
 
108 advancedjava
108 advancedjava108 advancedjava
108 advancedjavaAnil Kumar
 
Getting started with appium
Getting started with appiumGetting started with appium
Getting started with appiumPratik Patel
 
Android & iOS Automation Using Appium
Android & iOS Automation Using AppiumAndroid & iOS Automation Using Appium
Android & iOS Automation Using AppiumMindfire Solutions
 
Android App development and test environment, Understaing android app structure
Android App development and test environment, Understaing android app structureAndroid App development and test environment, Understaing android app structure
Android App development and test environment, Understaing android app structureVijay Rastogi
 
Android Automation Testing with Selendroid
Android Automation Testing with SelendroidAndroid Automation Testing with Selendroid
Android Automation Testing with SelendroidVikas Thange
 
Java Intro: Unit1. Hello World
Java Intro: Unit1. Hello WorldJava Intro: Unit1. Hello World
Java Intro: Unit1. Hello WorldYakov Fain
 
Appium basics
Appium basicsAppium basics
Appium basicsSyam Sasi
 
Selenium Tutorial For Beginners | What Is Selenium? | Selenium Automation Tes...
Selenium Tutorial For Beginners | What Is Selenium? | Selenium Automation Tes...Selenium Tutorial For Beginners | What Is Selenium? | Selenium Automation Tes...
Selenium Tutorial For Beginners | What Is Selenium? | Selenium Automation Tes...Edureka!
 
Mobile Apps Using AngularJS - Adam Klein @ AngularJS IL
Mobile Apps Using AngularJS - Adam Klein @ AngularJS ILMobile Apps Using AngularJS - Adam Klein @ AngularJS IL
Mobile Apps Using AngularJS - Adam Klein @ AngularJS ILRon Gershinsky
 
Automation Open Source tools
Automation Open Source toolsAutomation Open Source tools
Automation Open Source toolsQA Club Kiev
 
Plug yourself in and your app will never be the same (2 hour edition)
Plug yourself in and your app will never be the same (2 hour edition)Plug yourself in and your app will never be the same (2 hour edition)
Plug yourself in and your app will never be the same (2 hour edition)Mikkel Flindt Heisterberg
 
JavaFX Enterprise (JavaOne 2014)
JavaFX Enterprise (JavaOne 2014)JavaFX Enterprise (JavaOne 2014)
JavaFX Enterprise (JavaOne 2014)Hendrik Ebbers
 
Introduction to Selenium and WebDriver
Introduction to Selenium and WebDriverIntroduction to Selenium and WebDriver
Introduction to Selenium and WebDriverTechWell
 

Tendances (20)

Project Presentation on Advance Java
Project Presentation on Advance JavaProject Presentation on Advance Java
Project Presentation on Advance Java
 
[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...
[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...
[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...
 
Java fx smart code econ
Java fx smart code econJava fx smart code econ
Java fx smart code econ
 
Agility Requires Safety
Agility Requires SafetyAgility Requires Safety
Agility Requires Safety
 
108 advancedjava
108 advancedjava108 advancedjava
108 advancedjava
 
Getting started with appium
Getting started with appiumGetting started with appium
Getting started with appium
 
Android programming-basics
Android programming-basicsAndroid programming-basics
Android programming-basics
 
Android & iOS Automation Using Appium
Android & iOS Automation Using AppiumAndroid & iOS Automation Using Appium
Android & iOS Automation Using Appium
 
Android App development and test environment, Understaing android app structure
Android App development and test environment, Understaing android app structureAndroid App development and test environment, Understaing android app structure
Android App development and test environment, Understaing android app structure
 
Android Automation Testing with Selendroid
Android Automation Testing with SelendroidAndroid Automation Testing with Selendroid
Android Automation Testing with Selendroid
 
Java Intro: Unit1. Hello World
Java Intro: Unit1. Hello WorldJava Intro: Unit1. Hello World
Java Intro: Unit1. Hello World
 
Appium basics
Appium basicsAppium basics
Appium basics
 
Appium & Jenkins
Appium & JenkinsAppium & Jenkins
Appium & Jenkins
 
Selenium Tutorial For Beginners | What Is Selenium? | Selenium Automation Tes...
Selenium Tutorial For Beginners | What Is Selenium? | Selenium Automation Tes...Selenium Tutorial For Beginners | What Is Selenium? | Selenium Automation Tes...
Selenium Tutorial For Beginners | What Is Selenium? | Selenium Automation Tes...
 
Mobile Apps Using AngularJS - Adam Klein @ AngularJS IL
Mobile Apps Using AngularJS - Adam Klein @ AngularJS ILMobile Apps Using AngularJS - Adam Klein @ AngularJS IL
Mobile Apps Using AngularJS - Adam Klein @ AngularJS IL
 
Automation Open Source tools
Automation Open Source toolsAutomation Open Source tools
Automation Open Source tools
 
Plug yourself in and your app will never be the same (2 hour edition)
Plug yourself in and your app will never be the same (2 hour edition)Plug yourself in and your app will never be the same (2 hour edition)
Plug yourself in and your app will never be the same (2 hour edition)
 
JavaFX Enterprise (JavaOne 2014)
JavaFX Enterprise (JavaOne 2014)JavaFX Enterprise (JavaOne 2014)
JavaFX Enterprise (JavaOne 2014)
 
Intro to PhoneGap
Intro to PhoneGapIntro to PhoneGap
Intro to PhoneGap
 
Introduction to Selenium and WebDriver
Introduction to Selenium and WebDriverIntroduction to Selenium and WebDriver
Introduction to Selenium and WebDriver
 

En vedette

Measles suspected outbreak 2012
Measles suspected outbreak 2012Measles suspected outbreak 2012
Measles suspected outbreak 2012Prabir Chatterjee
 
Email Marketing Workshop 23rd February 2016
Email Marketing Workshop 23rd February 2016Email Marketing Workshop 23rd February 2016
Email Marketing Workshop 23rd February 2016Stephen Pratley
 
Cordova Windows Installation
Cordova Windows InstallationCordova Windows Installation
Cordova Windows Installationaarooraa
 
Bb citizenship
Bb citizenshipBb citizenship
Bb citizenshipjafart_
 
Lesly rodriguez
Lesly rodriguezLesly rodriguez
Lesly rodriguezleslyrs94
 
Alumen - firemní časopis společnosti Automotive Lighting
Alumen - firemní časopis společnosti Automotive LightingAlumen - firemní časopis společnosti Automotive Lighting
Alumen - firemní časopis společnosti Automotive Lightingmenseek
 
Research Slideshare Cindy
Research  Slideshare CindyResearch  Slideshare Cindy
Research Slideshare Cindycindyvirtual
 
Dia da mãe junho2013
Dia da mãe junho2013Dia da mãe junho2013
Dia da mãe junho2013eb1penha4
 
Christian jacq juiz do egito - volume i - a pirâmide assassinada (252 pg)
Christian jacq   juiz do egito - volume i - a pirâmide assassinada (252 pg)Christian jacq   juiz do egito - volume i - a pirâmide assassinada (252 pg)
Christian jacq juiz do egito - volume i - a pirâmide assassinada (252 pg)Ariovaldo Cunha
 
TCEA 2016 Microsoft Certification Magic
TCEA 2016   Microsoft Certification MagicTCEA 2016   Microsoft Certification Magic
TCEA 2016 Microsoft Certification MagicMike Ploor
 
Desenhos com plasticina
Desenhos com plasticinaDesenhos com plasticina
Desenhos com plasticinaeb1penha4
 
Osprey aircraft of the aces 008 - corsair aces of world war ii
Osprey   aircraft of the aces 008 - corsair aces of world war iiOsprey   aircraft of the aces 008 - corsair aces of world war ii
Osprey aircraft of the aces 008 - corsair aces of world war iiAriovaldo Cunha
 
Immobili, vendita al palo. Incassato un milione su 8 - Metropolis Napoli
Immobili, vendita al palo. Incassato un milione su 8 - Metropolis NapoliImmobili, vendita al palo. Incassato un milione su 8 - Metropolis Napoli
Immobili, vendita al palo. Incassato un milione su 8 - Metropolis NapoliAlfredo Romeo
 
Complete Web Development Course - Make Cash Earning Websites
Complete Web Development Course - Make Cash Earning WebsitesComplete Web Development Course - Make Cash Earning Websites
Complete Web Development Course - Make Cash Earning Websitesbuenosdias1989
 

En vedette (20)

Measles suspected outbreak 2012
Measles suspected outbreak 2012Measles suspected outbreak 2012
Measles suspected outbreak 2012
 
Email Marketing Workshop 23rd February 2016
Email Marketing Workshop 23rd February 2016Email Marketing Workshop 23rd February 2016
Email Marketing Workshop 23rd February 2016
 
Email List Building
Email List BuildingEmail List Building
Email List Building
 
Q4 word
Q4   wordQ4   word
Q4 word
 
Cordova Windows Installation
Cordova Windows InstallationCordova Windows Installation
Cordova Windows Installation
 
Bb citizenship
Bb citizenshipBb citizenship
Bb citizenship
 
Lesly rodriguez
Lesly rodriguezLesly rodriguez
Lesly rodriguez
 
Soal ipa 1 a
Soal ipa   1 aSoal ipa   1 a
Soal ipa 1 a
 
Alumen - firemní časopis společnosti Automotive Lighting
Alumen - firemní časopis společnosti Automotive LightingAlumen - firemní časopis společnosti Automotive Lighting
Alumen - firemní časopis společnosti Automotive Lighting
 
MICHELES RESUME
MICHELES RESUMEMICHELES RESUME
MICHELES RESUME
 
Research Slideshare Cindy
Research  Slideshare CindyResearch  Slideshare Cindy
Research Slideshare Cindy
 
Dia da mãe junho2013
Dia da mãe junho2013Dia da mãe junho2013
Dia da mãe junho2013
 
Christian jacq juiz do egito - volume i - a pirâmide assassinada (252 pg)
Christian jacq   juiz do egito - volume i - a pirâmide assassinada (252 pg)Christian jacq   juiz do egito - volume i - a pirâmide assassinada (252 pg)
Christian jacq juiz do egito - volume i - a pirâmide assassinada (252 pg)
 
TCEA 2016 Microsoft Certification Magic
TCEA 2016   Microsoft Certification MagicTCEA 2016   Microsoft Certification Magic
TCEA 2016 Microsoft Certification Magic
 
Desenhos com plasticina
Desenhos com plasticinaDesenhos com plasticina
Desenhos com plasticina
 
Osprey aircraft of the aces 008 - corsair aces of world war ii
Osprey   aircraft of the aces 008 - corsair aces of world war iiOsprey   aircraft of the aces 008 - corsair aces of world war ii
Osprey aircraft of the aces 008 - corsair aces of world war ii
 
Immobili, vendita al palo. Incassato un milione su 8 - Metropolis Napoli
Immobili, vendita al palo. Incassato un milione su 8 - Metropolis NapoliImmobili, vendita al palo. Incassato un milione su 8 - Metropolis Napoli
Immobili, vendita al palo. Incassato un milione su 8 - Metropolis Napoli
 
Unmsm e s11 ejercicios
Unmsm e s11 ejerciciosUnmsm e s11 ejercicios
Unmsm e s11 ejercicios
 
Complete Web Development Course - Make Cash Earning Websites
Complete Web Development Course - Make Cash Earning WebsitesComplete Web Development Course - Make Cash Earning Websites
Complete Web Development Course - Make Cash Earning Websites
 
A bomba (1948)
A bomba (1948)A bomba (1948)
A bomba (1948)
 

Similaire à [Devoxx Morocco 2015] Apache Cordova In Action

Introduction to Apache Cordova (Phonegap)
Introduction to Apache Cordova (Phonegap)Introduction to Apache Cordova (Phonegap)
Introduction to Apache Cordova (Phonegap)ejlp12
 
Angularjs Tutorial for Beginners
Angularjs Tutorial for BeginnersAngularjs Tutorial for Beginners
Angularjs Tutorial for Beginnersrajkamaltibacademy
 
Introduction phonegap
Introduction phonegapIntroduction phonegap
Introduction phonegapRakesh Jha
 
Advanced programing in phonegap
Advanced programing in phonegapAdvanced programing in phonegap
Advanced programing in phonegapRakesh Jha
 
Building Cross-Platform Mobile Apps
Building Cross-Platform Mobile AppsBuilding Cross-Platform Mobile Apps
Building Cross-Platform Mobile AppsTroy Miles
 
Fixing the mobile web - Internet World Romania
Fixing the mobile web - Internet World RomaniaFixing the mobile web - Internet World Romania
Fixing the mobile web - Internet World RomaniaChristian Heilmann
 
Tutorial: Develop Mobile Applications with AngularJS
Tutorial: Develop Mobile Applications with AngularJSTutorial: Develop Mobile Applications with AngularJS
Tutorial: Develop Mobile Applications with AngularJSPhilipp Burgmer
 
Electron - cross platform desktop applications made easy
Electron - cross platform desktop applications made easyElectron - cross platform desktop applications made easy
Electron - cross platform desktop applications made easyUlrich Krause
 
Workshop on Hybrid App Development with Ionic Framework
Workshop on Hybrid App Development with Ionic FrameworkWorkshop on Hybrid App Development with Ionic Framework
Workshop on Hybrid App Development with Ionic FrameworkAayush Shrestha
 
Cross Platform Mobile Apps with the Ionic Framework
Cross Platform Mobile Apps with the Ionic FrameworkCross Platform Mobile Apps with the Ionic Framework
Cross Platform Mobile Apps with the Ionic FrameworkTroy Miles
 
Telerik AppBuilder Presentation for TelerikNEXT Conference
Telerik AppBuilder Presentation for TelerikNEXT ConferenceTelerik AppBuilder Presentation for TelerikNEXT Conference
Telerik AppBuilder Presentation for TelerikNEXT ConferenceJen Looper
 
Cordova Tutorial
Cordova TutorialCordova Tutorial
Cordova TutorialJacky Chen
 
Phonegap android
Phonegap androidPhonegap android
Phonegap androidumesh patil
 
HTML alchemy: the secrets of mixing JavaScript and Java EE - Matthias Wessendorf
HTML alchemy: the secrets of mixing JavaScript and Java EE - Matthias WessendorfHTML alchemy: the secrets of mixing JavaScript and Java EE - Matthias Wessendorf
HTML alchemy: the secrets of mixing JavaScript and Java EE - Matthias WessendorfJAX London
 
Hybrid Mobile Development with Apache Cordova and Java EE 7 (JavaOne 2014)
Hybrid Mobile Development with Apache Cordova and Java EE 7 (JavaOne 2014)Hybrid Mobile Development with Apache Cordova and Java EE 7 (JavaOne 2014)
Hybrid Mobile Development with Apache Cordova and Java EE 7 (JavaOne 2014)Ryan Cuprak
 
phonegap with angular js for freshers
phonegap with angular js for freshers    phonegap with angular js for freshers
phonegap with angular js for freshers dssprakash
 
Hybrid Mobile Development with Apache Cordova and
Hybrid Mobile Development with Apache Cordova and Hybrid Mobile Development with Apache Cordova and
Hybrid Mobile Development with Apache Cordova and Ryan Cuprak
 

Similaire à [Devoxx Morocco 2015] Apache Cordova In Action (20)

Introduction to Apache Cordova (Phonegap)
Introduction to Apache Cordova (Phonegap)Introduction to Apache Cordova (Phonegap)
Introduction to Apache Cordova (Phonegap)
 
Angularjs Tutorial for Beginners
Angularjs Tutorial for BeginnersAngularjs Tutorial for Beginners
Angularjs Tutorial for Beginners
 
Introduction phonegap
Introduction phonegapIntroduction phonegap
Introduction phonegap
 
Advanced programing in phonegap
Advanced programing in phonegapAdvanced programing in phonegap
Advanced programing in phonegap
 
Building Cross-Platform Mobile Apps
Building Cross-Platform Mobile AppsBuilding Cross-Platform Mobile Apps
Building Cross-Platform Mobile Apps
 
iOS App Using cordova
iOS App Using cordovaiOS App Using cordova
iOS App Using cordova
 
Intro to PhoneGap
Intro to PhoneGapIntro to PhoneGap
Intro to PhoneGap
 
Fixing the mobile web - Internet World Romania
Fixing the mobile web - Internet World RomaniaFixing the mobile web - Internet World Romania
Fixing the mobile web - Internet World Romania
 
Tutorial: Develop Mobile Applications with AngularJS
Tutorial: Develop Mobile Applications with AngularJSTutorial: Develop Mobile Applications with AngularJS
Tutorial: Develop Mobile Applications with AngularJS
 
Electron - cross platform desktop applications made easy
Electron - cross platform desktop applications made easyElectron - cross platform desktop applications made easy
Electron - cross platform desktop applications made easy
 
Workshop on Hybrid App Development with Ionic Framework
Workshop on Hybrid App Development with Ionic FrameworkWorkshop on Hybrid App Development with Ionic Framework
Workshop on Hybrid App Development with Ionic Framework
 
Cross Platform Mobile Apps with the Ionic Framework
Cross Platform Mobile Apps with the Ionic FrameworkCross Platform Mobile Apps with the Ionic Framework
Cross Platform Mobile Apps with the Ionic Framework
 
Telerik AppBuilder Presentation for TelerikNEXT Conference
Telerik AppBuilder Presentation for TelerikNEXT ConferenceTelerik AppBuilder Presentation for TelerikNEXT Conference
Telerik AppBuilder Presentation for TelerikNEXT Conference
 
Cordova Tutorial
Cordova TutorialCordova Tutorial
Cordova Tutorial
 
Phonegap android
Phonegap androidPhonegap android
Phonegap android
 
HTML alchemy: the secrets of mixing JavaScript and Java EE - Matthias Wessendorf
HTML alchemy: the secrets of mixing JavaScript and Java EE - Matthias WessendorfHTML alchemy: the secrets of mixing JavaScript and Java EE - Matthias Wessendorf
HTML alchemy: the secrets of mixing JavaScript and Java EE - Matthias Wessendorf
 
Codename one
Codename oneCodename one
Codename one
 
Hybrid Mobile Development with Apache Cordova and Java EE 7 (JavaOne 2014)
Hybrid Mobile Development with Apache Cordova and Java EE 7 (JavaOne 2014)Hybrid Mobile Development with Apache Cordova and Java EE 7 (JavaOne 2014)
Hybrid Mobile Development with Apache Cordova and Java EE 7 (JavaOne 2014)
 
phonegap with angular js for freshers
phonegap with angular js for freshers    phonegap with angular js for freshers
phonegap with angular js for freshers
 
Hybrid Mobile Development with Apache Cordova and
Hybrid Mobile Development with Apache Cordova and Hybrid Mobile Development with Apache Cordova and
Hybrid Mobile Development with Apache Cordova and
 

Plus de Hazem Saleh

[FullStack NYC 2019] Effective Unit Tests for JavaScript
[FullStack NYC 2019] Effective Unit Tests for JavaScript[FullStack NYC 2019] Effective Unit Tests for JavaScript
[FullStack NYC 2019] Effective Unit Tests for JavaScriptHazem Saleh
 
Mockito 2.x Migration - Droidcon UK 2018
Mockito 2.x Migration - Droidcon UK 2018Mockito 2.x Migration - Droidcon UK 2018
Mockito 2.x Migration - Droidcon UK 2018Hazem Saleh
 
JavaScript Unit Testing with an Angular 5.x Use Case 101
JavaScript Unit Testing with an Angular 5.x Use Case 101JavaScript Unit Testing with an Angular 5.x Use Case 101
JavaScript Unit Testing with an Angular 5.x Use Case 101Hazem Saleh
 
[AnDevCon 2016] Mutation Testing for Android
[AnDevCon 2016] Mutation Testing for Android[AnDevCon 2016] Mutation Testing for Android
[AnDevCon 2016] Mutation Testing for AndroidHazem Saleh
 
Dojo >= 1.7 Kickstart
Dojo >= 1.7  KickstartDojo >= 1.7  Kickstart
Dojo >= 1.7 KickstartHazem Saleh
 
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013Hazem Saleh
 
Efficient JavaScript Unit Testing, JavaOne China 2013
Efficient JavaScript Unit Testing, JavaOne China 2013Efficient JavaScript Unit Testing, JavaOne China 2013
Efficient JavaScript Unit Testing, JavaOne China 2013Hazem Saleh
 
JSF Mashups in Action
JSF Mashups in ActionJSF Mashups in Action
JSF Mashups in ActionHazem Saleh
 
Efficient JavaScript Unit Testing, March 2013
Efficient JavaScript Unit Testing, March 2013Efficient JavaScript Unit Testing, March 2013
Efficient JavaScript Unit Testing, March 2013Hazem Saleh
 
JavaScript tools
JavaScript toolsJavaScript tools
JavaScript toolsHazem Saleh
 
Efficient JavaScript Unit Testing, May 2012
Efficient JavaScript Unit Testing, May 2012Efficient JavaScript Unit Testing, May 2012
Efficient JavaScript Unit Testing, May 2012Hazem Saleh
 
[JavaOne 2010] Abstract Mashups for Enterprise Java
[JavaOne 2010] Abstract Mashups for Enterprise Java[JavaOne 2010] Abstract Mashups for Enterprise Java
[JavaOne 2010] Abstract Mashups for Enterprise JavaHazem Saleh
 

Plus de Hazem Saleh (13)

[FullStack NYC 2019] Effective Unit Tests for JavaScript
[FullStack NYC 2019] Effective Unit Tests for JavaScript[FullStack NYC 2019] Effective Unit Tests for JavaScript
[FullStack NYC 2019] Effective Unit Tests for JavaScript
 
Mockito 2.x Migration - Droidcon UK 2018
Mockito 2.x Migration - Droidcon UK 2018Mockito 2.x Migration - Droidcon UK 2018
Mockito 2.x Migration - Droidcon UK 2018
 
JavaScript Unit Testing with an Angular 5.x Use Case 101
JavaScript Unit Testing with an Angular 5.x Use Case 101JavaScript Unit Testing with an Angular 5.x Use Case 101
JavaScript Unit Testing with an Angular 5.x Use Case 101
 
[AnDevCon 2016] Mutation Testing for Android
[AnDevCon 2016] Mutation Testing for Android[AnDevCon 2016] Mutation Testing for Android
[AnDevCon 2016] Mutation Testing for Android
 
Dojo >= 1.7 Kickstart
Dojo >= 1.7  KickstartDojo >= 1.7  Kickstart
Dojo >= 1.7 Kickstart
 
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
 
Efficient JavaScript Unit Testing, JavaOne China 2013
Efficient JavaScript Unit Testing, JavaOne China 2013Efficient JavaScript Unit Testing, JavaOne China 2013
Efficient JavaScript Unit Testing, JavaOne China 2013
 
JSF Mashups in Action
JSF Mashups in ActionJSF Mashups in Action
JSF Mashups in Action
 
Efficient JavaScript Unit Testing, March 2013
Efficient JavaScript Unit Testing, March 2013Efficient JavaScript Unit Testing, March 2013
Efficient JavaScript Unit Testing, March 2013
 
JavaScript tools
JavaScript toolsJavaScript tools
JavaScript tools
 
Efficient JavaScript Unit Testing, May 2012
Efficient JavaScript Unit Testing, May 2012Efficient JavaScript Unit Testing, May 2012
Efficient JavaScript Unit Testing, May 2012
 
[JavaOne 2010] Abstract Mashups for Enterprise Java
[JavaOne 2010] Abstract Mashups for Enterprise Java[JavaOne 2010] Abstract Mashups for Enterprise Java
[JavaOne 2010] Abstract Mashups for Enterprise Java
 
GMaps4JSF
GMaps4JSFGMaps4JSF
GMaps4JSF
 

Dernier

Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
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
 
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
 
[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
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
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
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
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
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 

Dernier (20)

Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
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...
 
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
 
[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
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
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
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
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
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 

[Devoxx Morocco 2015] Apache Cordova In Action

  • 1. #DevoxxMA @DevoxxMA#DevoxxMA @DevoxxMA Apache Cordova In Action Hazem Saleh
  • 2. #DevoxxMA @DevoxxMA About me experience More than ten years of experience in Java enterprise and mobile solutions. Apache Committer. Author of four technical books. DeveloperWorks Contributing author. Technical Speaker (JavaOne, ApacheCon, Geecon,JavaLand, Devoxx …etc) Advisory Software Engineer in IBM.
  • 3. #DevoxxMA @DevoxxMA Agenda Apache Cordova Introduction Configurations Cordova Command Line Cordova APIs Overview Memo Application Demo Hello World Demo Integration Tips with jQM and Ionic General Performance Tips
  • 4. #DevoxxMA @DevoxxMA Apache Cordova Introduction Platform HTML CSS JS
  • 5. #DevoxxMA @DevoxxMA Apache Cordova Introduction Device native functions examples:
  • 6. #DevoxxMA @DevoxxMA Apache Cordova Introduction Hybrid Application (Cordova) Native Application Can be uploaded to App Store Yes Yes Technology HTML + CSS + JavaScript Native platform Programming Language Cross-mobiles support Yes No Development Speed Faster Slower Uses Device Native Features Yes Yes Hybrid vs Native Application
  • 7. #DevoxxMA @DevoxxMA Apache Cordova Introduction Cordova is supported on the following platforms:
  • 8. #DevoxxMA @DevoxxMA Apache Cordova Introduction Challenges of the current mobile apps development: Many platforms and devices. Different skills needed. Different problem types. Huge Development and Testing Effort to have a single application on these platforms. For Android: Java skills needed. For iOS: Objective-C (or SWIFT) skills needed. For Windows: C# skills needed.
  • 9. #DevoxxMA @DevoxxMA Apache Cordova Introduction Who can use Cordova? If you are a web developer and wants to develop a mobile application that can be deployed on the different app store portals. If you are a mobile native developer and wants to develop a single application on the different mobile platforms without having to re-implement the application code on every platform.
  • 10. #DevoxxMA @DevoxxMA Agenda Apache Cordova Introduction Configurations Cordova Command Line Cordova APIs Overview Memo Application Demo Hello World Demo Integration Tips with jQM and Ionic General Performance Tips
  • 11. #DevoxxMA @DevoxxMA Configuration 1 2 3 Prerequisites: Node JS. Target SDK. From command line: > sudo npm install -g cordova To know the installed version of Cordova: > cordova -v GIT
  • 12. #DevoxxMA @DevoxxMA Agenda Apache Cordova Introduction Configurations Cordova Command Line Cordova APIs Overview Memo Application Demo Hello World Demo Integration Tips with jQM and Ionic General Performance Tips
  • 13. #DevoxxMA @DevoxxMA Cordova Command Line To create an application: > cordova create <<app_dir>> <<project_id>> <<app_title>> To add a platform (from the app folder): > cordova platform add <<platform_name>> To build Cordova project: > cordova build To deploy the app on emulator: > cordova emulate <<platform_name>>
  • 14. #DevoxxMA @DevoxxMA Agenda Apache Cordova Introduction Configurations Cordova Command Line Cordova APIs Overview Memo Application Demo Hello World Demo Integration Tips with jQM and Ionic General Performance Tips
  • 16. #DevoxxMA @DevoxxMA Agenda Apache Cordova Introduction Configurations Cordova Command Line Cordova APIs Overview Memo Application Demo Hello World Demo Integration Tips with jQM and Ionic General Performance Tips
  • 17. #DevoxxMA @DevoxxMA Cordova APIs Overview Native device functions are represented as plugins that can be added and removed using the command line. Adding camera plugin example: > cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova- plugin-camera.git Removing Camera plugin example: > cordova plugin rm org.apache.cordova.core.camera
  • 18. #DevoxxMA @DevoxxMA Cordova APIs Overview Device An object that holds information about the device hardware and software. Device information is mainly about:  Device name.  Device Platform.  Device Platform version.  Device model. “deviceready” event is an indicator that Cordova finishes loading and Cordova APIs are ready to be called.
  • 19. #DevoxxMA @DevoxxMA Cordova APIs Overview Camera An object that provides an access to the device camera. It can be used for:  Capturing a photo using the device’s Camera.  Picking a photo from the device’s gallery. navigator.camera.getPicture(onSuccess, onFail, { quality: 50, destinationType: Camera.DestinationType.DATA_URL }); function onSuccess(imageData) { var image = document.getElementById('myImage'); image.src = "data:image/jpeg;base64," + imageData; } function onFail(message) { alert('Failed because: ' + message); }
  • 20. #DevoxxMA @DevoxxMA Cordova APIs Overview Media An object that allows recording and playing back audio files on the device. var my_media = new Media("someFile.mp3", onSuccess, onError); my_media.play(); function onSuccess() { console.log("playAudio():Audio Success"); } function onError(error) { alert('code: ' + error.code + 'n' + 'message: ' + error.message + 'n'); }
  • 21. #DevoxxMA @DevoxxMA Cordova APIs Overview Notification An object that displays visual, audible, and tactile notification. // Show a native looking alert navigator.notification.alert( 'Cordova is great!', // message 'Cordova', // title 'Ok' // buttonName ); // Beep four times navigator.notification.beep(4); // Vibrate for 3 seconds navigator.notification.vibrate(3000);
  • 22. #DevoxxMA @DevoxxMA Cordova APIs Overview Storage Provides an access to the W3C Web Storage interface: window.localStorage.setItem("key", "value"); var value = window.localStorage.getItem("key"); window.localStorage.removeItem("key"); window.localStorage.clear(); - Local Storage (window.localStorage). - Session Storage (window.sessionStorage).
  • 23. #DevoxxMA @DevoxxMA Cordova APIs Overview Storage Provides an access to the device Web SQL Database (Full featured database). Cordova supports IndexedDB for WP8 and Blackberry 10. function populateDB(tx) { tx.executeSql('DROP TABLE IF EXISTS DEMO'); tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)'); tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")'); tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")'); } function errorCB(err) { alert("Error processing SQL: " + err.code); } function successCB() { alert("success!"); } var db = window.openDatabase("Demos", "1.0", "Cordova Demo", 200000); db.transaction(populateDB, errorCB, successCB);
  • 24. #DevoxxMA @DevoxxMA Cordova APIs Overview Accelerometer (Capture device motion) Compass (Get the device direction) Connection (Get the device connection) Contacts (Access to device contacts database). File (Access to device File system based on W3C File API) Globalization (Access to user locale information) Events (Handle Apache Cordova life cycle events). Geolocation (Know your mobile location. API is W3C based) More APIs:
  • 25. #DevoxxMA @DevoxxMA Agenda Apache Cordova Introduction Configurations Cordova Command Line Cordova APIs Overview Memo Application Demo Hello World Demo Integration Tips with jQM and Ionic General Performance Tips
  • 26. #DevoxxMA @DevoxxMA Integration Tips with jQM and Ionic Ionic and jQuery Mobile are: Two popular and powerful User Interface frameworks for building Mobile Web applications. Are based on HTML5, CSS3 and JavaScript. Compatible with most of the mobile and tablet browsers. Ionic has the following advantages: • Powered by AngularJS which is a powerful MVVM framework for creating structured JavaScript applications. • Powered by command line tooling and UI templates.
  • 27. #DevoxxMA @DevoxxMA Integration Tips with jQM and Ionic Cordova does not restrict using any specific JavaScript library but using a JavaScript library will save you a lot of time creating your own widgets from scratch. jQuery Mobile is used in the demo application with Cordova to create the Memo utility. There are also many cool frameworks you can use in your Cordova mobile apps such as: Dojo mobile Sencha Touch Bootstrap
  • 28. #DevoxxMA @DevoxxMA jQuery Mobile Integration Windows Phone 8 Issues: Fixes: Trimmed header title. Footer is not aligned to bottom. Set ui-header and ui-title classes’ overflow to visible. Hide System Tray using app config (shell:SystemTray.isVisible = “False”).
  • 29. #DevoxxMA @DevoxxMA jQuery Mobile Integration iOS 8 (and 9) Issues: One of the possible workarounds: Collision between jQM header title and iOS device status bar. Hide the status bar by adding and setting two properties in the app's .plist file: 1. The Status bar is initially hidden property set to the YES value. 2. The View controller-based status bar appearance property set to the NO value
  • 30. #DevoxxMA @DevoxxMA jQuery Mobile Integration iOS 9 Issues: One of the possible workarounds: Popups are suddenly closed after the first opening time! Use data-history="false” for the data- role="popup” component
  • 31. #DevoxxMA @DevoxxMA jQuery Mobile Integration iOS 9 Issues: One of the possible workarounds: Back buttons are broken due to UIWebView bug in iOS 9: https://openradar.appspot.com/22186109 if (device.platform === "iOS" && parseInt(device.version) === 9) { $.mobile.hashListeningEnabled=false; } /* when the device is ready */
  • 32. #DevoxxMA @DevoxxMA jQuery Mobile Integration In order to boost the performance of jQuery mobile with Cordova, it is recommended to disable transition effects as follows: $.mobile.defaultDialogTransition = 'none’; $.mobile.defaultPageTransition = 'none';
  • 33. #DevoxxMA @DevoxxMA jQuery Mobile Integration • Use cordova-jquery-npm module to speed up adding ready-made jQuery mobile templates to your existing Cordova project. Available templates are: • Multiple pages. • Persistent Navigation bar for three pages. • External Panel Template. • Install it using npm as follows: > npm install –g cordova-jquery • All what you need to do is to run cordova-jquery command from your project root and follow the template creation Wizard. • cordova-jquery-npm module is an open source project that is available in: • https://www.npmjs.com/package/cordova-jquery
  • 34. #DevoxxMA @DevoxxMA Ionic Integration Use Native Scrolling instead of JavaScript scrolling for gaining the maximum performance. $ionicConfigProvider.scrolling.jsScrolling(false);  (Enabling native scrolling for all app views) overflow-scroll=“true”  (for a single ion-content)
  • 35. #DevoxxMA @DevoxxMA Agenda Apache Cordova Introduction Configurations Cordova Command Line Cordova APIs Overview Memo Application Demo Hello World Demo Integration Tips with jQM and Ionic General Performance Tips
  • 36. #DevoxxMA @DevoxxMA General Performance Tips Cache Application Data as much as possible to avoid the network access delay. Possible ways to cache application data:  Web Storage (Local Storage), if data size is less than 5 MBs.  Database (IndexedDB / Web SQL), if data size is larger than 5 MBs.  File System. Always cache static data, and define proper caching policies for dynamic data.
  • 37. #DevoxxMA @DevoxxMA General Performance Tips Avoid the 300ms click event delay on mobile browsers:  Mobile browsers have to wait 300ms to determine if this is a click or a double tap event.  Can make your user feel that your app is slow! Possible Solutions:  If you do not use a specific framework that handles this delay, Use FastClick:  https://github.com/ftlabs/fastclick  If you are using jQuery mobile, use “vClick” event:  https://api.jquerymobile.com/vclick/  If you are using Ionic, use “ngTouch” module:  https://docs.angularjs.org/api/ngTouch
  • 38. #DevoxxMA @DevoxxMA General Performance Tips Minimize DOM Access and Insertions. Do not do: $("#myButton").on("click", someClickEventHandler); $("#myButton").css("text-decoration", "underline"); $("#myButton").css("color", "blue"); $("#myButton").attr("href", "#"); Do not use JavaScript for layout creation. Instead Do: var myButton = $("#myButton”); myButton.on("click", someClickEventHandler); myButton.css("text-decoration", "underline"); myButton.css("color", "blue"); myButton.attr("href", "#");
  • 39. #DevoxxMA @DevoxxMA Agenda Apache Cordova Introduction Configurations Cordova Command Line Cordova APIs Overview Memo Application Demo Hello World Demo Integration Tips with jQM and Ionic General Performance Tips
  • 40. #DevoxxMA @DevoxxMA#DevoxxMA @DevoxxMA GitHub URL: https://github.com/hazems/cordova-mega-app Memo Application
  • 41. #DevoxxMA @DevoxxMA JavaScript Quiz <script> var someVar = "1"; var someObject = { someVar: 2, someMethod: function () { var someVar = 3; var _this = this; setTimeout(function() { var result = _this.someVar + this.someVar; alert(result); }, 10); } };
  • 42. #DevoxxMA @DevoxxMA Questions Twitter: @hazems Blog: http://www.technicaladvices.com Email: hazems@apache.org

Notes de l'éditeur

  1. Make sure that mega app is running in an emulator before starting …
  2. So, today, We will: Have an introduction about Apache Cordova, we will know: What Apache Cordova is, The differences between mobile web vs Hybrid vs native mobile applications, the current challenges of today’s mobile development and how Apache Cordova can minimize these challenges. We will know how to configure Apache Cordova. We will see how to work with Cordova Command Line Interface in order to create and build a cordova project. Then I will show you how to create and deploy an Apache Cordova application from scratch using CLI. Then we will have an overview of Apache Cordova APIs. And we will explore the jQuery mobile Integration tips with Apache Cordova. Finally, I will show you a real application that supports three mobile platforms (iOS, Android and Windows Phone 8). This application utilizes the device’s audio and camera in order to create a memo utility.
  3. So What is Apache Cordova is a set of APIs which allow accessing the device native functions using JavaScript. Apache Cordova is not only a set of APIs but it also a platform which allows creating mobile apps using common web technologies (HTML, CSS, JavaScript).
  4. Device native function examples are: Accessing the device audio to record and playback voice. Capturing a photo using the device camera. Searching and adding contacts to the device. Accessing the device compass and file system.
  5. Before going into the details of the current mobile apps development, it is important to realize the differences between mobile web apps, hybrid mobile apps, and native mobile apps. Mobile web apps: Are mobile-friendly apps which are displayed correctly on the different resolutions of mobile devices and tablets. Usually require you to be online in order to access it as they are not installed locally in your device. Have limited access to the device native functions by utilizing the HTML 5 APIs such as Geolocation. For Hybrid and native mobile apps: They have the same physical format and they can be uploaded to the app store. However, they uses two different technologies. For Hybrid mobile apps, they uses HTML, CSS and JavaScript while Native mobile apps use the native programming language of the mobile platform. Hybrid mobile apps can work on the different mobile platforms while Native mobile apps work only on the platform they are developed for. …
  6. We have the following challenges in the current mobile application development: We have many platforms. Every platform has many devices. This means that testing your application cross these devices is a real overhead. In order to develop an application cross the different mobile platforms, we need to have different skills in the team. For Android, we need the development team to know Java, for … Because every platform has its own philosophy, we can find different problem types on every mobile platform. For example, sending SMS in Android (and continue the example). Handling these problem types using different programming languages is not an easy task. All of this leads to a huge development and testing effort to have a single application idea developed on these mobile platforms. Apache Cordova could meet these challenges by providing a single programming language to develop cross-mobile platform apps which is JavaScript. This means that you will not have to have different skills in your development team and will have a neat and centralized way to handle the different problem type of every platform.
  7. So, today, We will: Have an introduction about Apache Cordova, we will know: What Apache Cordova is, The differences between mobile web vs Hybrid vs native mobile applications, the current challenges of today’s mobile development and how Apache Cordova can minimize these challenges. We will know how to configure Apache Cordova. We will see how to work with Cordova Command Line Interface in order to create and build a cordova project. Then I will show you how to create and deploy an Apache Cordova application from scratch using CLI. Then we will have an overview of Apache Cordova APIs. And we will explore the jQuery mobile Integration tips with Apache Cordova. Finally, I will show you a real application that supports three mobile platforms (iOS, Android and Windows Phone 8). This application utilizes the device’s audio and camera in order to create a memo utility.
  8. So, today, We will: Have an introduction about Apache Cordova, we will know: What Apache Cordova is, The differences between mobile web vs Hybrid vs native mobile applications, the current challenges of today’s mobile development and how Apache Cordova can minimize these challenges. We will know how to configure Apache Cordova. We will see how to work with Cordova Command Line Interface in order to create and build a cordova project. Then I will show you how to create and deploy an Apache Cordova application from scratch using CLI. Then we will have an overview of Apache Cordova APIs. And we will explore the jQuery mobile Integration tips with Apache Cordova. Finally, I will show you a real application that supports three mobile platforms (iOS, Android and Windows Phone 8). This application utilizes the device’s audio and camera in order to create a memo utility.
  9. So, today, We will: Have an introduction about Apache Cordova, we will know: What Apache Cordova is, The differences between mobile web vs Hybrid vs native mobile applications, the current challenges of today’s mobile development and how Apache Cordova can minimize these challenges. We will know how to configure Apache Cordova. We will see how to work with Cordova Command Line Interface in order to create and build a cordova project. Then I will show you how to create and deploy an Apache Cordova application from scratch using CLI. Then we will have an overview of Apache Cordova APIs. And we will explore the jQuery mobile Integration tips with Apache Cordova. Finally, I will show you a real application that supports three mobile platforms (iOS, Android and Windows Phone 8). This application utilizes the device’s audio and camera in order to create a memo utility.
  10. Start from minute 15 and finish by minute 25 (10 minutes) Explain an app in Android/iOS (and Do not forget to include the structure details)…
  11. So, today, We will: Have an introduction about Apache Cordova, we will know: What Apache Cordova is, The differences between mobile web vs Hybrid vs native mobile applications, the current challenges of today’s mobile development and how Apache Cordova can minimize these challenges. We will know how to configure Apache Cordova. We will see how to work with Cordova Command Line Interface in order to create and build a cordova project. Then I will show you how to create and deploy an Apache Cordova application from scratch using CLI. Then we will have an overview of Apache Cordova APIs. And we will explore the jQuery mobile Integration tips with Apache Cordova. Finally, I will show you a real application that supports three mobile platforms (iOS, Android and Windows Phone 8). This application utilizes the device’s audio and camera in order to create a memo utility.
  12. IndexedDB is a sort of NoSQL databases …
  13. Add more APIs here …
  14. So, today, We will: Have an introduction about Apache Cordova, we will know: What Apache Cordova is, The differences between mobile web vs Hybrid vs native mobile applications, the current challenges of today’s mobile development and how Apache Cordova can minimize these challenges. We will know how to configure Apache Cordova. We will see how to work with Cordova Command Line Interface in order to create and build a cordova project. Then I will show you how to create and deploy an Apache Cordova application from scratch using CLI. Then we will have an overview of Apache Cordova APIs. And we will explore the jQuery mobile Integration tips with Apache Cordova. Finally, I will show you a real application that supports three mobile platforms (iOS, Android and Windows Phone 8). This application utilizes the device’s audio and camera in order to create a memo utility.
  15. Revise …
  16. You should be here at minute 40.
  17. So, today, We will: Have an introduction about Apache Cordova, we will know: What Apache Cordova is, The differences between mobile web vs Hybrid vs native mobile applications, the current challenges of today’s mobile development and how Apache Cordova can minimize these challenges. We will know how to configure Apache Cordova. We will see how to work with Cordova Command Line Interface in order to create and build a cordova project. Then I will show you how to create and deploy an Apache Cordova application from scratch using CLI. Then we will have an overview of Apache Cordova APIs. And we will explore the jQuery mobile Integration tips with Apache Cordova. Finally, I will show you a real application that supports three mobile platforms (iOS, Android and Windows Phone 8). This application utilizes the device’s audio and camera in order to create a memo utility.
  18. So, today, We will: Have an introduction about Apache Cordova, we will know: What Apache Cordova is, The differences between mobile web vs Hybrid vs native mobile applications, the current challenges of today’s mobile development and how Apache Cordova can minimize these challenges. We will know how to configure Apache Cordova. We will see how to work with Cordova Command Line Interface in order to create and build a cordova project. Then I will show you how to create and deploy an Apache Cordova application from scratch using CLI. Then we will have an overview of Apache Cordova APIs. And we will explore the jQuery mobile Integration tips with Apache Cordova. Finally, I will show you a real application that supports three mobile platforms (iOS, Android and Windows Phone 8). This application utilizes the device’s audio and camera in order to create a memo utility.
  19. Explain this in 5 minutes (from 40 to 45)
  20. Here in minute 45 21