~rom1v/blog { un blog libre }

CV

Formation

  • Ingénieur en Informatique et Mathématiques Appliquées (ENSEEIHT, 2008)
  • Diplôme Universitaire de Technologie Informatique (IUT du Havre, 2005)

Expériences professionnelles

Videolabs (depuis 2018)

VLC

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++.

rav1e

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.

Genymobile (2013 → 2018)

Clone d’écran Android sur le PC

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.

Application de reverse tethering

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.

Replay d’évéments souris et clavier par USB

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.

Refonte complète d’une application C++/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.

API Java/Android pour le robot Pepper

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.

Système vidéo sur set-top box

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.

Système vidéo pour babyfoot

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.

ChromeCast dans CanalPlay

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.

Autres missions

J’ai aussi participé à d’autres missions chez des clients :

  • intégration du timeshifting vidéo dans AOSP pour ExpWay ;
  • analyse et modifications d’architecture du SDK de FollowAnalytics pour corriger des bugs récurrents ou aléatoires ;
  • modifications sur les applications Android et Android TV de MolotovTV.

Java, Android, C++.

AtoS Open Source Center / SmartMobility (2012 → 2013)

Application de communication sur réseau Mesh

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 :

  • communication audio (talkie-walkie) à plusieurs ;
  • messagerie textuelle ;
  • géolocalisation sur des cartes IGN téléchargées intégrées avec osmdroid (OpenStreetMap) ;
  • partage décentralisé de fichiers.

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.

Applications pour tableau de bord de voiture

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.

Logica (2008 → 2012)

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.

Autres développements

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.

Mes préférences

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).

Mes lectures informatiques