Today marks the final day of my second month-long blogging challenge. The first was in August last...
This is not about improving productivity, but rather a simple but bottom-up hack to improve personal...
I learned how to cross-compile Haskell projects under NixOS using Docker images for ARM...
I use the terminal. Not because I am a command-line wizard or particularly efficient with it, but...
Today, I upgraded my NixOS system to the latest version, v25.05. It went smoothly. I just want to...
Boring work is often the most effective work. It is the kind of work that might lead us to understand...
A glimpse into my shell history reveals the tools I rely on daily. These are not curated -- just raw,...
Computer programs are best understood in terms of the data they consume, process and produce....
Among all Haskell libraries I have used, the one I reach for the most is autodocodec. I will explain...
I have mentioned a few times in my posts that Haskell is my go-to language. This is true even for...
This post explores how to hack an mdBook project with scripts. A few days back, I wrote a blog post...
This post introduces my Haskell project template powered by Nix Flakes -- a simple setup I use to...
This post is a quick, technical note on how to set up deadman checks in Grafana with InfluxDB as the...
Let me tell you the conclusion up-front: Complexity is not inherently bad. The complications are the...
Continuing on the topic of template engines, I would like to share my thoughts on the power of...
I believe that there is value in thinking in templates when it comes to programming. I will try to...
This-driven development, that-driven development, and now you should bother with this other thing? I...
This post is a summary of my recent decision to go back to Hugo after using Zola. I also report on...
While programming, we often aim to avoid repetition. Repetition is boring, and ironically, much of...
In my blog post yesterday, I mentioned fzf. Its simplicity and power make it a good tool for many...
Today is a lazy Sunday, and I did what nobody should do on a Sunday: Spend time trying to replace...
This post explains why and how I use GitHub for nearly everything. I will also explain how I use...
I started using Watson with low expectations. Two and a half years later, it is still one of the few...
I bumped into an annoying issue today while upgrading my Python dependencies in a codebase. And I...
After a few years of floating from one hack to another, this is my practical guide to setting up a...
Nix is now central to how I structure my workstation setups and manage development and production...
I have started adopting OpenTelemetry in my workshop to unify metrics, logs, and traces. This post...
This post is about data snapshots, backups and archives, why we create and keep them, and how this...
This post shows how to use Vector to capture and persist webhook events -- like those from SendGrid...
In this post, I share why I value linters and formatters, and how I migrate from traditional Python...