Je participe principalement au développement du lecteur multimédia VLC (contrib).
En particulier, j’ai implémenté la nouvelle playlist (voir article).
C, C++.
Je participe au développement de rav1e, l’encodeur AV1 de Mozilla/Xiph (contrib).
En particulier, j’ai ajouté le support de tile encoding (voir article).
Rust.
J’ai développé une application qui permet de voir et de contrôler des devices Android à partir du PC.
Nous l’avons publié en open source : scrcpy (contrib).
C, libav/FFmpeg, SDL, Java, Android.
J’ai développé un outil qui permet aux devices Android d’utiliser la connexion du PC sur lequel ils sont branchés (reverse tethering), sans accès root.
D’abord écrit en Java, je l’ai réimplémenté en Rust pour obtenir un binaire natif.
Nous l’avons publié en open source : gnirehtet (contrib).
À cette occasion, j’ai contribué à la library d’I/O asynchrone que j’ai utilisée : mio.
Java, Android, Rust.
J’ai développé un outil permettant de contrôler un périphérique Android en utilisant une souris ou un clavier USB branché sur le PC. Il permet notamment d’enregistrer une séquence pouvant être rejouée sur plusieurs périphériques simultanément.
À cette occasion, j’ai corrigé un bug sur libusb.
J’en ai profité pour faire une présentation en interne sur la gestion des ressources sans pointeurs en C++, dont j’ai repris le contenu pour écrire un article. J’y présente notamment l’API du wrapper C++ de libusb que j’ai implémentée.
C, C++, libusb, Qt.
Pendant plus de 2 ans, j’ai travaillé sur Genydeploy, d’abord pour sa refonte complète (la version 3), puis pour le développement de nouvelles fonctionnalités (les projets présentés ci-dessus ont en fait été réalisés dans le cadre de Genydeploy).
C++11, Qt5, Java, Android.
En mission chez Softbank Robotics (anciennement Aldebaran), j’ai conçu l’API Android du robot Pepper.
Pour cela, j’ai d’abord implémenté des bindings Java/JNI pour exposer les
promise
/future
C++ de leur library libqi en Java. Cette partie est open
source : libqi-java.
J’ai ensuite développé une API Android de plus haut niveau qui expose plus simplement les fonctionnalités du robot (chaînage automatique d’appels asynchrones…).
C++, Java, JNI, Android, NDK, AOSP.
J’ai travaillé au développement d’un système vidéo pour set-top box Android, destiné à être installé dans toutes les chambres d’une chaîne d’hôtels.
J’ai intégré LibVLC dans une application Android pour lire des flux vidéos UDP multicast.
J’ai traqué et contourné un deadlock pouvant survenir lors de l’arrêt du flux UDP sur VLC.
J’ai également intégré un outil permettant la lecture de flux vidéos UDP multicast avec le lecteur natif d’Android (voir article).
C, Java, Android, NDK, AOSP, CyanogenMod, LibVLC.
Pour notre babyfoot au travail, mes collègues ont développé une application Android qui comptait les points automatiquement (grâce des capteurs branchés sur un Raspberry Pi).
Je me suis occupé du système vidéo.
J’ai développé un outil permettant de décaler le flux vidéo live quelques secondes, afin de revoir les buts facilement (voir article).
Pour Android, j’ai développé un lecteur vidéo qui supportait à la fois le
lecteur natif et LibVLC, et à la fois sur SurfaceView
et TextureView
(pour
des raisons de compatibilité avec différentes tablettes).
C, Java, Android, Bash.
J’ai intégré la gestion du ChromeCast dans l’application Android CanalPlay.
À cette occasion, j’ai corrigé une petite fuite mémoire sur la library de Google pour communiquer avec un ChromeCast.
Java, Android.
J’ai aussi participé à d’autres missions chez des clients :
Java, Android, C++.
En utilisant le projet Serval, j’ai développé une application Android permettant la communication entre téléphones Android (rootés) sans réseau mobile ni Wifi, avec les fonctionnalités suivantes :
Ce projet a été l’occasion de contribuer à Serval.
Par ailleurs, pour implémenter le talkie-walkie à plusieurs utilisateurs, j’ai développé une solution simple de mixage audio, dont j’explique les principes dans cet article.
Java, C, Android, NDK.
Lors de mes premiers pas sur Android, j’ai développé des applications e-mail et Twitter pour la tablette intégrée au tableau de bord de la voiture Renault Zoé.
Java, Android.
J’ai principalement réalisé une mission de 3 ans chez Sanofi-Aventis, pour développer une application Java/Flex de recherche de molécules.
Java EE, Adobe Flex, ActionScript.
En dehors des langages principaux listés dans mes expériences profesionnelles, j’en utilise quelques autres.
Je développe en Python de manière très occasionnelle. J’ai par exemple écrit SHAdow pour générer des fichiers différents ayant le même SHA-1, ou encore un solveur de serpent-cube.
Bash est mon shell par défaut. Il m’arrive d’écrire des scripts, par exemple un prompt pour git ou un outil de reverse sshfs.
Je m’intéresse également au développement kernel : je participe au challenge eudyptula sur mon temps libre (mais avec 2 enfants, le temps libre n’existe pas). Pour l’instant, j’ai validé les 8 premiers exercices sur 20.
Vous trouverez sans doute d’autres choses dont je n’ai pas parlé ici dans mes articles ou mes contributions open source.
J’aime beaucoup les problèmes de multithreading et synchronisation (mutexes, atomics, barrières mémoire, réordonnancement des instructions par le compilateur ou le CPU…) et les conséquences des undefined behaviors.
J’aime bien les casse-têtes de programmation (1 2 3 4…).
Les problèmes faisant intervenir des mathématiques sont les plus intéressants (par exemple, j’ai beaucoup aimé trouver une solution pour mixer plusieurs sources audio en une seule).
J’aime moins développer des interfaces utilisateur et je suis nul en design graphique.
Mes ordinateurs sont sous Debian. Je travaille sous Linux (m’imposer un poste de travail principal sous Windows ou Mac est rédhibitoire).