Feature flags or dynamic configuration is something that I find very useful, however I've never had the chance to use them. This is for a lack of...| blog.changs.co.uk
PEP-734 subinterpreters in the stdlib has officially been included in the Python 3.14 as a very late addition. subinterpreters now has a new home...| blog.changs.co.uk
My Chinese birthdays, time keeping is hard!| blog.changs.co.uk
Python 3.14 is just around the corner and it's jampacked with huge updates: Free threading and multiple interpreters? Template strings But as with...| blog.changs.co.uk
I grew up in both the UK and China. So I'd like to think I have a little understanding of both cultures. China uses both the western gregorian calendar and a version of lunar calendar called 农历. This means I have a Chinese lunar birthday as well as a …| Jamie's Blog
There's mixed feedback to Asyncio in the community. Some people passionately hate it whilst others believe "writing async make program go fast". This debate is way too much for me to cover here right now. Though maybe I'll look at it in the future. For me I use asyncio a …| Jamie's Blog
Short update since First Look at MCP. Docker has released it's MCP toolkit which includes a catalog of MCP servers as well as helpers to connect...| blog.changs.co.uk
Previously I've played with tool calling in Langchain and Python sandboxes. But recently MCP (Model Context Protocol) is front and center. So I tried to create my own github MCP in Python to integrate cursor with the github cli. What is MCP? Before we get started, its good to familiarise …| Jamie's Blog
In my posts earlier this year I talked about the parallelism performance on 3.13 free-threaded builds. In particular I looked at solving an advent...| blog.changs.co.uk
This one's hot off the press as the first beta for Python 3.14 (aka. π-thon) has hit. We're looking at a chunky release with a lot of new...| blog.changs.co.uk
You're probably thinking that there are already plenty of tools written in Python. But I see that most of the popular tools like mypy and flake8 are built for development environments. In contrast, general purpose cli tools tend to be built in other languages, for example most of the docker …| Jamie's Blog
I've been a little obsessed with operator overloading lately. First using |= in sqlalchemy-builder and then using | and @ in better-functools. I didn't actually know that these qualify as DSLs, specifically what's known as "internal DSLs". Funnily enough, I'm usually not a fan of DSLs. A few reasons come to mind: DSLs …| Jamie's Blog
I recently came across a video by mcoding about Python iterators' unfortunate closing behaviour. To sum up the video, when an iterator is interrupted we intuitively we would expect the exit of a context manager or a finally block to be called but that's not necessarily the case. For example …| Jamie's Blog
My name is Jamie Chang, I'm a software engineer in London. I like all things Python, but I'll try to mix it up sometimes. I decided to start this...| blog.changs.co.uk
I recently put some effort into creating better-functools. It's a package that adds some tooling for functional programming in Python. And allows...| blog.changs.co.uk
This one has frustrated me for a while. It starts off with a REST API route. For example in fastAPI @app.get(| blog.changs.co.uk
Structural pattern matching is probably the coolest new syntax introduced to Python. Added in 3.10, it's been a few years now and more people are...| blog.changs.co.uk
Introduction I wrote about free-threading recently in How free are threads in Python now?. Where I found some unexpected difficulties...| blog.changs.co.uk
Free-threaded Python (PEP-703) was released in October 2024. It enables true multi-threaded execution without the restriction of the GIL. I...| blog.changs.co.uk
better-functools: Python functional fun| blog.changs.co.uk
better-functools: Python functional fun| blog.changs.co.uk
I've been doing advent of code again this year. There are two Python features I always rely on, iterators and pattern matching. Iterators allow...| blog.changs.co.uk
I've been experimenting with Langchain for GPT based queries. One problem we often encounter with GPT is hallucinations. This makes certain...| blog.changs.co.uk
I've worked with SQLAlchemy for a while now, and in my opinion it's the best ORM in Python. It's feature rich with strong support for all major...| blog.changs.co.uk
TypedDict was introduced in PEP-589 which landed in Python 3.8. The primary use case was to create type annotations for dictionaries. For example,...| blog.changs.co.uk
With the imminent release of Python 3.13, I wanted to look at the biggest changes coming to Python. I think by far the most exciting feature is...| blog.changs.co.uk