URL: https://linuxfr.org/news/dom-et-dsp-deux-api-javascript-interessantes-poussees-par-opera Title: DOM et DSP : deux API Javascript intéressantes poussées par Opera Authors: Gui13 baud123, claudex, Benoît Sibaud, Florent Zara et Lucas Bonnet Date: 2013年01月04日T20:24:53+01:00 License: CC By-SA Tags: Score: 20 Il y a quelques temps une API [UPNP](http://fr.wikipedia.org/wiki/Universal_Plug_and_Play) était poussée par Opera vers le W3C pour qu'elle soit spécifiée officiellement. Aujourd'hui, ils proposent aussi un autre brouillon d'API, cette fois-ci orientée DSP et accélération des calculs. Petite présentation dans la suite de cette dépêche. NdM : _merci à Gui13 pour son journal._ ---- [Journal à l'origine de la dépêche](http://linuxfr.org/users/gui13/journaux/dom-et-javascript-2-apis-interessantes-poussees-par-opera) ---- Network Service Discovery API ----------------------------- C'est tout simplement une API qui permet, en Javascript (dans une page web quoi), d'accéder aux machines de votre réseau qui sont compatibles UPNP. Ça va de votre PC Linux sur lequel tourne XBMC à votre [NAS](http://fr.wikipedia.org/wiki/Serveur_de_stockage_en_r%C3%A9seau) qui partage votre collection musicale et vidéo, en passant (surtout) par votre télévision connectée et votre smartphone qui contient les dernières photos de Bibi. Le protocole UPNP repose sur deux socles : - le protocole de découverte de clients sur un réseau local [SSDP ](http://fr.wikipedia.org/wiki/Simple_Service_Discovery_Protocol) - une grammaire en XML-RPC ([SOAP](http://fr.wikipedia.org/wiki/Simple_Object_Access_Protocol)) qui passe ensuite dans les tuyaux pour faire discuter tous ces clients. Chaque client expose les fonctions qu'il supporte (Rendering, Fournisseur de contenu, etc.), et attend une interaction quelconque. Le protocole en lui-même est (très) verbeux, mais est pris en charge par un ensemble grandissant de matériels. Pour vous donner un exemple d'usage, on peut, depuis son smartphone, découvrir son NAS et sa TV et agir comme un contrôleur : dire à la TV de lire un contenu fourni par le NAS, le tout depuis son canapé. Une télécommande "++" quoi, avec contrôle complet de la lecture : play/pause/skip/volume. Malheureusement, les logiciels compatibles UPnP ne sont pas légion et, surtout, généralement très limités. Excepté des gros pontes comme XBMC, qui fait le café avec, il n'existe pas de client léger et pratique pour gérer ce protocole. La [norme](http://www.w3.org/TR/2012/WD-discovery-api-20121004/) que propose Opera permet de faire tout ça dans un navigateur, avec le confort que ça implique. Une version d'essai d'Opera qui implémente ce draft d'API peut être téléchargée et il y a un [exemple de fonctionnalité](http://dev.opera.com/articles/view/network-service-discovery-api-support-in-opera/). Pour avoir testé, c'est pas trop mal et, si ce simple exemple permet de faire déjà autant, j'imagine même pas la suite. Je vois déjà des logiciels « headless » dans des petits boitiers qu'on branche n'importe où, genre domotique avancée, et qui broadcastent leurs capacités sur UPnP et leur interface en HTML statique ; le tout chopé par ma tablette et roule ! DSP API ------- On touche ici à un tout autre sujet, qui est le calcul hautes performances dans le navigateur. Opera propose une [API de calculs parallélisables](http://people.opera.com/mage/dspapi/), comme ce qu'on trouve dans OpenCL ou dans les instructions CPU spécifiques, qui permettent d'accélérer en hardware les calculs sur des matrices. Ça sert dans beaucoup d'endroits, du genre dans le décodage vidéo (H264, DivX etc.), les filtres audio en temps réel, la [SDR](http://fr.wikipedia.org/wiki/Radio_Logicielle) et aussi en 3D. L'API semble assez propre, et relativement réduite et il existe déjà une [implémentation fonctionnelle en NodeJS](https://github.com/jussi-kalliokoski/node-dsp) (en revanche, elle ne parallélise pas les calculs si j'ai bien compris son code... dommage). Le [blog où j'ai trouvé ça](http://badassjs.com/post/39662012723/the-javascript-dsp-api-rivertrail-and-the-future-of) parle aussi de la version de RiverTrail, qui est un projet conjoint Intel/Mozilla et qui, elle, utilise réellement OpenCL et la parallélisation des calculs sur GPU. Elle semble plus généraliste (n'importe quelle opération « [pure](http://fr.wikipedia.org/wiki/Fonction_pure) » peut être parallélisée), mais ça pourrait faire l'objet d'un autre journal... En tout cas, il semblerait que les calculs parallèles soient un gros sujet pour l'évolution de Javascript, qui est cantonné au mono-thread depuis des lustres. J'imagine en utilisation de cette API des filtres « temps-réel » sur les vidéos HTML5, sur des images ou sur de l'audio, voire une génération en temps réel d'un JPG. Probablement aussi pas mal d'analyse de signal (voir le lien SDR au-dessus), qui sont cantonnés pour le moment à des logiciels dédiés. Conclusion ---------- En gros, malgré leur fermeture logicielle, Opera est quand même assez impliqué dans les standards, ce qui je trouve est une bonne chose. Les 2 API présentées ici remplissent un vide dans les fonctionnalités des navigateurs et permettront des choses assez intéressantes. L'API UPnP, surtout, qui va ouvrir tout un tas de possibilités en terme d'interface utilisateur. Si vous avez d'autres informations sur des évolutions sympas dans le Javascript, rendez-vous dans les commentaires.