Ferry Boender

Programmer, DevOpper, Open Source enthusiast.


Category: programming

Sla (Simple Little Automator 🥗) v1.1 now supports long rule descriptions

Version 1.1 of the Simple Little Automator adds the ability to have long descriptions for build rules. For example: install () { # Install sla # Install sla to $PREFIX (/usr/local by default). # # You can specify the prefix with an environment variable: # # $ PREFIX=/usr sla install # Set the prefix PREFIX=${PREFIX:-/usr/local} […]

sla: The Simple Little Automator

I’m tired of using Make and its arcane syntax. 90% of the projects I write or deal with don’t require any kind of incremental compilation, but that’s all any build system talks about. That, and how insanely fast it is. The drawback is usually that you need to install several terabytes of dependencies, and then […]

multi-git-status can now do a “git fetch” for each repo.

Just a quick note: My multi-git-status project can now do a “git fetch” for each repo, before showing the status. This fetches the latest changes in the remote repository (without changing anything in your local checked out branch), so that mgitstatus will also show any “git pull”s you’d have to do. 

direnv: Directory-specific environments

Over the course of a single day I might work on a dozen different admin or development projects. In the morning I could be hacking on some Zabbix monitoring scripts, in the afternoon on auto-generated documentation and in the evening on a Python or C project. I try to keep my system clean and my projects […]

SSL/TLS client certificate verification with Python v3.4+ SSLContext

Normally, an SSL/TLS client verifies the server’s certificate. It’s also possible for the server to require a signed certificate from the client. These are called Client Certificates. This ensures that not only can the client trust the server, but the server can also trusts the client. Traditionally in Python, you’d pass the ca_certs parameter to the […]

Lurch: a unixy launcher and auto-typer

I cobbled together a unixy command / application launcher and auto-typer. I’ve dubbed it Lurch. Features: Fuzzy filtering as-you-type. Execute commands. Open new browser tabs. Auto-type into currently focussed window Auto-type TOTP / rfc6238 / two-factor / Google Authenticator codes. Unixy and composable. Reads entries from stdin. You can use and combine these features to […]

multi-git-status can now hide repos that don’t need attention

I’ve added an “-e” argument to my multi-git-status project. It hides repositories that have no unpushed, untracked or uncommitted changes. Without “-e”: And with the “-e” argument:

Understanding Python’s logging module

I’m slightly embarrassed to say that after almost two decades of programming Python, I still didn’t understand its logging module. Sure, I could get it to work, and reasonably well, but I’d often end up with unexplained situations such as double log lines or logging that I didn’t want. >>> requests.get(‘https://www.electricmonk.nl’) DEBUG:requests.packages.urllib3.connectionpool:Starting new HTTPS connection […]

Merging two Python dictionaries by deep-updating

Say we have two Python dictionaries: { ‘name’: ‘Ferry’, ‘hobbies’: [‘programming’, ‘sci-fi’] } and { ‘hobbies’: [‘gaming’] } What if we want to merge these two dictionaries such that “gaming” is added to the “hobbies” key of the first dictionary? I couldn’t find anything online that did this already, so I wrote the following function […]

HTTP Error 429 on Reddit

Getting HTTP error 429 when trying to call Reddit APIs or .json endpoints? Try changing your User Agent header to something else. Reddit bans based on user agent.

The text of all posts on this blog, unless specificly mentioned otherwise, are licensed under this license.