Parcours

Projets

Au LSE

Depuis mon entrée au LSE (Laboratoire Système de l’EPITA) en février 2011, je suis dispensé avec les autres étudiants du laboratoire de certains cours pour me permettre de passer du temps sur des projets en rapport avec les thèmes du laboratoire. Inutile de dire que nous mettons ce temps à profit avec entrain ! Voilà de succintes présentations des projets sur lesquels j’ai travaillé :

FrASM

Plusieurs activités au laboratoire ont soulevé le besoin de pouvoir écrire rapidement un assembleur relativement simple pour telle ou telle machine (virtuelle ou non). FrASM est un framework en Python 3 demandant à l’utilisateur de spécifier une liste d’instructions et d’opérandes pour une architecture, ainsi que les encodages des instructions et des sections, puis qui prend en charge le lexing, le parsing et la résolution des symboles. Voir l’exemple d’assembleur Chip-8. Je suis le seul développeur sur ce projet.

C!

C! est un langage de programmation orienté système et noyau. Il a été démarré par Marwan Burelle et Gabriel Laskar comme POC en se basant sur le C pour tenter de corriger quelques un de ses défauts et ajouter quelques fonctionnalités, entre autres :

  • Une syntaxe plus cohérente
  • Gestion de namespaces entre modules
  • Taille des entiers explicite, et accès aux bits par index
  • Rajout d’une fine couche objet
  • Macro classes : ajout d’opérations avec une « syntaxe objet sur des types pré-existants

Le projet lui-même est un compilateur de C! vers C écrit en OCaml. Pour ma part, j’ai écrit la première version de la gestion des modules et des namespaces, ajouté la gestion des appels de fonctions macro, introduit la notion d’objet « local » (alloué automatiquement sur la pile ou en mémoire statique), refait le système de tests et corrigé des bugs au fur et à mesure de leur découverte.

Lien vers le dépôt git

CSAT

Pierre Bourdon et moi-même voulions tenter de créer un framework de désassemblage interactif avec un usage collaboratif. De cette envie est né CSAT (Collaborative Static Analysis Tool), en Python 3 prévoyant d’utiliser Qt pour l’interface graphique. Par manque de temps, le projet est en stand-by.

Jusqu’ici, j’ai développé le système de chargement de formats (ainsi qu’un chargeur ELF), des outils pour faciliter le désassemblage lui-même (ainsi qu’un désassembler Chip-8 et en partie le désassembleur MIPS), les principales structures de données (pour représenter l’espace mémoire), de plug-ins et enfin un début d’interpréteur de commandes pour l’utilisation interactive.

Participation à des CTF

Je participe de temps en temps à des CTF (Capture The Flag) au sein de l’équipe du laboratoire. Vous pouvez suivre nos résultats sur CTF Time et lire nos writeups sur notre blog (j’en ai écrit pour les challenges dont je me suis occupé).

Conférences

Les étudiants du laboratoire organisent au moins une fois par an des séries de conférences au sein de l’école et ouvertes à tous pour parler de leurs projets. Pour ma part, j’ai présenté :

  • epoll: asynchhonous I/O on Linux (support)
  • C!: a new system oriented programming language (support)
  • Neighbour Discovery Protocol (support)
  • CSAT: Disassembler (support)
  • FrASM: Assembly framework (support)
  • Introduction to CTFs (l'exemple The Game : support)

Projets à EPITA

Je ne parlerai pas ici des projets obligatoires que nous sommes ammenés à faire (comme un serveur HTTP, un clone du shell unix Bash, un outil de manipulation d’images, un driver USB pour Linux, etc.), mais des activités que j’ai mené par plaisir et par goût dans les associations de l’école :

Système de finale à Prologin

Tous les ans, l’association Prologin organise un concours national d’informatique pour les moins de 20 ans. La dernière étape de ce concours (la finale) est une épreuve sur 36h de développement d’une IA pour un nouveau jeu chaque année. Pendant la finale, les candidats peuvent lancer des matches entre leur propre programme et ceux d’autres candidats.

J’ai majoritairement contribué au système informatique de la finale de l’édition 2011 du concours : développements sur le serveur de matches, interface graphique permettant de visualiser le déroulement d’un match, participation à l’administration systèmes, etc.

Conférences

Dans le cadre de l’association GConfs, j’ai organisé plusieurs conférences et TPs : ces participations ont leur page dédiée. Je suis depuis septembre 2012 sécrétaire de l’association.

Pierre Bourdon et Nicolas Hureau et moi-même avons organisé en septembre 2011 une conférence d’introduction au langage Python pour les étudiants de l’école. J’ai écrit des exercices pour le TP qui a suivi la conférence. Le support de conférence et les sujets d’exercice sont regroupés sur cette page.

Projets personnels

sheep8

En août 2012, j’ai voulu mettre en pratique ma lecture de Modern compiler implementation in ML de Andrew W. Appel. J’ai ainsi commencé à écrire un compilateur pour un langage rudimentaire vers l’architecture Chip-8. J’ai utilisé Python 3 pour voir jusqu’où je pouvais aller sans pattern matching. Je n’ai pas encore pu terminer ce projet par manque de temps : il reste la liveness analysis et l’allocation de registre pour avoir un compilateur fonctionnel.

Lien vers le dépôt git

lexy

Pour des besoins récurrents sur mes projets, j’ai écrit un lexer ultra-simple à utiliser et paramétrable en Python 3. Le lexer connaît un ensemble limité de types de tokens (mot clef, identifiant, entier, ponctuation, nombre décimal, chaîne de caractère, …) et son comportement peut être légèrement modifié concernant la gestion des sauts de ligne et des commentaires.

Même si je n’ai pas terminé d’écrire toutes les fonctionnalités que je voulais (par exemple les commentaires multilignes), Lexy est déjà utilisable, et utilisé dans mes autres projets (FrASM, CSAT et sheep8 par exemple). J’ai même écrit un tutoriel pour qui aurait envie de l’utiliser.

Lien vers le site du projet

Contributions diverses

funcparserlib
TODO
Wireshark
TODO

Formation

Cycle ingénieur

De février à décembre 2012 je termine mes études dans la spécialisation GISTRE tout en travaillant en parallèle au LSE. Je suis aussi depuis septembre 2012 sécrétaire de l’association GConfs.

D’août 2011 à janvier 2012 j’ai effectué un stage chez alwaysdata, un hébergeur Web (principalement mutualisé de bonne qualité) pour travailler sur une API d’administration REST et sur quelques démons « maison » s’occupant du système d’information interne et de services pour les clients (principalement en Python, avec un peu de C et d’Erlang).

De septembre 2010 à juin 2011, j’ai passé ma première année du cycle d’ingénieur à l’école, et je suis devenu en février 2011 membre du LSE, où je travaille sur divers projets et où je tiens régulièrement des talks/conférences. J’ai aussi intégré l’association Prologin pour participer à l’organisation de l’édition 2011 du concours (et en particulier le système de finale).

Cycle préparatoire

De janvier à juin 2010, je suis allé faire un semestre d’études à Stellenbosch, une petite ville universitaire à côté du Cap en Afrique du Sud.

En Info Spé (seconde année de classes préparatoires, de septembre à décembre 2009), j’étais dans le groupe Gvéocap (parce que nous étions quatre au second semestre à Stellenbosch, à côté du Cap en Afrique du Sud) sur le projet Altimap : un programme en OCaml permettant de visualiser en 3D une surface en relief importée depuis une carte géographique scannée. Au dernières nouvelles, le site n’est plus en ligne et je n’ai pas de copie : http://altimap.eu/. J’ai aussi préparé des conférences/TP pour l’association GConfs.

En Info Sup (1ère année de classes préparatoires, de septembre 2008 à juin 2009), j’étais dans le groupe A`Xion sur le projet DestruXion : un clone de Worms codé avec Pascal (dialecte Delphi, compilant et fonctionnant sous Unix avec FreePascal) et la SDL. Je garde un mirroir du site de projet en ligne : http://destruxion.kawie.fr/ (anciennement destruxion.net)

Créé en novembre 2012.