Simon Kagwi

2025


cover.png

Learning LLM Basics with Ollama

We have recently started learning about LLMs and how we can integrate them into our development projects, and we will be documenting our learning in a series of blog posts. In our first installment of the series, we learned about the OpenAI API. In this one, we will experiment with Ollama, which is an open-source application that allows you to download, run, and interact with LLMs on your own hardware. By running models locally, you maintain complete control over your data and can use LLMs without an internet connection. It also allows you to easily experiment with different models.

How We Replaced Bit.ly with Our Own URL Shortener Using Hugo and Cloudflare Pages

We have been using Bit.ly to create easily shareable short URLs, but we recently decided to replace it with our own solution. We created a Hugo-based static website where we could create the short URLs, handle redirects to their respective long URLs, and have a page for each short URL displaying its QR code.

cover.png

Learning LLM Basics with OpenAI

For some time now, we’ve been using tools like ChatGPT and CoPilot for day-to-day tasks, but mostly through the conversational AI chatbots they provide. We’ve used them for everything from drafting emails to providing type-ahead coding assistance. We haven’t, however, gone a step further and integrated them into a development project. Honestly, we weren’t sure where to start. Looking into the available options, you quickly run into a dozen new concepts, from vector stores to agents, and different SDKs that all seem to solve similar problems.

cover.png

How to migrate from pip-tools to uv

At Caktus, many of our projects use pip-tools for dependency management. Following Tobias’ post How to Migrate your Python & Django Projects to uv, we were looking to migrate other projects to uv, but the path seemed less clear with existing pip-tools setups. Our requirements are often spread across multiple files, like this:

How to Deploy a Hugo Site to Cloudflare Pages With Github Actions

We recently moved this website from Django to a static website made using Hugo, and decided to use Cloudflare Pages to deploy it. Cloudflare Pages offers automatic deployments, meaning it can automatically build and deploy a website when changes are pushed to a GitHub branch. This is simple to set up and works well. However, we wanted to build and deploy using GitHub Actions instead, so that the build logs would be easily accessible on GitHub. Cloudflare’s wrangler-action makes it simple to set up a GitHub Actions workflow for this.

How to Create a Helm Chart for a Django App

At Caktus, we use Helm charts to simplify our deployment process for Django projects. Helm is a package manager for Kubernetes, and using Helm charts allows us to automate the process of writing Kubernetes configuration files for our Django applications. We use it together with GitHub Actions and Ansible to streamline our deployment processes.

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:

2009


Testing Django Views for Concurrency Issues (Updated for Django 4.2 in 2024)

Editor's note: This post was originally published in May, 2009 and was updated in December, 2024 to incorporate changes in Django and improvements suggested by our readers. It has also been tested for compatibility as of the Django 4.2 release.