This website

This website is built with Hakyll, a static site generator library in Haskell. I describe its architecture in this blog post and its source code is fully available on github.

Diverk

diverk is a frontend app fully written in Haskell. It is available online as well as on the Play Store. It allows you to browse a GitHub repository from your Android phone and is able to render markdown files.

Some context about the development of this project appears in this post.

Mprisqueeze

mprisqueeze is a wrapper to the software Squeezebox squeezelite. It starts squeezelite in the background and exposes an MPRIS interface to control it from any MPRIS client such as playerctl.

It is a project I have realized to learn Rust. I have written a blog post about this experience.

Systranything

systranything lets you put anything in your system tray. It uses a YAML file which describes the icon to put in the system tray, a context menu and callbacks as shell commands.

I use it to turn on and off my VPN, change my monitor and audio setup.

Bigball

bigball was my second real life Haskell project. When I was working for Scalian, we had this huge C++ project. Think about something with more than 300 subprojects (libraries or executables). It was tough dealing with such a huge code base and its complexity. There were a lot of dependencies between the projects, and we had no way to actually list them and view the dependency graph.

We needed a tool to help us to handle all these dependencies.

We were working with Microsoft Visual Studio. Its main file, also called the solution file, contains this graph. So this was just a matter of parsing this file, creating the dependency graph and for each project output a file with it.

The software wasn’t very difficult to write. All the required libraries were available on hackage. My workmates were pretty happy with it, and it was quickly integrated in our CI.

You can check it out on github.

Hscalendar

I started working on hscalendar because I was beginning to feel confident with Haskell. I already had implemented a few terminal games, and finished a whole bunch of coding-game challenges.

And now I needed something more ambitious, something that feels like a real life project.

I had this need for a specific tool in my previous work. At the end of each month we needed to report on a half-day basis on which project we have worked. I’ve been using a Google spreadsheet for this so far.

It is actually a very good fit. Well firstly because it answers an actual need that I have, so it’s very good for the motivation. And also it contains everything a programmer needs to know to be fluent in a programming language.

To summarize it’s got:

  • command line tools
  • web backend server
  • web frontend
  • database access
  • command line parsing
  • text parsing
  • external process launching
  • unit tests
  • deployment process

For the frontend, I’ve implemented it in Elm using the library haskell-to-elm.

I also spent some time to automate the deployment. When the compilation succeed and the tests pass, the CI builds a docker image and upload it on dockerhub. So deployment is now just a matter of pulling the latest image and restart the service.

The project has been a success as I’ve used it for more than six months without any trouble. This project has allowed me to get to use servant, lenses, RIO, QuickCheck. It was a great fun to learn all this.

Toys

Minihasklisp

minihasklisp is a small Lisp interpreter with minimal dependencies. It even uses its own applicative parser implementation. It is quite impressive to see how powerful such a small language can be.

Wolfram

wolfram is a simple implementation of elementary cellular automaton in Haskell. Have fun trying all the 255 rules!

Open source contributions

When I find the time, I like to contribute to open source projects. I made some modest contributions to these:

  • LDAP: This package provides LDAP interface code for Haskell programs, binding to the C LDAP API.
  • ldap-client: Pure Haskell LDAP client library implementing (the parts of) RFC 4511.
  • smos: a comprehensive self-management system
  • hatrace: scripted strace
  • path: support for well-typed paths in Haskell
  • termonad: a terminal emulator configurable in Haskell
  • hledger-flow: a command-line program that gives you a guided Hledger workflow
  • lib3ds: a free toolkit for handling the “3DS” format for 3D model files