Sign in

Jacob Tomlinson

@jacobtomlinson.dev
409 followers 300 following 278 posts

Building RAPIDS and Dask at NVIDIA. Views are my own. he/him. jacobtomlinson.dev

PostsRepliesMedia
Jacob Tomlinson @jacobtomlinson.dev · 29/06/2026
I love how it doesn't even question that I'm a fish asking questions on Google...
021
Jacob Tomlinson @jacobtomlinson.dev · 24/06/2026
84c might be a little too hot. Sorry little computer! 🥵 #heatwave
000
Jacob Tomlinson @jacobtomlinson.dev · 21/01/2026
I saw a fun Reddit post today where someone asked why their solar output sometimes spikes above the expected curve. It sent me down a rabbit hole reading about how clouds block light in the middle, but refract it at the edges. Which can cause more light to be directed to the panels.
A graph showing solar power generated over 24 hours. The general graph is a bell curve but there is a spiky section where the output drops but also peaks above the curve.I diagram showing that the middle of a cloud blocks light, but the edges refract it.
130
Jacob Tomlinson @jacobtomlinson.dev · 17/12/2025
I am totally in love with the Zen browser. When I discovered Arc it blew my mind, a totally new way of thinking about tabs and bookmarks. But it was closed source and development has dried up lately. Zen is an open source browser built on Firefox, inspired by Arc and it's awesome! zen-browser.app
A screenshot of the Zen browser.
020
Jacob Tomlinson @jacobtomlinson.dev · 29/10/2025
Five years ago I won third place in the NVIDIA employee pumpkin carving competition. Not sure I can top it to be honest! 🎃
A pumpkin with a carving of a haunted house.
030
Jacob Tomlinson @jacobtomlinson.dev · 09/10/2025
They have a fun π themed logo!
The Python 3.14 logo showing two snakes eating pie with the π logo around the edge
110
Jacob Tomlinson @jacobtomlinson.dev · 24/09/2025
The length of my todo list is stressing me out, so let’s set 20 mins on the clock and see how may things I can check off.
Photo of a timer showing 20 mins remaining
110
Jacob Tomlinson @jacobtomlinson.dev · 10/09/2025
Love the Computer Science History Museum, I went last year when I was at NVIDIA GTC! My favourite items were the teapot, and the prototype pong machine. It's so fun to see items that you've heard stories about that shaped some party of nerdy history.
The Utah Teapot. The original physical item that inspired the popular graphics model.The original prototype of the pong cabinet that was placed in Andy Capp's bar. The Atari team was called to tell them the machine had broken, and when they investigated it was just jammed so full of quarters it wouldn't work. This is how they knew they were on to a hit!
240
Jacob Tomlinson @jacobtomlinson.dev · 12/07/2025
The rise of coding agents means OSS projects need to ensure agents can parse their docs easily. The llms.txt standard defines a way to publish docs in markdown for loading into context windows. I made a quick Sphinx extension that makes it easy for you to do this! github.com/jacobtomlins...
Code snippet showing you can add `sphinx_llm.txt` to your sphinx extensions to enable llms.txt support.
160
Jacob Tomlinson @jacobtomlinson.dev · 30/06/2025
semver.org effver.org calver.org
Three headed dragon meme that says "Major Version Releases". The two badass looking dragon heads say "SemVer - Breaking change" and "EffVer - Effort required". The goofy looking dragon head says "CalVer - Happy New Year"
000
Jacob Tomlinson @jacobtomlinson.dev · 03/06/2025
I'll be at @pydatalondon.bsky.social this weekend. On Friday we are running a GPU Accelerated Python tutorial where we will dig into CUDA development in Python with Numba, RAPIDS and more. Hope to see lots of folks there! cfp.pydata.org/london2025/t...
PyData London 2025 Tutorial GPU Accelerated Python, Friday 9am-12:30pm in the Grand Hall
072
Jacob Tomlinson @jacobtomlinson.dev · 21/05/2025
Microsoft's LightGBM (a popular open source gradient boosting ML library) just officially adopted EffVer as their version scheme! lightgbm.readthedocs.io/en/latest/In...
Screenshot of the LightGBM readme with an effver badge
050
Jacob Tomlinson @jacobtomlinson.dev · 19/05/2025
Many Microsoft sites don't work properly in Firefox these days. Azure hasn't for a long time, but more recently Outlook web keeps logging me out and refusing to sign in again unless I clear all cookies/cache. It's getting harder and harder to fight the pressure to switch to a Chrome based browser.
Screenshot of the "change your default browser" dialog with a choice between Chrome and Firefox.
010
Jacob Tomlinson @jacobtomlinson.dev · 30/04/2025
I think "funky junk code" is a great term for code you just blindly accept without really reading when vibe coding. @joshwcomeau.com www.joshwcomeau.com/blog/the-pos...
I  also worry a bit about the next generation of developers. When using LLM agents, it’s so easy to get lulled into a trance, to keep hitting “accept changes” without understanding or even looking at the code being generated. I caught myself starting to fall into this trap when I was building the landing page for my new course(opens in new tab). I took my hand off the steering wheel for too long, and had to spend a bunch of time refactoring funky junk code as a result.
010
Jacob Tomlinson @jacobtomlinson.dev · 29/04/2025
qwen3:4b totally ignored the instructions to be concise, only respond with the title and keep things under 50 characters
Response from qwen3:4b:

Okay, let's tackle this. The user wants a PR title for Kubernetes version updates based on a git diff. The title needs to be concise, in present tense, active voice, and under 50 characters.

Looking at the diff, the main changes are in the workflows and the README. The Kubernetes versions mentioned are 1.32.3, 1.31.6, and 1.30.10. The README's shield image now includes 1.30.10. So the key point is adding 1.30.10 to the supported versions.

The PR is likely updating the supported versions to include 1.30.10. The title should reflect that. Let me check the existing versions. The previous supported versions were 1.31, 1.32, 1.33. Now adding 1.30. So the title should mention adding 1.30.10.

Possible titles: "Update Kubernetes version support to include 1.30.10" but that's 43 characters. Wait, the user said to focus on the Kubernetes version. Maybe "Add Kubernetes 1.30.10 to supported versions" which is 40 characters. That's good. Alternatively, "Update Kubernetes support to include 1.30.10" is 40 as well. Both are under 50. Active voice, present tense. The key is adding 1.30.10. The other versions are already there, so the main change is adding that one. So the title should highlight that addition.

Add Kubernetes 1.30.10 to supported versionsResponse from llama3.2:3b:

Upgrading Kubernetes version to 1.30.10 in test workflows.
100
Jacob Tomlinson @jacobtomlinson.dev · 29/04/2025
Yesterday I spent a bit of time running ollama in a GitHub Actions workflow to generate nice titles for automated PRs. I love the idea of leveraging LLMs locally in a workflow without needing to call out to a third-party API. jacobtomlinson.dev/posts/2025/g...
Screenshot of a GitHub Actions config that is prompting a llama3 model locally within the workflow. The prompt says:

You are a helpful assistant that generates PR titles for Kubernetes version updates by summarising a git diff.
The title should be concise and to the point, and should not include any markdown formatting.
The title should be in the present tense.
Your response must be no more than 50 characters.
```diff
${{ steps.diff.outputs.diff }}
```
Please summarize the changes in the diff with particular attention to the Kubernetes version that is being updated.
Don't include the Python version information in the title or which files are being edited. Focus only on the Kubernetes version.
130
Jacob Tomlinson @jacobtomlinson.dev · 23/04/2025
Day 10 of using a different coreutils command every day for 100 days!✨ The mkdir command can make new directories, and the -p flag lets you created nested directories in one go. jacobtomlinson.dev/blog/100-day...
$ mkdir -p foo/bar/baz
$ ls -d foo/bar/baz 
foo/bar/baz
010
Jacob Tomlinson @jacobtomlinson.dev · 17/04/2025
Playing with Cursor again today. It tried to commit some code and the pre-commit hooks kept failing. It hasn't added the correct type annotations and mypy was complaining. It tried to fix them a couple of times and when it couldn't it gave up and decided to skip pre-commit altogether 😅
Let's try committing our changes again, but this time with the --no-verify flag to skip the pre-commit hooks since we're having trouble with them:
200
Jacob Tomlinson @jacobtomlinson.dev · 14/04/2025
Day 9 of using a different coreutils command every day for 100 days!✨ The touch command can be used to create a new file or update the modified date of an existing file. jacobtomlinson.dev/blog/100-day...
$ touch /tmp/foo
$ ls -l /tmp/foo
-rw-r--r--  1 jtomlinson  wheel  0 Apr 14 15:17 /tmp/foo

$ touch -d 2026-03-14T00:00:00 /tmp/foo
$ ls -l /tmp/foo
-rw-r--r--  1 jtomlinson  wheel  0 Mar 14  2026 /tmp/foo
100
Jacob Tomlinson @jacobtomlinson.dev · 14/04/2025
Wow Marimo just overtook Jupyter Notebooks in terms of GitHub stars, and is quickly gaining on Jupyter Lab.
Graph showing marimo has overtaken jupyter notebooks and will overtake jupyterlab in the next few months.
040
Jacob Tomlinson @jacobtomlinson.dev · 25/03/2025
Day 8 of using a different coreutils command every day for 100 days!✨ The link or `ln` command is used commonly for creating symbolic links, and can also be used for creating hard links. jacobtomlinson.dev/blog/100-day...
$ ln -s /bin/bash bosh

$ ls -l               
total 0
lrwxr-xr-x  1 jtomlinson  wheel  9 Mar 25 11:13 bosh -> /bin/bash
110
Jacob Tomlinson @jacobtomlinson.dev · 21/03/2025
The 2006 version feels more like "my Neopets". I was starting to learn HTML around this time too, and spent ages trying to figure out how they achieved this layout. It was tables! This was before CSS layouts. You would put everything inside a table and manage your columns and rows that way.
Screenshot fo the Neopets home page in 2006
020
Jacob Tomlinson @jacobtomlinson.dev · 14/03/2025
Today I learned why my markdown titles sometimes don't render properly. jacobtomlinson.dev/posts/2025/w...
Three markdown titles,  two are rendered correctly, but the middle one isn't. They say; This title works, This title should also work but doesn’t, This title works though! Whyyyy!
220
Jacob Tomlinson @jacobtomlinson.dev · 13/03/2025
Day 7 of using a different coreutils command every day for 100 days. The `true` command does nothing, but always returns `0`. Useful when you use `set -e` in a script but still allow a specific command to fail. jacobtomlinson.dev/blog/100-day...
#!/bin/bash
# somescript.sh

set -e  # If a command fails exit the script

# The rm fails but the or true makes stops the script from exiting
rm /tmp/filethatdoesntexist || true
110
Jacob Tomlinson @jacobtomlinson.dev · 12/03/2025
Day 6 of using a different coreutils command every day for 100 days. The `rm` command removes a file. Combining the flags `-r` and `-f` can result in removing your productivity for an entire day. jacobtomlinson.dev/blog/100-day...
# How to have a bad day
sudo rm -rf /
100
Jacob Tomlinson @jacobtomlinson.dev · 11/03/2025
Day 5 of using a different coreutils command every day for 100 days! The `dir` command is effectively an alias to `ls -C -b` which forces multiple columns and escapes special characters. It exists mostly to be compatible with other OSs like DOS and Windows. jacobtomlinson.dev/blog/100-day...
$ dir /
bin   boot  dev  etc  home  lib  media  mnt  opt
proc  root  run  sbin  srv  sys  tmp    usr  var
100
Jacob Tomlinson @jacobtomlinson.dev · 10/03/2025
Day 4 of using a different coreutils command every day for 100 days!✨ Moving a file with `mv` will rename a file if the move is on the same disk, or copy and then delete it if the destination is on another disk. jacobtomlinson.dev/blog/100-day...
mv /tmp/foo /tmp/bar
100
Jacob Tomlinson @jacobtomlinson.dev · 07/03/2025
Day 3 of using a different coreutils command every day for 100 days! One of the first commands you will ever use is `ls` to list the files in a directory. Here are my most used `ls` aliases. jacobtomlinson.dev/blog/100-day...
# Set ls colours
export LSCOLORS=ExFxBxDxCxegedabagacad

# Aliases to make ls easier to use in different modes
alias ll="ls -lh"    # Detailed list format and human readable file sizes 
alias la="ls -lah"   # Show hidden files too
alias sl="ls"        # For inevitable typos
100
Jacob Tomlinson @jacobtomlinson.dev · 06/03/2025
Day 2 of using a different coreutils command every day for 100 days!✨ The copy command `cp` allows you to copy a file from one place to another. I commonly use the `-R` flag to copy a directory recursively and have used the `-L` flag to copy symlinked files too. jacobtomlinson.dev/blog/100-day...
# Copy a file
cp /tmp/foo /tmp/bar

# Recursively copy a directory
cp -R /tmp/dir1/ /tmp/dir2/

# Recursively copy a directory and expand symbolic links
# The linked files will be copied instead of just the links
cp -LR /tmp/dir1/ /tmp/dir2/
100
Jacob Tomlinson @jacobtomlinson.dev · 05/03/2025
MacBook Air M4 conversations right now
A meme showing Windows/Linux fans complaining about $200 for an extra 8GB of RAM being a lot. But Apple fans are happy because they see it as a $200 discount if you are happy with a little less RAM.
020
Jacob Tomlinson @jacobtomlinson.dev · 05/03/2025
Today I started with a common command cat which takes one or more text files, concatenates them together and prints them out to the terminal. I rarely use the concatenation functionality, but you can provide multiple filenames to cat them out in a single command. jacobtomlinson.dev/blog/100-day...
A screenshot showing the command `cat /etc/os-release` printing out the contents of that file to the terminal.
100
Jacob Tomlinson @jacobtomlinson.dev · 26/02/2025
And here's me thinking I was just having a quiet afternoon...
A screenshot of the Slack status page showing an outage
030
Jacob Tomlinson @jacobtomlinson.dev · 24/02/2025
The @metoffice.bsky.social uses yellow, amber and red for weather warning severity. They have a nice lookup table to collapse the two dimentions of impact and likeliness. You could do the same for impact and percentage of community affected by a change. www.metoffice.gov.uk/weather/guid...
A matrix showing  likelihood on the Y axis and impact on the X axis. As one axis increases the warning goes yellow, but if two axes increase the warning goes orange, if both axes go to their extreme the warning is red.
101
Jacob Tomlinson @jacobtomlinson.dev · 31/01/2025
Overpay your morgage if you can, even just by a little bit. Small overpayments have an outsized impact on the amount of interest you'll save over time. With current interest rates if you increase your monthly payment by 4% it will save you 10% of your interest payments in the long run.
A graph showing that overpaying your mortgage will reduce the amount of interest you pay, but with diminishing returns. Overpaying by around 15% will save you 25% of the interest you would pay in the lifetime of the mortgage. Overpaying by 40% will save you 50% of the interest. But to save 75% of the interest you would have to more than double your monthly payments.

Overpaying by 5%, 10%, or 15% can make a surprisingly big difference over time.
120
Jacob Tomlinson @jacobtomlinson.dev · 30/01/2025
I am totally obsessed with Dragon Sweeper danielben.itch.io/dragonsweeper
000
Jacob Tomlinson @jacobtomlinson.dev · 21/01/2025
Despite what people say it can be ok to rebuild things that already exist. But do so defensively, and only when absolutely necessary, because everything you build needs to be maintained. In 2023 I gave a talk at PyCon UK about figuring out when to rebuild things. jacobtomlinson.dev/talks/2023-0...
Me standing on a stage at PyCon UK 2023 holding a clicker
120
Jacob Tomlinson @jacobtomlinson.dev · 16/01/2025
My lightning talk from PyData NYC is up! I'm talking about EffVer, the version scheme where you tell your users what order of mangnitude to expect the upgrade effort to be. youtu.be/76qs5hz_6HI?...
Screenshot of me talking about EffVer. A slide says "Upgrading to a new version intends to require: Macro - a large effort, Meso - some effort, Micro - no effort".
030
Jacob Tomlinson @jacobtomlinson.dev · 09/01/2025
If you're interested in GPU support in Polars my RAPIDS colleague Lawrence and a few others are running a live session on Jan 28th. info.nvidia.com/nvidia-polar...
Poster advertising a session titled "Inside the RAPIDS-Accelerated Polars GPU Engine" hosted on January 28th 2025 by William Hill, Rodrido Girão Serrão and Dr Lawrence Mitchell
022
Jacob Tomlinson @jacobtomlinson.dev · 16/12/2024
On Black Friday I got a Bambu Lab P1S. It’s an amazing 3D printer, it’s the closest to “it just works” that I’ve experienced when it comes to 3D printing. I’ve mostly printed nicknacks and gridfinity desk organisers. What should I print next?
040
Jacob Tomlinson @jacobtomlinson.dev · 10/12/2024
I just released a new Sphinx plugin, built from parts of an old unmaintained CLI tool that I made a few years ago. sphinx-helm is a Sphinx documentation plugin for automatically generating documentation for your Kubernetes Helm charts. github.com/kr8s-org/sph...
A cartoon about code reuse where a person is walking away from their bug ridden old project to start a fresh new project, but then they start pulling chunks of the old project to reuse in the new one and bring the old bugs along with them.
0120
Jacob Tomlinson @jacobtomlinson.dev · 28/11/2024
This feels like a great place to end the day. I've added CI which runs ollama as a GitHub Actions service and then builds the Sphinx docs. The plugin successfully uses it for inference as we can see in the HTML output. github.com/jacobtomlins...
Summary HTML output in a screenshot of GitHub Actions
020
Jacob Tomlinson @jacobtomlinson.dev · 28/11/2024
Now I have a complete admonition with a link to the document. I'm also using the llama3.2 3b model as I expect that will be faster to inference in CI.
Summary test

Feeding apples to a friendly pig involves selecting ripe, pesticide-free apples, washing them thoroughly, cutting into manageable pieces, introducing them calmly, monitoring the pig’s reaction, cleaning up afterwards, and following safety tips.
100
Jacob Tomlinson @jacobtomlinson.dev · 28/11/2024
First summary is looking good! I'm running ollama on my PC with an old GeForce GTX 1080 GPU. Then using langchain to invoke the llama3:8b model.
Screenshot of a documentation page with a summary of the other page about feeding apples to pigs. It's a good summary.Screenshot of the very basic langchain code that is calling lama3:8b via ollama to generate the summary.
100
Jacob Tomlinson @jacobtomlinson.dev · 28/11/2024
Breakpoints are working nicely.
Code paused on a breakpoint in VS Code
100
Jacob Tomlinson @jacobtomlinson.dev · 28/11/2024
Ideally I want to be able to attach a debugger during the build. I use VS Code so let's hook up the sphinx build to the debugger. Calling `sphinx-autobuild` is functionally the same as `python -m sphinx_autobuild` so we can use the Python Module debugger to invoke it.
Screenshot of VS Code launch configuration for the aphinx-autobuild debugger
100
Jacob Tomlinson @jacobtomlinson.dev · 28/11/2024
I have a very basic sphinx extension written out now. I can add a custom admonition called docref which will link to another page and include a summary. Right now the summary is hand written and it doesn't link though.
Screenshot of the boilerplate admonition codeScreenshot of using the docrefScreenshot of enabling this custom extension
100
Jacob Tomlinson @jacobtomlinson.dev · 28/11/2024
I'm going to need some boilerplate documentation to start summarising. This feels like a good use case for Copilot to hallucinate some entertaining nonsense.
Screenshot of VS Code with Copilot generating a documentation page on how to Feed Apples to a Friendly Pig
100
Jacob Tomlinson @jacobtomlinson.dev · 28/11/2024
I've created some sample documentation with sphinx-quickstart and then I'm using sphinx-autobuild to rebuild the docs every time I make a change. I'm also using uv to keep dependency management clean. www.sphinx-doc.org/en/master/us... pypi.org/project/sphi... github.com/astral-sh/uv
Screenshot of the default sphinx quickstart page
100
Jacob Tomlinson @jacobtomlinson.dev · 27/11/2024
When explaining to my daughter what my new 3D printer is she said “I’m learning about 3D shapes at school, can you print me some?”. This was a perfect simple project to help me learn Fusion 360. Just making loads of common shapes.
3D printed models of common 2D and 3D shapes including cube, cone, pyramid, cuboid, sphere, cylinder, diamond, rectangle, oval, square, circle and triangle
250
Jacob Tomlinson @jacobtomlinson.dev · 27/11/2024
I find the creativity in the 3D printing community inspiring! I loved beyblades as a kid. The idea of printing your own teeny tiny one that’s fully functional and uses a standard 608 bearing is amazing! Also the advances in multi-colour printing is incredible!
160