Active projects

Here is a short list and description of my active projects.

Open source contributions

Being able to directly contribute to products I use is one the main reasons why I like open-source processes. After realizing how low the barrier to entry is (filling issues is already a good thing) and that it is actually possible to make a difference, I tend to be an active contributor to others open-source projects. If I don't know the technology very well, I at least fill issues; but most of the time I try to send my own PRs. It's a good way to learn more about the tools (languages, libraries, framworks) I use.

I'm mostly active in Node communities. I'm an active member of Gulp (a task manager) where I work on the plugins ecosystem and types where I help projects with maintenance of Typescript definition or even migration to Typescript. In the context of these tasks, I also joined the teams working on the request HTTP client, pug template language, babel transpiler, etc.

Older projects

The following list describes projects I did but no longer maintain. Most of them were done during my free time, some were school project that were important to me.

Street recognition in satellite images

The goal of this school project was to label pixels of satellite images as either background or streets/roads. This was implemented with machine learning and convolutional neural networks using the Tensorflow Python library. We reached a good score of 93% of accuracy (errors where mostly caused by border chunks have both street and background pixels).

Books and Movies comparison using Amazon reviews

This was a school project from my data analysis classes. We used an Amazon dataset with product metadata and reviews to answer the question "Is the book better than the movie?". If you just look at the reviews globally (e.g. average ratings) there is no visible difference but if you restrict the data to users who reviewed both movies and books from the same universe then you can see that books are globally preferred.

o10c - C99 compiler

This was a school project to implement a C compiler. Creating a compiler was something I intended to do so this was the occasion to apply it: I am pretty happy with the result. We implemented a good part of the spec. The transitions from source-code to Abstract Syntax Tree, Intermediate Representation and assembly are really clean. I also wrote utilities to view ASTs and IRs which was pretty call to see.


OmniChat was a chat client focused on interoperability with multiple services, it was a reponse to the fragmentation of chat services. It supported Skype, IRC and Facebook. It supported broadcasting of messages across services (an OmniChat user connected to multiple discussions was able to relay messages between them). I still think that this is interesting problem to solve but did not have time to support a whole chat client, I still maintain skype-http, the low level Skype library created in the context of this project.


I did a few games, you can find them in the Games section.


Smaller projects I did.


v8-coverage is a library to handle V8 code coverage reports. In particular, it implements a very performant merge function to merge multiple reports into a single one. This library is an important part of the c8 code coverage tool.

Detect Desktop Environment

detect-desktop-environment is a small Rust library to get the desktop environment of Windows, Mac and especially Linux users.

Native Dialog: Open file

A rust library letting you open native file dialogs. It has a lot of interesting FFI:

  • C for GTK
  • COM for Windows
  • Objective C (Cocoa) for Mac
  • C++ for Qt (KDE support)

AppData path

appdata-path is a small utility library to find the best path to store app data (abstracting the details of the system).

Magic Tools for Lost Actionscript Builds (MTLAB)


These were tools to help me reverse-engineer Actionscript code used in Flash files. It had a parser, disassembler and deobfuscator. I was pretty happy to break the obfuscation of some files I used (it allowed partial recovery of original symbol names) but the most interesting part was the disassembler. I wasn't happy with the available products (both free and commercial) so I wrote my own. Looking back the code was really messy (I did not know much about graphs or assembly at the time) but it got better results for my files. This is a problem I'd like to attack again with a more formal approach.

EDIT: I tackled it again: it became Open Flash.



<canvas> got introduced while I was in high-school. I decided to revolutionize the world by writing a game engine for the Web as an alternative to Flash.

I may have slightly underestimated the task...

In the end, this library was only used for my game Bug Story.

Casio Basic programs


When I was in high school, I had a programmable Casio calculator as most french students. It used "Casio Basic" for programming: a very simple language with 28 variables, lists and matrices; and a small 63 by 127 LCD screen. The interpreter was very slow compared to builtin functions. I programmed a 3D renderer, labyrinth generator, interactive drawing software and a codec for the images I generated (I had only a few kB of memory). Finding efficient solutions in this

World of Thorg


After learning HTML and CSS, I started programming in 2011 with PHP to do a personal website. I remember using it to share DnD character profiles or small projects when I was learning programming.