Open Source libraries are evolving into reference implementations
I’ve spent the majority of my professional career working on software libraries, chunks of reusable code that other people stack together to make their code.
Recent content on Jacob Tomlinson
I’ve spent the majority of my professional career working on software libraries, chunks of reusable code that other people stack together to make their code.
Agents are powerful because they can reason their way towards a goal using tools to interact with the world. Some tools gather new information, other tools perform actions. The most compelling agentic workflows are tasks where you have a well defined end goal, but the intermediate steps are unclear.
This post is a companion to a talk I gave at PyData London 2026 . You can watch the recording here and see the slides here .
 
 I’ve spent a lot of my software engineering career working on open source tools, libraries and frameworks. These are chunks of software that other software engineers use to build their software. I make things for makers, and I like that. A large part of…
As coding agents grow in popularity, open source project documentation is increasingly consumed by LLMs. When people build things with your open source library their agent will read your documentation and write code based on what it discovers there. To ensure your users have a good experience we need to start thinking about how to write and publish our documentation to make sure agents produce the…
AI tools have radically changed note taking. All you need to do is record/transcribe your meeting and your favourite AI tool will write your notes for you. Magic! As a result I’ve noticed a lot of people stop taking notes altogether and delegating the whole thing to tools like Copilot. After all, why write notes if the AI generated notes in Microsoft Teams are going to be more comrehensive…
This is a slightly different kind of post than my usual tech ramblings. This year I’ve signed up for three months of back-to-back swimming challenges to support two amazing Cancer charities.
Many open source maintainers have noticed an uptick in low-effort AI generated PRs recently, myself included. The most frustrating of these is when someone prompts their agent to "Fix <url to issue> and make a PR with the changes" . Reviewing these PRs can be time consuming because diffs can be large and the contributors rarely respond to review feedback, they just prompt and move on.
Some quick notes on how to make a backport Conda Forge release. 
 Context 
 We recently had a security vulnerability in Dask which we patched in 2026.1.1 (see GHSA-c336-7962-wfj2 for more information on what happened).
When I talk to people about Python package management in 2025 I see the following tools in active use; uv , pixi , pip , conda , mamba , micromamba and poetry . There may be others, but I don’t hear much about them.
It’s hacktoberfest time again! 
 For the last few years hacktoberferst has been opt-in for project maintainers to avoid the bombardment of spam PRs across GitHub. To find participating projects you can view the hacktoberfest tag on github .
The majority of your users don’t read your changelog. 
 The majority of your users only upgrade to new versions when forced to.
Version numbers are hard to get right. Maintainers want to communicate to users what the impact of adopting a new version will be, but poor communication can lead to a lot of frustration. There are a few popular version schemes in use today including Semantic Versioning (SemVer) and Calendar Versioning (CalVer). However, projects in the Python community often don’t strictly conform to these…
In today’s world of ever-growing data and AI, learning about GPUs has become an essential part of software carpentry, professional development and the education curriculum. However, teaching with GPUs can be challenging, from resource accessibility to managing dependencies and varying knowledge levels.
Version numbers are hard to get right. Maintainers want to communicate to users what the impact of adopting a new version will be, but poor communication can lead to a lot of frustration. There are a few popular version schemes in use today including Semantic Versioning (SemVer) and Calendar Versioning (CalVer). However, projects in the Python community often don’t strictly conform to these…
Accelerating Python using the GPU is much easier than you might think. We will explore the powerful CUDA-enabled Python ecosystem in this tutorial through hands-on examples using some of the most popular accelerated scientific computing libraries.
In October 2015 I gave a talk on Kubernetes at Tech Exeter (back when it was called the Exeter Web Meetup).
In kr8s I have a GitHub Actions workflow which runs a script nightly on a cron job. The workflow grabs a list of actively supported Kubernetes versions from endoflife.date and then cross-references them with the available kind container images for running the tests in CI.
I write a lot of markdown. I use it on GitHub when creating issues/PRs, I use it in Obsidian when I take notes, I use it in Hugo when writing blog posts ( like this one ), I use it in Jupyter Notebooks when working with data and I use it in Sphinx with MyST when writing documentation.
I consider myself an advanced Linux and macOS user. I’m currently a software engineer developing primarily for Linux systems, and I’ve previously worked as a Linux and Mac System Administrator. Over the years I’ve spent tons of time on the command line, however I bet there are a bunch of GNU Core Utilities (coreutils) commands I’ve never used before.
If you want to point tools like kubectl to a config file other than ~/.kube/config you can set the environment variable KUBECONFIG . But did you know that KUBECONFIG behaves sort of like a path, and kubectl will load all the config files it finds?
The PyData software ecosystem is made up of many open-source software libraries that are used heavily in Python Software Development, Data Science/Engineering, Traditional Sciences, Artificial Intelligence and beyond. They were used to fly a helicopter on Mars, drive new discoveries around climate change and generate the first image of a black hole.
If you’ve been around open source projects on GitHub you may have encountered a project with a stale bot .
Writing GPU code in Python is easier today than ever. You don’t need to learn C++ and there are many libraries available to get you started quickly. In this tutorial we will learn some GPU programming fundamentals and explore the ecosystem of GPU accelerated libraries that do the hard work for you.
Debugging software itself is a hard task, but debugging GPU software environments can be even more challenging. Understanding the intricate interactions between hardware, drivers, CUDA, C++ dependencies, and Python libraries can be far more complex.

 

Accelerating Python using the GPU is much easier than you might think. We will explore the powerful CUDA-enabled Python ecosystem in this tutorial through hands-on examples using some of the most popular accelerated scientific computing libraries.
Dask is a popular Python framework for scaling your workloads, whether you want to leverage all of the cores on your laptop and stream large datasets through memory, or scale your workload out to thousands of cores on large compute clusters. Dask allows you to distribute code using familiar APIs such as pandas, NumPy and scikit-learn or write your own distributed code with powerful parallel…
Abstract 
 Since joining NVIDIA I’ve gotten to grips with the fundamentals of writing accelerated code in Python. I was amazed to discover that I didn’t need to learn C++ and I didn’t need new development tools. Writing GPU code in Python is easier today than ever, and in this tutorial, I will share what I’ve learned and how you can get started with accelerating your code.

 
 

 Abstract 
 Since joining NVIDIA I’ve gotten to grips with the fundamentals of writing accelerated code in Python. I was amazed to discover that I didn’t need to learn C++ and I didn’t need new development tools. Writing GPU code in Python is easier today than ever, and in this tutorial, I will share what I’ve learned and how you can get started with accelerating your…
In PEP440 Python introduced Version Epochs as a mechanism to allow projects to change versioning scheme. Unfortunately there’s no way I could see a project actually making use of this without confusing their users.
GitHub Releases is a feature where you can create a page associated with a git tag that contains a description of the changes in that tag along with build artifacts for users to download.

 

 
 By leveraging cloud computing resources, you can pay for just the computing power you need, when you need it. Additionally, GPU acceleration can significantly decrease the amount of time you need computing resources, reducing your overall cost.
Managing Kubernetes resources with Python has never been easier thanks to the kr8s Kubernetes client for Python .
Databricks is a very popular data analytics platform used by data scientists, engineers, and businesses around the world. It was founded by the creators of Apache Spark , a powerful open-source data processing engine, and builds on top of Spark to provide a comprehensive analytics platform.
Pandas is flexible, but often slow when processing gigabytes of data. Many frameworks promise higher performance, but they often support only a subset of the Pandas API, require significant code change, and struggle to interact with or accelerate third-party code that you can’t change. RAPIDS cuDF enables Pandas users to accelerate their existing workflows and third-party code with zero code…
Sometimes you want to write some code using Dask which can then be run against multiple different cluster backends. For example for local testing you might want to use LocalCLuster , but in production use KubeCluster . Or perhaps you want to easily switch between an on premise HPC with SLURMRunner or the cloud with Coiled .
Version numbers are hard to get right. Semantic Versioning (SemVer) communicates backward compatibility via version numbers which often lead to a false sense of security and broken promises . Calendar Versioning (CalVer) sits at the other extreme of communicating almost no useful information at all .
Sometimes when writing code in a blog post I want to emphasize a couple of lines in particular. Today I found out that Hugo has really nice syntax to do this in a regular markdown code-fence.
From time to time I give talks and run workshops and folks will ask me for a bio. You may even be one of those folks and I’ve directed you to this page! Huzzah the system works!
I love using typer for creating CLI tools in Python. It makes creating complex trees of subcommands really straightforward.
I recently read Loving and hating the Streak by Cassidy Williams . The post was all about committing code on GitHub every single day to maintain a streak.