Archive of Tutorials

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 C...

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 u...

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 ...