Vis ma vie de Z – La technoZaure de Lille

Chez Zenika, on aime partager nos connaissances.
Et les technozaures, organisées dans les différentes agences, permettent aux consultants de présenter un sujet qui les intéresse à toute l’agence. A Lille, elles sont organisées par demi-journées. Et la dernière avait lieu le 21 mars, pour fêter le printemps. Voici un rapide résumé des différents sujets présentés.

Kernel Panic – call 911

Dans cette présentation, Benoît nous offre un rappel sur l’architecture “classique” d’un système d’exploitation, et en particulier de Linux. Donc le kernel Linux s’appuie sur les drivers, qui permettent de dialoguer avec les périphériques. C’est le kernel qui autorise ou non une commande à s’exécuter.
A retenir : les opérations simples se font en user mode, alors que les opérations sur les périphériques ou les fichiers, qui se font en kernel mode.
Passons à la démo que Benoît va réaliser avec le Windows Subsystem for Linux.
Une présentation intéressante, qui m’a permis de reprendre contact avec l’OS Linux.

Génération de musique par intelligence artificielle

Maxime et Valentin cherchent donc à générer de la musique qui soit harmonieuse, dans le style d’un artiste, et avec un bon résultat sans être expert en IA.

Qu’est-ce qui existe ?

Les algorithmes génétiques, avec une fonction de fitness, des “gènes”, et une sélection des meilleurs individus. C’est pas mal, mais ça ne donne pas de résultats facilement.
Le LSTM (long short term memory). C’est un réseau de neurones qui dispose d’une mémoire, et qui est assez efficace pour deviner une donnée à partir de son contexte. Autrement dit, qui peut facilement produire une valeur adaptée aux valeurs précédentes. C’est assez semblable techniquement à un réseau de neurones récursif, avec des subtilités concernant en particulier la réutilisation des valeurs précédentes.

Comment ils ont fait ?

En partant de fichiers MIDI monopistes, qu’ils ont transformés avec midicsv, puis simplifiés, ils ont pu obtenir de bonnes données pour entraîner leur réseau de neurones.

Qu’est-ce que ça donne ?

Avec trois entraînements clairement, ça donne de la bouillie.
Avec quinze entraînements, ça n’est pas terrible.
Et avec cent entraînements, le résultat est … curieux.

Comment faire autrement ?

Il y a des solutions existant dans le commerce : Google Magenta, Jukedeck, flow machines, Baidu AI Composer. Ces solutions sont … bien plus efficaces, même si la méthode de génération est à peu près identique (à part Baidu AI Composer qui joue dans un autre registre).

Comment améliorer la solution ?

En vérifiant les gammes utilisées et le tempo, avec un meilleur apprentissage.

Prometheus

C’est une solution de monitoring dédiée aux applications conteneurisées, présentée par SoundCloud en 2012, sur un principe utilisé depuis encore plus longtemps chez Google.

Pourquoi ?

Les conteneurs ont des durées de vie différentes des machines qui les hébergent (et les monitorer est donc plus délicat). Par ailleurs, les conteneurs peuvent être upscalés ou déplacés beaucoup plus facilement. Il faut donc une solution qui s’adapte à cette variabilité, d’où la nécessité d’une base de données orientée time series sur laquelle s’appuie un système d’alerting.

Comment brancher Prometheus sur une application ?

Les applications mettent à disposition leurs données à travers des exporteurs, que Prometheus collecte pour les transformer en time series. Il existe déjà des exporteurs pour tout un tas d’applications : Docker, Kubernetes, Traefik, etcd, … Ces métriques sont ensuite disponibles dans Prometheus.
A noter qu’il existe une liste d’exporteurs standards.

Et comment produire des informations à partir des métriques ?

Le langage de requête va permettre de lire ces métriques, et d’en tirer des valeurs et des indicateurs, qu’on va pouvoir ensuite (toujours via le langage de requête) moyenner et transformer.
Et Maxime nous montre tout ça dans une chouette démo, qui provoque une avalanche de tweets.
Pour finir, il est également possible de créer des dashboards Grafana à partir des informations contenues dans Prometheus, ce qui donne un résultat bien plus joli.

État des lieux du protocole HTTP

Le titre est assez clair. Donc on entame tout de suite.
À partir de HTTP/1.1, on a tenté d’envoyer plusieurs ressources en parallèle. Ça a été un échec à cause du Head Of Line Blocking : si la première ressource n’arrive pas dans les temps, tout est bloqué.
Il reste du HTTP/1.1 l’ouverture de plusieurs connexions parallèles (selon le navigateur).
La situation était un peu coincée … Sauf que le header HTTP “upgrade” permet au client et au serveur de négocier une utilisation différente de la pile TCP. Ca a permis à Google de lancer des expériences, comme par exemple SPDY, qui permet d’utiliser une requête HTTP unique pour charger toutes les données d’une page.
Ce qui nous amène à HTTP/2, qui fournit un flux binaire, utilisant forcément TLS, avec une compression des headers HTTP et le multiplexage des ressources.
Ca permet également de supprimer certaines optimisations désormais inutiles : le domain sharding, les CSS Sprites.
En revanche, il reste toujours raisonnablement utile d’agréger les fichiers (pour bénéficier d’une clé de cache unique dans le navigateur), de minifier, et bien sûr de GZIPPER.
C’est quoi la suite ?
QUIC (quick UDP internet connection), qui est une implémentation expérimentale du transport HTTP/2 par UDP. Comme il remplace TCP et TLS, il doit gérer la sécurité. Et il fournit un certain nombre d’optimisations pour certaines opérations spécifiques.
Par ailleurs, il y a des travaux pour permettre l’envoi de données depuis le serveur.
Là, le but est clair : remplacer les astuces traditionnelles comme le long polling ou les server sent events. Pour ça, on a déjà les websockets, ce qui est cool (et repose sur l’utilisation du fameux header “upgrade” pour transformer la connexion HTTP en connexion WebSocket). Mais à partir d’HTTP/2, on peut construire un protocole, qui s’appelle web push, et qui va permettre au serveur d’envoyer les événements depuis le serveur.
En termes de support, SSE n’est pas supporté par IE/Edge, WebSocket est globalement supporté depuis 2015 comme HTTP/2, WebPush est présent dans Chrome et Firefox. Et ces éléments sont également bien supportés par les serveurs. Typiquement, dans le monde Java, Jetty fournit un support pour toutes ces fonctionnalités très vite.

Introduction au machine learning front-end

Ca fait un peu bizarre d’entendre parler de ça.
Qu’est-ce qu’on peut faire en deep learning dans son navigateur ? De la détection d’image (et en particulier de chat). De la reconnaissance de chiffres …
La première étape, c’est de réussir à utiliser le GPU en Javascript (pour avoir une puissance de calcul suffisante pour réaliser les calculs nécessaires). Et ça, c’est possible avec deeplearn.js. En gros, l’astuce, c’est que deeplearn crée (quand il a un GPU sous la main) une texture WebGL qu’il va manipuler via des opérations de texture. Il est par ailleurs possible d’entraîner un modèle sur un navigateur, et d’exporter le modèle entraîné pour l’utiliser dans une application.

Music in the browser

Encore de la musique ? Oui, mais cette fois-ci, on va assister au développement d’un synthétiseur dans le navigateur. Tout ça repose sur la web audio API, initiée en 2011, mais qui est maintenant complètement intégrée dans le navigateur. Cette API utilise un graphe de noeuds pour créer ou transformer des sons. L’une des magies du truc est que le navigateur gère la production du son et le temps dans des threads différents de celui de la page.
Et c’est déjà le temps de la première démo, avec un oscillateur monophonique. Et évidemment, produire des effets dans le monde réel n’est pas aussi simple qu’il y paraît.
On passe ensuite à la synthèse polyphonique, qui permet de jouer plusieurs notes en même temps. Ca ajoute des problèmes supplémentaires, comme le fait que si on appuie sur deux touches, leurs signaux vont se sommer, et il faut donc avoir un gain réglable en fonction du nombre de signaux émis.
Un truc marrant, c’est de pouvoir personnaliser la forme d’onde, ce qui implique de créer un signal à partir de deux signaux préexistants. Pour ça, on peut faire de la synthèse additive … ou de la synthèse soustractive.
Et pour être vraiment chouette, on ajoute des enveloppes sonores. et des oscillateurs basse fréquence.
Il faut noter d’une part que cette API est disponible dans la plupart des navigateurs sauf (vous l’aurez deviné) IE et d’autre part que le code source est disponible sur GitHub : https://github.com/Kize/Music-In-The-Browzzzer
Le résultat est vraiment très bon, en tant que démonstration des capacités de la web audio API.

Conclusion

Cette technozaure avait une coloration très fun, avec des sujets qui ne sont pas forcément applicables dans toutes les missions, mais qui permettent tous de se sortir la tête des problèmes quotidiens pour découvrir de bonnes idées, dont certaines peuvent même être applicables dans vos projets. Cette conférence est aussi, et surtout, un moyen de nous permettre de partager des idées, des avis, des envies, et de construire une vraie communauté d’idées. C’est en tout cas un moment que j’attends toujours avec impatience, et cette édition n’a pas dérogé à la règle implicite qui veut que les présentations soient fun, sans pour autant délaisser des aspects pratiques. Vivement la prochaine édition !

Auteur/Autrice

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

%d blogueurs aiment cette page :