Paul's page

Hacker, tech-entrepreneur

WebAuthn & Base64 encoding

I recently ran into a problem that seems to be present in a wide range of WebAuthn tutorials, but I don’t know where it originated.

SSH PKI on top of Web PKI

Reading Future Internet PKI schemes need to be bootstrapped through web PKI I was reminded by all the problems I’ve had with SSH (Secure SHell) PKI (Public Key Infrastructure). SSH host verification is trust-on-first-use (TOFU). So SSH is protected from man-in-the-middle (MITM) attacks unless the first connection falls prey to the attack.

Molly Guard for Ansible

The Jargon File defines Molly Guard as: A shield to prevent tripping of some Big Red Switch by clumsy or ignorant hands. Originally used of the plexiglass covers improvised for the BRS on an IBM 4341 after a programmer’s toddler daughter (named Molly) frobbed it twice in one day. Later generalized to covers over stop/reset switches on disk drives and networking equipment. In hardware catalogues, you’ll see the much less interesting description “guarded button”.

Menu-driven Matrix Bot Interaction

I’m a huge fan of Matrix. A lot of the user value of modern chat platforms like Slack, Matrix and Discord (even IRC) comes from integrations to other services via bots. I had high hopes for MSC3006: Bot Interactions, but unfortunately it isn’t currently being pushed further. However, there exists an implementation of MSC3381: Polls.

Selectively running single role in Ansible

While I’ve been switching from Ansible to Nix lately, I still use Ansible and have written a fair share of Ansible YAML. A common trick I’ve used is to only run a specific Ansible role instead of the whole playbook. That can be achieved by using tags, but usually I haven’t tagged everything before I have the need.

Shorter wrapped error handling in Go

With Go 1.13 error wrapping was standardised with an interface in the standard library. When properly handling errors, you end up dealing with it a lot. The blog post suggests the following: var e *QueryError if errors.As(err, &e) { // err is a *QueryError, and e is set to the error's value }

Generic pointer of value with Go

I’ve been writing a decent amount of Go during the past 8 years. While I like many things about Go, some of the design choices result in repetitive or longer than necessary code.

GlitchTip on arm64

Why does everything have to be so hard on arm64? Well, maybe not directly hard, but a lot more work. And the reason is simple, we live almost in a amd64 monoculture. Mobile phones are changing that, as is Apple M1, but also arm64 servers.

Roborock S6 Pure Troubleshooting

We have a Roborock S6 Pure robotic vacuum cleaner. It’s very nice having a device that more or less cleans the floors by itself. When it works. Ours stopped working a week ago, after working well for months.

Matrix Bot for the reMarkable eInk Tablet

I own a reMarkable 2 (referral link) eInk tablet. It’s pretty nice (except lately the manufacturer has tacked on a subscription service). And it can send documents as PDFs via email. But unlike the Kindle, you cannot send documents to the tablet via email. Well, there exists a third party service. I saw someone post on reddit that they wrote a Telegram bot that can be used to upload documents to their reMarkable. That sounded interesting, but I’m partial to Matrix.