SlideShare une entreprise Scribd logo
1  sur  13
http://fr.linkedin.com/in/duvergerp 
Retour sur expérience sur 
les technologies D3.js & Bootstrap 
(HTML / JS / CSS / SVG) 
freedatamap.com 
Patrick Duverger
Petit aperçu de ce qu’on peut 
(facilement) faire dans une page Web
Data Driven 
Document : D3 
D3.js framework ou library ? 
• Un framework appelle notre code, notre code appelle une library. 
• Réponse : plus une library qu’un framework, mais en matière de UI, la gestion 
des événements impose que la lib appelle notre code. 
D3.js une library de visualization ou un clone de jQuery ? 
• La base de D3 c’est la manipulation du DOM (HTML object model), d’où son 
nom. 
• D3 hérite de toutes les bibliothèques graphiques du projet Protovis : il fournit 
l’implémentation de beaucoup d’algorithmes mathématiques complexes. 
• La puissance graphique de D3 repose en grande partie sur SVG qui n’est pas 
qu’un moteur de rendu vectoriel statique, mais qui fonctionne très bien lorsque 
vous changez dynamiquement les coordonnées des objets SVG. 
• D3 = jQuery orienté manipulation graphique avec un riche panel 
d’implémentations de rendus graphiques sur étagère 
http://d3js.org/ 
http://bl.ocks.org/mbostock/3231298 
Mike Bostock est le développeur principal de D3 (et auparavant Protovis)
SVG or 
HTML5 Canvas? 
Doit-on choisir ? 
• Oui, c’est l’un ou l’autre : les langages de création des objets graphiques sont 
différents (avec similitudes) et le code javascript pour les manipuler aussi. 
• HTML5 canvas : un peu plus rapide, mais les objets rendus ne sont pas dans le 
DOM, cela fait toute la différence! 
• SVG : tous les objets vectoriels sont accessibles dans le DOM avec jQuery ou 
D3  facile à débugguer, facile pour rajouter des événements, facile de 
grouper les objets et manipuler seulement les coordonnées du groupe. 
• Les opérations booléennes entre calques sont très faciles en HTML5 canvas, 
par contre en SVG le dernier dessiné est le dernier affiché (la conception du 
rendu vectoriel a des implications sur le flux d’exécution du code qui le génère). 
• D3 utilise SVG et absolument pas les canvas HTML, ce qui est logique puisque 
le moteur de D3 est fait pour manipuler le DOM donc des objets, qu’ils soient 
HTML ou SVG. 
Evidemment l’un et l’autre cohabitent très bien. Il suffit de mettre 
un calque transparent (style=’z-index:-1;’) avec un canvas par 
dessus un objet SVG.
D3.js 
Data Driven Document 
Sélections en W3C DOM API: 
retourne un tableau de .name et .value paires 
Sélections en jQuery: 
Sélections en D3.js: 
• Adapté à une multi sélection 
• Chaînable 
• Possibilité de mettre une fonction 
qui est exécutée à chaque fois 
que la valeur est requise
D3 vs jQuery vs 
Il faut malheureusement utiliser les 3 formes de manipulation du DOM : 
natives jQuery D3.js 
• DOM en direct : syntaxe lourde et pas d’implémentation pour manipuler le CSS, 
mais indispensable pour travailler avant l’import de jQuery ou D3 comme pour 
interagir avec des iFrames. 
• jQuery 
D3.js = jQuery for SVG 
• Très abouti, très puissant sur les fonctions de requêtes 
• Facile pour manipuler les CSS 
• Possibilité de stocker un objet ‘data’ dans n’importe quel objet du DOM 
(utile plutôt que garder une trace des id et abuser des select) 
• Light et indispensable pour travailler dans un worker thread 
• D3 : ne peut pas remplacer jQuery (nécessite le DOM de la page qui n’est 
pas référencée dans les threads). 
• + : Gère n’importe quelle valeur comme une fonction 
• - : double tableau incompréhensible
D3.js 
Exemple de manipulation du DOM en D3 : 
• Les méthodes sont chainables (elles renvoient toutes l’objet D3 concerné) : très 
pratique, très lisible. 
• Une syntaxe un peu déroutante au début : il faut sélectionner un objet qui 
n’existe pas pour le créer. 
• D3 lie un vecteur de données avec les objets du DOM. 
• Adapté pour évaluer des fonctions en lieu et place de valeurs habituellement. 
• Attention dans les fonctions : d = donnée, i = index de la 
donnée dans le vecteur de données, ne pas utiliser « this » 
(objet parent de la fonction appelé depuis une méthode D3) 
• enter() et exit() : actions exécutée lorsque le vecteur de données est 
différent des objets sélectionnés dans le DOM
Physic engine 
D3.js contient une implémentation de l’algorithme « Verlet integration » qui est à la 
base des moteurs physiques. 
position d’après = position d’avant + vitesse * delta temps 
vitesse d’après = vitesse d’avant + accélération * delta temps 
force = masse * accélération 
Verlet integration : 
Pos d’après après = 2*pos d’après – pos + force/masse * delta temps^2 
Autre qualité de D3 : les transitions
Petit moteur physique fait-maison 
en HTML5 canvas
D3 physic engine example
Putting alltogether 
Comment passer d’un objet dom à un objet jquery ou d3 et vice versa ? 
$(objet dom) -> objet jquery sur lequel on peut invoquer find() ou attr() ou css() 
D3.select(objet dom) -> objet d3 sur lequel on peut invoquer select(), append() ou 
attr() ou style() 
Réciproquement 
d3object[0][0] = 1er objet dom de la sélection 
objectJquery[0] = 1er objet dom de la sélection 
Donc $() renvoie un vecteur d’objets DOM car le sélecteur peut renvoyer plusieurs 
objets 
D3.select() renvoie un vecteur de vecteurs (le premier préserve la structure des 
selectAll, le deuxième contient les objets) 
Comment faire du code rapide ? 
• utiliser les profilers de chrome et de firefox 
• proscrire les array en javascript et préférer les { } 
var a = [] ; for(i) { a.push(obj_i) ; }  a[i] très très lent… 
var o = {} ; for(i) { o[‘’ + i] = obj_i ; }  o[i] très très rapide!
Deux mots sur Bootstrap 
Twitter Bootstrap offre une collection complète de widgets pour construire une UI 
 Très utile pour bénéficier de widgets Web qui ont un bon look&feel 
 Très facile et utile pour ceux qui n’aiment pas CSS 
Bootstrap étant principalement une library css, c’est lui qui fait le boulot 
 Beaucoup de changements entre la version 2 et la version 3 
(personnellement je suis resté sur la v2 comme beaucoup…) 
 Pas trouvé mieux : jQueryMobile impose un loading screen dans la 
mainPage, Bootstrap est lightweight donc se loade facilement dans des 
iframe 
 Petit retour d’expérience : beaucoup de bugs dans les composants 
javascript, 
 Prévoir de mettre les mains dedans… 
 Beaucoup de modifs pour avoir du véritable responsive design 
 mauvaise réaction aux événements tactiles 
Un conseil : centralisez les événements dans un seul objet 
avec un handler central « à la Xwindows »
FIN 
merci pour votre attention

Contenu connexe

Tendances

Ajax et Accessibilite
Ajax et AccessibiliteAjax et Accessibilite
Ajax et Accessibilitemikeh
 
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2Horacio Gonzalez
 
L'architecture MVVM avec KnockoutJS
L'architecture MVVM avec KnockoutJSL'architecture MVVM avec KnockoutJS
L'architecture MVVM avec KnockoutJSDavid Bottiau
 
Ajax intro 2pp
Ajax intro 2ppAjax intro 2pp
Ajax intro 2ppRYMAA
 
Toutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDBToutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDBContent Square
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hoodsvuillet
 
Cloud Azure – Services de données et bonnes pratiques
Cloud Azure – Services de données et bonnes pratiquesCloud Azure – Services de données et bonnes pratiques
Cloud Azure – Services de données et bonnes pratiquesMicrosoft
 
Introduction à Angularjs
Introduction à AngularjsIntroduction à Angularjs
Introduction à AngularjsRossi Oddet
 
Theming drupal8 - Meetup Paris - 26-mars-2015
Theming drupal8 - Meetup Paris - 26-mars-2015Theming drupal8 - Meetup Paris - 26-mars-2015
Theming drupal8 - Meetup Paris - 26-mars-2015Romain Jarraud
 
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?Sébastien Prunier
 
Devoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le CloudDevoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le CloudTugdual Grall
 

Tendances (17)

Apprenez le jQuery
Apprenez le jQueryApprenez le jQuery
Apprenez le jQuery
 
JQuery
JQueryJQuery
JQuery
 
Ajax et Accessibilite
Ajax et AccessibiliteAjax et Accessibilite
Ajax et Accessibilite
 
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2Enib   cours c.a.i. web - séance #1 - html5 css3-js - 2
Enib cours c.a.i. web - séance #1 - html5 css3-js - 2
 
L'architecture MVVM avec KnockoutJS
L'architecture MVVM avec KnockoutJSL'architecture MVVM avec KnockoutJS
L'architecture MVVM avec KnockoutJS
 
jQuery
jQueryjQuery
jQuery
 
Ajax intro 2pp
Ajax intro 2ppAjax intro 2pp
Ajax intro 2pp
 
Toutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDBToutes les raisons d'adopter MongoDB
Toutes les raisons d'adopter MongoDB
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hood
 
Cloud Azure – Services de données et bonnes pratiques
Cloud Azure – Services de données et bonnes pratiquesCloud Azure – Services de données et bonnes pratiques
Cloud Azure – Services de données et bonnes pratiques
 
Mongo DB
Mongo DBMongo DB
Mongo DB
 
Framework JavaScript Web - Brief techno
Framework JavaScript Web - Brief technoFramework JavaScript Web - Brief techno
Framework JavaScript Web - Brief techno
 
Introduction à Angularjs
Introduction à AngularjsIntroduction à Angularjs
Introduction à Angularjs
 
Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
 
Theming drupal8 - Meetup Paris - 26-mars-2015
Theming drupal8 - Meetup Paris - 26-mars-2015Theming drupal8 - Meetup Paris - 26-mars-2015
Theming drupal8 - Meetup Paris - 26-mars-2015
 
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
[Breizhcamp 2015] MongoDB et Elastic, meilleurs ennemis ?
 
Devoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le CloudDevoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le Cloud
 

En vedette

Solr retour d'experience
Solr retour d'experienceSolr retour d'experience
Solr retour d'experienceCrossknowledge
 
2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.jsTelecomValley
 
Application web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapApplication web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapBassem ABCHA
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...Horacio Gonzalez
 
Besoin de rien Envie de Search - Presentation Lucene Solr ElasticSearch
Besoin de rien Envie de Search - Presentation Lucene Solr ElasticSearchBesoin de rien Envie de Search - Presentation Lucene Solr ElasticSearch
Besoin de rien Envie de Search - Presentation Lucene Solr ElasticSearchfrancelabs
 

En vedette (7)

Solr retour d'experience
Solr retour d'experienceSolr retour d'experience
Solr retour d'experience
 
2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js
 
Formation mobile-cross-platform
Formation mobile-cross-platformFormation mobile-cross-platform
Formation mobile-cross-platform
 
Livre blanc v1.0
Livre blanc v1.0Livre blanc v1.0
Livre blanc v1.0
 
Application web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapApplication web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrap
 
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...ENIB 2015-2016 - CAI Web -  S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
ENIB 2015-2016 - CAI Web - S01E01- Côté navigateur 2/3 - HTML5, CSS3, Twitte...
 
Besoin de rien Envie de Search - Presentation Lucene Solr ElasticSearch
Besoin de rien Envie de Search - Presentation Lucene Solr ElasticSearchBesoin de rien Envie de Search - Presentation Lucene Solr ElasticSearch
Besoin de rien Envie de Search - Presentation Lucene Solr ElasticSearch
 

Similaire à 2014.12.11 - TECH CONF #3 - Présentation Bootstrap

Etendre le Web avec les Web Components
Etendre le Web avec les Web ComponentsEtendre le Web avec les Web Components
Etendre le Web avec les Web Componentscjolif
 
Comparatif des frameworks js mv
Comparatif des frameworks js mvComparatif des frameworks js mv
Comparatif des frameworks js mvMael Monnier
 
HTML5/CSS3D - Expresso Rennes Atalante - 17 sept. 2013
HTML5/CSS3D - Expresso Rennes Atalante - 17 sept. 2013HTML5/CSS3D - Expresso Rennes Atalante - 17 sept. 2013
HTML5/CSS3D - Expresso Rennes Atalante - 17 sept. 2013Julien LE THUAUT
 
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013MBA Multimedia
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans DrupalAdyax
 
Dojo Mobile @ Devoxx France
Dojo Mobile @ Devoxx FranceDojo Mobile @ Devoxx France
Dojo Mobile @ Devoxx Francecjolif
 
Html5 par Florent Garin, au Toulouse JUG
Html5 par Florent Garin, au Toulouse JUGHtml5 par Florent Garin, au Toulouse JUG
Html5 par Florent Garin, au Toulouse JUGJUG Toulouse
 
Les dernières avancées HTML5 & CSS3 en action !
Les dernières avancées HTML5 & CSS3 en action !Les dernières avancées HTML5 & CSS3 en action !
Les dernières avancées HTML5 & CSS3 en action !Microsoft Technet France
 
Les dernières avancées html5 & css3 en action !
Les dernières avancées html5 & css3 en action !Les dernières avancées html5 & css3 en action !
Les dernières avancées html5 & css3 en action !davrous
 
SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)Rui Carvalho
 
Vincent biret azure functions et flow (montreal)
Vincent biret azure functions et flow (montreal)Vincent biret azure functions et flow (montreal)
Vincent biret azure functions et flow (montreal)Vincent Biret
 
USI 2009 - Du RIA pour SI
USI 2009 - Du RIA pour SIUSI 2009 - Du RIA pour SI
USI 2009 - Du RIA pour SIDjamel Zouaoui
 
Front end, une île qui mérite d'être visitée
Front end, une île qui mérite d'être visitéeFront end, une île qui mérite d'être visitée
Front end, une île qui mérite d'être visitéeOuadie LAHDIOUI
 
Mappingobjetrelationnel[1]
Mappingobjetrelationnel[1]Mappingobjetrelationnel[1]
Mappingobjetrelationnel[1]linasafaa
 
C++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in ParisC++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in Parischristophep21
 
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Microsoft
 
Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Laurent Guérin
 
jQuery mobile / PhoneGap : contenus dynamiques client-side
jQuery mobile / PhoneGap : contenus dynamiques client-sidejQuery mobile / PhoneGap : contenus dynamiques client-side
jQuery mobile / PhoneGap : contenus dynamiques client-sidemaru.maru
 

Similaire à 2014.12.11 - TECH CONF #3 - Présentation Bootstrap (20)

Etendre le Web avec les Web Components
Etendre le Web avec les Web ComponentsEtendre le Web avec les Web Components
Etendre le Web avec les Web Components
 
Comparatif des frameworks js mv
Comparatif des frameworks js mvComparatif des frameworks js mv
Comparatif des frameworks js mv
 
HTML5/CSS3D - Expresso Rennes Atalante - 17 sept. 2013
HTML5/CSS3D - Expresso Rennes Atalante - 17 sept. 2013HTML5/CSS3D - Expresso Rennes Atalante - 17 sept. 2013
HTML5/CSS3D - Expresso Rennes Atalante - 17 sept. 2013
 
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
Expresso Rennes Atalante - Html5 / Css3D - 17 sept. 2013
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans Drupal
 
Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
 
Dojo Mobile @ Devoxx France
Dojo Mobile @ Devoxx FranceDojo Mobile @ Devoxx France
Dojo Mobile @ Devoxx France
 
Html5 par Florent Garin, au Toulouse JUG
Html5 par Florent Garin, au Toulouse JUGHtml5 par Florent Garin, au Toulouse JUG
Html5 par Florent Garin, au Toulouse JUG
 
Les dernières avancées HTML5 & CSS3 en action !
Les dernières avancées HTML5 & CSS3 en action !Les dernières avancées HTML5 & CSS3 en action !
Les dernières avancées HTML5 & CSS3 en action !
 
Les dernières avancées html5 & css3 en action !
Les dernières avancées html5 & css3 en action !Les dernières avancées html5 & css3 en action !
Les dernières avancées html5 & css3 en action !
 
SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)
 
NodeJs in real life
NodeJs in real lifeNodeJs in real life
NodeJs in real life
 
Vincent biret azure functions et flow (montreal)
Vincent biret azure functions et flow (montreal)Vincent biret azure functions et flow (montreal)
Vincent biret azure functions et flow (montreal)
 
USI 2009 - Du RIA pour SI
USI 2009 - Du RIA pour SIUSI 2009 - Du RIA pour SI
USI 2009 - Du RIA pour SI
 
Front end, une île qui mérite d'être visitée
Front end, une île qui mérite d'être visitéeFront end, une île qui mérite d'être visitée
Front end, une île qui mérite d'être visitée
 
Mappingobjetrelationnel[1]
Mappingobjetrelationnel[1]Mappingobjetrelationnel[1]
Mappingobjetrelationnel[1]
 
C++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in ParisC++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in Paris
 
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
 
Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022
 
jQuery mobile / PhoneGap : contenus dynamiques client-side
jQuery mobile / PhoneGap : contenus dynamiques client-sidejQuery mobile / PhoneGap : contenus dynamiques client-side
jQuery mobile / PhoneGap : contenus dynamiques client-side
 

Plus de TelecomValley

Rapport d'activité SoFAB 2022
Rapport d'activité SoFAB 2022Rapport d'activité SoFAB 2022
Rapport d'activité SoFAB 2022TelecomValley
 
Rapport d'activité 2022
Rapport d'activité 2022Rapport d'activité 2022
Rapport d'activité 2022TelecomValley
 
Rapport d'activité 2021 - Telecom Valley
Rapport d'activité 2021 - Telecom ValleyRapport d'activité 2021 - Telecom Valley
Rapport d'activité 2021 - Telecom ValleyTelecomValley
 
Livre blanc "Les métamorphoses de l'entreprise face à l'imprévu - Tome 1 : la...
Livre blanc "Les métamorphoses de l'entreprise face à l'imprévu - Tome 1 : la...Livre blanc "Les métamorphoses de l'entreprise face à l'imprévu - Tome 1 : la...
Livre blanc "Les métamorphoses de l'entreprise face à l'imprévu - Tome 1 : la...TelecomValley
 
Rapport d'activité SoFAB 2020
Rapport d'activité SoFAB 2020Rapport d'activité SoFAB 2020
Rapport d'activité SoFAB 2020TelecomValley
 
Rapport d'activité Telecom Valley 2020
Rapport d'activité Telecom Valley 2020Rapport d'activité Telecom Valley 2020
Rapport d'activité Telecom Valley 2020TelecomValley
 
Rapport d'activité SoFAB 2019
Rapport d'activité SoFAB 2019Rapport d'activité SoFAB 2019
Rapport d'activité SoFAB 2019TelecomValley
 
Rapport d'activité Telecom Valley 2019
Rapport d'activité Telecom Valley 2019Rapport d'activité Telecom Valley 2019
Rapport d'activité Telecom Valley 2019TelecomValley
 
Revue de presse Telecom Valley - Février 2020
Revue de presse Telecom Valley - Février 2020Revue de presse Telecom Valley - Février 2020
Revue de presse Telecom Valley - Février 2020TelecomValley
 
Revue de presse Telecom Valley - Janvier 2020
Revue de presse Telecom Valley - Janvier 2020Revue de presse Telecom Valley - Janvier 2020
Revue de presse Telecom Valley - Janvier 2020TelecomValley
 
Revue de presse Telecom Valley - Décembre 2019
Revue de presse Telecom Valley - Décembre 2019Revue de presse Telecom Valley - Décembre 2019
Revue de presse Telecom Valley - Décembre 2019TelecomValley
 
Revue de presse Telecom Valley - Novembre 2019
Revue de presse Telecom Valley - Novembre 2019Revue de presse Telecom Valley - Novembre 2019
Revue de presse Telecom Valley - Novembre 2019TelecomValley
 
Revue de presse Telecom Valley - Octobre 2019
Revue de presse Telecom Valley - Octobre 2019Revue de presse Telecom Valley - Octobre 2019
Revue de presse Telecom Valley - Octobre 2019TelecomValley
 
Revue de presse Telecom Valley - Septembre 2019
Revue de presse Telecom Valley - Septembre 2019Revue de presse Telecom Valley - Septembre 2019
Revue de presse Telecom Valley - Septembre 2019TelecomValley
 
Présentation Team France Export régionale - 29/11/19
Présentation Team France Export régionale - 29/11/19Présentation Team France Export régionale - 29/11/19
Présentation Team France Export régionale - 29/11/19TelecomValley
 
2019 - NOURI - ALL4TEST- Le BDD pour decouvrir et specifier les besoins metie...
2019 - NOURI - ALL4TEST- Le BDD pour decouvrir et specifier les besoins metie...2019 - NOURI - ALL4TEST- Le BDD pour decouvrir et specifier les besoins metie...
2019 - NOURI - ALL4TEST- Le BDD pour decouvrir et specifier les besoins metie...TelecomValley
 
Tester c'est bien, monitorer c'est mieux - 2019 - KISSI - Soirée du Test Logi...
Tester c'est bien, monitorer c'est mieux - 2019 - KISSI - Soirée du Test Logi...Tester c'est bien, monitorer c'est mieux - 2019 - KISSI - Soirée du Test Logi...
Tester c'est bien, monitorer c'est mieux - 2019 - KISSI - Soirée du Test Logi...TelecomValley
 
Et si mon test était la spécification de mon application ? - JACOB - iWE - So...
Et si mon test était la spécification de mon application ? - JACOB - iWE - So...Et si mon test était la spécification de mon application ? - JACOB - iWE - So...
Et si mon test était la spécification de mon application ? - JACOB - iWE - So...TelecomValley
 
A la poursuite du bug perdu - 2019 - THEAULT - DI GIORGIO - ACPQUALIFE
A la poursuite du bug perdu - 2019 - THEAULT - DI GIORGIO - ACPQUALIFEA la poursuite du bug perdu - 2019 - THEAULT - DI GIORGIO - ACPQUALIFE
A la poursuite du bug perdu - 2019 - THEAULT - DI GIORGIO - ACPQUALIFETelecomValley
 
2019 - HAGE CHAHINE - ALTRAN - Presentation-DecouverteMondeAgile_V1.1
2019 - HAGE CHAHINE - ALTRAN - Presentation-DecouverteMondeAgile_V1.12019 - HAGE CHAHINE - ALTRAN - Presentation-DecouverteMondeAgile_V1.1
2019 - HAGE CHAHINE - ALTRAN - Presentation-DecouverteMondeAgile_V1.1TelecomValley
 

Plus de TelecomValley (20)

Rapport d'activité SoFAB 2022
Rapport d'activité SoFAB 2022Rapport d'activité SoFAB 2022
Rapport d'activité SoFAB 2022
 
Rapport d'activité 2022
Rapport d'activité 2022Rapport d'activité 2022
Rapport d'activité 2022
 
Rapport d'activité 2021 - Telecom Valley
Rapport d'activité 2021 - Telecom ValleyRapport d'activité 2021 - Telecom Valley
Rapport d'activité 2021 - Telecom Valley
 
Livre blanc "Les métamorphoses de l'entreprise face à l'imprévu - Tome 1 : la...
Livre blanc "Les métamorphoses de l'entreprise face à l'imprévu - Tome 1 : la...Livre blanc "Les métamorphoses de l'entreprise face à l'imprévu - Tome 1 : la...
Livre blanc "Les métamorphoses de l'entreprise face à l'imprévu - Tome 1 : la...
 
Rapport d'activité SoFAB 2020
Rapport d'activité SoFAB 2020Rapport d'activité SoFAB 2020
Rapport d'activité SoFAB 2020
 
Rapport d'activité Telecom Valley 2020
Rapport d'activité Telecom Valley 2020Rapport d'activité Telecom Valley 2020
Rapport d'activité Telecom Valley 2020
 
Rapport d'activité SoFAB 2019
Rapport d'activité SoFAB 2019Rapport d'activité SoFAB 2019
Rapport d'activité SoFAB 2019
 
Rapport d'activité Telecom Valley 2019
Rapport d'activité Telecom Valley 2019Rapport d'activité Telecom Valley 2019
Rapport d'activité Telecom Valley 2019
 
Revue de presse Telecom Valley - Février 2020
Revue de presse Telecom Valley - Février 2020Revue de presse Telecom Valley - Février 2020
Revue de presse Telecom Valley - Février 2020
 
Revue de presse Telecom Valley - Janvier 2020
Revue de presse Telecom Valley - Janvier 2020Revue de presse Telecom Valley - Janvier 2020
Revue de presse Telecom Valley - Janvier 2020
 
Revue de presse Telecom Valley - Décembre 2019
Revue de presse Telecom Valley - Décembre 2019Revue de presse Telecom Valley - Décembre 2019
Revue de presse Telecom Valley - Décembre 2019
 
Revue de presse Telecom Valley - Novembre 2019
Revue de presse Telecom Valley - Novembre 2019Revue de presse Telecom Valley - Novembre 2019
Revue de presse Telecom Valley - Novembre 2019
 
Revue de presse Telecom Valley - Octobre 2019
Revue de presse Telecom Valley - Octobre 2019Revue de presse Telecom Valley - Octobre 2019
Revue de presse Telecom Valley - Octobre 2019
 
Revue de presse Telecom Valley - Septembre 2019
Revue de presse Telecom Valley - Septembre 2019Revue de presse Telecom Valley - Septembre 2019
Revue de presse Telecom Valley - Septembre 2019
 
Présentation Team France Export régionale - 29/11/19
Présentation Team France Export régionale - 29/11/19Présentation Team France Export régionale - 29/11/19
Présentation Team France Export régionale - 29/11/19
 
2019 - NOURI - ALL4TEST- Le BDD pour decouvrir et specifier les besoins metie...
2019 - NOURI - ALL4TEST- Le BDD pour decouvrir et specifier les besoins metie...2019 - NOURI - ALL4TEST- Le BDD pour decouvrir et specifier les besoins metie...
2019 - NOURI - ALL4TEST- Le BDD pour decouvrir et specifier les besoins metie...
 
Tester c'est bien, monitorer c'est mieux - 2019 - KISSI - Soirée du Test Logi...
Tester c'est bien, monitorer c'est mieux - 2019 - KISSI - Soirée du Test Logi...Tester c'est bien, monitorer c'est mieux - 2019 - KISSI - Soirée du Test Logi...
Tester c'est bien, monitorer c'est mieux - 2019 - KISSI - Soirée du Test Logi...
 
Et si mon test était la spécification de mon application ? - JACOB - iWE - So...
Et si mon test était la spécification de mon application ? - JACOB - iWE - So...Et si mon test était la spécification de mon application ? - JACOB - iWE - So...
Et si mon test était la spécification de mon application ? - JACOB - iWE - So...
 
A la poursuite du bug perdu - 2019 - THEAULT - DI GIORGIO - ACPQUALIFE
A la poursuite du bug perdu - 2019 - THEAULT - DI GIORGIO - ACPQUALIFEA la poursuite du bug perdu - 2019 - THEAULT - DI GIORGIO - ACPQUALIFE
A la poursuite du bug perdu - 2019 - THEAULT - DI GIORGIO - ACPQUALIFE
 
2019 - HAGE CHAHINE - ALTRAN - Presentation-DecouverteMondeAgile_V1.1
2019 - HAGE CHAHINE - ALTRAN - Presentation-DecouverteMondeAgile_V1.12019 - HAGE CHAHINE - ALTRAN - Presentation-DecouverteMondeAgile_V1.1
2019 - HAGE CHAHINE - ALTRAN - Presentation-DecouverteMondeAgile_V1.1
 

2014.12.11 - TECH CONF #3 - Présentation Bootstrap

  • 1. http://fr.linkedin.com/in/duvergerp Retour sur expérience sur les technologies D3.js & Bootstrap (HTML / JS / CSS / SVG) freedatamap.com Patrick Duverger
  • 2. Petit aperçu de ce qu’on peut (facilement) faire dans une page Web
  • 3. Data Driven Document : D3 D3.js framework ou library ? • Un framework appelle notre code, notre code appelle une library. • Réponse : plus une library qu’un framework, mais en matière de UI, la gestion des événements impose que la lib appelle notre code. D3.js une library de visualization ou un clone de jQuery ? • La base de D3 c’est la manipulation du DOM (HTML object model), d’où son nom. • D3 hérite de toutes les bibliothèques graphiques du projet Protovis : il fournit l’implémentation de beaucoup d’algorithmes mathématiques complexes. • La puissance graphique de D3 repose en grande partie sur SVG qui n’est pas qu’un moteur de rendu vectoriel statique, mais qui fonctionne très bien lorsque vous changez dynamiquement les coordonnées des objets SVG. • D3 = jQuery orienté manipulation graphique avec un riche panel d’implémentations de rendus graphiques sur étagère http://d3js.org/ http://bl.ocks.org/mbostock/3231298 Mike Bostock est le développeur principal de D3 (et auparavant Protovis)
  • 4. SVG or HTML5 Canvas? Doit-on choisir ? • Oui, c’est l’un ou l’autre : les langages de création des objets graphiques sont différents (avec similitudes) et le code javascript pour les manipuler aussi. • HTML5 canvas : un peu plus rapide, mais les objets rendus ne sont pas dans le DOM, cela fait toute la différence! • SVG : tous les objets vectoriels sont accessibles dans le DOM avec jQuery ou D3  facile à débugguer, facile pour rajouter des événements, facile de grouper les objets et manipuler seulement les coordonnées du groupe. • Les opérations booléennes entre calques sont très faciles en HTML5 canvas, par contre en SVG le dernier dessiné est le dernier affiché (la conception du rendu vectoriel a des implications sur le flux d’exécution du code qui le génère). • D3 utilise SVG et absolument pas les canvas HTML, ce qui est logique puisque le moteur de D3 est fait pour manipuler le DOM donc des objets, qu’ils soient HTML ou SVG. Evidemment l’un et l’autre cohabitent très bien. Il suffit de mettre un calque transparent (style=’z-index:-1;’) avec un canvas par dessus un objet SVG.
  • 5. D3.js Data Driven Document Sélections en W3C DOM API: retourne un tableau de .name et .value paires Sélections en jQuery: Sélections en D3.js: • Adapté à une multi sélection • Chaînable • Possibilité de mettre une fonction qui est exécutée à chaque fois que la valeur est requise
  • 6. D3 vs jQuery vs Il faut malheureusement utiliser les 3 formes de manipulation du DOM : natives jQuery D3.js • DOM en direct : syntaxe lourde et pas d’implémentation pour manipuler le CSS, mais indispensable pour travailler avant l’import de jQuery ou D3 comme pour interagir avec des iFrames. • jQuery D3.js = jQuery for SVG • Très abouti, très puissant sur les fonctions de requêtes • Facile pour manipuler les CSS • Possibilité de stocker un objet ‘data’ dans n’importe quel objet du DOM (utile plutôt que garder une trace des id et abuser des select) • Light et indispensable pour travailler dans un worker thread • D3 : ne peut pas remplacer jQuery (nécessite le DOM de la page qui n’est pas référencée dans les threads). • + : Gère n’importe quelle valeur comme une fonction • - : double tableau incompréhensible
  • 7. D3.js Exemple de manipulation du DOM en D3 : • Les méthodes sont chainables (elles renvoient toutes l’objet D3 concerné) : très pratique, très lisible. • Une syntaxe un peu déroutante au début : il faut sélectionner un objet qui n’existe pas pour le créer. • D3 lie un vecteur de données avec les objets du DOM. • Adapté pour évaluer des fonctions en lieu et place de valeurs habituellement. • Attention dans les fonctions : d = donnée, i = index de la donnée dans le vecteur de données, ne pas utiliser « this » (objet parent de la fonction appelé depuis une méthode D3) • enter() et exit() : actions exécutée lorsque le vecteur de données est différent des objets sélectionnés dans le DOM
  • 8. Physic engine D3.js contient une implémentation de l’algorithme « Verlet integration » qui est à la base des moteurs physiques. position d’après = position d’avant + vitesse * delta temps vitesse d’après = vitesse d’avant + accélération * delta temps force = masse * accélération Verlet integration : Pos d’après après = 2*pos d’après – pos + force/masse * delta temps^2 Autre qualité de D3 : les transitions
  • 9. Petit moteur physique fait-maison en HTML5 canvas
  • 10. D3 physic engine example
  • 11. Putting alltogether Comment passer d’un objet dom à un objet jquery ou d3 et vice versa ? $(objet dom) -> objet jquery sur lequel on peut invoquer find() ou attr() ou css() D3.select(objet dom) -> objet d3 sur lequel on peut invoquer select(), append() ou attr() ou style() Réciproquement d3object[0][0] = 1er objet dom de la sélection objectJquery[0] = 1er objet dom de la sélection Donc $() renvoie un vecteur d’objets DOM car le sélecteur peut renvoyer plusieurs objets D3.select() renvoie un vecteur de vecteurs (le premier préserve la structure des selectAll, le deuxième contient les objets) Comment faire du code rapide ? • utiliser les profilers de chrome et de firefox • proscrire les array en javascript et préférer les { } var a = [] ; for(i) { a.push(obj_i) ; }  a[i] très très lent… var o = {} ; for(i) { o[‘’ + i] = obj_i ; }  o[i] très très rapide!
  • 12. Deux mots sur Bootstrap Twitter Bootstrap offre une collection complète de widgets pour construire une UI  Très utile pour bénéficier de widgets Web qui ont un bon look&feel  Très facile et utile pour ceux qui n’aiment pas CSS Bootstrap étant principalement une library css, c’est lui qui fait le boulot  Beaucoup de changements entre la version 2 et la version 3 (personnellement je suis resté sur la v2 comme beaucoup…)  Pas trouvé mieux : jQueryMobile impose un loading screen dans la mainPage, Bootstrap est lightweight donc se loade facilement dans des iframe  Petit retour d’expérience : beaucoup de bugs dans les composants javascript,  Prévoir de mettre les mains dedans…  Beaucoup de modifs pour avoir du véritable responsive design  mauvaise réaction aux événements tactiles Un conseil : centralisez les événements dans un seul objet avec un handler central « à la Xwindows »
  • 13. FIN merci pour votre attention