10th March 2022
Coding⚑
Generic Coding Practices⚑
Use warnings to evolve your code⚑
-
New: Using warnings to evolve your package.
Regardless of the versioning system you're using, once you reach your first stable version, the commitment to your end users must be that you give them time to adapt to the changes in your program. So whenever you want to introduce a breaking change release it under a new interface, and in parallel, start emitting
DeprecationWarning
orUserWarning
messages whenever someone invokes the old one. Maintain this state for a defined period (for example six months), and communicate explicitly in the warning message the timeline for when users have to migrate.This gives everyone time to move to the new interface without breaking their system, and then the library may remove the change and get rid of the old design chains forever. As an added benefit, only people using the old interface will ever see the warning, as opposed to affecting everyone (as seen with the semantic versioning major version bump).
Python⚑
-
New: Add humanize library.
humanize: This modest package contains various common humanization utilities, like turning a number into a fuzzy human-readable duration ("3 minutes ago") or into a human-readable size or throughput.
Code Styling⚑
-
New: Solve W1514 pylint error.
with open('file.txt', 'r', encoding='utf-8'):
Operative Systems⚑
Linux⚑
Linux Snippets⚑
-
New: Set up docker logs rotation.
By default, the stdout and stderr of the container are written in a JSON file located in
/var/lib/docker/containers/[container-id]/[container-id]-json.log
. If you leave it unattended, it can take up a large amount of disk space.If this JSON log file takes up a significant amount of the disk, we can purge it using the next command.
truncate -s 0 <logfile>
We could setup a cronjob to purge these JSON log files regularly. But for the long term, it would be better to setup log rotation. This can be done by adding the following values in
/etc/docker/daemon.json
.json { "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "10" } }