On Backward Compatibility

I recently had a colleague who suggested it might be a good idea to test our Python software against older versions of Python. And at first I was like: Yeah, good idea! It’s good practice, right? Support a whole range of versions! We see that all the time in the packages we fetch from Pypi. Supporting more versions is just good stewardship, right? But we were walking into a trap. We were discussing our own software, that we run, ourselves, in Kubernetes. We control the environment, all the way from development to production. There is simply nowhere where we don’t explicitly decide what Python version to use. On top of that most of that software is technically scripts, not installable packages. ...

September 16, 2022 · 2 min · Rutger de Knijf

On formatting in Google Spreadsheets

TLDR; Colors aren’t values. Yes, as a human you can quickly see what’s up, and that’s great if it’s automatically formatted, I’m all for that. But colorizing a line or cell by hand is possibly the slowest action you can do in a spreadsheet. And yet I see people doing it all the time! Do me a favor, and look at your keyboard. Take one finger and color a cell. Nope, you can’t. There are, however, 26 letters and 10 numbers, right there. No hotkeys, just dedicated buttons, just for those! ...

September 12, 2022 · 2 min · Rutger de Knijf

"No, I just use vim"

“No, I don’t use tool X. I do it manually with tool Y, because then I’ll have more grip on what’s happening.” Examples of this are: using git on the command line instead of a GUI using vim instead of an extensive IDE like IntelliJ or VSCode Yes, you’ll understand the lower level part of the problem you’re solving better. But logically this must cost brainpower, otherwise there wouldn’t be more understanding. However, no matter how smart you are, brainpower is a finite resource. So if you spend it on understanding a low level thing that could have been hidden from you using a high-level helper, you can’t spend it on something else. Spending your brainpower this way can be the right choice, if that low level thing is the important part to understand. But it hardly ever is. ...

September 8, 2022 · 2 min · Rutger de Knijf

I made an online Github Actions upgrader!

TL;DR: gaup.deknijf.com Github Actions is absolutely great. It’s fast, clean, clear, and I’ve yet to encounter a task I can’t accomplish. The main advantage of Github Actions over something like BitBucket Pipelines is the sheer number of modules (called “actions”) that you can just use. Need a docker image built? - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1.6.0 - name: Login to GCR uses: docker/login-action@v1.12.0 with: registry: eu.gcr.io username: _json_key password: ${{ secrets.GOOGLE_SA_KEY }} - name: Build and push run image uses: docker/build-push-action@v2.8.0 with: push: true tags: | eu.gcr.io/<project>/image:${{ github.run_number }} eu.gcr.io/<project>/image:latest cache-from: eu.gcr.io/<project>/image:latest cache-to: type=inline Need some Terraform deployed? ...

January 31, 2022 · 2 min · Rutger de Knijf

CICD trick to keep your dependencies up to date

Most developers know they should pin their 3rd party dependencies. I usually write Python, but this goes for any language. You don’t want to send your commit into CICD and have it be deployed with packages that are different from what you’ve tested it with locally. On the other hand, every day you lag behind with updating those dependencies you’re making doing that very thing in the future more dangerous. Up to the point that it becomes a “project” in itself, or even until it’s just frozen in place because nobody will touch it. ...

January 9, 2022 · 3 min · Rutger de Knijf