CloudFlare Log Search

Pulling request logs out of Cloudflare with the log API: zone ID, scoped API key, the field list and a worked curl query.

AWS TGW VPN using Unify UDM

Attaching a UniFi UDM to an AWS Transit Gateway over VPN, using static routing because the UDM does not speak BGP.

Amazon SES with Postfix in Ubuntu

Relaying mail through Amazon SES from Postfix on Ubuntu, filling in the steps the AWS documentation leaves out.

Selenoid Parallel CI testing

Running Selenoid beside the test runner in CI for parallel browser tests, with video recording and one Selenoid per build agent.

Salesforce CLI with Docker in AWS

Running the Salesforce CLI in Docker on AWS, with the browser-based auth replaced by an auth URL kept in SSM Parameter Store.

Pooq Proxy

Watching Pooq from Australia with a Korean Lightsail host, an nginx proxy and dnsmasq entries, good enough for 4K over NBN.

Generate custom x509 certificate in Okta

Generating a custom x509 certificate for an Okta app over the API, capturing the kid, and injecting it back into the app.

Selenium test with docker-compose

A docker-compose file and matching Nightwatch config for running Selenium standalone Chrome next to the app under test.

AWS KMS - two liners

Two-line AWS CLI recipes for encrypting and decrypting with KMS, for both binary and base64 ciphertext.

User Profile Service failed the logon. User profile cannot be loaded.

The Windows user profile service logon error, the Microsoft article for it, and the default profile file you have to ask support for.

Curl net performance test

Curl scripts that log the CloudFront X-Amz-Cf-Id whenever a response is slower than a threshold, plus a full connection timing breakdown.

Replace Mercedes-Benz B250 cabin(pollen) filter replacement DIY

A dealer quoted $300 for a Mercedes B250 cabin filter. A German eBay seller wanted $42, and the swap takes ten minutes with no tools.

MongoDB to DynamoDB

Moving a large MongoDB dump into DynamoDB with dyngodb2, including the sed passes and file splitting needed to survive the JSON format.

Europe Travel 2016

Three weeks through Turkey, Greece, Hungary, Poland, Czech, Germany, Italy, Switzerland, Austria, France, the UK and the Netherlands.

Lets Encrypt nginx SSL certificate renewal via cron

Renewing a Let's Encrypt certificate from cron with the webroot plugin, the matching nginx SSL block, and a stronger dhparam.

F5 AAM Cache for app generated pages

Caching app generated pages on F5 AAM: the headers it needs, the policy setting that honours them, and the debug commands.

Run HTTP POST request from chrome developer tools

Firing an ad-hoc HTTP POST from the Chrome devtools console with XMLHttpRequest, and why to load a same-origin page first.

Had a car accident in Victoria? Well, too bad.

What TAC actually covers after a Victorian crash that was not your fault, and the income and loss gaps you are left carrying.

Contract position

Contracting pays about 30% more, but super, agency fee, annual and personal leave eat about 25% of it. The maths on whether it is worth it.

Unlock Optus ZTE F286

Unlocking an Optus ZTE F286 with a generated NCK code and a dial string, instead of paying an unlock service for a $15 phone.