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
A Haskell build tool written in Nix. Fully incremental, reproducible, parallel, remote builds.
Painless dependencies for Nix projects. Simplify your code and streamline your workflow.
The Progressive Web App alternative for simple presentations.
50% TypeScript, 50% Haskell, and 100% Terraform and Nix.
Find more on GitHub.
Keep your Mac awake with caffeinate
Today I needed a way to prevent my Mac from going to sleep while downloading a big file. Turns out macOS has a convenient utility called
caffeinate that helps keep your Mac awake.
Dragging, Resizing and Rotating HTML elements: Fun with Web Components and Math
NixCon Talk: An Overview of Language Support in Nix
Last October I gave a talk at NixCon 2019 in Brno about the various approaches for language support in Nix. Here’s the video!
Recovering Nix derivation attributes of runtime dependencies
A coworker recently asked me to compile a list of licenses used at runtime by some of our build products. Most
nixpkgs derivations have a bunch of metadata associated with them, why not use that? Turns out it’s not that trivial.
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
CIO (which stands for Cached IO):
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 (
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).
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.
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.