Tobias McNulty

Tobias co-founded Caktus in 2007 and, as Chief Executive Officer, guides the strategic vision of the company. He has been an active member of the Django development community, is a core developer of the RapidSMS framework, and makes regular contributions to both the projects. He is the co-author of and chief advocate for the messages framework that was introduced in Django 1.2 and has helped  Colin organize several successful Django development sprints in the North Carolina Research Triangle area.

Tobias is also a passionate believer in the power of technology to improve public health and obtained a Masters of Public Health at the University of North Carolina - Chapel Hill in 2016. When he’s not writing software, Tobias loves cooking, making pottery, and cycling.

2025


How to Migrate your Python & Django Projects to uv

Editor’s note: This post was updated on July 17th, 2025, to use the PATH_add hook for direnv and to recommend including uv sync --locked in your .envrc file.

cover-djangocon-europe-2025-highlights.jpg

DjangoCon Europe 2025 Highlights

Three Cakti recently attended DjangoCon Europe 2025 in Dublin and it was a wonderful experience! It was great to see and chat with various Django community members we usually only see once or twice a year. Beyond that, we were most impressed by the consistently high quality of the talks throughout all three days of the conference. It was a pleasure to listen to so many excellent presentations, including the lightning talks at the end of each day. Here are some of our favorite talks.

Tips for Tracking Django Model Changes with django-pghistory

Django and its admin interface are a big part of why Caktus uses Django, but the admin's ability to log database changes is limited. For example, it shows only changes made via the Django admin, not via other parts of the site.

cover-cakti-share-their-favorite-tools-for-streamlined-worklows.jpg

Cakti Share Their Favorite Tools For Streamlined Workflows

Let’s jump into it!

At Caktus, we’re always looking for tools that help us streamline our workflows, increase productivity, and make our day-to-day tasks more efficient. Whether you’re managing projects, writing code, or debugging, the right tools can make all the difference. Here are some of our favorite tools that we love using to get the job done!

How to Use regexp_matches and regexp_match in PostgreSQL

Introduction

regexp_matches() and regexp_match() are two similar string functions that support regular expression matching directly in the PostgreSQL database. regexp_matches() was added in PostgreSQL 8.3, and regexp_match() was added in PostgreSQL 10 (keep reading to see how ChatGPT struggled to answer this question).

cover-private-ngrok-dev-servers-tailscale.png

Private, ngrok-like Dev Servers with Tailscale

This past week, I learned that it's possible to run Tailscale in a local docker-compose.yml on a developer's workstation, and securely allow access to services in the docker-compose file to other users on your Tailnet.

How to Deploy Selectively to Production

Sometimes, it’s necessary to deploy a set of features and/or bug fixes to production before part of the current “testing” branch has been tested completely in a Q/A or staging environment.

Git

How to fix factory_boy post-generation deprecation warnings

We use factory_boy for bootstrapping test data on many Python and Django projects at Caktus. Recently, we encountered a deprecation warning on an older project that had been using factory_boy for some time:

2024


cover-reflections-djangocon-us-2024-highlights-takeaways-and-community-connections.jpg

Reflections on DjangoCon US 2024: Highlights, Takeaways, and Community Connections

DjangoCon 2024 was a resounding success for the community, with attendees from all over the world gathering to learn about the latest developments in Django and to connect with the Django community. Caktus was well-represented at the conference, with six of our team members attending. In this blog post, we share our experiences at DjangoCon 2024, including our favorite talks, the people we met, and the things we learned. We also offer some tips for future attendees on how to get the most out of DjangoCon.

2023


How to Automate Google Sheets to ODK Central

ODK is a popular tool for offline data collection with a thriving user community. Like a number of other offline data collection tools, it uses the XLSForm standard for authoring forms. While convenient to author and exchange, authoring the forms in Excel means each iteration of the form must be uploaded to the ODK Central server that distributes forms to mobile data collection applications, such as ODK Collect.

ODK