Software Engineer

Jason Hancock

last update:

This is a follow up to my article about generating a CRD and Golang client. In my previous article, I generated a CRD and Go client for that CRD with code-generator. My requirements changed slightly for the project I was working on and now the CRD objects I’m going to be creating are NOT going to be namespaced (they will have “scope: Cluster” in the CRD definition), so I needed to do some regeneration.

UPDATE: I’ve redone this work with kubebuilder and documented that here. That process is much smoother. This document is mainly intended for myself to reference in the future the next time I have to build a CRD. The code can be found in the jasonhancock/examplecrd repo on Github. I was recently building something and decided that I was going to store some data as a Custom Resource inside the k8s cluster.

This is part 3 of a series. Part 1 Part 2 We left off part 2 of the series with the hardware assembled, installed into the case, case mounted into the rack, and the base OS image booted up. I decided to install k3s as it seemed ideally suited to the nature of this cluster. The instructions in the Quick Start Guide worked well, however I ran into an issue that required me to modify the /boot/cmdline.

This is part 2 of a series. Part 1 Part 3 I have a shallow network rack in my office closet where my router, switch, and other miscellaneous equipment is mounted. I decided to design and 3D print a 1u case to house the equipment. I found a plate with the openings for all the ports on Thingiverse. I started with that and based on the mechanical drawings designed and printed an enclosure in three pieces.

This is part 1 of a series. Part 2 Part 3 I’ve decided to build a small home Kubernetes cluster for various reasons. I do a lot of k8s stuff at work and it would be nice to have a dev cluster other than the Docker Desktop built-in k8s cluster (it’s usually broken more often than it’s working). I have a few containerized workloads I run on my Synology NAS, but it’s not very powerful.

I put together a repository to that I hope might help someone bootstrap their next Go (golang) project backed by a sqlite database. I integrated a migration framework and added a test helper to help spin ephemeral databases during testing. You can find the code at

I coached my sons’ baseball teams this year and for my older son, the team’s manager and I used GameChanger to keep track of statistics. Throughout the season, we used the statistics to help set the lineup and the kids also enjoyed hearing about their stats. Towards the end of the season, we decided that we wanted to make baseball cards for the kids with their stats on them. I settled on using the 1987 Topps style card for the front and wanted something similar to the 1987 style card back.

I participated in the 2020 FT Roundup ham radio contest. This was my first time participating in a ham radio contest. The results can be found here. I placed 21st out of 33 in California. I placed 455 out of 927 worldwide in the single operator category. For my first attempt at this, with my extremely meager compromised antenna setup and not operating for the entire contest period, I think I did pretty well.

Working from home during the pandemic has presented some unique challenges for my family. Lately the kids (and occasionally my wife) will interrupt me while in a meeting. I wanted some sort of way to indicate to them that I was in a meeting. Being an amateur radio operator, I thought an “on-air” indicator light would be fitting. I wanted to be able to control it remotely. I looked around online to see if there was one that would fit my needs, thinking I could use a smart switch to turn it on/off.

I’ve been dabbling with some of the log formats commonly used in the amateur radio world. One of those formats is the Cabrillo format. I built a parser in Go for reading Cabrillo formated contest logs, but I’m unhappy with one aspect and I think it’s a deficit in the Cabrillo specification. If the exchange field of a QSO is supposed to contain a space between multiple pieces of information, you have to know that ahead of time otherwise you can’t properly parse the log.