William Blankenship
Filter: February,April,August
DNS over HTTPS using Pi-hole

Locking Down DNS

This guide walks you through getting PiHole setup with DNS over HTTPS on a Raspberry Pi.

PiHole is like an ad-blocker for your entire network! It works by intercepting DNS requests (the thing that takes human readable domain names like www.google.com and turns them into ip addresses and refuses to "resolve them" (tell your computer the ip address) when the domain name is for an advertiser.

On top of this awesomeness, this guide will also ensure all of your DNS requests are encrypted. DNS was never really designed to have privacy by default. Because of this, anybody looking at your network traffic (i.e. Comcast, AT&T, your neighbor who figured out your wifi password, etc.) can see what websites you visit! What we are going to do is, instead of doing a real DNS request when the computers on your network try to resolve DNS values, we are going to instead do an HTTPS request (the thing websites use) to fetch the values instead. This encrypts al


Dynamic Middleware in Node.js

A.K.A.: Creating Knobs and Levers for Operating Node.js Services at Runtime


If you came for a tutorial, skip ahead to the next section!

What do I mean when I say “making middleware dynamic?”

Many Node.js web frameworks use middleware. These have access to the request and response objects at specific points during the request-response cycle. Often times, middleware are created using constructor functions that take a configuration object. When I say I want to make middleware dynamic, I mean I want to change a middleware configuration (changing it’s behavior) after it’s been created, and I want to have those changes take effect immediately, all without having to cut a release and do a deploy.

The example I are going to use for this post: I have a middleware handler bodyParser that buffers a request payload into memory and deserializes it. One of the configuration


Making GitHub Repos Content Addressable

What do I mean by "content addressable"?

When you make a commit with git, and then type git log, you see something like this:

commit 2b399aa97fb9b0b713ba48a2423fb8dfc51589c8
Author: retrohacker <code@blankenship.io>
Date:   Sun Jun 16 14:44:30 2019 -0700

    add rss feed


That string of random-looking nubmers and characters after the word commit is the SHA-1 hash of the commit's metadata - such as the date, message, author, previous commit's hash (blockchain!), etc. - and the file contents of the commit. This means that SHA-1 is derived from the content of the commit. We want to use this SHA-1 as the "address" of the commit on GitHub so we can ask for it directly.

Newer versions of git allow you to fetch the SHA-1 directly, but GitHub doesn't appear to support this. What we can do instead is create a temporary [git ref](https://git-scm.com/


Does the complexity of the universe necessitate a creator?

I was presented with an argument for the existence of a creator this past week. Upon reflection, it's lead me down an interesting train of thought that I've decided to commit to paper. The argument is:

The universe is so complex, it must have been designed!

It is easy to perceive the universe as being carefully balanced to support the existence of life, almost as if it were designed to support life by one or more intelligent beings.

So let's start with the assumption that our universe was designed by an intelligent being.

First, let's assume that an intelligent being capable of designing our universe would be equally or more complex than our own universe. We find that we haven't actually explained away the complexity of our universe, we've only shifted it around and placed it into a complex intelligent being! At this point, we are confronted with the question: where did the intelligent being come from?

Following the same argument used for necessitating the intelligent being's


Stop Saying Technical Debt!

Problems with Technical Debt

Debt is a Four Letter Word

Technical debt is a negative word. It immediately frames the work as shitty but necessary.

Nobody likes technical debt. Very few people appreciate the work necessary to address technical debt. Most people don’t want to work on addressing technical debt, because the people around them don’t appreciate that work!

Debt is the Wrong Word

The word “debt” carries with it a ton of cruft that has no business being in the conversation when talking about tooling, architecture, etc.

Let’s look at the definition of debt:

2 : something owed : OBLIGATION
3 : a state of being under obligation to pay or repay someone or something in return for something received : a state of owing
4 law, business : the common-law action for the recovery of money held to be due

The first definition implies that you’ve done something wrong, and you must account for your transgressions. But who have you transgressed? The co


Creative Commons License This work by William Blankenship is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.