Adventures in AI

- 5 mins read

Recently, while waiting in the drive-through at McDonalds, I started thinking about how much I was really spending there. Mint used to have this information readily available, and my credit card company’s website probably has a spending chart somewhere, but I also knew that McDonald’s sent pretty detailed email receipts. It had become a common stop for me, and while this could have been just an idle thought, I decided to use the opportunity to compare Claude Code and MCP to find an answer. In the age of AI, anything is possible.

In Part 1, I explored installing the Tailscale (TS) K8S operator and adding an Ingress object to make a K8S Service available to the TS network over HTTP.

In this post, I want to cover different Egress and Ingress options and ways to connect apps on the TS network.

For more context, while I’ve been experimenting with kind and a virtual Kubernetes (K8S) cluster, I run a personal server running at home with plenty of resources and a virtual server that hosts my public web apps. Being able to connect the two servers over TS is one of my goals. It allows me to do more permanent and resource intensive things on my personal server, but also make them available publicly when I want.

I’m a big fan of Tailscale (TS) and the ease of use it brings to using Wireguard to securely connect servers and apps. They’ve recently been working on a Kubernetes Operator that makes it easy to integrate TS into Kubernetes (K8S). As I’ve personally been moving my internal self-hosted apps and public web apps to K8S, I’ve been curious to integrate the two.

Two big features I’m interested in and I’ll cover today:

Quarterly Calendar Project

- 3 mins read

Starting out during my Recurse Center retreat, I wanted to visualize and plan my 12 weeks of time. I’ve been working on ā€œdaily streaksā€ for habit building and wanted a visual tracker for my habits. Building a printable quarterly calendar seemed like a good initial project.

Several other printable calendars I’ve found recently, that were inspirational:

But I couldn’t find a ā€œquarterā€ or 12 week view to cover my Recurse timeframe!

Joining Recurse Center for W2 2024

- 2 mins read

I’m thrilled to announce that I’ve joined the Recurse Center for the Winter 2 batch, where I’ll be immersed in a 12-week community-focused retreat dedicated to programming and self-improvement. In their words, it’s a ā€œretreat where curious programmers recharge and grow.ā€

I’m fortunate to be in a stable financial position, allowing me to step outside my comfort zone and explore something new. While my career has been built on predictability and meeting expectations, I believe there’s value in venturing outside your comfort zone, especially when it aligns with your true self. My hope is to discover new passions and delve into them more deeply than I have lately. This experience brings back memories of my college days when I lived on a “special interest” dormitory floor for computers, called Computer Science House, that had a great community and environment for learning. Recurse Center reminds me of that fondly.

Hosting with Dokku

- 3 mins read

Having a platform to share my thoughts and work has always been important to me, even when I only have time to use it sparingly. I still like blogging. This blog also has been a great learning opportunity and with its latest upgrade: it’s now running 100% over HTTPS (thanks to [Let’s Encypt][2] and being being deployed by Dokku and Docker.

Dokku?

[Dokku][3] is a free replacement for Heroku, that you can run on your own server. Without using too many acronyms, it’s an app management tool built around Docker. I started [using Heroku][4] back in 2011, when they added support for Python. The simple command line interface for app deployment and free CPU time was a great selling point.

This weekend, I presented at PyConUK 2016, summarizing my recent experiences testing Python webpapps and libraries.

I’ve been writing Python for about 8 years now, mostly on a smaller scale, but the last few years at Yelp have been really interesting to see testing done at a larger scale. Testing has become really important to me, as it helps all the other pieces of your software fit together better.

It was great to be able to share what I’ve learned and brush up on my presentation skills. Unfortunately, I didn’t manage to record a video of the actual presentation, but that was also a lesson learned for when you are presenting.

Upgrading My Dotfiles To Symlinks

- 2 mins read

Tinkering with my configuration and dotfiles is a never ending hobby. After finding Github’s guide to dotfile configurations, I evaluated several of the repos and decided to upgrade my own dotfiles.

For the longest time, my home directory (/home/askedrelic on most systems) has been a git repo. This has mostly worked but has several problems:

  • everything writes to your home directory; you wind up with many of untracked files, unless you ignore them, which is then a pain to keep updating your .gitignore
  • easy to add files; mistype a filename or tab-complete and your whole .ssh folder could get added with your private keys
  • impossible to keep any sensitive files (atlhough this is mostly a side effect of keeping my dotfiles public on Github)
  • hard to initialize on new machines; git likes to clone to an empty directory and your home directory is never empty, even on new machines

Despite these complaints, this method has worked out me for several years. It has allowed me to use default git functionality (git-submodules) for my vim plugins and easily keep them up to date. I can git-pull and have the latest configurations by re-opening my shell.

Another Year, Another Set Of Backups

- 4 mins read

You might not be able to call it a New Years Resolution anyone, but it’s not too late to backup everything you did online last year. I usually get around to doing this in December/January over Christmas holiday, but this year I have been slacking. Maybe you have too. It’s not too late, make a backup!

Files

I have a couple services that I use for my documents, my writing, my photos, and everything else that is a file. Files are easiest to deal with, as long you have them organized easily. You always want your files in two places (your current computer and online), since you will drop your laptop and your current HDD will fail randomly. You want your files in a simple file format that doesn’t depend on a specific application: usually text, lossless image (PNG), or PDF. PDF might be a terrible format for technical reasons, but it’s a great way to preserve websites or Word documents exactly how they currently are. Every application has “Print as PDF”.

Practical Lessons Learned From Testing

- 5 mins read

After recently joining a much larger company and taking a look at my team’s product from different perspectives, I’ve found new value from testing. While running a small startup exploring a business market, trying new features was a daily or weekly affair; you have to make tradeoffs with code quality, feature set, or speed of delivery. Code testing, especially in quantity of unit tests, had been something I usually traded for speed of delivery. If I can deliver a feature that looks correct from a high-level business perspective, then the code is probably correct based upon my experience with the programming language. However, no programmer is perfect and preparing for failure is a good idea.