Here is a short list and description of my active projects. I am working on them during my free-time.
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.
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.
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.
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.
A game with a blob, in space. I wrote this platformer game in Java by the end of my introductory
classes to programming. There were not much constraints so it was the occasion to have some fun
implementing a 2D game. I supported the
Tiled generic level editor, the game has game pad support
and the physics/camera movement still feel really nice.
This puzzle game was a submission the Ludum Dare 26 contest. Your goal is to move furniture out houses that get progressively smaller and smaller. New mechanisms appear are added every 5 levels. We were a team of three (with another developer and an artist). I remember writing the players movement part and designing most of the level. The constraint that levels get smaller as you progress forced to give more thought to the puzzles (you couldn't artificially make levels harder by just making them larger).
This platformer game is a solo participation to the Ludum Dare 25 contest. You play a software bug inside a terminal window, moving across the computer while the developer tries to get rid of you. I wrote my own engine for this and the collisions where pretty buggy: I guess that it matched with the theme. This was done in 48h while I was in highschool, there is a timelapse video on Youtube.
Another game I did for the Ludum Dare contest. This time it was a group participation for the 24th edition (theme: "End of the world"). This is my very first game, a 2D platformer where each level represents a time period. There are some parallel paths and achievements if you find all the secrets. I remember coding the final "boss", achievements, drawing the main character and design some of the levels.
The original version had frustrating hidden traps and overall difficulty. We updated it with a nicer version but I think that the hard one is still available.
These are things I did, nothing big but at least it's mentioned.
Detect Desktop Environment
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)
A Node library to find the best path to store app data (abstracting the details of the system).
<canvas> got introduced, I wanted to revolutionize the world by writing a game engine
for the Web with a web-based alternative to the
Flash animation software. I remember even
writing the editor as a Firefox app. I tried to do it in high school. I may have underestimated
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.