Taxman, an Australian Pay Calculator

Ad-free Australian salary, tax and mortgage calculators that run entirely in your browser.

Why Sentry events silently vanished from our Fargate Node app

Sentry events vanished from a Fargate Node app because Happy Eyeballs stalls on IPv6 with no route. Forcing IPv4 in the transport fixes it.

Bypassing AWS Lambda's 4 KB env var limit

Lambda caps environment variables at 4 KB. An AWS_LAMBDA_EXEC_WRAPPER binary that pulls SSM params at cold start gets around it.

CloudFront Anycast IP

AWS charges $3,000 a month for CloudFront Anycast IP. Testing shows it is a small static IP set, not anycast in any meaningful sense.

Australian SMS OTP Burner

Free Australian mobile numbers for receiving SMS one-time passcodes, built on the Telstra Messaging API's free receiving numbers.

WireGuard Setup

Setting up WireGuard end to end: interface, key pairs, IP forwarding, config files and a systemd unit for auto start.

Australian Tax Invoice Generator

A free Australian tax invoice generator that creates compliant PDF invoices in the browser, GST included, with nothing stored.

CloudFront Functions with Dynamic Origin Pointing to Another CloudFront

Using CloudFront Functions to dynamically change the origin to another CloudFront distribution via updateRequestOrigin.

Home Assistant with DSM7

Running Home Assistant Supervisor on DSM 7 with docker-compose, including the privileged flags and share paths it needs.

Run a debug prob in a kubernetes cluster with gatekeeper

When Gatekeeper blocks kubectl debug, kubectl run gets you the same throwaway shell, service account and all.

Capture bash command error in file

Tee stderr to a file for the next command while keeping the original exit code through PIPESTATUS, then annotate the build with it.

Lookup CMK for a test in CDK

CDK findResources cannot match a KMS key by alias. Tag the key policy statement with an sid and assert on that instead.

Extract TLD from string by bash

Extracting the registrable domain in bash with a short awk expression, so .com and .co.uk both come out right.

Old Twitter Deleter

A free web app that deletes your old tweets on a schedule, with no subscription and no local Python or OAuth setup.

Add HTTP auth username into envoy proxy logging

Adding the HTTP basic auth username to Envoy access logs with a Lua filter that base64 decodes the Authorization header.

Sony WH-1000XM4 noise issue

Static like wind noise from one cup of a six month old WH-1000XM4, an RMA that found nothing, and the silica gel fix from Reddit.

fargate container healthcheck

Fargate images have no curl, so the task definition health check uses wget, plus the jsonencode catch in Terraform templates.

Exclude a Kotlin subproject from Gradle Jacoco

Gradle Jacoco fails when a subproject has no test execution data. Filter the test tasks instead of finalising all of them.

TrueImage DS918+

Installing Acronis True Image on an unsupported DS918+ by hex editing the package arch string, then ignoring the CRC warning.

[BASH] Repeat Build Step

A bash function that stamps out the same YAML build step for every environment, so the pipeline file stays short.