These are hobby projects that I made during my spare time, with the exception of the MPC implementation of majority judgment which I did during my PhD. I worked on internal software projects at Engie and I am not one of the core developers at TrustInSoft, although I did also contribute directly to the source code and tooling.
MyBelts (web app, 2022)
Technical stack: Python, Flask, SQL Alchemy, TypeScript, React, PostgreSQL
The French education system is currently working on evaluating students by skills instead of grades (pages in French). It means that teachers have to evaluate their students individually on specific skills within the subject they teach. For instance, a math teacher will have to evaluate the level of proficiency of each student with performing calculation, handling sizes and measures, using digital tools, following a rigorous reasoning, and so on.
To adapt the method to students of various levels, evaluations should be customized for each student, depending on how far they have progressed with a skill. However, tracking this, printing the evaluations and distributing them can take a significant amount of time.
This is why I have created MyBelts (GitLab / GitHub), a web application that lets teachers manage their class for this purpose. They can register students for the next evaluation in any given skill, and students can also register themselves. When a teacher wants to make their student take an evaluation, they can click on a single button that generates a single PDF with the appropriate evaluation sheets for each student, and their names prefilled. Once the evaluation is done, they can easily check in which students passed and which did not. This way, the application will know what evaluation they need to pass next time.
MyBooks (web app, 2022)
Technical stack: Python, Pandas (import script), TypeScript, React (web app)
My Library is an Android app that lets you catalog the books you own. This can be useful to let people know what books you already have before they give it to you as a present. You can also list the books you are interested in.
However, it can be inconvenient to share this list with other people. I developed MyBooks (GitLab / GitHub), a client-only web app to share this information in a convenient format. You can have a look at the live demo to test what kind of filtering and sorting features it supports. Note that the books listed in the live demo are for demonstration purpose only, and do not correspond to the books I own or wish for.
Kepler Project (space sim, 2019-2022)
Technical stack: C++, GLFW, OpenGL, Dear ImGui, and various other libraries, MinGW, Emscripten
I spent a bit too much time playing Kerbal Space Program. In this game, you can assemble your own rocket to send it flying through the atmosphere and, hopefully, to space. The game is a mostly realistic simulation of orbital mechanics using patched conics. I ended up studying the theory and writing a Python library to assist me in planning my missions: Spyce (GitLab / GitHub).
Of course, I ended up writing my own simulation and added a 3D interface. However, with the issues of distributing a Python application and the efforts needed to get reasonable performance, I switched to C++. This is Kepler Project.
This is while working on this project that I found and fixed a thorny issue with floating point precision in GLM.
NHK Easier (website, 2018-2022)
Technical stack: Django, Python, SQLite
News Web Easy is a Japanese news website targeted at Japanese children. The short articles and the simple sentence structures make is a good candidate to practice Japanese as a beginner.
I created NHK Easier to improve the experience for foreign Japanese learners, starting with myself. In particular, it hides furigana and provides a handy dictionary when hovering or tapping words.
The interface of NHK Easy used to be very inconvenient. NHK Easier made the experience much more comfortable.
SearchEdict (Anki add-on, 2018-2022)
Technical stack: Python, Qt
Anki is a multiplatform flashcard application. It builds upon the Leitner system to help people memorize bits of information. It is extremely useful to learn vocabulary when learning a foreign language, such as Japanese (the name comes from 暗記, which stands for “memorization” in Japanese). It can also be used for other types of information, such as historical facts and dates, the names, flags and location of countries, administrative regions and bodies of water, and much more.
To reduce the friction of adding a new note of Japanese vocabulary, I wrote a small add-on, which uses EDICT2 to automatically provide the reading (furigana) and meaning of a Japanese expression.
Technical stack: C, GMP, SQLite
LCS35 is a cryptographic challenge start on the 35th anniversary of the LCS (Laboratory for Computer Science at MIT) in 1999. It was designed as a calculation that would take 35 years of CPU time and could not be parallelized.
I wrote my own implementation. After some experimentation with Montgomery ladder and other approaches, I settled for just making GMP do the heavy work, and focus on creating an infrastructure that would be resilient to anything, from cosmic rays to meteorites. I had regular checkpoints that would allow me to do distributed verification of the computation.
I estimated that the calculation would take less than 4 years on the AMD Phenom II X2 550 of my desktop computer. Unfortunately, I only started the project in June 2017, and someone else completed the challenge in April 2019 after 3.5 years of computing.
Cryptographic tools (2012–2018)
Technical stack: Python, C, x86 assembly with SIMD extensions (MMX, SSE-2, AVX-2, AVX-512)
This was not my first experience with implementing cryptographic code. I wrote a rainbow table implementation for cryptanalysis of MD5 hashes (GitLab / GitHub). I also implemented a naive lookup version of reference (GitLab / GitHub).
You can have a look at the live demo.
Technical stack: C, Atmel
Before I got a proper oscilloscope, I had to make to with my Arduino Leonardo. With some low-level tweaks, I could get it to output almost 10k samples per second, allowing me to visualize a signal up to about 5 kHz on an interface I wrote with OpenGL (GitLab / GitHub).
Vendetta (2D RPG, 2013–2014)
Technical stack: C, SFML
QR Code tool (2013)
Technical stack: C
Technical stack: C, GLUT, OpenGL, SOIL, OpenAL, ALUT, Vorbisfile