Introduction

I’m Vincent Jacques, alias @jacquev6 on the web. I’m a 35 years old, French, passionate software engineer. I started programming when I was 12 on a Casio calculator, and haven’t stopped learning since.

I studied general engineering at Ecole Centrale Paris (2006) and I specialized on software as a very enthusiastic career choice.

After eleven years of professional software engineering, I value maintainable and evolutive source code and the use of tools and automation to create working, reliable software.

As of September 2018, I’m looking for my next job. Maybe we can work together on your software project? More details below my portfolio.

Portfolio

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

My projects are documented using Sphinx and the Alabaster theme. Reference documentation is generated from Python source code by autodoc, form C++ source code by Doxygen and Breathe, and from OCaml source code by a preliminary version of my Sphinx extension for OCaml

My Python projects are distributed on the Python package index, and my OCaml projects are published on OPAM.

Projects filter:

PyGithub

Python Library

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

The main challenge is the size of the API: there are hundreds of endpoints, each with one to six HTTP verbs. 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

Python C++ Library Program Visualization

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

OCaml Visualization Web Program

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.

Collide

OCaml Visualization Program Mobile

Collide is an event-based simulation of elastic collisions between two-dimensional balls. An interactive demo is available.

It’s written in OCaml. The same core code is used to produce several applications:

The cairo-based drawing code is used on HTML5 canvases, PNG files and Gtk Cairo contexts thanks to my library JsOfOCairo. The OCaml bytecode is translated to JavaScript using js_of_ocaml and the resulting browser-based application is packaged using Cordova to produce the mobile application.

A prototype was written in C++.

IpMap

JavaScript Visualization Web

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.

I’ve recently improved my knowledge of the JavaScript language and ecosystem. I think this project would deserve some work to improve its code quality and maintainability. But I keep it here because it’s still working software.

ActionTree

Python Library

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

Python Library

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

OCaml Web Library

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 ocaml-cairo targeting HTML5 canvas elements as exposed to OCaml by js_of_ocaml.

hashids-ocaml

OCaml Library

hashids-ocaml is an 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.

Polyglot

Demo C++ Python JavaScript OCaml

Polyglot is a collection of examples of how to interface pieces of code written in different languages, and/or execute code in a runtime environment that’s not traditional for its language. Calling a C++ library from a Python program, or executing OCaml code in a web browser, are two examples amongst what Polyglot demonstrates.

It uses many different technologies to interface a few languages like C, C++, Python, OCaml and JavaScript.

QuadProgMm

C++ Library

QuadProgMm is a C++ library providing a domain specific language to express Quadratic programming problems as literal C++ equations on named variables.

It leverages the C++ type system to create a small domains specific language, and QuadProg++ to actually solve QP problems.

Hire me

Résumé

I hope you liked my portfolio and it made you want to work together! If yes, here is my résumé (PDF).

My dream job

I’m pretty flexible about administrative status: I can either invoice you as a freelancer, or, if you are a French company, I can join your payroll.

I aim at making the most of my time. Based on my work experience, I have identified below a few conditions that help me be as productive as possible. Of course this is just to give you a taste of what I’m looking for, and we don’t have to be a 100% match. If you think we could be a good fit, please send me an e-mail and let’s discuss working together!

Working from home

As my personal life is now organized around it, this is the most important for me. It gives me long uninterrupted focused work periods, the best for people on a maker schedule. Without the daily commute I feel less tired and I waste less time. This means I have more time for work and for myself.

I’ve been doing that for a few years now. Regularly scheduled video meetings have been enough to keep projects on track.

Focusing on building technical solutions…

I enjoy technical work. I like to dive deep in technical issues and create solutions as simple as possible. I wish to become a very potent expert rather than a manager, and I’m looking for a job that values that.

My team should have the freedom to choose appropriate technical solutions with no arbitrary technological constraints. It should be responsible for solving problems, and decide how (in the context allowed by said problem: there may be actual technological constraints.)

…for actual business problems

I need to understand the business big picture, to keep in mind why we are doing anything. The question of exactly what we should do, however, is probably better answered by domain specialists. Regular, bi-directional, communication with them is key to successful projects.

An application domain I enjoy

These are purely personal preferences with no value judgment. I would rather not work in a military or finance-related domain. I would be very happy to work in toys, hobby supplies, robots, software engineering tools, science. I would also like many other domains in the industry, transportations, tourism, culture… and many more I don’t even know exist.

High moral standards

This may seem obvious, but it is not. I’m looking for a job where laws and individuals are respected and that condemns any form of discrimination. Anyone should feel free to discuss ideas, behaviors and produced artifacts, and refrain from discussing people. There should be a culture of openness (about information and software) and knowledge spreading to reach a distributed technical excellence.