Libft ↗
The libc rebuilt by hand. Reused in every C project that follows.
La libc refaite à la main. Réutilisée dans tous les projets C qui suivent.
Software developer trained at 42 Lyon, from low-level C to TypeScript on the web. Motorsport fan who wants to put code to work for performance.
Développeur formé à 42 Lyon, du C bas niveau au web en TypeScript. Passionné de sport automobile, je veux mettre le code au service de la performance.
42 Lyon, since 2024. Digital Technology Architect track, common core completed (bachelor level). Project-based, peer-to-peer learning with no lectures.
École 42 Lyon, depuis 2024. Cursus Architecte en Technologie du Numérique, tronc commun validé (niveau Licence). Pédagogie par projets et par les pairs.
French Baccalaureate STI2D, digital systems, 2024. Lycée Ferdinand Buisson, Voiron. European English section.
Bac STI2D, spé. SIN, 2024. Lycée Ferdinand Buisson, Voiron. Option anglais européen.
Native French, English B2. Follows endurance racing (WEC) and GT championships closely, the engineering as much as the racing. Boxing, parkour, tennis, snowboarding, chess.
Français natif, anglais B2. Suit l'endurance (WEC) et les championnats GT de près, côté technique autant que course. Boxe, parkour, tennis, snowboard, échecs.
The first sector of the curriculum: rewrite everything by hand. The libc, printf, file reading, processes, algorithms. No libraries, no shortcuts.
Premier secteur du cursus : tout réécrire à la main. Libc, printf, lecture de fichiers, processus, algorithmique. Pas de bibliothèque, pas de raccourci.
Sort a stack of integers using two stacks and only eleven operations, in as few moves as possible. Our strategy: pre-sort by quartiles into stack B, then move each element back into A at the lowest cost.
Trier une pile d'entiers avec deux piles et onze opérations seulement, en en utilisant le moins possible. Notre stratégie : pré-trier par quartiles vers la pile B, puis réinsérer chaque élément dans A au coût minimal.
pb + rb, [med, Q3] → pb, everything else → ra. Keep 3 elements in A.rr/rrr). Push the cheapest one.pb + rb, [méd, Q3] → pb, le reste → ra. On garde 3 éléments dans A.rr/rrr mutualisés). On pousse le moins cher.100 numbers: under 700 moves for full marks. 500 numbers: under 5,500.
100 nombres : moins de 700 coups pour la note max. 500 nombres : moins de 5 500.
The libc rebuilt by hand. Reused in every C project that follows.
La libc refaite à la main. Réutilisée dans tous les projets C qui suivent.
printf with varargs: %c %s %p %d %i %u %x %X %%.
printf avec varargs : %c %s %p %d %i %u %x %X %%.
Line-by-line reading with a static buffer, any buffer size.
Lecture ligne par ligne avec buffer statique, taille de buffer quelconque.
Reproduce < in cmd1 | cmd2 > out with fork, pipe, dup2 and execve.
Reproduire < in cmd1 | cmd2 > out avec fork, pipe, dup2 et execve.
A small 2D game in MiniLibX, with .ber map validation and a reachable-path check.
Petit jeu 2D en MiniLibX, validation de carte .ber et chemin atteignable.
The technical core: processes, signals, file descriptors, threads and mutexes, then a 3D engine with no GPU.
Le cœur technique : processus, signaux, descripteurs de fichiers, threads et mutex, puis un moteur 3D sans GPU.
A Bash-like shell written from scratch in C: tokenizer, quotes, $VAR and $? expansion, pipes, redirections, heredocs, builtins and signals. The terminal below replays its behaviour, so type your own commands.
Un shell façon Bash écrit de zéro en C : tokenizer, quotes, expansion de $VAR et $?, pipes, redirections, heredocs, builtins et signaux. Le terminal ci-dessous en rejoue le comportement : tape tes propres commandes.
Splits input into tokens (words, |, <, >, >>, <<), handles single and double quotes and expansion, and catches syntax errors before anything runs.
Découpe en tokens (mots, |, <, >, >>, <<), gestion des quotes simples/doubles, expansion, détection des erreurs de syntaxe avant toute exécution.
One fork per command, a pipe between each stage, redirections through dup2, lookup in PATH. Try unset PATH then ls.
Un fork par commande, pipe entre chaque étape, redirections via dup2, résolution dans PATH. Essaie unset PATH puis ls.
Ctrl-C gives the prompt back with $? = 130, Ctrl-D exits, Ctrl-L clears. History with ↑ ↓.
Ctrl-C redonne la main avec $? = 130, Ctrl-D quitte, Ctrl-L efface. Historique avec ↑ ↓.
The dining philosophers: N threads, N forks guarded by mutexes, and nobody may starve. This simulation follows the project's strategy: even philosophers start late, fork order is reversed, and thinking time is computed.
Le dîner des philosophes : N threads, N fourchettes protégées par des mutex, et personne ne doit mourir de faim. Ici la simulation reprend la stratégie du projet : départ décalé des pairs, ordre de prise des fourchettes inversé, temps de réflexion calculé.
A raycasting engine in the style of Wolfenstein 3D (1992): one ray per pixel column, the DDA algorithm to find the wall, and a texture picked by which face was hit. Parses a .cub map and validates it with a flood fill.
Un moteur de raycasting à la Wolfenstein 3D (1992) : un rayon par colonne de pixels, algorithme DDA pour trouver le mur, texture choisie selon la face touchée. Parsing et validation par flood-fill d'une carte .cub.
HTTP by hand, Docker infrastructure, then the final project of the common core in a team of five.
Protocole HTTP à la main, infrastructure Docker, puis le projet final du tronc commun en équipe de cinq.
An HTTP/1.1 server in C++98 inspired by nginx. A single non-blocking poll() handles every I/O: clients, CGI pipes and files. No threads, and the main process never forks except for CGI.
Un serveur HTTP/1.1 en C++98 inspiré de nginx. Un seul poll() non bloquant pour toutes les entrées/sorties : clients, pipes CGI et fichiers. Pas de threads, jamais de fork du processus principal hors CGI.
A multi-container infrastructure built by hand: every image is built from Debian with its own Dockerfile, no prebuilt images. Nginx with TLS as the only entry point, WordPress on php-fpm, MariaDB, persistent volumes and a private network.
Une infrastructure multi-conteneurs montée à la main : chaque image est construite depuis Debian avec son propre Dockerfile, sans image préfabriquée. Nginx en TLS comme seul point d'entrée, WordPress sur php-fpm, MariaDB, volumes persistants et réseau privé.
ft_transcendance, the final project of the common core: an online 3D chess platform with real-time games over WebSockets and an AI opponent written in Rust, compiled to WebAssembly and running in the browser.
ft_transcendance, le projet final du tronc commun : une plateforme d'échecs en ligne en 3D, parties en temps réel par WebSockets et adversaire IA en Rust compilé en WebAssembly, qui tourne dans le navigateur.
Technical Lead and architect of the team. I built the interactive 3D rendering with Babylon.js, integrated the AI engine, implemented Google OAuth 2.0 sign-in and took part in deployment (Nginx, HTTPS).
Technical Lead et architecte de l'équipe. J'ai réalisé le rendu 3D interactif avec Babylon.js, l'intégration du moteur d'IA, l'authentification Google OAuth 2.0 et participé au déploiement (Nginx, HTTPS).
Rushes: a subject drops on Saturday morning, a random teammate, a defence on Sunday evening. Plus a few side projects. The Connect Four below is playable against a port of my minimax AI.
Les rushes : un sujet tombe le samedi matin, un coéquipier tiré au sort, soutenance le dimanche soir. Et quelques projets à côté. Le Puissance 4 ci-dessous se joue contre un portage de mon IA minimax.
2048 in the terminal with ncurses: merging, random spawns, resize handling, save file.
2048 dans le terminal avec ncurses : fusion, apparition aléatoire, redimensionnement, sauvegarde.
Key/value lookup on a hand-written hash map: open addressing, linear probing, rehashing.
Recherche clé/valeur sur une table de hachage faite main : adressage ouvert, sondage linéaire, rehash.
A Nim game against an unbeatable AI (modulo 4 strategy), with a Raylib graphical bonus.
Jeu de Nim contre une IA imbattable (stratégie modulo 4), bonus graphique en Raylib.
Programs in an esoteric multi-stack language, up to a Mandelbrot renderer.
Programmes dans un langage ésotérique à piles multiples, jusqu'à un rendu de Mandelbrot.
Connect Four against a minimax AI with alpha-beta pruning and an adaptive depth, any board size up to 999×237. Playable on the left.
Puissance 4 contre une IA minimax avec élagage alpha-bêta et profondeur adaptative, grilles jusqu'à 999×237. Jouable à gauche.
The C++ modules: OOP, canonical form, templates, STL containers.
Modules C++ : POO, forme canonique, templates, conteneurs STL.
Code and motorsport in one project: read the data of a car on track and make it readable to get faster.
Le code et le sport auto dans le même projet : lire la donnée d'une voiture en piste et la rendre lisible pour progresser.
A telemetry dashboard for Assetto Corsa Competizione: reads the game's shared memory live, splits laps automatically and colours the track map by throttle and brake to study trail braking lap after lap.
Dashboard de télémétrie pour Assetto Corsa Competizione : lecture de la mémoire partagée du jeu en direct, découpage automatique des tours, carte du circuit colorée selon gaz et frein pour analyser le trail braking tour par tour.
Reads ACC's Shared Memory. A lap ends when the normalised track position wraps from ~1.0 back to ~0.0. Every lap is written to disk immediately, so nothing is lost if the app crashes.
Lecture de la Shared Memory d'ACC. Un tour se termine quand la position normalisée repasse de ~1.0 à ~0.0. Chaque tour est écrit sur disque immédiatement, rien n'est perdu si l'appli plante.
History filterable by track and car, lap summary, coloured map, pedal and speed traces, fullscreen focus mode with a draggable split.
Historique filtrable par circuit et voiture, récap du tour, carte colorée, traces pédales/vitesse, mode focus plein écran avec séparation déplaçable.
Nginx serves the front end and proxies /api/* to Flask, which is never exposed directly. API key on write endpoints, pytest tests and GitHub Actions CI.
Nginx sert le front et proxifie /api/* vers Flask, jamais exposé directement. Clé d'API sur les écritures, tests pytest et CI GitHub Actions.
I'm looking for an internship from November 2026 or a work-study contract from January 2027, ideally with a racing team or around performance data. Happy to relocate anywhere in France.
Je cherche un stage à partir de novembre 2026 ou une alternance à partir de janvier 2027, idéalement dans une structure de course ou autour de la donnée de performance. Mobile partout en France.