Nicolas Mattia

I’m a Software Engineer based in Zurich.

I like functional programming, reproducible builds and “Infrastructure as Code”.

I’ve worked for a realtime messaging platform, as a consultant for a software innovation lab, and am now helping build a decentralized computing platform for the “Web 3.0”.

For more, check out my resume.


Some of my Work


snack

A Haskell build tool written in Nix. Fully incremental, reproducible, parallel, remote builds.

niv

Painless dependencies for Nix projects. Simplify your code and streamline your workflow.

DeckDeckGo

The Progressive Web App alternative for simple presentations.
50% TypeScript, 50% Haskell, and 100% Terraform and Nix.

Find more on GitHub.


Articles


Triggered CI Builds: Automatically Update your Project’s Dependencies

I wake up every Tuesday to several Pull Requests on my GitHub repositories. Those PRs are triggered automatically and update my repositories’ dependencies. By the time I get to the office, they’re merged. For this I use CircleCI’s scheduled builds, Nix and niv.

The 5 Raisons d’Être of Testing

I describe five of the reasons why I think tests are important:

  • Ensure that the code you’ve written works.
  • Ensure that the code you’ve written works tomorrow.
  • Ensure that the code you’ve written works elsewhere.
  • Spot usability issues early on.
  • Show how your feature is supposed to work, and how it should be used.

Easy Peasy Nix Versions

This is a convention for using third-party packages in Nix. It has a simple directory structure, makes using the packages straightforward and automatizes updates.

Hunt bugs down before they are merged!

I discuss a few reasons why catching bugs in master is more expensive than before they are merged, try to explain why some people think this isn’t true, and talk a bit about merge queues.

cio: cached HTTP requests for a smooth Jupyter experience!

This library provides a thin wrapper around the wreq library (a simple HTTP client library). It is meant to be used with Jupyter: all requests will be stored on disk and served from the cache subsequently, even if your kernel gets restarted. The cache lookups are near-instantaneous thanks to the amazing LevelDB library. You can use cio just like you would wreq – instead of importing Network.Wreq, import CIO (which stands for Cached IO):

Automatically generated directories for individual tasty tests

This is a hack practical trick for creating directories based on test names using the Haskell test framework tasty, as well as accessing the test names inside your tasty tests themselves.

Nix: A Reproducible Setup for Linux and macOS

This post describes how I set up a reproducible development environment in a few seconds on any Linux distribution (and potentially macOS as well). This setup includes simple executables (curl, git) but also programs with custom configurations and dotfiles (vim, tmux). The Nix language is used to describe the system configuration, which you can find on github and follow along.

A Fully Functional, Fully Functional Webapp

Last Tuesday I gave a 30 minute talk about building and packaging a webapp using functional-programming tools at the Web Zürich September Session. It’s a short introduction to using Haskell’s servant and reflex libraries for writing a webapp (using GHC and GHCJS). The webapp is packaged with the Nix package manager. It was a nice adventure discovering about reflex, servant-reflex and Nix’ quirks… big thanks to zimbatm for helping out.

Stutter: the anti-grep

I’m going to introduce stutter, a command line tool for generating strings. I’ll first show some examples, then talk a bit about the performance and finally about the implementation (for the Haskell friendly reader).

Haskell makefile library

I’ve just released a new version of makefile, the Haskell library for parsing and generating Makefiles. The new version is available on hackage and on stackage. The code is available on github.

Recovering forgotten passwords with stutter and GNU parallel

A few days ago I found myself with two terabytes’ worth of my personal data encrypted but only half of a password. Here are notes from the adventure.

Lens and Linear, 2048’s logic in 22 lines

Last week a friend of mine asked me how I would implement the game 2048 in Java (at least the update logic). It is actually a problem that can be solved elegantly in Haskell using a few Isos and Traversals.

Puzzle solving in Haskell

In order to warm up for a round of interviews next week, I’ve been playing around with coding puzzles. Those are usually solved using imperative languages, and I thought I’d have a go at them using Haskell. I’ll share today’s experience, which hopefully will convince you that purely functional languages are (sometimes) suitable for puzzles.

Parallel Computing with DNA

DNA. Everybody knows that DNA is the blueprint by which our cells replicate. Everybody knows that Horatio Caine uses it to catch bad guys. But… what if we used DNA to build supercomputers? That is definitely science-fiction… or is it? As I was working on DNA computing, I got my fair share of people staring at me like I was crazy. Someone even asked me if I could find a way to take a bird’s DNA to grow an optimal plane out of it. I thought I would demystify it a bit.