RoastGPT - An AI-Powered Fantasy Football Weekly Recap Generator

I'm in a couple of Fantasy Football leagues, and one of my favorite parts of Fantasy Football is the trash talk. I wanted to build an AI that could roast my friends' teams for me. So I built did what any good developer would do - I wrote a script which uses an Azure OpenAI service to generate a recap of the week's matchups, complete with roasting each team.

13 minute read

Lessons learned from GitHub Actions breaking change in ubuntu-latest runner image

GitHub pushed an update to the ubuntu-latest runner tag which updated it to use the ubuntu-24.04 image (as opposed to using the ubuntu-22.04 image). This caused breaking changes in, among other things, installing Python modules using PIP. This post was originally written to document the issue and how we resolved it, but GitHub has since rolled back the change to the ubuntu-latest runner tag. The post now serves as a lesson learned on why you should always install your own dependencies in GitHub Actions workflows.

7 minute read

Xebia Innovation Day - Creating a GitHub Copilot VSCode Chat Extension

Today was Innovation Day at Xebia, and for my team's project we decided to try creating a VSCode Chat extension for GitHub Copilot. The extension would allow you to utilize Copilot's AI capabilities to help write SQL queries without having to directly tell Copilot about the database schema - something that Copilot currently struggles with. We learned a lot of interesting things through this project, and I'm excited to share them with you!

21 minute read

GitHub Copilot Custom User Instructions

Have you ever wanted to be able to pre-define a set of instructions for GitHub Copilot to follow? In this post, we will explore how to set up custom user instructions for GitHub Copilot to enhance your coding experience.

9 minute read

Creating a Kubernetes Operator Using C#

The Kubernetes Operator pattern allows for deployment and management of complex and dynamic Kubernetes workloads. It consists of a Kubernetes workload which monitors for Custom Resource Definition objects and maintains a desired state based off of parameters passed into those objects. In this post, we'll take a look at the anatomy of an operator and how to create one using the KubeOps DotNet library.

16 minute read

My Thoughts On The GitHub Actions Runner Controller

GitHub Actions can be run using one of two options: Self-Hosted Runners or GitHub-Hosted Runners. Self-Hosted runners are usually hosted on dedicated VMs, but GitHub is developing a Kubernetes-based option, called the GitHub Actions Runner Controller. In this post, I'll explore the process of deploying, customizing, and using the Actions Runner Controller and give my recommendations on when to use it and not to use it.

9 minute read

Readable and Maintainable Code - Names Matter

Writing readable code makes it easier to maintain and understand. A lot of time that could be spent fixing bugs is spent simply trying to understand what code is doing, and that is often due to how things are named. In this blog post, I'm going to highlight a few naming practices that developers can improve on to make code more readable and easier to maintain.

6 minute read

How I Started My Blog In Under An Hour

I decided to start blogging again, and needed to spin up a blog site. GitHub pages is a great platform for this, so I decided to show how I managed to spin up my new blog in under an hour as my first blog post on the new blog site. The best part is it is 100% free, and you can do it too.

5 minute read