Blog
A new architecture for Hereditas v0.3
A proposal for updating Hereditas
March 29, 2023
Essential Cryptography for JavaScript Developers
Here's what my second book is about, and why I wrote it
March 1, 2022
Why storing secrets and passwords in Git is a bad idea
And what you should do with your apps' secrets instead
May 7, 2021
Developing x86 apps on ARM with VS Code
Using Visual Studio Code remotes to develop on a different CPU architecture
March 11, 2021
Maybe we shouldn't want a fully decentralized web
Why I have stopped working with IPFS and the distributed web
November 12, 2020
Go, WebAssembly, HTTP requests and Promises
A guide to interacting with JavaScript from Go/Wasm
October 3, 2020
That time I accidentally built a spying app
A personal story about creating new products and their unintended consequences
September 24, 2020
Docker and Docker Compose on Raspberry Pi OS
How to install Docker on RPi 2, 3 and 4 with the new Raspberry Pi OS, for 32 and 64-bit
June 24, 2020
Is this a dependency or devDependency?
Where to put NPM modules in package.json: it's not as simple as it seems
June 7, 2020
How (and why) to sign Git commits
Authenticate your commits, plus get them the "Verified" badge on GitHub
May 17, 2020
Please everyone, stop writing your own user authentication code
It's time to adopt safer solutions, and save time and money
April 8, 2020
Watch: JavaScript apps going Inter-Planetary
My talk at Node+JS Interactive 2019
January 21, 2020
Auto-mounting encrypted drives with a remote key on Linux
Using dm-crypt and auto-mounting a drive without storing the key on the local disk
January 19, 2020
Your next app may not have a backend
A look at the JAMstack, and what could be next
November 16, 2019
Reinstalling pfSense and restoring from backup
When you have no other option to quickly bring your network back up
September 14, 2019