Pourquoi?
Pourquoi quelqu’un voudrait-il utilisez les technologies du web pour un projet d’interactivité tangible ? N’y a-t-il pas déjà plein de bons environnements pour faire précisément cela ?
Oui, il y en a. Processing, openFrameworks et Pure Data, par exemple, sont toutes de très bonnes et éprouvées plateformes.
Ceci dit, la plateforme web (HTML/CSS/JavaScript) possède un avantage. Cet avantage, c’est la combinaison unique des éléments suivants:
- ubiquité : ces technologies sont partout, et ce, encore plus avec l’arrivée de l’Internet des objets (IoT);
- familiarité : presque tout le monde a utilisé ou connait ces technologies;
- communauté : elles ont une communauté d’utilisateurs gigantesque et des tonnes de ressources gratuites;
- simplicité : leur courbe d’apprentissage est douce et, donc, elles peuvent être apprises aisément.
Bon, ok. Mais qui veut d’une application qui ne peut tourner que dans l’espace restrictif d’une fenêtre de fureteur ?
Avec des outils comme nw.js (alias node-webkit) ou Cordova, il est maintenant possible de créer des applications de bureau ou pour appareils mobiles se comportant exactement comme des applications natives. Il est même possible de programmer certains microcontrôleurs comme le Tessel or l’Espruino directement en JavaScript.
Tout cela est bien mais JavaScript demeure une technologie frontale (« front-end »). Elle n’a jamais été conçue pour les lourdes tâches exigées par les applications dorsales (« back-end »).
JavaScript a pris naissance dans le fureteur mais a migré sur le serveur il y a bien longtemps déjà. Avec Node.js et io.js il est possible d’écrire des applications-serveurs pilotées par les événements qui soient extrêmement performantes. En ce moment, il y a plus de 125 000 modules disponibles pour Node. Je crois que le côté serveur est bien couvert.
D’accord, mais dans un projet d’interactivité tangible il faut avoir accès à des capteurs et des actuateurs. Ceux-ci ne sont pas accessibles depuis JavaScript.
Avec un outil comme nw.js vous pouvez faire tout ce qu’il est possible de faire du côté-client ET tout ce qu’il est possible de faire du côté-serveur avec les modules de Node.js. Il y a actuellement des modules pour utiliser les ports séries, pour se brancher à un Arduino ou à une montre Pebble, pour interfacer avec des appareils I2C ou GPIO, etc. En fait, des cadres applicatifs (« frameworks ») complets sont même disponibles. Par exemple, avec Cylon.js vous pourrez piloter un drone ou contrôler un robot directement depuis le confort de votre JavaScript chéri.
Supposons que tout cela soit vrai. Ça ne change pas le problème que JavaScript est lent. On ne peut rien y faire.
Si le premier critère de votre projet est la vitesse, probablement que la plateforme web n’est pas le meilleur choix pour vous. Par contre, il est assez rare que la performance soit le premier ou le seul critère d’un projet d’interactivité tangible. Quand on prend en compte tous les facteurs, on arrive souvent à la conclusion que JavaScript est suffisamment performant. Si ce n’est pas le cas pour vous, utilisez autre chose. Mais, avec WebGL et la compilation JIT (« just-in-time »), JavaScript est plutôt rapide et le deviendra encore plus. En effet, en guise d’exemple, le nouveau moteur asm.js de Mozilla offre une performance qui s’approche de la performance native. En ce qui me concerne, c’est amplement rapide!
Mais…
Il est certain qu’il y a plusieurs scénario où les technologies du web ne sont pas le meilleur choix ou même un bon choix. Mais, honnêtement, ces scénarios sont de plus en plus difficiles à trouver.
La richesse de la plateforme web est telle qu’elle est en train de devenir une des meilleures alternatives dans les domaines de l’interactivité tangible, de la robotique et de l’Internet des objets. De plus, grâce à sa simplicité, tous sont invités à participer: créateurs, artistes, bidouilleurs, ingénieurs, inventeurs et patenteux (comme on dit par chez moi).
Soyons tangibles!
Le montage photo de l’entête contient des images de Greg Borenstein, creativecaos86 et jabstarr. Ces photos sont utilisées selon les termes de la licence Creative Commons.