Return to Video

Créer un bureau HTML5 pour le cloud (Romain Huet) - Sud Web 2011

  • 0:04 - 0:05
    Bien, bonjour à tous !
  • 0:07 - 0:09
    Oui, tu voulais dire quelque chose, Thomas ?
  • 0:10 - 0:14
    Très bien. Donc bonjour à tous, je m'appelle Romain.
  • 0:14 - 0:19
    Comme l'a dit Rudy, je vais vous présenter un petit peu les solutions qu'on a élaborées
  • 0:19 - 0:21
    dans le cadre de JoliCloud.
  • 0:21 - 0:23
    dont je suis confondateur et CTO
  • 0:23 - 0:26
    On a fait un usage intensif d'HTML5
  • 0:26 - 0:28
    Donc ma mission va être de vous maintenir eveillés
  • 0:28 - 0:31
    après cette pause déjeuner
  • 0:31 - 0:34
    Alors juste pour resituer un petit peu le contexte
  • 0:34 - 0:37
    pour bien comprendre les choix qu'on a fait et comment on a progressé
  • 0:37 - 0:39
    On est parti d'un constat qui est que le Cloud remet vraiment en question
  • 0:39 - 0:42
    les fondamentaux de l'informatique puisque
  • 0:42 - 0:44
    on l'a vu encore ce matin avec Cloud9
  • 0:44 - 0:48
    On utilise beaucoup plus d'applications en ligne maintenant
  • 0:48 - 0:52
    que ce soit pour le traitement d'emails ou la gestion de documents
  • 0:52 - 0:55
    et même maintenant avec Cloud9, l'édition de code dans le cloud
  • 0:55 - 0:59
    Et de la même manière, toutes nos données sont aussi plus dans le cloud qu'auparavant
  • 0:59 - 1:03
    c'est à dire qu'on a très peu de données localement sur nos machines
  • 1:03 - 1:06
    Et en même temps les systèmes qu'on utilisent aujourd'hui sont encore relativement anciens
  • 1:06 - 1:11
    axés sur la gestion du file system local d'un ordinateur
  • 1:11 - 1:15
    Et alors avec l'arrivée des ordinateurs ultra-portables, les netbooks
  • 1:15 - 1:19
    on voyait que l'usage des gens était vraiment lié à internet finalement
  • 1:19 - 1:23
    c'était vraiment clef 3G, on se connecte dans un café, dans un train
  • 1:23 - 1:28
    On se disait pourquoi finalement ne pas essayer de réinventer un peu l'usage de nos systèmes
  • 1:28 - 1:32
    en utilisant la plateforme web qui est en fait la plateforme universelle pour ça
  • 1:32 - 1:35
    Et c'était aussi pour nous une manière de dire
  • 1:35 - 1:38
    on va essayer de proposer la meilleure expérience utilisateur possible
  • 1:39 - 1:44
    et HTML5 et l'essor de la famille de toutes les technologies gravitant autour
  • 1:44 - 1:48
    était pour nous la meilleure solution pour arriver à ça
  • 1:49 - 1:54
    Donc la mission qu'on s'était fixée avec Jolicould avec Tariq Krim quand on a lancé ce projet
  • 1:54 - 1:59
    C'est vraiment de dire on va rendre le cloud plus ouvert, plus simple, plus accessible à tous
  • 1:59 - 2:04
    et proposer des solutions qui finalement vous aider les gens à accèder à internet
  • 2:04 - 2:06
    et à gérer leur cloud plus aisément
  • 2:06 - 2:08
    Donc on a développé plusieurs choses
  • 2:08 - 2:15
    On a développé d'abord un Operating System essentiellement basé sur des technos web
  • 2:15 - 2:19
    On a même été un peu fou puiqu'on a été jusqu'à commercialiser ça
  • 2:19 - 2:20
    c'est un jolibook, donc on commercialisé
  • 2:20 - 2:25
    c'est un objet un peu collector puisqu'il a été vendu exclusivment sur le marché anglais
  • 2:25 - 2:27
    Et plus récemment une application Jolicloud
  • 2:27 - 2:30
    qui est disponible pour tous les navigateurs modernes
  • 2:30 - 2:34
    Mais ce dont on va vraiment s'intéresser aujourd'hui c'est le point commun à tous ces produits
  • 2:34 - 2:42
    qui est le bureau HTML5 qui permet de finalement contrôler la machine
  • 2:42 - 2:45
    et même d'aller un peu plus loin comme on le verra
  • 2:45 - 2:48
    Alors tout d'abord je vais juste donner quelques fondamentaux
  • 2:48 - 2:52
    sur la base de l'application HTML5 qu'on a faite
  • 2:52 - 2:55
    Donc le web en 1997, c'était quand même ça ce qu'on pouvait faire de mieux
  • 2:55 - 3:00
    donc on a quand même parcouru un long chemin sur le web
  • 3:00 - 3:04
    Une application web avancée, qu'est ce que c'est finalement aujourd'hui ?
  • 3:04 - 3:07
    C'est avant tout un client riche autonome
  • 3:07 - 3:09
    Avant on avait un échange de pages avec le serveur
  • 3:09 - 3:11
    ça va être maintenant quelque chose de très complexe
  • 3:11 - 3:13
    qui va embarquer de la logique applicative
  • 3:13 - 3:15
    on parlait avant de templating
  • 3:15 - 3:18
    on va beaucoup être maintenant dans la programmation DOM
  • 3:18 - 3:23
    au niveau des échanges avec le serveur, ça va être maintenant de la synchronisation de données
  • 3:23 - 3:26
    et on parle aussi de persistence de l'état de l'application
  • 3:26 - 3:29
    et même de mode déconnecté
  • 3:29 - 3:33
    Donc là c'est un aperçu de l'application Jolicloud
  • 3:33 - 3:38
    qui est le bureau de l'operating system
  • 3:38 - 3:40
    Et on s'est dit d'abord
  • 3:40 - 3:42
    Comment on va pouvoir implémenter cette application
  • 3:42 - 3:45
    avec des technos modernes
  • 3:45 - 3:46
    sans avoir justement à
  • 3:46 - 3:52
    penser aux navigateurs anciens comme Internet Explorer
  • 3:52 - 3:55
    qui évolue un peu moins vite que les navigateurs modernes
  • 3:55 - 4:00
    Donc pour la structure, très succintement on a utilisé du flexible box model partout
  • 4:00 - 4:02
    alors son support est encore expérimental
  • 4:02 - 4:04
    ce qui fait qu'on a eu quelques petits soucis
  • 4:04 - 4:06
    parfois de performances notamment
  • 4:06 - 4:12
    sur les périphériques un peu... un peu comme les netbooks finalement
  • 4:12 - 4:16
    beaucoup de media queries aussi pour gérer les différentes tailles d'écrans
  • 4:16 - 4:20
    parce qu'il y a vraiment une grande diversité à ce niveau là
  • 4:20 - 4:22
    et au niveau des composants de l'interface
  • 4:22 - 4:25
    tout ce que vous pouvez voir sur cette interface
  • 4:25 - 4:29
    va être uniquement des CSS en fait, il y a très très peu d'images
  • 4:29 - 4:31
    donc au niveau des effets de la même façon
  • 4:31 - 4:34
    c'est uniquement des transitions et des animations CSS
  • 4:34 - 4:38
    parfois du canvas quand il s'agit de manipuler les images
  • 4:38 - 4:41
    alors il y a deux choses qu'on a observé qui sont importantes à retenir
  • 4:41 - 4:44
    si vous êtes amenés à utiliser des transitions ou des animations CSS
  • 4:44 - 4:46
    c'est d'éviter quand même les animations infinies
  • 4:46 - 4:49
    parce que sur des périphériques un peu low-spec comme des netbooks
  • 4:49 - 4:52
    vous alllez avoir tendance à utiliser beaucoup de CPU
  • 4:52 - 4:57
    et aussi ne jamais baser la logique applicative sur des callbacks de fin d'animation
  • 4:57 - 5:00
    vous savez comme des webkit animation end ou des moz animation end
  • 5:00 - 5:02
    parce que d'une part ils peuvent ne pas être supportés par le navigateur
  • 5:02 - 5:04
    que vous êtes en train de 'targeter'
  • 5:04 - 5:10
    bon voilà c'est une meilleure pratique d'avoir toujours la logique applicative séparée
  • 5:10 - 5:12
    des effets purement graphiques
  • 5:12 - 5:15
    Et rapidement au niveau du fonctionnement de l'application
  • 5:15 - 5:22
    donc l'application consiste en une seule page HTML qui finalement est très très succinte
  • 5:22 - 5:26
    c'est un mécanisme de chargement des scripts et des styles dynamiquement
  • 5:26 - 5:30
    et puis quelque chose qu'il faut bien retenir dans le cadre de vos développements
  • 5:30 - 5:32
    pour des applications un peu riches en HTML5
  • 5:32 - 5:34
    c'est vraiment avoir une logique MVC
  • 5:34 - 5:38
    c'est à dire qu'on est plus en train de dire on va modifier le DOM à la volée
  • 5:38 - 5:40
    pour modifier tel ou tel élément
  • 5:40 - 5:42
    c'est vraiment important d'avoir une vraie structure en place
  • 5:42 - 5:46
    pour pouvoir dire : OK je vais avoir des modèles pour représenter mes données
  • 5:46 - 5:51
    des vues qui vont me permettre justement de gérer la représentation de ces données à l'écran
  • 5:51 - 5:54
    et puis des controleurs qui maintiendront l'état de l'application
  • 5:54 - 5:57
    D'ailleurs y'a un excellent projet qui s'appelle Backbone.js que vous connaissez peut-être
  • 5:57 - 6:01
    qui permet justement d'avoir une très bonne base pour ce genre de chose
  • 6:03 - 6:08
    Donc là dans ce slide j'ai "embedder" l'application
  • 6:08 - 6:11
    donc le bureau de JoliCloud
  • 6:11 - 6:15
    donc tout ça c'est en CSS3
  • 6:17 - 6:21
    donc là idem pour tout ce qui est animation
  • 6:21 - 6:24
    la partie drag-n-drop par contre n'étant pas tout à fait finalisée
  • 6:24 - 6:26
    dans HTML5
  • 6:26 - 6:30
    elle est écrite un peu en javascript avec à la fois
  • 6:30 - 6:32
    des petites choses HTML5 mais aussi
  • 6:32 - 6:35
    des petites choses qui permettent d'avoir la compatibilité
  • 6:37 - 6:39
    Alors maintenant on va rentrer un peu dans le vif du sujet
  • 6:39 - 6:41
    parce que là on a quoi ? On a une application en HTML5
  • 6:41 - 6:43
    qui se connecte au cloud
  • 6:43 - 6:45
    qui finalement récupère des données
  • 6:45 - 6:47
    les affiche à l'écran
  • 6:47 - 6:48
    et ça fonctionne bien, ça se synchronise
  • 6:48 - 6:51
    le problème maintenant c'est que quand on veut faire un operating system avec ça
  • 6:51 - 6:53
    évidemment on va se retrouver dans des contextes où il faut absolument
  • 6:53 - 6:55
    que l'application fonctionne hors-ligne
  • 6:55 - 7:00
    Quand vous démarrez votre netbook ... ou votre ordinateur dans un train par exemple
  • 7:00 - 7:02
    vous n'avez pas forcément de connexion avec vous
  • 7:02 - 7:04
    donc il faut que ça marche hors-ligne
  • 7:04 - 7:08
    Alors d'abord pour ce qui est des ressources de l'application
  • 7:08 - 7:11
    c'est à dire faire que l'application va être fonctionnelle offline
  • 7:11 - 7:17
    on a utilisé appcache, la technologie qui permet justement de lister
  • 7:17 - 7:21
    l'ensemble des ressources que vous voulez mettre en cache dans le navigateur
  • 7:21 - 7:24
    on l'a utilisé uniquement pour du javascript et du CSS finalement
  • 7:24 - 7:28
    on a fait le choix de dire, l'ensemble des images
  • 7:28 - 7:31
    qui sert au fonctionnement de l'application
  • 7:31 - 7:36
    est converti en base64 et inliner dans les CSS
  • 7:36 - 7:41
    c'est quelque chose qu'on a testé et qu'on a vraiment bien apprécié
  • 7:41 - 7:43
    dans les tests qu'on a pu faire puisque
  • 7:43 - 7:48
    même si cette conversion peut avoir un petit overhead en terme de taille
  • 7:48 - 7:52
    vous allez avoir beaucoup moins de ressources à charger
  • 7:52 - 7:56
    et donc en terme de latence réseau notamment avec des clefs 3G
  • 7:56 - 7:59
    c'est quelque chose qui va vraiment améliorer les performances
  • 7:59 - 8:04
    donc là si on prend l'exemple ici de cette image
  • 8:04 - 8:08
    tous les navigateurs modernes sont capables d'afficher des images à partir de data
  • 8:08 - 8:10
    de data URI
  • 8:10 - 8:13
    donc maintenant l'application fonctionne en ligne
  • 8:13 - 8:15
    le problème c'est qu'elle a pas encore de données pour l'utilisateur
  • 8:15 - 8:18
    donc comment on va faire pour stocker les données de l'utilisateur
  • 8:18 - 8:21
    et les rendre fonctionnelles hors-ligne ?
  • 8:21 - 8:25
    Alors d'abord ce qu'on a fait, c'est une sorte d'abstraction de notre API
  • 8:25 - 8:25
    qui se connecte au cloud
  • 8:25 - 8:27
    de sorte que à chaque fois qu'on fait une requête
  • 8:27 - 8:30
    pour aller chercher des données sur le cloud
  • 8:30 - 8:32
    on va stocker l'ensemble de ces réponses JSON
  • 8:32 - 8:34
    dans localstorage
  • 8:34 - 8:41
    et en plus lorsque l'on récupère ces données localstorage pour le mode hors-ligne
  • 8:41 - 8:44
    on va pouvoir avoir le même fonctionnement que lorsque l'application est en ligne
  • 8:44 - 8:47
    autre avantage
  • 8:47 - 8:50
    lorsque les données sont très récentes dans localstorage
  • 8:50 - 8:52
    y compris lorsque vous êtes en ligne
  • 8:52 - 8:55
    inutile de refaire cette requête, je viens de la faire
  • 8:55 - 8:59
    de toute façon les données sont récentes, autant les exploiter
  • 8:59 - 9:01
    ce qu'on a fait en plus encore une fois
  • 9:01 - 9:04
    l'ensemble des images qui sont liées au bureau de l'utilisateur
  • 9:04 - 9:07
    ou qui sont par exemples des avatars des utilisateurs
  • 9:07 - 9:10
    sont également converties en base 64
  • 9:10 - 9:11
    mises dans localstorage
  • 9:11 - 9:13
    Alors il y a des technologies qui arrivent
  • 9:13 - 9:15
    notamment FileSytem APIs
  • 9:15 - 9:18
    le problème c'est qu'elle sont pas encore très répandues
  • 9:18 - 9:21
    Elles sont encore au stade expérimental dans Chrome notamment
  • 9:21 - 9:26
    donc on fait le choix de reprendre cette technique de LocalStorage qui fonctionne très bien
  • 9:26 - 9:29
    Et donc bien sur il y a à gérer la synchronisation
  • 9:29 - 9:31
    lorsqu'on revient online
  • 9:31 - 9:36
    Alors maintenant c'est bien on a une application qui est capable de fonctionner hors-ligne
  • 9:36 - 9:41
    mais comment on passe du mode hors-ligne au mode connecté ?
  • 9:41 - 9:43
    et c'est finalement une problématique assez intéressante
  • 9:43 - 9:46
    parce que dans les navigateurs y'a la propriété navigator.online
  • 9:46 - 9:49
    mais elle est pas vraiment utile, elle est pas vraiment helpful pour ça
  • 9:49 - 9:50
    puique finalement
  • 9:50 - 9:54
    elle va être liée au fait que vous soyez connectés ou non au réseau
  • 9:54 - 9:58
    et d'ailleurs elle est encore très peu implémentée dans les navigateurs
  • 9:58 - 10:00
    Alors la solution qu'on a mise en place pour ça c'est de dire
  • 10:00 - 10:03
    on va faire un test périodique de la connexion
  • 10:03 - 10:06
    avec un appel XMLHTTPRequest au serveur
  • 10:06 - 10:08
    l'avantage c'est que ça teste directement
  • 10:08 - 10:10
    la possibilité d'atteindre votre serveur sur le réseau
  • 10:10 - 10:13
    et donc de voir si vous êtes en ligne
  • 10:13 - 10:17
    donc ça peut être une requête très très simple de type head par exemple
  • 10:17 - 10:21
    et une stratégie qu'on a mis en place en supplément
  • 10:21 - 10:25
    c'est de dire ben finalement si j'essaye d'accèder à ne ressource sur une API REST
  • 10:25 - 10:27
    et qu'à ce moment précis, elle échoue
  • 10:27 - 10:30
    dans ce cas je peux en déduire et signifier à l'utilisateur
  • 10:30 - 10:32
    qu'il est passé en mode déconnecté
  • 10:32 - 10:34
    et autre chose aussi
  • 10:34 - 10:38
    supposons que vous soyez dans un train en train d'utiliser l'application en mode hors-ligne
  • 10:38 - 10:40
    vous fermez votre ordinateur, vous revenez
  • 10:40 - 10:43
    vous êtes dans un endroit maintenant connecté
  • 10:43 - 10:47
    il serait quand même intéressant et judicieux de signifier immédiatement à l'utilisateur
  • 10:47 - 10:48
    qu'il est maintenant en mode connecté
  • 10:48 - 10:50
    donc on procdède à une détection pour savoir
  • 10:50 - 10:54
    si l'utilisateur est actif, par exemple en regardant l'évènement mousemove
  • 10:54 - 10:58
    mais ça peut être également en regardant un touch par exemple sur le mobile
  • 10:58 - 11:02
    donc on va faire ici une rapide démo
  • 11:02 - 11:05
    donc là on est en mode connecté sur l'application
  • 11:05 - 11:09
    et je vais essayer de couper le réseau
  • 11:09 - 11:12
    alors là je pourrais attendre un test périodique qui va arriver
  • 11:12 - 11:15
    mais je vais immédiatement essayer d'accèder à une ressource
  • 11:15 - 11:19
    donc là on constate que ... comment dire ?
  • 11:19 - 11:21
    L'application est passée immédiatement en mode hors-ligne
  • 11:21 - 11:24
    désactivant donc certaines des fonctionnalités
  • 11:24 - 11:27
    parce qu'évidemment lorsque vous revenez en mode déconnecté
  • 11:27 - 11:30
    l'utilisateur s'attend à ce que toutes ses données soient synchronisées
  • 11:30 - 11:31
    dans le même état qu'il les a laissées
  • 11:31 - 11:34
    donc y'a certaines choses pour lesquelles ça a du sens, d'autres moins
  • 11:34 - 11:37
    et donc là je vais passer en mode connecté maintenant
  • 11:40 - 11:42
    voilà
  • 11:42 - 11:44
    et je vais immédiatement redevenir actif sur l'application
  • 11:44 - 11:50
    donc le navigateur a détecté qu'ici je suis repassé en mode en ligne
  • 11:50 - 11:52
    et l'application est de nouveau fonctionnelle
  • 11:52 -
    avec l'ensemble de ses fonctionnalités
Title:
Créer un bureau HTML5 pour le cloud (Romain Huet) - Sud Web 2011
Description:

HTML5 et les technologies Open Web constituent la plate-forme applicative universelle. Y compris pour bâtir un système d'exploitation.

Jolicloud construit l'interface portable du Cloud et propose l'un des exemples les plus avancés de l'utilisation de la plate-forme Web dans un contexte de production. En plus d'être un bureau en ligne, Jolicloud est aussi l'interface de Joli OS, un système d'exploitation permettant d'aller au-delà des possibilités offertes par le navigateur.

Cette conférence présentera l'architecture d'une telle application HTML5 et comment aborder les différentes problématiques telles que la gestion du mode hors-ligne ou encore l'échange de données en temps réel.

Nous évoquerons les principaux challenges liés au déploiement d'applications HTML5 et comment tirer parti de ces technologies dès aujourd'hui.

more » « less
Video Language:
French
Duration:
31:11

French subtitles

Incomplete

Revisions