Journal DOM et Javascript : 2 APIs intéressantes poussées par Opéra

Posté par (page perso) . Licence CC by-sa
11
4
jan.
2013

Sommaire

Bonjournal,

J'avais entendu parler (peut-être ici?) il y a quelques temps d'une API UPNP que Opera poussait vers le W3C pour qu'elle soit spécifiée officiellement.
Aujourd'hui, un de mes RSS m'apprend qu'ils proposent aussi un autre draft d'API, cette fois-ci orientée DSP et accélération des calculs.

Petite présentation.

Network Service Discovery API

C'est tout simplement une API qui permet, en Javascript (dans une page internet 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 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
  • une grammaire en XML-RPC (SOAP) 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 supporté par un ensemble grandissant de matériel.
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 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é.
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 calculs haute performances dans le navigateur.

Opera propose une API de calculs parallélisables, 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, et aussi en 3D.

L'API semble assez propre, et relativement réduite, et il existe déjà une implémentation fonctionnelle en NodeJS (par contre elle ne parallélise pas les calculs si j'ai bien compris son code… dommage.).

Le blog où j'ai trouvé ça 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" 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 videos HTML5, sur des images ou sur de l'audio. Voire même 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 APIs 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 termes d'interface utilisateur.

Si vous avez d'autres informations sur des évolutions sympas dans le Javascript, rendez-vous dans les commentaires.

  • # WebCL

    Posté par . Évalué à  6 . Dernière modification : le 04/01/13 à 20:10

    OpenCL pour le web a été standardisé par Khronos, c’est WebCL, avec des implémentations de chez Nokia/Samsung/Mozilla/Motorola. Contrairement à RiverTrail, ce n’est pas du JavaScript pur, les noyaux étant écrits en OpenCL.

    • [^] # Re: WebCL

      Posté par (page perso) . Évalué à  1 .

      Ouais mais du coup t'es obligé de maitriser l'OpenCL, un peu comme quand tu introduis de l'assembleur dans ton code C.
      Pour moi c'est pas forcément le plus évident. Je préfère passer une structure que je connais (tableau JS) à une fonction JS que d'ecrire du code C dans du Javascript.

      • [^] # Re: WebCL

        Posté par . Évalué à  3 .

        C'est vrai que l'écriture de kernels OpenCL c'est tellement compliqué… du bête C99, avec quelques extensions (types vectoriels, quelques fonctions en plus, pas besoin d'include pour avoir des fonctions mathématiques, …)

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.