Nick Parker is a software engineer and CTO in Wellington NZ.


Things I've made in my spare time. They span many subjects, from audio to hardware to desktop applications, and are typically just meant to scratch an itch or build something interesting.

In my day job, I mainly work on distributed systems and systems programming, with a sprinkling of devops when it's needed.


Service for trivially getting epubs onto a Kobo E-Reader. Upload from one device with automatic conversion to kepub, then download from the E-Reader's browser.

Desktop music visualizer that displays an efficient, hardware-accelerated voiceprint and analyzer for whatever audio is currently playing on the machine. Originally implemented in C++, then more recently in Rust. See the project page for demo videos.

A drop-in DNS proxy server, with support for adding custom filters, caching via Redis, and proxying upstream DNS-over-HTTPS/TLS servers for clients that do not support DoH/DoT internally. Like Pi-Hole but runs as a single self-contained binary. See project tickets for a general roadmap of additional features.

Home K8s cluster

Nine Raspberry Pi 4's running an ARMv8 Kubernetes cluster, paired with six ex-lease PCs with 64GB of RAM each. Used as a dev/testbed cluster for my own projects as well as data science work within using Trino, Minio, and Superset.

The nodes are running K3s customized with cert-manager, calico, ingress-nginx, and iplookup.

The hosts are managed using Ansible. The RPi nodes are attached to each other in a single "stack", all powered by a 5V Meanwell PSU via hand-soldered USB-C jumpers. Each node has a 500GB SSD over USB3 providing volume/container/log storage, with a separate SD card for the root filesystem.


Standalone Rust utility that retrieves and prints the machine's external IP by sending a STUN request to a specified server. More efficient and arguably safer than querying some rando's "what is my IP" website.

Codec for building and parsing SCGI requests in Rust, for use with the Tokio ASync library. Available as a crate.

A Javascript-based finance calculator which calculates and charts the income/expense over the lifetime of a savings account or loan. Easily configured to solve for any part of the equation, such as the starting balance, duration, payment amount, or interest rate.

A simple Android app that shows a streaming voiceprint of the currently playing audio, or of the microphone input if no audio is playing. Available for free in the Play Store.

A library and command line utility for efficient generation of Markov chains from arbitrary text. Includes built-in support for storing processed input data to a SQLite db for later retrieval.

Provides keyboard-bindable commands for easy window manipulation. Effectively a port of the "Grid" Compiz plugin, except designed to work with any EWMH-compliant X11 window manager, which is nearly all of them Also has commands for moving windows between monitors and directionally selecting windows.

A utility written in C for sending content to BetaBrite-compatible LED displays over USB. When run, it executes a list of commands, captures their stdout, and writes that to the display. This structure allows separation between generating content and getting it onto the display.

Arduino code that listens for an Epson projector's IR signal to power on/off, and enables/disables a power switch when that signal is detected. Useful for getting sane on/off behavior with Epson projectors.

Other software

Various contributions to existing projects as needed, such as: