2024  38

December  2

SSH saga

December 17, 2024

Injecting Pytest fixtures without cluttering test signatures

December 2, 2024

November  2

Explicit method overriding with @typing.override

November 6, 2024

Quicker startup with module-level __getattr__

November 3, 2024

October  4

Docker mount revisited

October 22, 2024

Topological sort

October 13, 2024

Writing a circuit breaker in Go

October 6, 2024

Discovering direnv

October 2, 2024

September  5

Notes on building event-driven systems

September 21, 2024

Bash namerefs for dynamic variable referencing

September 20, 2024

Behind the blog

September 14, 2024

Shell redirection syntax soup

September 12, 2024

Shades of testing HTTP requests in Python

September 2, 2024

August  4

Taming parametrize with pytest.param

August 28, 2024

HTTP requests via /dev/tcp

August 8, 2024

Log context propagation in Python ASGI apps

August 6, 2024

Please don't hijack my Python root logger

August 3, 2024

July  3

The *nix install command

July 28, 2024

Here-doc headache

July 19, 2024

The sane pull request

July 14, 2024

June  1

I kind of like rebasing

June 18, 2024

May  1

Protobuffed contracts

May 10, 2024

April  2

TypeIs does what I thought TypeGuard would do in Python

April 27, 2024

ETag and HTTP caching

April 10, 2024

March  2

Crossing the CORS crossroad

March 12, 2024

Dysfunctional options pattern in Go

March 6, 2024

February  4

Einstellung effect

February 24, 2024

Strategy pattern in Go

February 17, 2024

Anemic stack traces in Go

February 10, 2024

Retry function in Go

February 4, 2024

January  8

Type assertion vs type switches in Go

January 31, 2024

Patching pydantic settings in pytest

January 27, 2024

Omitting dev dependencies in Go binaries

January 21, 2024

Eschewing black box API calls

January 15, 2024

Annotating args and kwargs in Python

January 8, 2024

Rate limiting via Nginx

January 6, 2024

Statically enforcing frozen data classes in Python

January 4, 2024

Planning palooza

January 1, 2024

2023  48

December  3

Reminiscing CGI scripts

December 25, 2023

Debugging dockerized Python apps in VSCode

December 22, 2023

Banish state-mutating methods from data classes

December 16, 2023

November  3

Finding flow amid chaos

November 25, 2023

The diminishing half-life of knowledge

November 12, 2023

Oh my poor business logic

November 5, 2023

October  2

Pesky little scripts

October 29, 2023

Footnotes for the win

October 7, 2023

September  4

Dotfile stewardship for the indolent

September 27, 2023

An ode to the neo-grotesque web

September 18, 2023

Self-hosted Google Fonts in Hugo

September 14, 2023

Configuring options in Go

September 5, 2023

August  7

Dummy load balancer in a single Go script

August 30, 2023

Limit goroutines with buffered channels

August 23, 2023

Writing a TOTP client in Go

August 20, 2023

Interface guards in Go

August 18, 2023

Writing on well-trodden topics

August 14, 2023

Go structured logging with slog

August 10, 2023

Notes on exit interviews

August 7, 2023

July  7

Taming conditionals with bitmasks

July 29, 2023

Using DNS record to share text data

July 17, 2023

Memory leakage in Python descriptors

July 16, 2023

Unix-style pipelining with Python's subprocess module

July 14, 2023

Enabling repeatable lazy iterations in Python

July 13, 2023

Descending into the aether

July 9, 2023

Escaping the template pattern hellscape in Python

July 1, 2023

June  2

Python dependency management redux

June 27, 2023

Implementing a simple traceroute clone in Python

June 1, 2023

May  7

Bulk request Google search indexing with API

May 26, 2023

Building a CORS proxy with Cloudflare Workers

May 21, 2023

Fixed-time job scheduling with UNIX 'at' command

May 14, 2023

Sorting a Django queryset by a custom sequence of an attribute

May 9, 2023

Periodic readme updates with GitHub Actions

May 4, 2023

Associative arrays in Bash

May 3, 2023

Deduplicating iterables while preserving order in Python

May 1, 2023

April  5

Process substitution in Bash

April 30, 2023

Dynamic menu with select statement in Bash

April 29, 2023

Simple terminal text formatting with tput

April 23, 2023

Building a web app to display CSV file stats with ChatGPT & Observable

April 10, 2023

Pushing real-time updates to clients with Server-Sent Events (SSEs)

April 8, 2023

March  1

Tinkering with Unix domain sockets

March 11, 2023

February  4

Signal handling in a multithreaded socket server

February 26, 2023

Switching between multiple data streams in a single thread

February 19, 2023

Skipping the first part of an iterable in Python

February 12, 2023

Pausing and resuming a socket server in Python

February 5, 2023

January  3

Debugging a containerized Django application in Jupyter Notebook

January 14, 2023

Manipulating text with query expressions in Django

January 7, 2023

Using tqdm with concurrent.fututes in Python

January 6, 2023

2022  61

December  1

Colon command in shell scripts

December 23, 2022

November  3

Faster bulk_update in Django

November 30, 2022

Installing Python on macOS with asdf

November 13, 2022

Save models with update_fields for better performance in Django

November 9, 2022

October  4

Python logging quirks in AWS Lambda environment

October 20, 2022

Dissecting an outage caused by eager-loading file content

October 14, 2022

Auditing commit messages on GitHub

October 6, 2022

To quote or not to quote

October 5, 2022

September  5

Returning values from a shell function

September 25, 2022

Verifying webhook origin via payload hash signing

September 18, 2022

Recipes from Python SQLite docs

September 11, 2022

Prefer urlsplit over urlparse to destructure URLs

September 10, 2022

Pick random values from an array in SQL(ite)

September 2, 2022

August  1

ExitStack in Python

August 27, 2022

July  7

Compose multiple levels of fixtures in pytest

July 21, 2022

Patch where the object is used

July 18, 2022

Partially assert callable arguments with 'unittest.mock.ANY'

July 17, 2022

When to use 'git pull --rebase'

July 14, 2022

Apply constraints with 'assert' in Python

July 10, 2022

Automerge Dependabot PRs on GitHub

July 7, 2022

Stream process a CSV file in Python

July 1, 2022

June  4

Bulk operations in Django with process pool

June 27, 2022

Read a CSV file from s3 without saving it to the disk

June 26, 2022

Distil git logs attached to a single file

June 21, 2022

Safer 'operator.itemgetter' in Python

June 16, 2022

May  1

Guard clause and exhaustiveness checking

May 22, 2022

April  3

Health check a server with 'nohup $(cmd) &'

April 18, 2022

Return JSON error payload instead of HTML text in DRF

April 13, 2022

Decoupling producers and consumers of iterables with generators in Python

April 3, 2022

March  11

Pre-allocated lists in Python

March 27, 2022

In favor of sentence case

March 26, 2022

Disallow large file download from URLs in Python

March 23, 2022

Declaratively transform data class fields in Python

March 20, 2022

Caching connection objects in Python

March 16, 2022

How not to run a script in Python

March 16, 2022

Mocking chained methods of datetime objects in Python

March 16, 2022

Declarative payloads with TypedDict in Python

March 11, 2022

Parametrized fixtures in pytest

March 10, 2022

Modify iterables while iterating in Python

March 4, 2022

Github action template for Python based projects

March 2, 2022

February  9

Self type in Python

February 28, 2022

Patching test dependencies via pytest fixture & unittest mock

February 27, 2022

Narrowing types with TypeGuard in Python

February 23, 2022

Why 'NoReturn' type exists in Python

February 21, 2022

Add extra attributes to enum members in Python

February 17, 2022

Peeking into the internals of Python's 'functools.wraps' decorator

February 14, 2022

Limit concurrency with semaphore in Python asyncio

February 10, 2022

Amphibian decorators in Python

February 6, 2022

Go Rusty with exception handling in Python

February 2, 2022

January  12

Variance of generic types in Python

January 31, 2022

Create a sub dictionary with O(K) complexity in Python

January 30, 2022

Gotchas of early-bound function argument defaults in Python

January 27, 2022

Use 'assertIs' to check literal booleans in Python unittest

January 24, 2022

Static typing Python decorators

January 23, 2022

Inspect docstrings with Pydoc

January 22, 2022

Check whether an integer is a power of two in Python

January 21, 2022

Uniform error response in Django Rest Framework

January 20, 2022

Difference between constrained 'TypeVar' and 'Union' in Python

January 19, 2022

Don't wrap instance methods with 'functools.lru_cache' decorator in Python

January 15, 2022

Cropping texts in Python with 'textwrap.shorten'

January 6, 2022

String interning in Python

January 5, 2022

2021  12

December  1

Structural subtyping in Python

December 4, 2021

November  11

Automatic attribute delegation in Python composition

November 28, 2021

Access 'classmethod's like 'property' methods in Python

November 26, 2021

Don't add extensions to shell executables

November 23, 2021

Use __init_subclass__ hook to validate subclasses in Python

November 20, 2021

Running tqdm with Python multiprocessing

November 18, 2021

Use daemon threads to test infinite while loops in Python

November 18, 2021

Use 'command -v' over 'which' to find a program's executable

November 16, 2021

Write git commit messages properly

November 11, 2021

Python's 'functools.partial' flattens nestings Automatically

November 8, 2021

Use curly braces while pasting shell commands

November 8, 2021

Use strict mode while running bash scripts

November 8, 2021

2020  12

July  2

Pedantic configuration management with Pydantic

July 13, 2020

Interfaces, mixins and building powerful custom data structures in Python

July 3, 2020

June  2

Deciphering Python's metaclasses

June 26, 2020

Implementing proxy pattern in Python

June 16, 2020

May  2

Effortless API response caching with Python & Redis

May 25, 2020

Untangling Python decorators

May 13, 2020

April  4

Effortless concurrency with Python's concurrent.futures

April 21, 2020

No really, Python's pathlib is great

April 13, 2020

Running Python linters with pre-commit hooks

April 6, 2020

Generic functions with Python's singledispatch

April 5, 2020

March  2

The curious case of Python's context manager

March 26, 2020

Reduce boilerplate code with Python's dataclasses

March 12, 2020