Archive of Tutorials

Stop Using Pie-Charts

7 minute read

What’s Wrong With Pie Charts Humans have a hard time comparing areas. Try it for yourself: Which slice is the largest? Which is the smallest? Can yo...

Command Line JSON Client In Golang

11 minute read

I’m an experienced software developer learning Golang by building an activity tracker1. I want a low-effort way to track my physical activity, and building ...

Effective Error Handling in Golang

9 minute read

Error handling in Go is a little different than other mainstream programming languages like Java, JavaScript, or Python. Go’s built-in errors don’t contain ...

The Complete Guide to Docker Secrets

6 minute read

Even if you’ve used Docker for your smaller or locally developed software, you might find that it can be daunting for more complex tasks. This can especiall...

Building a Golang JSON HTTP Server

9 minute read

If you want to build a simple JSON HTTP web service that runs natively on a Linux server, then Golang is a great choice. At least this is what I’ve been tol...

Podman: The Rootless Docker Alternative

7 minute read

For many developers, Docker was their first exposure to the wonderful world of containers. Containers have changed the way we develop and ship software, and...

Property-Based Testing In Go

7 minute read

Have you ever wanted your unit tests written for you? Property based testing is a powerful testing technique that, in a sense, is just that. You describe th...

Exploring Travis CI Alternatives

8 minute read

Travis CI is one of the best known continuous integration (CI) tools on the market. It was founded in 2011 to automate builds and tests for Ruby, but now su...

Using Spinnaker for Kubernetes Deployments

9 minute read

Kubernetes has become the standard for deploying and managing containerized applications, but there are a lot of questions to be answered in the cloud nativ...

Jenkins Deployment Stages and Pipelines

9 minute read

The software release cycle has developed over time, from the days of moving code from one machine to another to see if it works (which was frequently error-...

Using AWK with CSV Files

3 minute read

When the AWK tutorial came out, one of the questions on hacker news was how you use AWK with CSV (comma-separated value) files. The thing that prevents a...

Using ArgoCD for Kubernetes Deployments

8 minute read

Kubernetes has simplified the container management process for microservice applications, but developers often face challenges when using this notoriously c...

Understanding Bash Variables

7 minute read

Bash is not just a UNIX shell, it’s also a programming language. And like most programming languages, it has variables. You use these shell variables when...

Bash String Manipulation

9 minute read

One thing that bash is excellent at is manipulating strings of text. If you’re at the command line or writing a small script, then knowing some bash string...

Using Travis CI with Bitbucket

8 minute read

CI/CD (continuous integration / continuous delivery) helps development teams optimize software quality tests before delivering committed changes into produc...

How I Saved $5,000/mo with a $5 Droplet

8 minute read

On November 20, 2020 Docker began rate limiting requests to its popular Docker Hub registry. This change applied to all users, anonymous or free. When this ...

Understanding AWK

26 minute read

It turns out Awk is pretty simple. It has only a couple of conventions and only a small amount of syntax. It’s straightforward to learn, and once you underst...

Understanding and Using Makefile Flags

8 minute read

make is a commonplace utility in the development world. It automates the process of generating executables, documentations, and other non-source files from ...

An Introduction to JQ

18 minute read

Background: Fingers, Head, and Google Whenever I reach a stopping point in my work, I use a bash alias called gwip1 to create a ‘work in progress’ commi...

Install matplotlib In A Docker Container

1 minute read

matplotlib is an excellent library for creating graphs and visualizations in Python. For example, I used it to generate the performance graphs in my merging...

Creating a Golang Makefile

6 minute read

Building and testing any large codebase is time-consuming, error-prone, and repetitive. Golang supports multi-platform builds, which is excellent, but it n...

Beating TimSort at Merging

7 minute read

Here is a problem. You are tasked with improving the hot loop of a Python program: maybe it is an in-memory sequential index of some sort. The slow part is...

Creating a Python Makefile

10 minute read

Even though Python is regarded as an interpreted language and the files need not be compiled separately, many developers are unaware that you can still use ...

Python Concatenate Lists

5 minute read

Concatenate Two Lists in Python Problem: You have two lists and you’d like to join them into a new list. Solution: Python 3.8.2 >>> one = [&q...

Creating a G++ Makefile

10 minute read

C++ is one of the most dominant programming languages. Although there are many compilers available, GCC still ranks as one of the most popular choices for ...

Linting Markdown And Documentation

8 minute read

Many linting, code formatting, and static analysis tools exist for code. You can use eslint, gofmt, or many other static analysis tools, combined with a gre...

Understanding Docker Multistage Builds

7 minute read

At first glance, writing Dockerfiles appears to be a straightforward process. After all, most basic examples reflect the same set of steps. However, not all...

Building a Monorepo with Bazel

11 minute read

A monorepo is perhaps what you would expect from the name: a single code repository for your entire codebase. Wikipedia describes it as a decade-old softw...

Understanding Docker Networking

16 minute read

Docker is the de facto model for building and running containers at scale in most enterprise organizations today. At a very high level, Docker is a combinat...

Addressing Slow Performance in Jenkins

8 minute read

There’s nothing more frustrating than a sluggish continuous integration system. It slows down feedback loops and prevents code from reaching production quic...

Understanding Bash

10 minute read

Bash scripts give you the ability to turn a tedious series of commands into an easily runnable and repeatable script. With many real-world use cases, like ...

Understanding Docker Logging and Log Files

14 minute read

Docker logging and its management are an important part of the containerization of your application. Once you’ve deployed your application, logging is one o...

What is Buildkit?

10 minute read

There is an excellent open-source project that you have probably used without realizing it. It’s called BuildKit, and it is what turns a Dockerfile into a D...

Encrypting Data With SSH Keys and Golang

3 minute read

We’re currently working on a server for sharing secrets between developers and CI systems, and one of the features we decided to support is passwordless log...

Using gRPC with Golang, Python, and Ruby

6 minute read

I was surprised to learn that Google protocol buffers (protobufs), were first introduced nearly two decades ago. They were used internally at google as earl...

Can We Build Better?

4 minute read

Have you ever had a test fail in the build but not locally? I have. Have you ever then burnt half a day pushing small changes and waiting for your build to ...