Sam Hooke

Using gprof with POSIX FreeRTOS

Sphinx: Link to HTML from MyST Markdown

Append to .bashrc using Ansible

Using Kerberos from an Ansible playbook

Detect if Ansible is running under Vagrant

Reflections on 10 years as a professional Software Engineer

GitLab CI and poetry-dynamic-versioning

How to set up Ansible and Vagrant in WSL

Using structlog and journald

Run Poetry command as systemd service

Reading from and writing to journald in Python

Installing systemd-python on Ubuntu

python-systemd != python-systemd

PlantUML in Sphinx (using MyST Markdown) and GitLab

Managing multiple remotes in Git

Renaming Git branches

Poetry: Offline installation of packages

Configuring a Brocade FastIron switch

NiceGUI: Change threshold for binding propagation warning

NiceGUI: Bind visibility to arbitrary value

NiceGUI: tkinter error when updating pyplot

Django REST framework performance (part 2: techniques)

NiceGUI with Click, Poetry, auto-reload and classes

FastAPI: Pretty print JSON

Django REST framework performance (part 1: profiling)

⭐ NiceGUI: File upload and download

NiceGUI: Show a confirmation popup

NiceGUI: Always show main scrollbar

Poetry: Fixing permission error when upgrading dulwich

Python: Using isort with Black to improve your code base

⭐ Poetry: Running Black and isort with pre-commit hooks

Poetry: Fix warning about sources

GitLab: Enable coverage reporting with pytest

Sphinx: Cross-referencing with MyST Markdown

Shipping e-bike batteries from the USA to the UK

Poetry: Automatically generate package version from git commit

Poetry: build.py example

Poetry: Fixing dubious ownership error

Debugging missing UDP packets with Wireshark

GitLab CI: Using a private project's container in a Dockerfile

GitLab CI: Using a private project's container as an image

Installing Cartopy on Ubuntu

Memory allocation error in WAV files created by arecord

⭐ Normalizing a Django model

⭐ Celery and systemd: how to avoid a restart loop

Handle FreeRTOS tick rollover with 64-bit ticks

Print a 64-bit integer using 32-bit integers

VMware Workstation VM gets sluggish then locks up

Hugo anchors next to headers

Collecting Netlify Analytics data with Python

Decimal error when upgrading from Django 3.1 to Django 3.2

⭐ Setting up CMocka with CMake for Linux and Windows

Porting a simple SDL2 game to Emscripten

Setting up Emscripten with CMake on Linux

⭐ Setting up Emscripten with CMake in Git Bash on Windows 10

Network adapter disappears after reboot

A portable timegm alternative

Fixing apt-key deprecation on Debian 9 ("stretch")

The Important Files: Part 7

Notes on history of LTE and 4G

Permission denied in Docker container upon COPY and RUN of a file from git

Docker build invalid reference format

nmcli tips

Workaround for installing Dropbox on Debian with libpango transitional package

Removing a third-party Django app and its tables

Running inkscape_merge against Inkscape v1.0

Sonic Pi on Debian

mypy tips

SSH tips

mypy and verbose logging

Researching generating playing cards from an SVG template using Inkscape

⭐ Migrating from Tastypie to Django REST Framework

Python abi3 wheels

Configure Python package to install dependencies only for specific combinations of Python version and platform

Python click: allow user to retry input upon validation failure

Call Python script from pylint init-hook

Python DEPRECATION warning and pip --no-cache-dir breakage

libusb usb_open error -4

Troubleshooting wifi driver crashing (part 4)

Making Visio 2016 Usable

Troubleshooting wifi driver crashing (part 3)

Troubleshooting wifi driver crashing (part 2)

Install Hugo testing distribution on Debian

Debian center window keyboard shortcut

Troubleshooting wifi driver crashing (part 1)

Bootstrapping pip

Invalid handle error from Coverage inside Tox

Run Django makemigrations as tox task

New dependency font(:lang-en) required by fontconfig-2.10.95-11

⭐ Installing rpms offline using a local yum repository

The Important Files: Part 6

The Important Files: Part 5

The Important Files: Part 4

How to reload Ethernet udev rules without reboot

Modify bash history

Freeing up disk space on Arch Linux

The Important Files: Part 3

The Important Files: Part 2

Calling iPerf3 from Python

The Important Files: Part 1

Debugging a Python process not terminating due to active threads

Lint Bash on Windows

Convert Emacs org files to markdown

Emacs package managers

Make temporary network changes permanent under CentOS 7

Lightweight Python SIP library

Removing unused COM ports from Windows

Attach shell to running Python process

Hugo 0.37 does not support h6 markdown heading

Bind hugo to localhost for development

Calling MPSSE over FTDI from Python on CentOS 7

Hugo tag and category pages

Calling C from Python

Building against `libusb`

Get errno from Python requests `ConnectionError`

Python logging: %s vs format

Escaping Hugo shortcodes within Hugo markdown

Automatic image thumbnails in Hugo from static directory

Captured `SystemExit` with pytest and tox

Tastypie "TypeError of type 'NoneType' is not iterable"

Using a non-pk as a foreign key in a Tastypie endpoint

pytest and functools decorator

normalize-scss with hugo

Automating hugo development with npm scripts

RabbitMQ handshake timeout caused by hostname change

Run Django `manage.py makemigrations` without a database

Avoid a process terminating when logging off a remote SSH session

Celery pinging

Kombu "timed out" bug: connection hangs forever in Kombu 4.1.0

Manually invoking Celery app control commands from a Python package

Debugging RabbitMQ

Using a different port with Fabric

CentOS 7 firewalld

These are rough notes that vary greatly in quality and length, but prove useful to me, and hopefully to you too!