Resetting Github PAT for HACS

I had to reset all my tokens for Github recently because I’m dumb and accidentally pushed one to a code repository. This broke HACS on my Home Assistant install because the token wasn’t working and rather than gracefully handle that, or make it possible for users to re-enter it, it just dies. What I found is that you really should remove the HACS integration, restart HA and re-add the integration, which will prompt you to do the “Github Device” setup [Read More]

Logitech Unifying Receiver Stuttering

Well that was weird, I have been having loads of issues with my MX Master 3 for Mac stuttering and lagging and generally being a horrible experience. I have been using it with a unifying receiver plugged into my OWC Thunderbolt (4) Dock, which is sitting about 60cm away under my laptop stand. Turns out - that’s enough distance and electrical noise to cause the problem. I moved the receiver closer (using a port on my monitor arm) and it works fine now! [Read More]

Disabling Firefox Sponsored Links

In another strange turn, Firefox has been prompting people with sponsored relevant links in the address bar and on the “new tab” screen. This is how to disable it. I’m guessing I don’t see these things because I typically run a Pi-hole and the data can’t get through. Click in the address bar and type or paste about:config then hit enter. It’ll probably throw up a warning screen, click through it. [Read More]


If you get the LMIC_ERROR_TX_NOT_FEASIBLE error when doing TTNMapper or generally using the arduino-lmic library (my version is 3.3.0) then do this patch in src/lmic/lmic.c. This patch was shown to me by Chris from Accelerando Consulting. Original code: u1_t maxFlen = LMICbandplan_maxFrameLen(LMIC.datarate); if (flen > maxFlen) { LMICOS_logEventUint32("frame too long for this bandplan", ((u4_t)dlen << 16) | (flen << 8) | maxFlen); return 0; } New code adds a check for maxFlen: [Read More]

Course Syllabus for Making New Friends as an Adult

I wish a semi-sane version of this was real, to be quite honest. Course Objectives Making new friends as an adult is difficult, especially for students who have just turned thirty and are approaching the precipice of death. This class will teach you how to navigate this emotionally demanding field, so that you can finally make new friends who will never find out about that one time you ate mulch for seven dollars. [Read More]

Automatic RDP Certificate on Windows 10 Pro With LetsEncrypt

I’m sick of the “this doesn’t have a certificate” warnings. I: have a Windows 10 Pro machine want to use a LetsEncrypt certificate for RDP connections. don’t have an AD/IPA/whatever domain to join have the machine’s hostname in Cloudflare DNS In this example I’ll use as the hostname I’ll connect to, change this for your own hostname. Install CertifyTheWeb. Copy this powershell script to somewhere you won’t delete it (eg. [Read More]

Design vs Implementation

I’m trying to make a small pogo-pin jig so that I can program the ESP8266’s that make up a lot of projects I play with. Similar to the design in the article “Pogo Pins Make Light Work of IoT Switches”, I want some modules I can clamp over the top of things like the Sonoff Basic R3 or the D1 Mini without soldering on wires or pins. The one I’m having the most fun with lately is the DETA wall switches - I can’t stand doing fiddly OTA updates - serial flashing my favourite build is just easier. [Read More]

Disappointing Padlocks

I have some tool boxes that have ammunition in them and I’m not exactly sure where they keys are. I figured I’d set myself the challenge to open them with the lock picks I bought years ago and never used. Literally pushed a pick all the way in once and the first lock popped open. Laaaame. Second one took about ten seconds of random jiggling. The LockPickingLawyer would be suitably ambivalent about them - I didn’t expect much from home-brand locks I bought from a place literally called “Super Cheap Auto” [Read More]

Monitoring cloudflared for fun and profit

This is a very hacky script for monitoring cloudflared, it requires curl and jq, which I think you should have on there anyway You need the following line in the config.yml file, which sets cloudflared to expose the metrics/monitoring endpoint, or --metrics localhost:40355 on the command line: metrics: localhost:40355 And… here’s the script. TL;DR, it checks the /ready endpoint, which returns {"status":200,"readyConnections":4} on good, or a 503 on not-working. #!/bin/bash SYSTEMD_TOPIC="cloudflared_monitoring" METRICS_PORT="40355" CLOUDFLARED_STATUS="$( curl --silent --max-time 5 "http://localhost:${METRICS_PORT}/ready" | jq -r '. [Read More]

Apple M1, terraform and golang

I was trying to apply a messy terraform config recently and kept running across an issue where the AWS provider would seemingly just get itself hung, using ~150% CPU. Killing it, deleting the terraform.tfstate and init/refresh/apply seemed to make it work sometimes. I thought I was having network connection issues, as it’d hang in random parts of a refresh or something like that. The cause Turns out it’s an issue with Rosetta 2 and golang fighting. [Read More]