Most of my projects are hosted on GitHub and have continuous build on Travis CI.

My Python projects are documented using Sphinx and the Alabaster theme. They are distributed on the Python package index.

My OCaml projects are documented using Sphinx as well and a preliminary version of my Sphinx extension for OCaml. They are published on OPAM.


PyGithub is a Python client library for the GitHub REST API v3. It’s widely used (1300+ stars on GitHub) and now maintained by the community.

The main challenge is the size of the API: there are hundreds of endpoints with one to six HTTP verbs each. PyGithub provides a specialized interface for each combination; this makes client code safe. Some other libraries let their user write the name of the endpoints: mistakes are only discovered when the HTTP request is sent. In PyGithub, if the method exists, then the endpoint exists.


DrawTurksHead is a Python library to draw Turk’s head knots. An interactive demo is available.

Its core functionality is written in C++ and exposed as a Python library using Boost.Python. A Python callback for computing the colors is called from the C++ code. This required two-way integration of C++ and Python code. Drawings are made using Cairo. The Cairo context is created in Python using PyCairo and passed to the C++ layer. The C++ code uses Cairomm to do the actual drawing.

The algorithm is documented using MathJax.


DrawGrammar is a tool to draw railroad diagrams of an EBNF grammar. It is available as an interactive demo and as a command-line tool.

It is written in OCaml. The OCaml bytecode is translated to JavaScript using js_of_ocaml. My library JsOfOCairo is used to share the Cairo-based drawing code between HTML5 canvases and PNG files. The parsers for ISO-14977 EBNF and the EBNF variant used to specify the Python grammar are written using the Menhir parser generator.


MarblesCollide is an event-based simulation of elastic collisions between two-dimensional disks (“marbles”).

It’s written in C++. Images are generated using Cairomm and assembled in a video using avconv.


IpMap is a browsable map of the IPv4 address space inspired by xkcd 195, Map of the Internet. An interactive demo is available.

It’s implemented in HTML5 and JavaScript, purely on the client side, using jQuery and jquery-mousewheel.


ActionTree is a Python library to execute (long) actions in parallel, respecting dependencies between those actions.

To ensure that side-effects from an action don’t affect others, it uses Python’s multiprocessing module to launch each action in its own subprocess.

It also uses Graphviz (through the graphviz Python module) and matplotlib to produce visual reports of the execution.


variadic is a Python function decorator to write variadic functions accepting a mix of arguments and iterables of those arguments.

Its main added value is that decorated functions keep their signature, so tools doing introspection (Sphinx doc, IDEs, etc.) will work like there is no decorator.

The wrapper function is generated using Python’s ast module. This avoids using eval on generated code.


JsOfOCairo is a OCaml library to reuse Cairo-based drawing code in web browsers.

It’s an adapter, implementing (a reasonable subset of) the interface of Cairo OCaml targeting HTML5 canvas elements as exposed to OCaml by js_of_ocaml.


hashids-ocaml is a OCaml implementation of hashids.

Hashids, by Ivan Akimov, is a successful small library to obfuscate integers, mainly used to hide growing sequences when generating public URLs. It’s been ported to a wide variety of programming languages by the community.


The static part of this website is built using Jekyll and Bootstrap. It’s hosted on GitHub Pages.

The server side of the dynamic part (demos for some projects) uses Django. It’s hosted on Amazon EC2. jQuery is used on the client side.