Tutorials

Recent Tutorials

Comparison: Flux vs Argo CD

21 minute read

Since February we have been working on adopting Kubernetes and cloud-native technologies for our cell simulation platform at Turbine.ai. Part of my job enta...

Lima VM - Linux Virtual Machines On macOS

2 minute read

WSL2 for macOS I like my mac book pro. It’s not an M1, just a 2019 X86 MacBook. But it’s Unix based and POSIX compliant. One thing though, it’s certainly ...

Introduction to AWS Networking

14 minute read

When you first create an AWS account a lot of resources get created for you by default. For starters, you’ll get a VPC in each region. In each of those you’...

When to use Bazel?

34 minute read

Introduction Here at Earthly, we care a lot about builds and talk to many people about their struggles with builds and CI. A frequent topic of conversatio...

Manage dotfiles from anywhere with Git

7 minute read

Have you ever found yourself in a situation where you had to format your computer and manually reinstall all the programs you were using? Or did you change ...

How Classes and Objects Work in Python

12 minute read

If you’re a developer looking to level up your Python skills, adding OOP to your Python box can be helpful. This tutorial will help you get started with obj...

15 Essential Linux Terminal Commands

15 minute read

Linux, a powerful, free, stable, secure, and highly customizable operating system, is essential for any developer’s workflow. The Linux terminal interacts w...

Kube-Bench

8 minute read

What Is CIS? CIS security is a community driven and non-profit organization that aims at improving security around the internet. It is the one that create...

Developer Tools for Kubernetes

11 minute read

When you get started on your path as a developer, you may notice from the beginning that there’s an abundance of different tools to choose from. At the same...

Building Pong in Your Terminal: Part Two

11 minute read

I’ve been trying to learn Golang recently. As a side project I’ve been building a version of Pong that you can play in your terminal. In Part One I showed ...

Cryptography & Encryption in Go

8 minute read

One of the biggest concerns for modern web developers is security. Whether your goal is protecting a user’s personal data, effectively authenticating a user...

Using Makefile Wildcards

6 minute read

Although many of the new modern programming frameworks, like Node.js and .NET, come with their own way of packaging and distributing their programs, there’s...

Terraform Route53 And DNS Fun

3 minute read

In my previous article about terraform I moved my lambda and all related infrastructure to Terraform. I even tested things by destroying everything and then...

Using AWS Graviton

7 minute read

Amazon Web Services (AWS) is one of the most popular—and comprehensive—cloud service providers. It has over 200 fully-featured services on offer. There are ...

Building Pong in Your Terminal: Part One

14 minute read

But Why? I’ve been trying to learn Golang lately. Previously, I wrote an article where I built an app for storing contacts that ran in the terminal using...

Docker Slim

7 minute read

Docker is an open containerization platform for developing, shipping, and running applications. It enables you to package your applications in isolated envi...

How to Use MongoDB with Go

11 minute read

Recently, NoSQL Databases like MongoDB, LevelDB, Redis, and others have been preferred for building and deploying applications. MongoDB is one of the most p...

S3 Terraform Backend

3 minute read

In the previous article I ported all my AWS infrastructure to Terraform. But in doing so, I was left tracking all my Terraform state in a terraform.tfstate ...

Pulumi vs Terraform

7 minute read

There once was a time when technicians manually provisioned application infrastructure. In recent years, as companies began rapidly expanding their infrastr…

Introduction to Pyscript

7 minute read

Introduction Python is widely used in so many applications, from data science to machine learning, robotics, and artificial intelligence. On the we..

Building in Kubernetes Using Tekton

9 minute read

Continuous integration/continuous delivery (CI/CD) principles offer multiple benefits to software organizations, including faster time to market, higher-qua...

Validate Your YAML (with CUE)

12 minute read

I’ve complained before about using YAML when a programming language is what’s needed. But, when you’ve got configuring to do, YAML is pretty useful. It’s so...

AWS Lambda Rest API Backend In Golang

8 minute read

Welcome back to a series on AWS Lambdas. Today I’ll be running a full REST HTTP API in a single lambda. Also, I’ll discuss why you might want to do so – the...

Guide to Kubernetes Networking

10 minute read

Kubernetes networking enables the components that make up the Kubernetes ecosystem, like containers, pods, and services, to communicate effectively with eac...

How Kubernetes Autoscaling Works

7 minute read

There are many reasons engineers look to Kubernetes when running their workloads, like support for containers and orchestration. Another major reason for ch...

How and When to Use Kubernetes Namespaces

6 minute read

When you start learning about Kubernetes, you quickly learn about the key components that you need in order to run your applications, such as pods, deployme...

Using Kubernetes Persistent Volumes

9 minute read

Kubernetes persistent volumes provide data storage for stateful applications. They abstract a storage system’s implementation from how it’s consumed by your...

Grpc, AWS Lambdas and GoLang

3 minute read

Previously, I built some GRPC things, and some AWS Lambda things, but can both be combined together? That is can I set up a go service, that runs as lambda...

Using Bash to Read Files

7 minute read

Bash (bourne again shell) scripts give you the ability to turn series of manual commands into an easily runnable and repeatable script. This can be especial...

Using Kubescape to Scan Kubernetes

7 minute read

Kubescape is a free tool that improves Kubernetes security by scanning clusters and detecting YAML files that are not compliant with security standards such...

How To Use Makefiles on Windows

7 minute read

As the field of DevOps and build release engineering continues to grow, many new tools are being developed to help make building and releasing applications ...

The Other Kind of Staff Software Engineer

11 minute read

Let’s talk about a career in tech, but not the usual boring stuff about salary or how to pass the interview process at the place with the most oversized com...

Getting Started With CMake

7 minute read

When it comes to packaging an application, there are many ways to do it. However, with languages that have been around as long as C and C++, the community h...

Earthly, Podman And Docker Compose

10 minute read

Podman is a daemon-less container engine for developing, managing, and running OCI containers on your Linux System. With podman, containers can either be ru...

AWS Lambda Golang With S3

11 minute read

Intro Last time, I built a Node.js lambda function running in a container. Running a container as a serverless application worked out great: it meant it w...

Using sed for Find and Replace

13 minute read

You need the ability to search and manipulate text on the command line, especially when performing repetitive tasks. This is what makes sed, or stream edito...

Running Python on Docker

6 minute read

Python is a versatile programming language, but running it can be a handful when you have to manage its dependencies—especially when you are sharing project...

Exploring Docker Alternatives

7 minute read

Docker sits proudly atop its niche, with an estimated 83 percent of the container software market. Development teams use it to make deploying software faste...

Using Loops In Bash

11 minute read

Like any other programming language, Bash supports loops. The loops are used to repeatedly execute a set of commands based on some condition. Along with con...

The Difference Between Docker and VMs

9 minute read

Docker and similar containerization technologies have taken the tech world by storm. They have largely displaced virtual machines (VMs) as the de facto segm...

Using Conditionals in Bash

15 minute read

Bash (bourne again shell) has been around since 1989 and owes its longevity to its usefulness and flexibility. While it’s the default login and command shel...

Write For Us

2 minute read

Join Writing Wait List We aren’t taking new writers at the moment but will be soon. Please fill out this form to join the wait-list. Do you love wri...

Running Containers on AWS Lambda

8 minute read

Most of the code I’ve had running on AWS’s cloud has been in docker containers, running in Kubernetes clusters. And from my perspective, AWS was invisible. ...

gRPC Gateway

13 minute read

Welcome back. I’m an experienced developer learning Golang. Last time I moved my service from REST to gRPC, but there are times when a simple REST end-point...

Building a Monorepo in Golang

8 minute read

A repository in Go traditionally contains a single Go Module, which lends naturally to a polyrepo setup – but what if you try to build multiple Golang proj...

CircleCI with Python and Django

16 minute read

I’m currently working on a project comparing different CI/CD pipelines, trying to get a better idea of what each offers, how they run, and how much it takes...

Using MongoDB with Docker

11 minute read

Docker is a powerful development platform that enables users to containerize software. These containers can be run on any machine, as well as in a public or...

How To Read A CSV File In Python

2 minute read

What Is A CSV File I first began to work with CSV files when taking the backend portion of my software engineering bootcamp curriculum. It wasn’t until I ...

Golang gRPC Example

17 minute read

Welcome back. I’m an experienced developer, learning Golang by building an activity tracker. Last time I added SQLite persistence. Today, I’m going to be p...

Understanding Docker Volumes

8 minute read

Docker is a common containerization solution that offers a user-friendly interface. It allows you to deploy your application as a lightweight process set ra...

Golang SQLite database/sql

14 minute read

Welcome back. I’m an experienced developer, learning Golang by building an activity tracker. Last time I made a command-line client to connect to the JSON ...

How to Use Docker for Your MySQL Database

9 minute read

Docker is among the more popular platforms for developing and deploying containerized applications. Containers are isolated environments that hold an applic...

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

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

8 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

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