Benjamin Billet

◈ Ingénieur de recherche et développement, docteur en informatique

Expériences professionnelles

Depuis 2015 : Beepeers | I-Lab Triton

Industrialisation du développement de réseaux sociaux mobiles pour les micro-communautés

Beepeers est une startup qui conçoit des réseaux sociaux mobiles spécialisés pour les micro-communautées, par exemple organisées autour d'un évènement ponctuel ou d'une activité commune. Depuis quelques mois, un processus d'industrialisation et de passage à l'échelle a été mis en route, étape cruciale pour une startup après ses premières années d'existence. Dans ce cadre, Beepeers souhaite pouvoir, à partir d'un réseau social générique (composants sur étagère), instancier et déployer de nouveaux réseaux sociaux personnalisés à la demande. Aussi, l'équipe ZENITH (INRIA Sophia-Antipolis) a été sollicitée pour ses compétences en matière d'architecture orientées composants/services et de fabriques logicielles.
Faisant le lien avec les partenaires de recherche, je participe à l'analyse des réseaux sociaux déjà déployés par la startup et conçoit une architecture qui tire parti des propriétés spécifiques de ces réseaux. En premier lieu, je m'intéresse à la transformation des données existantes (relationnelles) vers un modèle de données connectées (graphes), plus adapté au contexte des réseaux sociaux. Dans le même tempss, je contribue à un middleware à composants distribués qui permettra d'instancier rapidement de nouveaux réseaux sociaux avec un minimum de développement, sans contrainte de volume ou d'échelle.

Compétences mises en oeuvre

Bases de données documents et graphes (Neo4J, OrientDB) pour le stockage des données sociales, Redis pour la gestion de caches. Java SE et OSGi pour le middleware orienté composants. Spring Boot et Spring Web pour l'implémentation de services web auto-contenus.

2012 - 2015 : Inria

Réalisation d'un système de gestion de flux de données distribué pour l'Internet des objets intelligents (IoT)

La problématique des flux de données dans l'IoT est fondamentale du fait (i) du très grand volume de données impliquant leur traitement à la volée, et (ii) de la dépendance au temps de la plupart des informations (typiquement, les mesures issues de capteurs). Dans ce cadre, les systèmes de gestion de flux de données (data stream management systems, ou DSMS) sont des systèmes de pointe permettant de représenter, de stocker, de transformer et de diffuser des flux de données de manière distribuée dans un réseau d'appareils hétérogènes qui produisent, transforment et consomment ces informations en continu.
Pendant plus de trois ans, j'ai été en charge des travaux de recherche et de développement sur Dioptase, un système de gestion de flux de données pour l'IoT. Il se présente sous la forme d'un middleware orienté flux qui abstrait les différents objets sous la forme de services de mesure (capteurs) et d'action (actionneurs) produisant et consommant des flux. Dans cet environnement, Dioptase permet le déploiement dynamique de tâches de traitement continu à l'exécution ainsi que la reconfiguration dynamique de celles-ci à la volée. Dioptase est spécifiquement optimisé pour les objets limités en ressources (contraintes matérielles, batterie, etc.) et a été conçu pour pouvoir être exécuté sur tout type d'appareils, des systèmes embarqués (p. ex. SunSPOT) jusqu'aux infrastructure cloud (p. ex. App Engine) en passant par les smartphones (Android).

Compétences mises en oeuvre

Outre les aspects théoriques du traitement de flux, Java SE pour les versions desktop, Java ME pour la plateforme SunSPOT et Android pour les smartphones. Java EE et xHTML/CSS/JavaScript (jQuery) pour le développement de la partie web de l'infrastructure, serveur d'application JBOSS.

Publications scientifiques

Cours sur le système Android

J'ai réalisé et dispensé des journées de formation sur le développement pour la plateforme Android, en interne et à l'INSA de Lyon (en 2013 et 2014). Les formations couvrent les différents aspects du SDK Android et de Java nécessaires pour programmer des applications Android : composants et cycle de vie d'une application, interface graphique, persistance, multithreading, communication réseau et gestion des capteurs dont le GPS, le microphone et la caméra.
Les diapositives des cours peuvent être téléchargées sur la page de mes travaux consacrée à la formation Android.

2011 : Ambientic

Réalisation d'un middleware pour le développement d'application mobile multi-plateformes hautement réparties

J'ai travaillé pendant six mois sur iBICOOP, un middleware conçu pour permettre à des périphériques hétérogènes (principalement des téléphones mobiles, bien que les versions Java soient déclinées pour les applications de bureau et les applications embarquées) de communiquer de manière standardisée.
Plus généralement, le middleware iBICOOP offre une abstraction et une infrastructure permettant de manipuler les différents aspects d'un téléphone, indépendamment de sa nature : communication, sécurité, stockage et gestion des informations personnelles. Grâce à cela, les applications développées au dessus d'iBICOOP peuvent être portées très facilement sur tout terminal mobile en mesure d'accueillir le middleware (iPhone, Android, Windows Phone et BlackBerry).
Cette expérience a servi de support à la réalisation de mon mémoire de fin d'étude dont la problématique fut la suivante : "en quoi les architectures logicielles et intergicielles peuvent-elles simplifier le processus de développement et d'évolution des applications multi-plateformes".

Compétences mises en oeuvre

Technologies .NET (C#, WPF, WCF, LINQ) sous Visual Studio pour du développement Windows Phone 7. Java SE/ME sous Eclipse pour développement Android. Java EE, Grails et xHTML/CSS/JavaScript (jQuery/Prototype) sous STS pour le développement de la partie web de l'infrastructure, conteneur de servlet Tomcat 7.

Réalisation d'une application de partage de photo

Lors d'un évènement destiné à mettre en relation des chercheurs et des industriels du secteur de l'informatique ("Rencontres Inria Industrie"), une application multi-plateforme de partage de photo en pair-à-pair a été développée pour démontrer les capacités du middleware iBICOOP.

Compétences mises en oeuvre

Technologies .NET (C#, WPF, WCF, LINQ) sous Visual Studio pour du développement Windows Phone 7.

Réalisation d'une application de gestion d'évènements

La startup Ambientic a été fondée pour produire et commercialiser des applications mobile basées sur le middleware iBICOOP. Dans ce cadre, j'ai participé au développement de l'application UEvent, une suite de services innovants pour le monde de l'évènementiel (plus d'informations ici).

Compétences mises en oeuvre

Technologies .NET (C#, WPF, WCF, LINQ) sous Visual Studio pour du développement Windows Phone 7. Travaux sur l'intéropérabilité à base de formats ouverts tels que iCalendar (RFC 5545), vCard (RFC 2425/2426), Atom (RFC 4287), etc.

2010 : Setinnov, Ontech

Réalisation d'un outil de gestion de streamers

Les systèmes de broadcasting ECRIN sont des appareils destinés à diffuser/retransmettre des flux audio/vidéo à travers un réseau. Ceux-ci sont pourvus d'une interface d'administration à distance mais celle-ci se révélait insuffisante pour la société OnTech, qui désirait :
  • parvenir à déclencher automatiquement un diffuseur à une date/heure donnée
  • parvenir à diffuser deux vidéos les unes après les autres sans coupure (jusqu'à lors l'opération manuelle prenait trop de temps pour permettre la diffusion en direct)
  • synchroniser plusieurs diffuseurs entre eux
  • multiplexer sur internet les flux générés

Compétences mises en oeuvre

Java/SWING sous Eclipse pour la réalisation de l'outil d'administration. Nagios pour la supervision SNMP (RFC 1157). Etude du format de transport MPEG-TS pour le multiplexage et des protocoles HTTP (RFC 2616) et RTP (RFC 3550) pour l'interfacage avec les serveurs de diffusion.

Réalisation d'un encodeur vidéo distribué

Pendant 6 semaines, j'ai travaillé à la réalisation d'un encodeur vidéo distribué basé sur la librairie opensource ffmpeg. Dans notre infrastructure, chaque machine héberge un noeud capable d'encoder des données vidéos et ceux-ci sont découverts dynamiquement par une machine maître (découverte locale ou au moyen d'un annuaire). La machine maître reçoit le fichier à encoder, le découpe et le publie sur un espace partagé avant d'affecter chaque morceaux aux différents noeuds en les sélectionnant en fonction des précédents résultats obtenus par chaque noeuds (rapidité, fiabilité, etc.). Les noeuds vont ensuite effectuer leur tâche et publier le résultat sur l'espace partagé. Lorsque tous les noeuds ont terminé, le maître rapatrie l'ensemble des parties obtenues et combine le fichier vidéo nouvellement transformé. Pour plus de détails, se reporter au rapport de stage.

Compétences mises en oeuvre

C/C++ sous QTCreator. QT pour la partie graphique, ffmpeg pour l'encodage, SQLite. Administration Linux (Debian), scripts BASH. Etude des techniques de découverte/synchronisation pour le développement distribué (e.g. SSDP, UDDI).

2009 : EPSI

Réalisation d'un portail collaboratif

L'EPSI (l'école d'ingénieur où j'ai effectué mes études) désirait unifier les différents portails et intranets mis en place au fil des années. Une refonte totale a été initiée pour refondre les anciens outils écrits en PHP et construire une nouvelle suite d'applications Web (portail) en JEE. Mon rapport de stage décrit en détail le travail qui a été effectué.

Compétences mises en oeuvre

Java EE (servlets, JSP/taglib/EL, EJB Entity/Session), Jakarta Struts, xHTML/CSS/JavaScript (jQuery), Flex (pour des composants graphiques avancés) sous NetBeans, serveur d'application GlassFish. SQL Server/MySQL, LDAP, RADIUS et scripts bash.

Réalisations Web

maitecoursol-psychomotricite.com (2015)

Site web réalisé pour le cabinet d'une psychomotricienne libérale. PluXml, avec un thème original crée pour l'occasion (HTML5/CSS3).

lamaisondeslandes.fr (2014)

Site web de location saisonnière réalisé pour un particulier (textes, visuels et développement). HTML5/CSS3 et PHP5 (formulaire de réservation).

blandinebourouliou.fr (2013)

Site web réalisé pour une professeur particulier exerçant chez Anacours et en indépendante. PluXml, avec un thème original crée pour l'occasion (HTML5/CSS3).

benjaminbillet.fr

Site vitrine, que vous consultez actuellement (!). Réalisé en HTML5/CSS3 et PHP5. Journal de liens sous Ginger.

Projets réalisés durant mes études

Réalisation d'une application de partage d'expérience métier (équipe de quatre, cours de génie logiciel)

Dans le cadre d'un cours sur l'intéropérabilité, le projet consiste à proposer des fiches métiers commentables pour le domaine informatique, le tout accessible depuis un site web et deux applications mobiles natives, pour iPhone et Windows Mobile.

Compétences mises en oeuvre

Java EE (JAX-WS, Spring, Hibernate, JSF) sous Eclipse pour le serveur et xHTML/CSS/JavaScript pour le client web, déploiement sur JBoss (+SSL pour la confidentialité des communications) avec une base de données PostgreSQL. Réalisation d'un client en C# pour Windows Mobile 6.5 sous Visual Studio et d'un client en Objective C pour iPhone sous xCode.

Réalisation d'un proxy HTTP (équipe de deux, cours UNIX/Linux)

Le serveur proxy réalisé dispose des fonctionnalités habituelles telles que la journalisation des requêtes, la mise en cache des pages et la compression automatique des requêtes, le filtrage par nom de domaine ou par contenu (retrait des publicités, par exemple) et l'amélioration de la sécurité (recherche d'alternatives en HTTPS, gestion des cookies, anonymisation, etc.).

Compétences mises en oeuvre

C/C++, UNIX/Linux (système de fichier, réseau, processus/IPC, etc.), scripts bash. Etude du protocole HTTP (RFC 2616).

Réalisation d'un outil de gestion de projet (équipe de trois, cours de gestion de projet)

L'outil développé est proche de ce que propose MS Project : édition de diagrammes de gantt et PERT/MPM, quantification et planification de l'utilisation des ressources, gestion des avancées/retards/coûts, tableaux de bord.

Compétences mises en oeuvre

Mysql, Java EE (servlets, JSP/taglib/EL, Spring, JPA) sous Eclipse. Déploiement sur un serveur d'application GlassFish.

Réalisation d'un petit moteur 3D (équipe de quatre, cours de C/C++)

Le moteur réalisé propose des API pour la gestion de la scène sous forme d'octrees discontinus, la création de primitives et d'objet complexes (ensemble de points, skybox, optimisation à base de Vertex Buffer Objects), la manipulation des objets dans l'espace, la gestion des textures (dont procédurales), la gestion minimale de l'éclairage, la gestion de la caméra, la gestion des animations basiques (timeline, translation, rotation et homothétie, avec transitions linéaires/spline), le support des fichiers 3ds, le support des collisions sphère et cube orienté (separating-axis method), la gestion de quelques effets (feu, eau, grain, reflets, etc.) basés sur des shaders GLSL.

Compétences mises en oeuvre

C/C++ sous CodeBlocks, OpenGL (avec GLUT), shaders GLSL.

Réalisation d'un logiciel de pilotage pour projecteur multifonction (équipe de trois, cours d'informatique industrielle)

Logiciel de pilotage (couleur, stroboscopie, pan/tilt, motif, etc.) pour un banc de projecteurs compatibles DMX, avec enregistrement de séquences prédéfinies et programmation à distance.

Compétences mises en oeuvre

C/C++ sous Borland C++ Builder (pour la version Windows) et sous Kylix (pour la version Linux).

Réalisation d'un logiciel pour robot joueur de dames (équipe de trois, cours de système et d'algorithmie)

Le robot est composé d'une caméra et d'un bras articulé lui permettant de saisir des pièces cylindriques noires ou blanches sur le plateau. Le logiciel développé acquiert les images depuis la caméra, effectue la reconnaissance de formes et calcule le prochain coup du robot selon un ensemble de stratégies programmables.

Compétences mises en oeuvre

C/C++, QT et SDL sous QTCreator. Pilotages de cartes E/S Tout ou Rien (TOR) pour les mouvements du robots.

Réalisation d'un logiciel de gestion de panneaux à LED (équipe de deux, cours de système et de réseau)

Le logiciel est composé d'un serveur (une application + une interface web) et de plusieurs clients. Le serveur permet d'enregistrer et de localiser des panneaux, d'envoyer des messages priorisés à un ou plusieurs panneaux, de recevoir des alertes en cas de pannes et de gérer les historiques des messages envoyés.
Les applications clientes sont installées sur des périphériques embarqués permettant de piloter les panneaux, de recevoir les ordres du serveur et d'acquérir des informations sur leur environnement à partir d'une batterie de capteurs (température, vitesse, humidité, pression, etc.). Ces informations permettent notamment d'afficher des messages contextuels liés aux conditions météorologiques, sans que le serveur n'ait besoin d'intervenir.

Compétences mises en oeuvre

Au niveau des clients, C/C++ pour uLinux (carte COBRA) et JavaME (carte TINI). Côté serveur (sous Linux Mandriva), PHP et xHTML/CSS/JavaScript pour l'interface web et C/C++ pour l'application serveur, avec base de donnée MySQL.

Réalisation d'une simulation de vie distribuée (équipe de deux, cours de temps réel)

De petits agents simulés interagissent entre eux dans un environnement clos (ou "aquarium"), avec des comportements et des caractéristiques prédéterminés (agressif, fuyant, etc.). Plusieurs aquariums peuvent être déployés sur des serveurs différents, chaque instance pouvant découvrir dynamiquement les autres instances disponibles sur le réseau. Les différents agents peuvent ensuite transiter d'un aquarium à un autre de manière distribuée.

Compétences mises en oeuvre

C/C++ sous NetBeans pour les serveurs de calcul, OpenMP pour la parallélisation et OpenMPI pour le calcul distribué. C# sous Visual Studio pour les clients 3D (XNA 4).

Réalisation d'un environnement de programmation logique (équipe de trois, cours d'intelligence artificielle)

Dans ce type d'environnements, le programmeur définit un ensemble de faits élémentaires concernant son application (base de faits) et des règles basées sur ces faits (base de règles). Un moteur d'inférence est ensuite utilisé pour répondre à des requêtes plus ou moins complexes.

Compétences mises en oeuvre

C# sous Visual Studio. Algorithmie des interpréteurs, logique du premier ordre (prédicats), ontologies.