Colin Copeland
Colin co-founded Caktus in 2007. As Chief Technical Officer, he helps ensure that Caktus remains at the forefront of the open source community. He regularly implements services and products to better serve clients. He loves coding and still actively works on client projects, often as lead developer.
A proponent of automated testing and continuous integration, Colin is always researching best practices and creating efficiencies to improve deployment processes and provide outstanding support for Caktus clients. He particularly enjoys working on social innovation projects, some of which he’s become involved with through Code For Durham, a civic hacking brigade, which he helped to found around 2013.
One of Colin’s favorite, long-term projects was building the Open Data Policing NC website for the Southern Coalition for Social Justice, which displayed North Carolina police stop data. As a result of the project, Colin was invited to the White House Police Data Initiative in 2016 to share his ideas on how to ensure law enforcement transparency and accountability. In 2020-2021, Colin worked to relaunch the Open Data Policing NC website as NC Cop Watch. It draws on public records to publish up-to-date stop, search, and use-of-force data — broken down by race and ethnicity.
When Colin isn’t working on client projects, he continues to be motivated by volunteering through Code for Durham. He also enjoys baking, playing piano, and spending time with his family.
Hear more about Colin, his background, and his interests in this Modern CTO podcast and the DjangoChat podcast. You can also connect with him on GitHub, LinkedIn, and Twitter.
2025

Handling Configuration and Server Snippets When Upgrading to ingress-nginx 1.12.0
As part of our ongoing Sustainability and Maintenance efforts, we are upgrading our Kubernetes clusters to version 1.32. Much like a major Django upgrade, this process requires us to update other key components to ensure they remain compatible. One of these is the ingress-nginx controller, which manages external access to the cluster.

Avoiding Timezone Traps: Correctly Extracting Date/Time Subfields in Django with PostgreSQL
Working with timezones can sometimes lead to confusing results,
especially when combining Django's ORM, raw SQL for performance (like
in PostgreSQL materialized views), and specific timezone requirements. I
recently had an issue while aggregating traffic stop data by year, where
all yearly calculations needed to reflect the 'America/New_York'
(EST/EDT) timezone, even though our original data contained
timestamp with time zone
fields. We were using
django-pgviews-redux
to manage materialized views, and I mistakenly attempted to apply
timezone logic to a date
field that had no time or timezone
information.

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.

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!

Upgrade Smarter, Not Harder: Python Tools for Code Modernization
Upgrading projects is somewhat equivalent to flossing, you know you have to do it, but rarely make time for it. After all, if the project is in active development, there are exciting new features to build. And we all know that new features > project upgrades. Well not to worry, Caktus wants to make you aware of some tools that will save you from considerable repetitive work & time while simultaneously modernizing your codebase. Combined, these tools will automate part of the upgrade process, decreasing the likelihood of neglecting parts of the codebase.

A Helpful Guide to Solving Common Poetry Issues
We don't often use Poetry, the Python packaging and dependency management tool, but when we do, we usually look up and re-learn the same things repeatedly. This post is a quick reference for some of the recent issues we encountered when using Poetry.
2024

Getting Started with Dagster
Recently, Caktus has been using Tailscale to manage VPN connections between Android tablets and a central server. We wanted to report on the devices connected to the network using the Tailscale API. While we could use tools like Celery to fetch data from the API and load it into a database—given its widespread use in the Django ecosystem—we also wanted to explore other options.
2023

Migrate to Amazon EKS Add-ons
Amazon Elastic Kubernetes Service (Amazon EKS) released support for operational cluster add-on software, or Amazon EKS add-ons, around Kubernetes version 1.19 in May 2021. These include:

Update an Amazon EKS cluster Kubernetes version to 1.23+
Introduction
Caktus is committed to developing and maintaining high-quality web applications for clients, so we focus on software sustainability. Software sustainability refers to the ability of software to continue to function as expected over time, even as hardware and software environments change. It involves maintaining and updating software to remain reliable, secure, and compatible with new hardware and software technologies. Additionally, from a security perspective, attackers can exploit software vulnerabilities to gain unauthorized access to systems or data. Keeping software up-to-date with the latest security patches helps to reduce the risk of these vulnerabilities being exploited.

Analyze data with SQL window functions
We regularly use tools like PostgreSQL, Pandas, and Jupyter Notebooks to analyze data here at Caktus. Recently, we were reviewing North Carolina traffic stop data for the NC CopWatch project and had the opportunity to use PostgreSQL's window functions, which are helpful when aggregating data.