Notes #2

NetNewsWire: Manage and Use Article Themes

Recently learned that you can change the theme in NetNewsWire. There’s even a theme directory with lot of options to choose from. I’m currently using Promenade from the built-in selection, it looks great.

Status of Python Versions

Very nice and up to date graph of past, current and future versions of Python. Very useful if you maintain OSS packages and need to decide when to cut support for older versions.

Interesting thread about a topic I have a lot of thought on. I basically agree with that Eric is saying here. I’m not 100% on using UUIDs but setting the ID of an entity on the application side rather than the DB side is great approach that enables more robust software architectures.


move as much as logic as possible out of the hard-to-test element and into other more friendly parts of the code base. By making untestable objects humble, we reduce the chances that they harbor evil bugs.

Martin Fowler

This is something I’ve been instinctively for some time now. For example when I have a function that makes an HTTP request I try to move all logic outside of that function and into smaller pure functions that can be easily unitested.

Monitoring is a Pain

monitoring becomes an endless series of small failures. Metrics disappeared for awhile, logs got dropped for a few hours, the web UI for traces doesn’t work anymore. You set up these tools with the mentality of “set and forget” but they actually require ever increasing amounts of maintenance. Some of the tools break and are never fixed.

I’m feeling this pain right now. There are no good monitoring solutions for small projects like the ones I’m working on right now. I don’t need much and most solutions are trying to help enterprise customers.


Python CloudWatch Logging: Log Analytics and Application Intelligence


PyInstaller bundles a Python application and all its dependencies into a single package. The user can run the packaged app without installing a Python interpreter or any modules.

I tested this with a little script that used sh and it work perfectly fine.

XML is the future

We were told to stay on top of the most modern ecosystem, and by that I mean dealing with compatibility being broken every two months. That’s the price of cutting edge tree-shaking transpilation. That, and a left-pad way of life you couldn’t debug because the map files were generated wrong.


CLI tool and library for generating a Software Bill of Materials from container images and filesystems

Everything that uses configuration files should report where they’re located

if a program uses a configuration file (or several), it should have an obvious command line way to find out where it expects to find that configuration file.

Reading this post I came across the XDG standard.

Various specifications specify files and file formats. This specification defines where these files should be looked for by defining one or more base directories relative to which files should be located.

Basically $HOME/.config/example/config and $HOME/.local/example/db.

This is funny, I came across this project a day after reading about XDG standard. I like the idea, let’s hope that it gets adoption.

The goal of dot-config is to promote standardization of .config folder for storing project specific tool configurations.

By using a subfolder you will help decluttering project root folder and isolating configuration from other project files.

Use of .config is based on long standing XDG standard which promoted the use of ~/.config for keeping user settings. We only extended the concept to project repositories.

Wolfi OS

Wolfi is a community Linux OS designed for the container and cloud-native era. Chainguard started the Wolfi project to enable building Chainguard Images, our collection of curated distroless images that meet the requirements of a secure software supply chain. This required a Linux distribution with components at the appropriate granularity and with support for both glibc and musl, something that was not yet available in the cloud-native Linux ecosystem.

Wolfi is a stripped-down distro designed for the cloud-native era. It doesn’t have a kernel of its own, instead relying on the environment (such as the container runtime) to provide one. This separation of concerns in Wolfi means it is adaptable to a range of environments.

This sounded suspiciously similar to Alpine 👎 and I promised myself never to use that again. But they say the have support for glibc so that’s good. They also mention “Provides a high-quality, build-time SBOM as standard for all packages”, a very welcomed feature in security conscious environments.


PGTune calculate configuration for PostgreSQL based on the maximum performance for a given hardware configuration. It isn’t a silver bullet for the optimization settings of PostgreSQL. Many settings depend not only on the hardware configuration, but also on the size of the database, the number of clients and the complexity of queries. An optimal configuration of the database can only be made given all these parameters are taken into account.


Mycelite is a SQLite extension that allows you to synchronize changes from one instance of SQLite to another.

SQLite Playground with Extensions

Sqlime is an open source SQLite playground for debugging and sharing SQL snippets.

It runs a real SQLite instance in the browser and supports most of its features, including standard functions: general purpose, date/time, math, aggregation and windows.

SQLite has fewer of these functions than PostgreSQL, for example. That’s why I have a whole separate project — Sqlean — dedicated to adding the missing ones.

Advanced macOS Command-Line Tools

macOS is fortunate to have access to the huge arsenal of standard Unix tools. There are also a good number of macOS-specific command-line utilities that provide unique macOS functionality.

CLI tools hidden in the Python standard library

Seth Michael Larson pointed out that the Python gzip module can be used as a CLI tool like this:

python -m gzip --decompress pypi.db.gz

This is a neat Python feature: modules with a if __name__ == "__main__": block that are available on Python’s standard import path can be executed from the terminal using python -m name_of_module.

Seth pointed out this is useful if you are on Windows and don’t have the gzip utility installed.

This made me wonder: what other little tools are lurking in the Python standard library, available on any computer with a working Python installation?

The good line-height

Have you ever needed to create a type scale following an 8 point baseline grid, or really any grid, and had to spend extra time figuring out what should be the right line-height for every text size in the scale?

No worries! The good line-height calculates the exact number so it always fits the baseline grid!