I’ve been maintaining a little server that runs docker containers hosting very small, static websites for a few years. Doing so gave me an opportunity to build with docker and work with a system ba...
Versioning a system makes it easier for a person to tie running code in production with the exact code in the repository. It is also a great way to signal when code is adding new features or introd...
When searching for solutions for paging documents in CosmosDB using the default API provider (SQL API), continuation tokens come up a lot. They seem great for features like an infinite scroll where...
The fact that Microsoft provides a local CosmosDB emulator is amazing. We don’t have to pay to run an instance for development and we don’t need to expose the cloud database to the general internet...
Naming public properties in .NET is usually done using Pascal case. However, CosmosDB uses camel case for special properties on an object such as “id”. So how do we square this circle? Looking at t...
I recently set up an OpenVPN server on an OpenWrt router. It worked until I put too many processes on that poor little machine. It only has one CPU core running at 480MHz and 64MB of RAM after all....
I recently set up a new router with OpenWrt and installed an OpenVPN server on it. In order to easily connect to that OpenVPN server when I’m on the move, I need to set up dynamic DNS support. I us...
I recently set up an OpenWrt router in my house and now I would like to get a VPN server running on it. Here are the steps I took to get a simple OpenVPN server running on my OpenWrt router using t...
Easy-RSA 3 makes it… easy… to set up a custom Certificate Authority (CA). I used this procedure to set up a CA and certificates for my OpenVPN system. I used zsh on Ubuntu 19.10. I chose to generat...
I’m not a fan of the purple that Ubuntu puts on the lock screen. Time to update it! I’m using Ubuntu 19.10 with Gnome. Gnome uses CSS for many of its styles and, lucky for me, that includes the bac...
I used this to update the background from the garish purple to a custom image using Ubuntu 19.10. First, move an image to /boot/grub. According to the Grub Manual, the background image must end wit...
I’ve been using an ASUS router that had an OpenVPN server. However, the router firmware did not allow using SSL certs as the form of authentication and I had to maintain usernames and passwords for...
Recipe 9 pounds 2-row 1 pound crystal 10L 0.5 ounces Nugget pellets 1 ounce Centennial pellets 1 ounce Simcoe pellets 1 packet SafAle US-05 Hop Schedule60 minutes 0.25 oz Nugget pellets 20 minute...
I’ve been using a ThinkPad as my daily driver for a while now and absolutely love how the keyboard feels. However, I miss my dedicated Menu key. Thankfully, any Linux distribution running an X wind...
As of Go 1.10, vet is run when go test is run. Unfortunately, vet requires gcc which is not installed in Alpine docker images. In order to run tests using the Alpine linux base image, golang:1.13-a...
I just started building an app in Golang that scrapes some mountain bike outlet sites and sends me an email with any updates. Since my home server runs everything in Docker, I thought I would wrap ...
I’ve been paying between $10 and $12 per month for a t2.micro EC2 instance for a while now. It has a single, virtual core, 1GB of ram, and 10G of storage. It was the cheapest thing I could find on ...
I recently started working on a new team within the same company. Some are new hires, some are veterans, all are ready to get into team mode and get some stuff done. We recently went out on a team...
Sometimes the easy way only slaps you in the face after hacking your way down the hard path… Over this past weekend I undertook the (seemingly simple) task of building a standing desk. The old sitt...
The packages Microsoft.Extensions.Configuration and Microsoft.Extensions.Configuration.Json provide an easy way to load JSON configuration files into .NET Core applications. ASP.NET Core apps have ...
As part of my home server setup, I also wanted the ability to set up my own DNS entries for services I was running. Even better, I wanted my own top-level domain. Why? Why not? I found an Alpine Li...
My team at work started working with Docker for Windows (version 17.12.0-ce-win47) recently. All of my side projects have been based in Linux, so it took a little bit to get used to working with it...
I just pulled the trigger on migrating this site to use a multi-stage Docker build instead of TravisCI pushing into a deploy branch that then triggered a build on Docker Hub. It feels awesome. Than...
I just tried to install Docker CE on my new Elementary OS install (0.4.1 Loki) following the steps outlined on the Docker docs web site and ran into a small issue. The scripts provided use lsb_rele...
I won a decommissioned engineering laptop from work a while back. I had upgraded the Windows 7 install that was originally on it to Windows 10 because it was free. However, I already had a Windows ...
FOUR letter acronyms?!?! I thought we agreed to stick with THREE letter acronyms! I can think of a few choice four letter words to describe my experience with my RAID setup. But first. . . what are...
In early 2012 I built myself a nice mid-tower with an AMD FX-8120 (Bulldozer), 16GB of RAM, and a video card that made my gaming friends cringe. I wasn’t interested in playing games, I wanted to pl...
A few months ago, I was working on a build pipeline for GitBook based on Docker. The basic concept was to have a Linux build agent that would build Docker containers and push them to a repository. ...
Long-lived branches or forks of code take on a life of their own away from an active mainline such as master or trunk. Someone may commit code to the mainline that conflicts with changes made in th...
When using tools like Grunt, Gulp, Webpack, or Hexo.io, the best practice has been to install a CLI (command line interface) package globally using npm install -g. If you’re working on a bunch of p...
I was recently writing a bash script to set up a new server I was going to spin up. I like to script out server setups and test them on local VMs before setting up the final production version. I w...
I was reviewing my NGINX access logs recently and found, to my surprise, hundreds of requests to Wordpress endpoints. Since I was only running a couple NodeJS apps and no Wordpress on this server, ...
What was I thinking?I had been toying with the idea of putting a second router on the network for years. You are probably familiar all the different forms of procrastination I used, so I’ll just sk...