Docker Tag Monitor - detect updates of Docker image version tags

Detecting Docker image version tag updates easily

This article explains how to use my open-source Docker Tag Monitor website to determine how frequently the maintainers of a Docker image rebuild specific image version tags. It also explains why the image rebuild frequency matters when choosing the best (base) image. Introduction Choosing a secure Docker image to run (or base your software on) … Read more

Go vs. Python performance benchmark of a REST backend feature

Go vs Python performance benchmark of a REST backend

This article benchmarks the performance of two different Python frameworks (Django, FastAPI) and a Go framework (Pocketbase), when making GET requests that serialize 20 simple JSON objects from a relational database (SQLite, PostgreSQL). The results show that Go/Pocketbase is only about twice as fast as Python/FastAPI, which is surprising, given that Go is generally considered … Read more

go vs python

Go vs. Python: an introduction to Go for senior (Python) developers

In this article I compare the programming languages Go vs. Python. I highlight 3 similarities and 12 differences. This comparison is written for senior developers, but it is not exclusively limited to Python developers: everyone with a OOP-language background (like Java or C++) will benefit. I also provide tips regarding learning resources you should start … Read more

freeze python

Distribute Python applications – the 7 best tools to freeze your code

To be able to distribute Python application to end-users you need to freeze Python code. There are numerous freeze tools which produce self-contained binaries for the most common platforms, like Windows, Linux and macOS. This article presents and compares seven freeze tools, which are being actively maintained at the time of writing, and recommends specific … Read more

python link collection

Advanced Python link collection

This article is a link collection for Python developers who want to go beyond the basics. It presents my personal favorite articles and libraries for various use cases. Introduction Whenever you fall in love with a programming language, you will wonder what you can do with it, beyond the basics. Most modern programming languages come … Read more

acoustic fingerprinting

Experimenting with acoustic fingerprinting for duplicate detection

This article describes an experiment where I apply acoustic fingerprinting and speech recognition to detect duplicates in my personal collection of episodes (mp3 files) of the German radio play “Philip Maloney”. I discuss the advantages and disadvantages of both approaches, and present the results of applying the Olaf acoustic fingerprinting implementation. Introduction Acoustic fingerprinting (Wikipedia) … Read more

marshmallow vs. pydantic

marshmallow vs. pydantic – Python’s 2 best libraries for data serialization and validation

Data (de-) serialization is about converting between raw data items and instances of your Python classes, in order to transmit or store data. A typical example is the conversion between a Python object and its JSON string representation. This article discusses the two stand-alone frameworks marshmallow and Pydantic, which handle the conversion as well as … Read more

Static Python type hints – advantages and drawbacks

While Python is a dynamically typed language, it is possible to add type hints to your code. This makes code more readable and allows for static analyzers to check your code for type errors, e.g. during development or in a CI pipeline. This article discusses the advantages and drawbacks of static Python type hints in … Read more

SQlite and Python caveats

Python and SQLite caveats

SQLite is a popular, relational database that you embed into your application. Python comes with official bindings to SQLite. This article examines caveats of using SQLite in Python. It demonstrates problems different versions of linked SQLite libraries can cause, how datetime objects are not properly stored, and how you need to be extra careful when … Read more