Nick Parker is a software engineer and CTO in Wellington NZ.
GitHub (work projects, occasional forks)
In my day job I mainly work on distributed systems, systems programming, and cat herding.
Listed below are some projects built in my spare time. They span many subjects, from audio to hardware to desktop applications, meant to fill a need or build something interesting.
Projects that are currently receiving active development and regular updates.
Networked software KVM for sending keyboard/mouse/touchpad events and clipboard contents between machines. Like Synergy, except with perceptably better latency, bidirectional certificate-based authentication, broader device support, large clipboard payloads of any type, and Wayland support. But Linux-only for now.
An RSS proxy that converts and serves Twitch streams and arbitrary webpages as RSS feeds. Webpage extraction and conversion to RSS is configured using CSS selector rules.
An adapter service that polls/accepts weather data from a Davis WeatherLink Live, writing the resulting data as topics on an MQTT broker. Supports both HTTP polling and UDP broadcasts.
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 complete set of Docker images, terraform modules, and associated documentation for deploying a Trino and Superset environment into a Kubernetes cluster. Includes preconfigured Hive Metastore for indexing, and MinIO/Postgres for persistence. Modular structure allows customizing and adding individual components as needed.
Five PCs and nine Raspberry Pis in a mixed-architecture Kubernetes cluster with combined 360GB RAM and 36TB storage. Used as a dev/testbed cluster for my own projects, along with scie.nz data science work using walden.
Deployment is managed using Ansible and Terraform. The nodes are running Talos Linux customized with Cilium, ingress-nginx, and iplookup. External access is via Wireguard.
Projects that aren't seeing as much activity anymore beyond occasional maintenance. This can be from lack of use, or because they're functionally feature complete as-is.
DNS proxy server with support for custom filters/overrides, local and Redis caching, and proxying upstream DNS-over-HTTPS/TLS servers for clients that do not support DoH/DoT natively. Like Pi-Hole but with everything in a single self-contained binary. See project tickets for a general roadmap of additional features.
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.
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.
Occasional contributions to existing projects as needed. A more complete list can be found via my GitHub profile (nickbp).
Ongoing maintenance with broad refactoring to support multitenant storage.
Fix session handling in the Java client, particularly when DNS is behaving poorly.
Fix segfault on 32-bit architectures, solving a bug in the external-dns Kubernetes project.