Malo MONIN

Étudiant en informatique à l’ENS Rennes.

Computer science student at ENS Rennes.

Logo de Typst.

Typst.

Un système de composition open source.

Typst est un système de composition open source actuellement en développement, conçu pour atteindre la puissance de LaTeX avec une syntaxe plus simple à prendre en main et à utiliser, inspirée de celle de Markdown.

Mes contributions consistent en des rapports de bugs et suggestions de fonctionnalités, mais également en de multiples pull requests.

Typst logo.

Typst.

An open source typesetting language.

Typst is an open source typesetting language currently under development, made with the goal to be as powerful as LaTeX, while having a simpler syntax, similar to Markdown.

I contribute to Typst through bug reports, suggestions, as well as multiple pull requests.

L’Infératrice.

Un interpréteur Prolog.

L’Infératrice permet de dériver automatiquement des séquents étant donné un ensemble de règles d’inférence. Elle est également capable de trouver l’ensemble des valuations pour lesquelles un séquent comportant des variables libres est dérivable.

L’Infératrice a été implémentée en trois jours avec Grégoire Maire et Clara Moy dans le cadre d’un projet du module de théorie des langages programmation de la L3 SIF.

L’Infératrice.

A Prolog interpreter.

L’Infératrice (‘The Inferator’) can automatically derive sequents given a set of inference rules. You can also leave unbound variables in your query, and L’Infératrice will return a list of solutions to your problem.

L’Infératrice was implemented in three days together with Grégoire Maire and Clara Moy as part of the course on programming language theory.

Logo de Brainzen.

Brainzen.

Un langage de programmation original.

Brainzen est un langage de programmation de ma création, conçu pour être compilé vers du code Brainfuck. Le langage n’est, à ce jour, pas Turing-complet car il n’est pas encore possible d’écrire des fonctions récursives, ni de définir des structures de données de taille variable. Si les idées théoriques permettant de rendre possibles ces concepts sont déjà posées, il reste encore à les implémenter proprement dans le compilateur.

J’ai toutefois déjà implémenté une variante de l’algorithme A* en Brainzen.

Brainzen logo.

Brainzen.

An homemade programming language.

Brainzen is a programming language I conceived with the goal to compile to Brainfuck code. Currently, Brainzen is not Turing-complete because it is impossible to write recursive functions, and because data structures with variable size are not supported. I do know how those two features can be implemented, but have not gotten to do it yet.

However, I already implemented a variation of the A* pathfinding algorithm in Brainzen.

Logo de Sinfourmis 2023.

Sinfourmis.

Un concours d’écriture de compilateurs.

Chaque année, Sinfonie, l’association du département d’informatique de l’ENS Rennes, organise un tournoi dans lequel des équipes conçoivent des programmes assembleur exécutés par des fourmis virtuelles. Les fourmis de chaque équipe s’affrontent dans des matchs au cours desquels elles doivent rapporter le plus de nourriture possible – initialement disséminée sur la carte – dans leurs bases respectives. La plupart des équipes procèdent en commençant par écrire un compilateur qui génèrera l’assembleur à partir d’un programme dans un langage de plus haut niveau.

Notre équipe, consituée de Nicolas Dassas-Henny, Grégoire Maire et moi-même, est arrivée troisième sur six équipes à l’édition 2023 – mais serait arrivée deuxième sans une injustice dans la sélection des cartes ; et a remporté le Gala des fourmis, prix offert à l’équipe dont les fourmis réalisent la plus belle figure, grâce à cette image, affichée entièrement avec des fourmis, sur une grille hexagonale.

Sinfourmis 2023 logo.

Sinfourmis.

A compiler creation contest.

Each year, Sinfonie, the association of the computer science department at ENS Rennes, organizes a tournament where teams create assembly programs that are executed by virtual ants. Teams compete against each other in matches where their ants have to bring as much food as possible to their respective bases. Most teams start by writing a compiler that generates assembly from a program in a higher level language.

Our team—consisting of Nicolas Dassas-Henny, Grégoire Maire and myself—arrived third out of six teams at the 2023 edition—although we would have been second if it wasn’t for an unjust decision in the choice of a map. We also won the ant’s gala ball, which is awarded to the team whose ants realize the prettiest figure, for displaying this image out of ants, on a hexagonal grid.

Curryst.

Un paquet Typst pour afficher des arbres de preuve.

Curryst est un paquet Typst permettant de réaliser des arbres de preuve. Curryst est entièrement écrit avec le langage de script intégré à Typst.

Curryst a été créé par Paul Adam, mais j’en suis le principal contributeur.

Curryst.

A Typst package to lay out proof trees.

Curryst is a Typst package enabling the creation of proof trees. It is fully written in the scripting language integrated in Typst.

Curryst was created by Paul Adam, but I am the main contributor.

Icône de Board & Pieces.

Board & Pieces.

Un paquet Typst pour afficher des échiquiers.

Board & Pieces est un paquet Typst permettant d’afficher des positions d’échecs sur un échiquier. Les positions peuvent être renseignées sous différents formats, tels que la notation Forsyth-Edwards. En particulier, il est possible d’indiquer une séquence de coups en notation algébrique, qui sont simulés de manière à générer les positions successives d’une partie. Le paquet supporte également l’import de fichiers PGN.

L’essentiel de la logique a lieu dans un plugin écrit en Rust, tandis que les fonctions d’affichage sont implémentées en Typst.

Le code source de Board & Pieces est disponible sur GitHub.

Board & Pieces icon.

Board & Pieces.

A Typst package to display chessboards.

Board & Pieces is a Typst package that enables the user to display chess positions on a chessboard. Positions can be described in multiple formats, such as Forsyth–Edwards Notation. It is also possible to generate the successive positions of a chess game described in portable game notation.

Most of the logic happens in a plugin written in Rust. Functions that ultimately render a board are implemented in Typst.

Board & Pieces’ source code is publicly available on GitHub.

Diagraph.

Un paquet Typst intégrant Graphviz.

Diagraph est un paquet Typst permettant d’utiliser Graphviz pour tracer des graphes. Diagraph utilise l’API C de Graphviz afin de générer un SVG qui pourra être affiché par Typst. Une partie de Diagraph est écrite en C et compilée en WebAssembly pour pouvoir être utilisée dans Typst via le système de plugins. L’autre partie est écrite en Typst, et constitue une interface entre le plugin et l’utilisateur final.

Diagraph a été créé par Tom Goalard, mais j’ai eu l’occasion d’effectuer de nombreux commits.

Diagraph.

A Typst package integrating Graphviz.

Diagraph is a Typst package that adds support for Graphviz to enable the creation of graphs in Typst. Diagraph uses Graphviz’s C API in order to generate a SVG that Typst can render. A part of Diagraph is written in C and compiled to a WebAssembly Typst plugin. The other part is written in Typst and constitutes the interface between the plugin and the final user.

Diagraph was created by Tom Goalard, but I contributed with numerous commits.

TIPE.

Dans le cadre de mon travail d’initiative personnelle encadré sur le thème « la ville », j’ai implémenté un algorithme de recherche d’itinéraire le plus rapide dans un réseau de transports en commun. L’algorithme calcule un itinéraire optimal dans un réseau de transports multimodal représenté par un graphe temporel, étant donnés des points de départ et d’arrivée et un horaire de départ, à l’instar de services comme Google Maps ou Citymapper. Le graphe du réseau et l’algorithme en lui même communiquent via une interface abstraite afin de rendre l’algorithme adapté à tout type de réseau, indépendamment de son implémentation.

TIPE.

For my travail d’initiative personnelle encadré—a personal project conducted by each student as part of CPGE—I implemented an optimal routing algorithm for transportation networks. The algorithm computes the shortest route in a multimodal transportation network represented by a time-dependent graph, given a starting point and time, and a destination. This is similar to services like Google Maps or Citymapper. The algorithm accesses the graph through an abstract interface, making it work with any kind of network, regardless of the underlying representation.