Image for post
Image for post
Photo by Andrés Gómez on Unsplash

(This post is also published as presentation: video here / slides here)

If you’ve ever worked at a high-growth software engineering company, you might have heard a conversation about technical debt that goes like this:

Person A: “We could release so much faster if we just did X…”
Person B: “That makes sense — so why haven’t you done it?”
Person A: “Well, with all this feature work, we just don’t have time.”

Or comments like this:

“We really need to do this. We should just stop all feature work until we fix this.”

I’ve been on both sides of the fence with these situations — and when I’ve been on the receiving end (Person B above), fixing the problem is almost always well justified with sound logic yet doesn’t always get the “buy-in” it needs! …

Image for post
Image for post
Photo by Annie Spratt on Unplash

There’s a lot of great content out there for learning Go — so much, in fact, that I often get asked for a list of resources people should look at. Whether you’re a beginner programmer or experienced engineer, if you’re interested in learning Go here’s what I recommend checking out — roughly in the order given.

Installing Go

Editors/IDE’s & Plugins

Free & Open Source:

If you’re interested in learning the Go programming language, this guide will walk you through how to set up a brand new Mac step-by-step, with all the tools you’ll need to write and run Go programs.

In this guide will cover how to:

  1. Download & Install Go; the programming language tools/binaries.
  2. Download & Install a Code Editor; a tool to write Go code in.
  3. Create Your Go Workspace; a place to store your code.
  4. Write Your First Go Program; a simple “hello world” program.

Let’s begin!

1. Download & Install Go

Installing Go

Download Go for “Apple macOS” from:

Double-click on the downloaded file (e.g. go1.10.2.darwin-amd64.pkg) …

Image for post
Image for post
Photo by Thomas Kvistholt on Unsplash

Go has an amazing standard library; building web servers and working with JSON doesn’t require any 3rd-party code — but for complex applications, you’ll find yourself exploring 3rd-party packages. Many newcomers to Go frequently ask me which packages I most commonly use outside of the standard library — so here is my list!

Dependency Manager

Dep will help you manage all of the packages you’re using — an appropriate first entry in my list :)

Don’t be put off by the words “official experiment” in its README. Dep is the best tool for your production-ready code right now.

Image for post
Image for post
Photo by Jad Limcaco on Unsplash

Have you ever wanted to keep a Docker container running after it finishes running a script? e.g. if your container exits once your script finishes it will result in rolling restarts (which probably sends you a bunch of alerts — yay!).

Well, good person, I have some shell script magic for you!

Disclaimer: in this scenario, you should always assume that the container may run multiple times (e.g. machine dies and container gets rescheduled elsewhere). Here we just want to prevent it restarting constantly and unnecessarily alerting people.

Important background knowledge

First, some background on Docker & signals:

  • Running docker stop [container]will (by default) send it a SIGTERM. …

Image for post
Image for post
Photo by Yuriy Rzhemovskiy

I’ve always wondered if I could turn a Chromebook into a full-time development machine, so I recently started tinkering with Crouton to get a Linux CLI running.

Crouton creates a chroot environment and installs a distribution such as Debian or Ubuntu. It even let’s you run a full X server and get a GUI like Xfce — but my initial impression of this was that it’s a little buggy, and personally I don’t really mind the Chrome OS GUI, I just want a Linux shell.

Finally, rather than back up my Chromebook using traditional file syncing methods, I wanted to use configuration management and Git to keep all of my configuration and code copied across multiple machine; this has the advantage that if I accidentally reset my machine (switching Chromebook out of Developer Mode will wipe it), I can quickly bring it back to a good state. Also it allows me to run multiple Chromebooks or Linux VMs (e.g. …

Recently I migrated a network of Mac Mini’s to Chrome OS, running on ASUS Chromebox Celeron 2955U’s (a Chromebox is the desktop version of the Chromebook).

The setup works great since users rely on Google Apps/Drive and various SaaS products for operating their business. However, businesses like to print, so I had to connect their ‘classic’ printers to Google Cloud Print.

If your network still has a PC or Mac connected to your printers with Chrome installed, all you need to do is run Chrome as a Google Cloud Print proxy (GCP proxy). I decided to re-purpose one of the old Mac Mini’s as a headless print server/Google Cloud Print proxy (to discourage everyday desktop use of the old Mac!), …

In recent years I’ve tried and used several PaaS offerings; AWS Elastic Beanstalk, Google App Engine and Heroku. Yesterday I finally had a chance to try OpenShift by Red Hat, and was pleasantly surprised by a few particular details. Here’s a quick summary:

The free tier
Like Heroku, the free tier offered will idle with inactivity. If that’s cool with you, the free tier is pretty great — for example, you can add multiple domain aliases and host a multi-site CMS using your own domains.

Custom SSL certificates
If you’ve upgraded to a paid plan, this is an option and it’s super easy to upload certs. …

Last December Let’s Encrypt entered public beta, opening free SSL Certificates to the world! The service is designed to automate the process of issuing certificates, and certificates expire every 90 days.

While the automation looks fantastic, today I found myself in need of a certificate for a website that’s about to be migrated away, and currently hosted on an immutable server. I decided to manually issue a certificate using the letsencrypt client running on my Mac (OS X 10.11).

The first step was to download the client and run the ‘certonly — manual’ command:

git clone
cd letsencrypt
./letsencrypt-auto certonly --manual --debug --email -d …


Ryan D

#DevOps, #Security, Go (#golang), #Linux, #Docker, #Kubernetes. DevOps Manager @Xero. Previously: DevTools Engineering Manager @Cloudflare. Opinions are my own.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store