Jacek's Blog

Software Engineering Consultant

Jacek Galowicz's Posts

Tags book c++ haskell metaprogramming nix purescript python testing

Single-Command Server Bootstrapping

April 5, 2023 nix

When you spin up a new VM or bare metal server at some cloud provider, what is the fastest and easiest way to get the server to run a certain configuration? In this article, I show how to do the partitioning, formatting, and installing a fully configured NixOS, starting from a random rescue system, in 5 minutes and with literally a single command: nixos-anywhere.

Read more


Quick VMs with NixOS

March 13, 2023 nix

Very often during development, it is useful to run your code in a scenario that is as near to a final deployment as possible, but not in some cloud environment where it’s hard to change specific parts without going through the full CI/CD chain. I find it very useful to quickly build, run, iterate, rebuild, and rerun VMs with NixOS Linux on my development machines. This week I demonstrate this aspect of my workflow with NixOS.

Read more


Simple Project Documentation with MkDocs, PlantUML, and PlantUML-C4 Integration

February 20, 2023 nix python

Technical documentation is tedious but important for every project. Hence, it should be easy to create, extend, and keep up to date. I tend to use the open-source tool MkDocs for projects. In this blog article, I share how to extend and package this tool with nice plugins that make documentation easier.

Read more


Simple(r) Heterogeneous Mapping of Records in Purescript

February 13, 2023 purescript metaprogramming

Two weeks ago, I blogged about the automatic heterogeneous zipping of records in PureScript. The code was longer than the manual version but at least less error-prone. After learning how to do it this way, I present a neat little library (not mine) that provides all the benefits without the downsides.

Read more


Constructing Parameterized Matrices with GNU Octave

February 6, 2023 c++ nix

This week I was dealing with image processing and linear algebra, and I needed a quick derivation of a specific kind of matrix. With GNU Octave to the rescue, this cost me only a few minutes! This article represents my notes from this little journey from the mathematical derivation of the matrix and the symbolic solution that I then ported to C++.

Read more


Interpolation of Records of Values in Purescript

January 30, 2023 purescript metaprogramming

This article is about a little interesting detour that I made in one of my personal projects: How to use strong type systems to generically apply a binary mathematical function on all items of a possibly nested record. The code provides interesting insights into other languages with similar type systems.

Read more


Mixed C++ Monorepo Project Structure Development and Build Workflow

January 23, 2023 c++ nix

Most big C++ projects lack a clear structure: They consist of multiple modules, but it is not as easy to create individually buildable, portable, testable, and reusable libraries from them, as it is with projects written in Rust, Go, Haskell, etc. In this article, I propose a C++ project structure using CMake that makes it easy to have incremental monorepo builds and a nice modular structure at the same time.

Read more


(Qt)Quick C++ Project Setup with Nix

January 16, 2023 nix c++

I never install toolchains globally on my systems. Instead, every project comes with its own nix file that describes the complete development toolchain versions and dependencies. This way, fresh checkouts always build the same way on every machine. This week I would like to show you how I set up a C++ project with the Qt Quick framework, and how to package the app and make it runnable for other nix users.

Read more


Automatic Testing of Display Resolution and Frame Drop Detection

January 9, 2023 nix python testing

This week, I like to share a project with you that started as a very interesting challenge and developed into an interdisciplinary, productive, and fun experience: A fully automatic multi-display end-to-end customer test prototype. In the end, it was surprising to see what parts of the code the most effort went into.

Read more


Book Review: Basic Forms of Anxiety

January 2, 2023 book

Software engineering, or generally IT jobs, are highly social because all big software projects or products are built by teams of professionals. When humans work with humans, all kinds of conflict can emerge, and they are often not as easy to fix as IT problems, especially in distributed teams with less offline human interaction. This article is about Fritz Riemann’s book “Anxiety”, which answers the question “What do people fear and how do they cope with it?”.

Read more

Newer Older