SlideShare une entreprise Scribd logo
La révolution HTML5


DUVAL Alain                                    Twitter : @aduval93
Directeur Technique Objectif                   Blog : http://www.objectif-informatique.fr/weblog
Email : aduval@objectif-informatique.fr
BEURTHERET Cédric                              Twitter : @cbe317
Responsable Java Objectif                      Blog : http://www.objectif-informatique.fr/weblog
Email : cbeurtheret@objectif-informatique.fr
Agenda
 Genèse & Principes fondateurs
 Nouveautés
 Révolution!
 Retour d’expérience projet
Présentation de la société
 OBJECTIF
  × Spécialiste de l’ingénierie projet JAVA EE
  × 60 collaborateurs
  × Grand Compte Banque / Assurance
  × Sponsor Paris Jug
  × Offre Android, Gwt, Software Factory,
     Performance
 On recrute
  × Des gens comme vous!
Genèse


Mainframe
                             Html1
                                             Html4
                                              Xml

                                                      Ajax
                                                       Reprise
                                                     Des travaux
          Client / Serveur                              HTML

                                     Css

   1960         1990         1993    1996   1998      2004         2009
Principes fondateurs




       1 - Simplicité
http://t2.gstatic.com/images?q=tbn:ANd9GcToNcLrfcgw4qq6cY1NB_6bTvRupJD6IGIfcB3NY5WjvFlMLrGo
Principes fondateurs




        2 - Compatibilité
http://www.masternewmedia.org/browser-compatibility-testing-guide-the-best-tools-and-services/
Principes fondateurs




       3 - Utilité
http://t2.gstatic.com/images?q=tbn:ANd9GcToNcLrfcgw4qq6cY1NB_6bTvRupJD6IGIfcB3NY5WjvFlMLrGo
Révolution ?
« tout changement ou innovation qui
 bouleverse l'ordre établi de façon
 radicale dans un domaine
 quelconque » (wikipedia)
HTML 5 ?
 Sémantique
+CSS 3
+ API Javascript
+ WebGL
+ SVG
= HTML 5
Sémantique: Déclaration simplifiée

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
   Transitional//EN http://www.w3.org/TR/html4/loose.dtd



             <!DOCTYPE html>

 <meta http-equiv="Content-Type" content="text/html;
 charset=utf-8">



          <meta charset="utf-8">
Sémantique: Structure standard
Sémantique: Nouveaux sélecteurs
 querySelector & querySelectorAll
 Retourne des le (les) élement(s) matchant avec une
  règle type CSS

document.querySelector('#myheader')
//returns the element with ID=myheader

document.querySelector('#myform
   input[type="radio"]:checked')
//selects the checked radio button within "#myform"
Formulaires
Formulaires
   Nouveaux inputs

    <input id="email" name="email" type="email"
    placeholder="example@domain.com" required />

   Nouveaux attributs

    <input type="range" min="1" max="99" name="slider1">
    Value: <output id="age" onformchange="this.value =
    form.slider1.value"></output>

   Mécanisme de validation client
    validateData(document.querySelector("#email"))

    function validateData (elt) {
               var valCheck = elt.validity;
               if (valCheck.valid==true) …
    }
Storage
 Valeur en SessionStorage
   × Persistance: Durée de vie de la fenêtre/onglet
   × Visibilité: Limitée à la fenêtre/onglet de création
 Valeur en LocalStorage
   × Persistance: Durée de vie du navigateur
   × Visibilité: Toutes les fenêtres & onglets
 Valeur en DBStorage (WebSqlDb ou
  IndexedDb)
   × Persistance: Jusqu’à suppression explicite
   × Visibilité: Toutes les fenêtres & onglets
Storage
   Session Storage: Get / Set de valeur


    window.sessionStorage.setItem(‘myFirstKey’, ‘myFirstValue’);
    window.sessionStorage.getItem(‘myFirstKey’);

   Db Storage: Création base

    db = openDatabase("maBaseDeDonnees", "1.0", "Ex de bdd avec
    HTML5", 200000);


   Db Storage: Exécution ordre SQL
    db.transaction(function (tx) {
      tx.executeSql('CREATE TABLE IF NOT EXISTS foo (id unique, text)');
      tx.executeSql('INSERT INTO foo (id, text) VALUES (1, "synergies")');
      tx.executeSql('INSERT INTO foo (id, text) VALUES (?, ?)', [id, userValue])
    });
Geolocation
Geolocation
 navigator.geolocation.getCurrentPosition(updateLocation,
 handleLocationError);

 function updateLocation(position) {
           var latitude = position.coords.latitude;
           var longitude = position.coords.longitude;
           var accuracy = position.coords.accuracy;
           … // Afficher une map Google
 }


 function handleLocationError(error) {
          switch(error.code){
          …
 }
Cross Window Messaging
Cross Window Messaging
 Appelant
 window.postMessage(“Hello, world”, “portal.example.com”);


 Appelé
 window.addEventListener(“message”, messageHandler, true);

 function messageHandler(e) {
         if(checkWhiteList(e.origin)) {
                  processMessage(e.data);
         } else {
         // ignore messages from unrecognized origins
         }
 }
Web Workers
Web Workers
 Lancement de tâche de fond
 worker = new Worker("echoWorker.js");


 Communication avec le worker
 worker.postMessage(‘test’);
                         c
 Fin du worker
 worker.terminate();
Audio & Vidéo
Audio & Vidéo
 <audio id="audio" src="../public/sound.mp3"
 controls></audio>


 <video id="video" width="400" height="200"
 src="http://slides.html5rocks.com/src/chrome_japa
 n.webm" controls="controls" ></video>
Canvas
Mais aussi…
 Web sockets
 Speech Input
 Mode déconnecté
 Microdata
 Device API
 File API
Révolutionnaire!
 Browser as a platform




 http://www.barbafan.de/html5video?video=tron   http://www.somethinghitme.com/projects/canvasinvaders/
Révolutionnaire!
 HTML5 = Le java « mobile »
  × Write Once, Run everywhere




 OpenAppMkt = Market HTML5 Mobile
Pourquoi faut il y aller ?

  1 - C’est un standard ouvert…



  … qui va faire mal à
Pourquoi faut il y aller ?

  2 – HTML5 vise un
  maximum d’intéropérabilité
Pourquoi faut il y aller ?

  3 – Le monde pousse sur HTML 5
Adoption
                               IE 9        FIREFOX 4      SAFARI 5     CHROME 10      OPERA 11
Eléments HTML5
Canvas
SVG
Applications déconnectées      Non
Stockage local
Base de données locale         Non
Web workers                    Non
Géolocalisation
Cross Window Messaging
Web sockets                    Non
Server Sent Events             Non            Non
Drag-Drop                                                                                Non
Codec Vidéo                 H264, WebM     WebM, Ogg     Mpeg, H264     H264, Ogg     WebM, Ogg
                                            Theora                    Theora, WebM     Theora
Codec Audio                  Mp3, AAC,      Pcm, Ogg     Pcm, Mp3,     Pcm, Mp3,       Pcm, Ogg
                              WebM        Vorbis, WebM     AAC          AAC, Ogg     Vorbis, WebM
                                                                      Vorbis, WebM




                                      http://www.html5test.com/
Des projets avec HTML5 ? … OUI
     Application de gestion de la relation client à usage des commerciaux
     Application nomade devant supporter le mode déconnecté
     Architecture 3 niveaux avec réplication de données
     Web Worker + Local Storage + Cross Window Messaging




 Tablet PC

                        Internet
Tablet PC                                              Network
                        3G Edge


     Tablet PC                                                                AS/400
                                             TOMCAT                          DB2/400
                                            SQL SERVER
           CHROME
         GWT 2 + HTML 5
Bilan projet
 Pré requis HTML5: Maîtrise du navigateur
 Bénéfices
  × Mode déconnecté
  × Performance (- de roundtrip avec le serveur,
    synchronisation en // avec le web worker)
  × Modularité du code
 Attention!
  × Sécurité des données (cryptage)
Ressources
 http://dev.w3.org/html5/spec/Overview.html
 http://www.html5rocks.com
 http://html5doctor.com
 http://html5test.com
 http://html5demos.com
 http://www.chromeexperiments.com/
 Pro HTML 5 Programming (P. Lubbers)
 HTML 5 Up & Running (M. Pilgrim)
Questions

Contenu connexe

PDF
Agile Sans Frontières
PDF
ToulouseJUG - REX Flex, Spring & Agilité
PPTX
Advanced html5
ODP
Formation PHP avancé - Cake PHP
PPT
20111006 bonnes pratiques-gi_g_v1
PDF
Deployment of a multi-site platform
PDF
Html5 par Florent Garin, au Toulouse JUG
PPTX
Codedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript
Agile Sans Frontières
ToulouseJUG - REX Flex, Spring & Agilité
Advanced html5
Formation PHP avancé - Cake PHP
20111006 bonnes pratiques-gi_g_v1
Deployment of a multi-site platform
Html5 par Florent Garin, au Toulouse JUG
Codedarmor 2012 - 06/03 - HTML5, CSS3 et Javascript

Tendances (20)

PDF
Cours JavaScript
PDF
Comment se charge WordPress ? Le loading du core.
PPTX
HTML5, le web de demain - BNSA
PDF
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs Web
PDF
Play Framework - Toulouse JUG - nov 2011
PDF
Node.js, le pavé dans la mare
PDF
MongoDB day Paris 2012
PDF
Cours javascript
KEY
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
PDF
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
ODP
Utiliser pleinement le navigateur et les nouveaux clients web - AFUP 2007
PDF
Industrialiser la gestion des fichiers multimedia #dcparis13
PDF
Les données transitoires (transients) vous veulent du bien
PDF
Meet-Up SQLI Lyon 09-2015 - Varnish
PDF
Javascript
PPT
Cours 1/3 "Architecture Web"
PDF
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
PPTX
Real-Time applications avec la spécification Java (JSR 356) et le protocole W...
PDF
Dev Symfony2 rapide avec un framework de contenu
Cours JavaScript
Comment se charge WordPress ? Le loading du core.
HTML5, le web de demain - BNSA
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs Web
Play Framework - Toulouse JUG - nov 2011
Node.js, le pavé dans la mare
MongoDB day Paris 2012
Cours javascript
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Utiliser pleinement le navigateur et les nouveaux clients web - AFUP 2007
Industrialiser la gestion des fichiers multimedia #dcparis13
Les données transitoires (transients) vous veulent du bien
Meet-Up SQLI Lyon 09-2015 - Varnish
Javascript
Cours 1/3 "Architecture Web"
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Real-Time applications avec la spécification Java (JSR 356) et le protocole W...
Dev Symfony2 rapide avec un framework de contenu
Publicité

En vedette (6)

PDF
Comment j'ai mis ma suite de tests au régime en 5 minutes par jour
PDF
Mix it 2011 - Clojure
ODP
Sur la route de l'agilité @Mix-it Lyon 2011
PDF
Mix-IT (Apr 2011) - Intelligence Collective avec Apache Mahout
PDF
Building complex and modular RIAs with OSGi and Flex
PPTX
mix-it 2011
Comment j'ai mis ma suite de tests au régime en 5 minutes par jour
Mix it 2011 - Clojure
Sur la route de l'agilité @Mix-it Lyon 2011
Mix-IT (Apr 2011) - Intelligence Collective avec Apache Mahout
Building complex and modular RIAs with OSGi and Flex
mix-it 2011
Publicité

Similaire à HTML5... La révolution maintenant! (20)

PPTX
Les apports d'HTML5 pour l'interopérabilité des applications géospatiales
PPT
HTML5 en Entreprise
PPTX
HTML5 W3C Conference Euratechnologie
PPTX
L'histoire d'html5 pour les développeurs windows phone 8
ODP
Responsible Design ou Le web moderne à destination de tous
PDF
Enib cours c.a.i. web - séance #1 - html5 css3-js - 1
PDF
HTML5 & SilverLight 5
PPT
Présentation html5
PDF
HTML5 by People Input @StartupWeekend Dakar Bootcamp 22.03.2012
PPTX
Developper une application mobile
PPTX
L'histoire d'HTML5 pour les développeurs Windows Phone 8
PDF
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
PPTX
HTML 5 et CSS3, créez, animez et enrichissez vos sites Web
PDF
Do you speak technique ?
PPTX
HTML5 en projet
PDF
Confoo - 2012-02-27 au 2012-02-28 - HTML5 workshop
PDF
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
PPTX
Wygday 2011 - Introduction à HTML5
PPT
Drupal & Mobilité
PDF
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
Les apports d'HTML5 pour l'interopérabilité des applications géospatiales
HTML5 en Entreprise
HTML5 W3C Conference Euratechnologie
L'histoire d'html5 pour les développeurs windows phone 8
Responsible Design ou Le web moderne à destination de tous
Enib cours c.a.i. web - séance #1 - html5 css3-js - 1
HTML5 & SilverLight 5
Présentation html5
HTML5 by People Input @StartupWeekend Dakar Bootcamp 22.03.2012
Developper une application mobile
L'histoire d'HTML5 pour les développeurs Windows Phone 8
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
HTML 5 et CSS3, créez, animez et enrichissez vos sites Web
Do you speak technique ?
HTML5 en projet
Confoo - 2012-02-27 au 2012-02-28 - HTML5 workshop
ENIB 2015 2016 - CAI Web S02E01- Côté Navigateur 2/3 - HTML5 / CSS3 / Twitter...
Wygday 2011 - Introduction à HTML5
Drupal & Mobilité
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...

Plus de CARA_Lyon (8)

PPTX
Kanban un tour d'horizon
PDF
Smartphone : et l'informatique devint mobile...
PDF
BDD (Behavior Driven Development) - Une voie vers l'agilité
ODP
Test du futur avec Spock
PDF
Les outils de l'ergonome agile
PDF
Fable du Product Owner et de la Maîtrise d'Ouvrage (MOA)
PDF
HTML5... La révolution maintenant!
PDF
20110519 cara tests_agiles_grenoble_all
Kanban un tour d'horizon
Smartphone : et l'informatique devint mobile...
BDD (Behavior Driven Development) - Une voie vers l'agilité
Test du futur avec Spock
Les outils de l'ergonome agile
Fable du Product Owner et de la Maîtrise d'Ouvrage (MOA)
HTML5... La révolution maintenant!
20110519 cara tests_agiles_grenoble_all

Dernier (7)

PDF
FORMATION EN Programmation En Langage C.pdf
PPTX
Souveraineté numérique - Définition et enjeux pour les entreprises et les dév...
PDF
Modems expliqués- votre passerelle vers Internet.pdf
PDF
presentation_with_intro_compressee IEEE EPS France
PDF
FORMATION COMPLETE EN EXCEL DONE BY MR. NYONGA BRICE.pdf
PDF
Tendances tech 2025 - SFEIR & WENVISION.pdf
PPTX
Presentation_Securite_Reseaux_Bac+2.pptx
FORMATION EN Programmation En Langage C.pdf
Souveraineté numérique - Définition et enjeux pour les entreprises et les dév...
Modems expliqués- votre passerelle vers Internet.pdf
presentation_with_intro_compressee IEEE EPS France
FORMATION COMPLETE EN EXCEL DONE BY MR. NYONGA BRICE.pdf
Tendances tech 2025 - SFEIR & WENVISION.pdf
Presentation_Securite_Reseaux_Bac+2.pptx

HTML5... La révolution maintenant!

  • 1. La révolution HTML5 DUVAL Alain Twitter : @aduval93 Directeur Technique Objectif Blog : http://www.objectif-informatique.fr/weblog Email : aduval@objectif-informatique.fr BEURTHERET Cédric Twitter : @cbe317 Responsable Java Objectif Blog : http://www.objectif-informatique.fr/weblog Email : cbeurtheret@objectif-informatique.fr
  • 2. Agenda  Genèse & Principes fondateurs  Nouveautés  Révolution!  Retour d’expérience projet
  • 3. Présentation de la société  OBJECTIF × Spécialiste de l’ingénierie projet JAVA EE × 60 collaborateurs × Grand Compte Banque / Assurance × Sponsor Paris Jug × Offre Android, Gwt, Software Factory, Performance  On recrute × Des gens comme vous!
  • 4. Genèse Mainframe Html1 Html4 Xml Ajax Reprise Des travaux Client / Serveur HTML Css 1960 1990 1993 1996 1998 2004 2009
  • 5. Principes fondateurs 1 - Simplicité http://t2.gstatic.com/images?q=tbn:ANd9GcToNcLrfcgw4qq6cY1NB_6bTvRupJD6IGIfcB3NY5WjvFlMLrGo
  • 6. Principes fondateurs 2 - Compatibilité http://www.masternewmedia.org/browser-compatibility-testing-guide-the-best-tools-and-services/
  • 7. Principes fondateurs 3 - Utilité http://t2.gstatic.com/images?q=tbn:ANd9GcToNcLrfcgw4qq6cY1NB_6bTvRupJD6IGIfcB3NY5WjvFlMLrGo
  • 8. Révolution ? « tout changement ou innovation qui bouleverse l'ordre établi de façon radicale dans un domaine quelconque » (wikipedia)
  • 9. HTML 5 ? Sémantique +CSS 3 + API Javascript + WebGL + SVG = HTML 5
  • 10. Sémantique: Déclaration simplifiée <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN http://www.w3.org/TR/html4/loose.dtd <!DOCTYPE html> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta charset="utf-8">
  • 12. Sémantique: Nouveaux sélecteurs  querySelector & querySelectorAll  Retourne des le (les) élement(s) matchant avec une règle type CSS document.querySelector('#myheader') //returns the element with ID=myheader document.querySelector('#myform input[type="radio"]:checked') //selects the checked radio button within "#myform"
  • 14. Formulaires  Nouveaux inputs <input id="email" name="email" type="email" placeholder="example@domain.com" required />  Nouveaux attributs <input type="range" min="1" max="99" name="slider1"> Value: <output id="age" onformchange="this.value = form.slider1.value"></output>  Mécanisme de validation client validateData(document.querySelector("#email")) function validateData (elt) { var valCheck = elt.validity; if (valCheck.valid==true) … }
  • 15. Storage  Valeur en SessionStorage × Persistance: Durée de vie de la fenêtre/onglet × Visibilité: Limitée à la fenêtre/onglet de création  Valeur en LocalStorage × Persistance: Durée de vie du navigateur × Visibilité: Toutes les fenêtres & onglets  Valeur en DBStorage (WebSqlDb ou IndexedDb) × Persistance: Jusqu’à suppression explicite × Visibilité: Toutes les fenêtres & onglets
  • 16. Storage  Session Storage: Get / Set de valeur window.sessionStorage.setItem(‘myFirstKey’, ‘myFirstValue’); window.sessionStorage.getItem(‘myFirstKey’);  Db Storage: Création base db = openDatabase("maBaseDeDonnees", "1.0", "Ex de bdd avec HTML5", 200000);  Db Storage: Exécution ordre SQL db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS foo (id unique, text)'); tx.executeSql('INSERT INTO foo (id, text) VALUES (1, "synergies")'); tx.executeSql('INSERT INTO foo (id, text) VALUES (?, ?)', [id, userValue]) });
  • 18. Geolocation navigator.geolocation.getCurrentPosition(updateLocation, handleLocationError); function updateLocation(position) { var latitude = position.coords.latitude; var longitude = position.coords.longitude; var accuracy = position.coords.accuracy; … // Afficher une map Google } function handleLocationError(error) { switch(error.code){ … }
  • 20. Cross Window Messaging  Appelant window.postMessage(“Hello, world”, “portal.example.com”);  Appelé window.addEventListener(“message”, messageHandler, true); function messageHandler(e) { if(checkWhiteList(e.origin)) { processMessage(e.data); } else { // ignore messages from unrecognized origins } }
  • 22. Web Workers  Lancement de tâche de fond worker = new Worker("echoWorker.js");  Communication avec le worker worker.postMessage(‘test’); c  Fin du worker worker.terminate();
  • 24. Audio & Vidéo <audio id="audio" src="../public/sound.mp3" controls></audio> <video id="video" width="400" height="200" src="http://slides.html5rocks.com/src/chrome_japa n.webm" controls="controls" ></video>
  • 26. Mais aussi…  Web sockets  Speech Input  Mode déconnecté  Microdata  Device API  File API
  • 27. Révolutionnaire!  Browser as a platform http://www.barbafan.de/html5video?video=tron http://www.somethinghitme.com/projects/canvasinvaders/
  • 28. Révolutionnaire!  HTML5 = Le java « mobile » × Write Once, Run everywhere OpenAppMkt = Market HTML5 Mobile
  • 29. Pourquoi faut il y aller ? 1 - C’est un standard ouvert… … qui va faire mal à
  • 30. Pourquoi faut il y aller ? 2 – HTML5 vise un maximum d’intéropérabilité
  • 31. Pourquoi faut il y aller ? 3 – Le monde pousse sur HTML 5
  • 32. Adoption IE 9 FIREFOX 4 SAFARI 5 CHROME 10 OPERA 11 Eléments HTML5 Canvas SVG Applications déconnectées Non Stockage local Base de données locale Non Web workers Non Géolocalisation Cross Window Messaging Web sockets Non Server Sent Events Non Non Drag-Drop Non Codec Vidéo H264, WebM WebM, Ogg Mpeg, H264 H264, Ogg WebM, Ogg Theora Theora, WebM Theora Codec Audio Mp3, AAC, Pcm, Ogg Pcm, Mp3, Pcm, Mp3, Pcm, Ogg WebM Vorbis, WebM AAC AAC, Ogg Vorbis, WebM Vorbis, WebM http://www.html5test.com/
  • 33. Des projets avec HTML5 ? … OUI  Application de gestion de la relation client à usage des commerciaux  Application nomade devant supporter le mode déconnecté  Architecture 3 niveaux avec réplication de données  Web Worker + Local Storage + Cross Window Messaging Tablet PC Internet Tablet PC Network 3G Edge Tablet PC AS/400 TOMCAT DB2/400 SQL SERVER CHROME GWT 2 + HTML 5
  • 34. Bilan projet  Pré requis HTML5: Maîtrise du navigateur  Bénéfices × Mode déconnecté × Performance (- de roundtrip avec le serveur, synchronisation en // avec le web worker) × Modularité du code  Attention! × Sécurité des données (cryptage)
  • 35. Ressources  http://dev.w3.org/html5/spec/Overview.html  http://www.html5rocks.com  http://html5doctor.com  http://html5test.com  http://html5demos.com  http://www.chromeexperiments.com/  Pro HTML 5 Programming (P. Lubbers)  HTML 5 Up & Running (M. Pilgrim)