How (and why) to sign Git commits
Authenticate your commits, plus get them the "Verified" badge on GitHub
Please everyone, stop writing your own user authentication code
It's time to adopt safer solutions, and save time and money
Watch: JavaScript apps going Inter-Planetary
My talk at Node+JS Interactive 2019
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
Your next app may not have a backend
A look at the JAMstack, and what could be next
Reinstalling pfSense and restoring from backup
When you have no other option to quickly bring your network back up
How to pass variables in Azure Pipelines YAML tasks
Passing variables between steps, jobs, and stages: explained
Cloud native, container-ready PHP
Building PHP apps and microservices for containers and high availability
Yes, you can run Docker on Raspbian
Very simple steps for getting Docker and Docker Compose on Raspberry Pi 2, 3 and 4
I loved jQuery, and still do
In defense of one of the most important JavaScript libraries ever
Getting TLS certificates from Azure Key Vault with Go
Whether you're using Go or another language, some advice and code to save you time
Hugo and IPFS: how this blog works (and scales to serve 5,000% spikes instantly!)
Learnings from real-world experience with IPFS, and the curious stack that powers this website
What happens to your digital life after you're gone? Introducing Hereditas
An open source static site generator for a fully-trustless digital legacy box
When "Zoë" !== "Zoë". Or why you need to normalize Unicode strings
Never heard of Unicode normalization? You’re not alone. But it will save you a lot of trouble.
Node.js web apps in Ubuntu, production-ready
Step-by-step instructions for running Node.js in production with systemd