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