nickbp

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

Sourcehut (personal projects)

GitHub (work projects, occasional forks)

LinkedIn

E-Mail (nick@THISDOMAIN.COM)

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.

Active Projects

Projects that are currently receiving active development and regular updates.

nikau

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.

website/docs

force-rss

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.

project page

weatherlink-mqtt

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.

project page

weatherlink live API docs

bookstore

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.

project page

soundview

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.

project page

older C++ version

walden

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.

project page

Home Trino cluster

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.

scie.nz website

walden project page

Talos Linux

Cilium

ingress-nginx

iplookup project page

Stable Projects

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.

kapiti

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.

website/docs

project tickets

iplookup

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.

project page

STUN RFC

tokio-scgi

Codec for building and parsing SCGI requests in Rust, for use with the Tokio Async library.

project page

SCGI docs

finance-calc

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.

calculator

musicviz

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.

project page

Play Store app page

marky

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.

website/docs

gridmgr

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.

website/docs

bbusb

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.

website/docs

epson-powerswitch

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.

project page

Other software

Occasional contributions to existing projects as needed. A more complete list can be found via my GitHub profile (nickbp).

jaeger-clickhouse

Ongoing maintenance with broad refactoring to support multitenant storage.

project page

Apache Kafka

Fix session handling in the Java client, particularly when DNS is behaving poorly.

Apache Kafka

Session handling refactor PR

Istio

Fix segfault on 32-bit architectures, solving a bug in the external-dns Kubernetes project.

Istio

Segfault fix PR

external-dns bug