← HomeIn-depth technical posts

Writing

What I've written

Selected Posts

Async Python: The Different Forms of Concurrency

Threads vs. processes vs. asyncio, the GIL, and when each model actually wins. My favorite single piece.

PythonasyncioConcurrency
Read on the blog ↗

Exploring Asyncio - uvloop, sanic and motor

Building a full async stack end to end - event loop, web framework and database driver - and what it buys you.

PythonasyncioPerformance
Read on the blog ↗

Generators, Coroutines, Native Coroutines and async/await

How Python's concurrency model evolved from generators to native coroutines - and why each step happened.

PythonCoroutines
Read on the blog ↗

Python asyncio: Future, Task and the Event Loop

A look under asyncio's hood at the primitives the event loop actually schedules.

Pythonasyncio
Read on the blog ↗

A Quick Introduction to the concurrent.futures Module

Thread and process pools through one clean executor API, and where each fits.

PythonConcurrency
Read on the blog ↗

Interfaces in Python: Protocols and ABCs

From informal duck typing to formal contracts with abstract base classes.

PythonDesign
Read on the blog ↗

Understanding Decorators in Python

Decorators built from first principles - closures, wrapping and why they read the way they do.

Python
Read on the blog ↗

Composition Over Inheritance

Why deep class hierarchies hurt, and how composition keeps designs flexible.

DesignOOP
Read on the blog ↗

Distributed Task Processing in Go

A Celery-style distributed task queue in Go using machinery - the patterns behind background work at scale.

GoDistributed Systems
Read on the blog ↗

Golang: Building a Telegram Bot for Aggregating Content

A real, concurrent Go service end to end - fetching, aggregating and serving content.

GoConcurrency
Read on the blog ↗

Golang Interface

How Go's implicit interfaces work and why they shape idiomatic Go design.

Go
Read on the blog ↗

Introduction to Django Channels

Bringing WebSockets and async to Django - the ASGI shift, explained.

PythonDjangoWebSockets
Read on the blog ↗

Django Channels: Using Custom Channels

Going beyond the defaults to model your own message channels.

PythonDjangoReal-time
Read on the blog ↗

Deploying Django Channels using Daphne

Taking an ASGI app to production with the Daphne server.

PythonDjangoDeployment
Read on the blog ↗

Django Admin: Expensive COUNT(*) Queries

Diagnosing a real database performance problem hiding inside the Django admin.

DjangoDatabasesPerformance
Read on the blog ↗

Understanding JWT (JSON Web Tokens)

What a JWT actually is, how it's signed, and where stateless auth fits.

SecurityAPIsAuth
Read on the blog ↗

REST APIs: Concepts and Applications

The principles behind REST before reaching for a framework.

APIsREST
Read on the blog ↗