Jacob Tomlinson
Building RAPIDS and Dask at NVIDIA. Tinker with Opsdroid in my spare time. he/him.
PythonDevOps / SRE / infrastructureAI / MLPerformance / optimization
- Posts
- 274 from 1 Jan 2001 to 20 Oct 2026
- Posting
- monthly (11 in the last year)
- Kind
- personal blog
- Feed
- https://jacobtomlinson.dev/feed.xml
2026 10
- AI as an accessibility layer
- Writing blog posts while walking the dog
- Open Source libraries are evolving into reference implementations
- Giving Agents Minimal Tools
- Documenting your software libraries for agents
- Documenting your open source projects for machines
- Why taking notes still matters
- Swimming Challenges 2026
- Guiding your contributor's agents to better behaviours
- Backporting fixes to older releases on Conda Forge
2025 14
- Python package managers: uv vs pixi?
- Revisiting old contributions for Hacktoberfest
- The Majority Of Your Users
- EffVer - Version your code by the effort required to upgrade
- Teaching Python with GPUs: Empowering educators to share knowledge that uses GPUs
- EffVer - Version your code by the effort required to upgrade
- GPU Accelerated Python
- Intro to Kubernetes: 10 Years On
- Generating useful titles for automated PRs in GitHub Actions
- Why don't my markdown titles work sometimes?
- 100 Days of Coreutils
- Using multiple config files with kubectl and other Kubernetes tools
- An introduction to GPU programming in Python
- Who Builds the PyData Ecosystem?
2024 28
- Most stale bots are anti-user and anti-contributor, but they don't have to be
- GPU Development in Python 101
- The art of wrangling your GPU Python environments
- Getting science done with accelerated Python computing platforms
- Dask on HPC in 2024
- GPU Acceleration in the PyData community
- 2024 11 08 pydata nyc effver
- GPU Accelerated Python
- Accelerating Python on HPC with Dask
- 2024 08 28 euroscipy effver
- Zero Code Change GPU Acceleration
- GPU Development in Python 101
- GPU Development in Python 101
- Building a career in Open Source Software
- Python version epochs are broken
- Creating GitHub Releases automatically on tags
- Connect With Experts: RAPIDS Cloud Deployment
- Reducing the Cost of your Data Science Workloads on the Cloud
- A beginner's guide to managing Kubernetes resources in Python with kr8s
- Dask on Databricks
- Running Dask on Databricks
- cudf.pandas: the Zero Code Change GPU Accelerator for pandas
- Running Dask workloads on multiple cluster backends with zero code changes using dask-ctl
- EffVer: Version your code by the effort required to upgrade
- How to highlight lines in a Hugo code block
- My Bio
- How to get typer to show help by default
- GitHub streaks and work/life balance
2023 20
- Accelerating fuzzy document deduplication to improve LLM training with RAPIDS and Dask
- When to rebuild things that already exist
- Scaling the PyData Ecosystem with Dask
- Comparison of kr8s vs other Python libraries for Kubernetes
- The challenge of updating an aging blog
- Deploying multi-GPU workloads on Kubernetes in Python
- How I fixed my UniFi Devices intermittently showing as offline
- Livestream notes: Replacing aiohttp with httpx in kr8s
- Introducing kr8s, a new Kubernetes client library for Python inspired by kubectl
- Avoid indirection in tests at all costs
- Mini demos
- Debugging Data Science workflows at scale
- Dask on Kubernetes Overview
- Running Jupyter in your Dask Kubernetes cluster
- Being intentional with container terminology
- Oversubscribing GPUs in Kubernetes
- Deploying multi-GPU workloads on Kubernetes in Python
- Quick and dirty way to pre-pull container images on Kubernetes
- Debugging Sphinx extensions in VSCode
- Sometimes I regret using CalVer
2022 30
- Issue 6: Documentation and diagrams
- Dask Kuberenetes Operator Demo
- Issue 5: Collaborating in Germany
- Issue 4: Last minute talk rewrites
- Dask overview
- Issue 3: How much CI is too much CI?
- Narrative driven development
- Issue 2: Kubeflow, Dracula and more
- Issue 1: Five things each week
- Accelerating ETL on KubeFlow with RAPIDS
- How to check your NVIDIA driver and CUDA version in Kubernetes
- Using Dask on KubeFlow with the Dask Kubernetes Operator
- Don't prematurely squash/rebase and force push your PRs
- Introducing Container Canary
- Commenting on Pull Requests with GitHub Actions
- GPU development with Python 101
- Dask Tutorial: Scaling the PyData Ecosystem
- The secret to making code contributions that stand the test of time
- Parallelizing Your ETL with Dask on KubeFlow
- GPU programming with Python
- GPU Development with Python 101
- Parallelizing Your ETL with Dask on KubeFlow
- GPU accelerating your computation in Python
- How to set environment variables on your Dask workers
- Golang block until interrupt with ctrl+c
- Goodbye Docker Desktop for Mac, Hello Colima
- Docker Desktop for Mac alternatives for developers
- Running Kubeflow inside Kind with GPU support
- Quick hack: Adding GPU support to kind
- Don't be that open-source user, don't be me
2021 26
- GPU code in Python
- GPU development with Python 101
- GPU development with Python 101 (extended)
- What is RAPIDS?
- Branding your open source Python package
- What is the difference between Dask and RAPIDS?
- The evolution of a Dask Distributed user
- Managing cluster lifecycle with dask-ctl
- Dask on Kubernetes
- Deploying Dask Distributed
- Building a contributor community for your open source project
- Communicating with your open source community
- Building a user community for your open source project
- Documenting Python projects with Sphinx and Read the Docs
- Monitoring Dask + RAPIDS with Prometheus + Grafana
- Intro to distributed computing on GPUs with Dask in Python
- Automating releases of Python packages with GitHub Actions
- Testing and Continuous Integration for Python packages with GitHub Actions
- How to use an Xbox 360 controller with OS X El Capitan
- Awaitable Objects and Async Context Managers in Python
- Xbox 360 controller with Yosemite
- Test driven development in Python
- Testing your Python package
- High Throughput Computing with Dask: Intro Tutorial
- Documenting your Python code
- How to interactively debug GitHub Actions with netcat
2020 15
- How to check out the default git branch
- Intro to GPU Development in Python
- Leveraging the Hacktoberfest community
- Running Dask tutorials
- The current state of distributed Dask clusters
- Dask Maintainers Update
- How to use OBS Studio with Zoom, Hangouts, Teams and more on macOS
- Intro to Dask Tutorial
- How to enable SSH on Binder
- Publishing open source Python packages on GitHub, PyPI and Conda Forge
- Native Cloud Deployment with Dask-Cloudprovider
- RAPIDS - Open GPU Data Science
- Versioning and formatting your Python code
- Testing static sites with Lighthouse CI and GitHub Actions
- Creating an open source Python project from scratch
2019 19
- Twenty Nineteen Roundup
- 5 Tips to help you ace your internship and entry-level job interviews
- Creating GitHub Actions in Python
- Creating GitHub Actions in Go
- How to run Jupyter Lab at startup on macOS
- How to create a Helm chart repository with Chartpress, Travis CI, GitHub Pages and Jekyll
- How to merge Kubernetes kubectl config files
- The three types of fun
- Why your profile picture is important
- Cleaning up conda environments
- Setting up GPU Data Science Environments for Hackathons
- A history of science on the cloud at the Met Office
- Switching to Hugo
- Hypothetical datasets
- Met Office Informatics Lab Overview
- Intro to Earth Information Workshop
- Cloud agnostic distributed data analysis with Pangeo
- Containers Why and How to Use Them
- My pragmatic workshop format
2018 11
- Containers and orchestration 101 - Docker, Kubernetes and Helm
- Pangeo Principles
- Debugging Kubernetes PVCs
- Opsdroid
- Met Office Informatics Lab Overview
- Using Xiaomi door/window sensors as light switches
- Exploring Dask and Distributed on AWS Lambda
- Rise of the Bots
- Helping Balloons Navigate the Weather: Alibaba Tianchi Award Presentation
- Instant access to auto-scaling personal Python clusters
- Accessing S3 from FUSE
2017 20
- ChatOps - Automation via chat
- The Power of Big Data
- Scaling Clusters to Thousands of Servers in the Cloud
- Deploying opsdroid using ZEIT
- Autoscaling Distributed Compute With Dask Kubernetes and AWS
- Article in Computer Weekly
- Interactive Big Data Analysis With Jupyter, Dask and more
- Adaptive Dask clusters on Kubernetes and AWS
- Making Environmental Science and Data Beautiful and Useful
- Asyncio in Depth
- Generate git release notes automatically
- How to create a seal only token for Hashicorp Vault
- RITA 2017 Innovation Award
- Empowering Environmental Science With Open Tools and Data
- Monitoring scalable infrastructure
- Using Jupyter notebooks for SysAdmin, CloudOps and DevOps workflows.
- Moving large volumes of data to S3
- Index.json
- Apple Airport Express Repair
- Building Telegraf for 32bit FreeBSD
2016 17
- Cloud Utilisation in the Sciences
- Processing Environmental Big Data in the Browser for Science
- SVG Animations
- Build games for iOS 10 with Xcode 8 and Game Maker Studio 1.4
- A game on the perception of symbols
- Running Telegraf inside a docker container
- Getting started with VMwares ESXi/vSphere API in Python
- Cracking Enigma with Go
- A note on AWS disk performance testing
- Interactive Docker containers
- Running a Docker container
- Killing Containers to Make Weather Beautiful
- What is Docker?
- How to use an Xbox 360 controller with OS X El Capitan
- MacBook Rebuild
- Pretty git logs with `git lg`
- Fixing the SSH roaming vulnerability (CVE-2016-0777)
2015 15
- Twenty Fifteen Roundup
- Thoughts on Star Wars: The Force Awakens
- A Raspberry Pi Docker Cluster
- Intro to Kubernetes
- Building with Kubernetes
- Quick Tip - git delete merged branches
- Quick Tip - em vs rem
- govspeak: An open source markup language
- Lab School: Docker
- Updating flightradar24 with a Raspberry Pi
- Collaborative article corrections in Jekyll
- Simple reading speed estimate in Jekyll
- Test your Jekyll blog with Travis CI
- Bullet Journaling in 2015
- How to install and configure inadyn on CentOS 6
2014 21
- How to install VMware Tools on Centos 6 with yum
- Twenty Fourteen Roundup
- Run OpenVPN on non-standard port with SELinux and Centos 6
- How to easy_install and pip through a proxy
- How to install the vSphere 5.5 Client on Windows 8
- Simple HTML Redirect
- How I value media and entertainment
- How to use an Xbox 360 controller with OS X Yosemite
- Learn How to Build Cool Things With Weather Data in Python
- What is semalt and why are they in my analytics?
- How to stop Google from scanning my site
- Amazon S3: s3cmd put ([Errno 32] Broken pipe)
- How to install OS X Yosemite Developer Preview Beta in Virtualbox
- How to use text expansion in OS X 10.9 Mavericks
- How to make screen recordings in OS X Mavericks 10.9
- NASA Space Apps Challenge 2014 Roundup
- How to prepare for a hackathon
- Python script: Recursively remove empty folders/directories
- Should I buy a cheap upgraded/reformatted SDHC micro SD card on eBay?
- Convert tweet hashtags, at-tags and urls to links with PHP and Regular Expressions
- Fixing VirtualBox verr_supdrv_component_not_found when selecting bridged networking on OS X 10.9
2013 10
- Google Charts IE7 IE8 Issue: Date formatting problem
- Mac OS X Terminal Theme: Piperita
- Bootcamp Windows 7 on a 2011 MacBook Pro without a SuperDrive
- Fixing "ERROR: Error 35: error:14077458:SSL routines:SSL23_GET_SERVER_HELLO: reason(1112)"
- Sort top command by cpu usage and set to default in OS X
- Why is there no space in the MySQL password parameter?
- Using the AddThis Share Buttons wordpress plugin in a custom theme
- Convincing Paypal Phishing Email
- Has Stack Overflow been hijacked?
- SSH without a password on OS X with ssh-copy-id