Certificates chain correct order

Certificates in a chain file should start with the “final” certificate (the cert issued to you). Each following certificate should be the issuer of the previous one.

2022-08-04 · 1 min · 125 words

Optimize large Django migrations

Sometimes more is less.

2022-03-31 · 3 min · 489 words

Releasing my works into the public domain

All my existing software projects and the articles in this blog have been released into the public domain.

2022-01-02 · 3 min · 514 words

My Setup at Home (12/2021 update)

Here’s the tech I use at home and what for.

2021-12-28 · 2 min · 315 words

Automate bug findings with git

🔍 Git bisect When you’re trying to troubleshoot a bug, finding the original commit is often helpful as it gives you context. Enters git bisect! If you haven’t already, consider taking a short detour to the documentation. This command uses a binary search algorithm to find which commit in your project’s history introduced a bug. 🤙 The manual way git bisect works by taking a “good” commit and a “bad” one and from there it will checkout a commit in between....

2021-12-22 · 2 min · 289 words

Chowning files can take a lot of space in a Docker image

Today I learned that recursively changing the owner of a directory tree in a Dockerfile can result in some serious increase in image size. 🚛 The issue You may remember how in a previous post we used a small example to discuss layers and final image size. Well, here’s our example again, slightly modified. # Dockerfile FROM ubuntu WORKDIR /app RUN fallocate -l 100M example RUN chown 33:33 example Given that the base image weighs ~75MB, we could expect the final image to weigh ~175MB (~75 from the base image + ~100 from the big file we generated)....

2021-03-02 · 4 min · 643 words

Lighten your Python image with Docker multi-stage builds

In previous posts we talked about poetry and Docker images layers and I promised I would write about Docker multi-stage builds, so here we go! Note I will explain the basics of Docker multi-stage builds required to understand the post, but I won’t repeat the documentation (see further reading). ⚙️ Multi-stage builds Basically a multi-stage build allows you to sequentially use multiple images in one Dockerfile and pass data between them....

2021-01-02 · 6 min · 1135 words

Poetry for Python dependencies management

At ITSF, teams using the same languages/frameworks regularly meet to share experience and decide on common guidelines. With the Python teams, we recently decided to change our dependencies management system to something more robust because we were not satisfied with pip alone. ✅ Requirements Here’s a list of the features we expected from our new tool: It must manage transitive dependencies1 for us. Developers should only have to specify the direct dependencies of their projects....

2020-12-30 · 6 min · 1119 words

How to use pipx with pyenv

👨🏻‍💻 TL;DR In my case with fish I added this line to my config.fish: set -gx PIPX_DEFAULT_PYTHON "$HOME/.pyenv/versions/3.8.5/bin/python" It’s roughly the bash equivalent for export PIPX_DEFAULT_PYTHON="$HOME/.pyenv/versions/3.8.5/bin/python" 📖 Backstory As a Python developer, my workflow often involves running multiple versions of Python on different projects. To help me in this task, I use pyenv which is a wonderful tool to easily install and manage multiple Python versions on your system. I also have a Python version installed via Homebrew for some formulae that require it....

2020-12-30 · 2 min · 252 words

Docker images layers and cache

In this post, we’ll walk through Docker image layers and the caching around them from the point of view of a Docker user. I’ll assume you’re already familiar with Dockerfiles and Docker concepts in general. ✌️ The two axioms of Docker layers There are two key concepts to understand, from which everything else is deduced. Let’s call them our axioms. Axiom 1 Every instruction in a Dockerfile results in a layer1....

2020-12-28 · 10 min · 1949 words