RSSAmplifier

Blog

Home on Jamie Phillips

Recent content in Home on Jamie Phillips

phillipsj.netRSS feed ↗399 posts

Latest posts

My Custom AI Skills

It’s funny that I struggled when I first started using AI to really lean into it. I was fine with the code completion, answering questions, searching the docs, etc. Then one day I realized that I could just have it create skills for me as I found things I repeatedly did. So here are a few examples of skills that I have made and what they could look like for you. These are not 100% my…

Uploading a CSV Workout to TrainingPeaks using AI

I don’t discuss my enjoyment of cycling here much; however, it’s probably one of my favorite activities. My preference is mountain biking, but being on a bicycle of any kind creates a lot of joy for me. I have been doing training plans for about the last year, and I am using TrainingPeaks to purchase the plans and track them. However, it seems that there isn’t an easy way as an…

My Current AI Workflow

First thing every morning, I open Claude Desktop, and I start off by brainstorming the three things I want to get done that day. I have been in that pattern for several years after having read “Getting Results the Agile Way” . After I list the three things I need done, I will look at email, Slack, etc., and see if there are any other tasks I need to add to my list. Then I ask Claude to create me a…

Stooge Moto Bar Review

As I have started doing longer rides, I realized that I wasn’t as happy as I should be with my cockpit on my Trek Roscoe. I have been running the PNW Range Bar for a few years, which are more comfortable than the stock bar that came with the bike. I finally realized after reading this post by Andrew Major that it was the change in sweep that made me like the Range bar. However, maybe ten…

The AWS Rust SDK Experience

I finally found the opportunity to use Rust in a real application. I needed to create an AWS Lambda , which wasn’t very complex, and AWS has a Rust SDK , so the stars aligned. I have been wanting to use Rust more over the years, and I can say that the experience has been great. The AWS SDK appears comprehensive and has many features I enjoyed using. One of the signatures for an EventBridge…

It Doesn't Get Any Easier

The title of this post says it all about the fields of software engineering, DevOps, and site reliability engineering. These fields don’t actually become any easier; they continually increase in complexity. This complexity can be due to increased needs, improper design, etc. We have all kinds of specialists in a specific area, as being a generalist is even more difficult. It’s funny…

The Need for Planning

I had a funny conversation today. We were chatting about AI agents and how people are using them. I brought up the incident that happened at Replit and what a few of us have been seeing, how a lot of people are using these agents. We slowly started discussing how AI agents require context and a plan to really produce a good solution. Then you slowly continue to prompt it to refine the solution. Of…

New Home Lab Part 3: Observability

My new home lab is getting close to having the core setup complete. I want to run an observability platform in my home lab for learning so I took a brief hiatus on the home lab work to create two addons for MicroK8s. The first addon is one for OpenTelemetry and the other addon is for OpenObserve . You can find these addons in my new addons repository here . I showed how those are installed in the…

OpenObserve Addon for Microk8s

In a previous post, I mentioned the addons repository that I had created for MicroK8s . There is the existing OpenTelemetry Operator addon and now there is a new addon for OpenObserve . I had looked at a few options and decided to try this out as my observability platform. Let’s check out how to install it. $ microk8s addons repo add phillipsj https://github.com/phillipsj/microk8s-addons…

OpenTelemetry Operator Addon for MicroK8s

As I have been working on setting up a home lab for Kubernetes for learning, I have settled on MicroK8s as my distribution of choice. It’s easy to install, fairly well supported and comes with lots of addons . Yes, many addons are just convenience methods for installing a Helm chart or manifest which I like. Since I plan to install OpenTelemetry on my cluster, I decided to create an addon.…

New Home Lab Part 2: MicroK8s

My last post I had an outline of the steps I wanted to take. I completed all the hardware configuration and setup of Ubuntu. This leaves just getting MicroK8s installed and configured. I said that I was going to have automation of my cluster, and that is exactly how I set it up. I took a deep dive into launch configurations which I successfully used to create my MicroK8s cluster. The only tricky…

New Home Lab Part 1

It’s time to get the home lab back up and running since I need an environment that I can use to do some learning. I’m focusing on getting a Kubernetes cluster up with all the tools that interest me. I want to be able to start simple and slowly build in more complexity. I also want maintenance to be straightforward. That said, I will use an Intel NUC with plenty of RAM and storage. I will be…

Kustomize for OTel Operator

If you have been reading my blog for a while, you may already know that I’m not the biggest fan of Helm . If you’re new here, hi, I’m not a fan of Helm. I feel it adds a lot of complexities that are seldom worth it, and it’s hard to build a Helm chart well, note I said well. Many projects have started publishing manifests for their projects, and the OpenTelemetry Operator is one…

Dusting Off the Cobwebs

Just a quick post to say that after neglecting my blog for a while, I decided that I would dust off the cobwebs. I have brought the blog up to the latest Hugo standards. I removed a few pages and made tweaks to a few others to remove some warnings that were getting flagged when building. My blog is now ready for 2025.

Practice Like You Play

I grew up playing football, and a consistent phrase I always heard was “practice like you play.” There are several different derivatives of this same phrase that have a similar meaning. This was told as a reminder that practicing was preparation for game day and that if you didn’t practice well, you probably wouldn’t play well on game day. My experience is that it’s true. If you didn’t focus on…

Review: Prompt Engineering for Generative AI

There is a lot of hype around AI, specifically generative AI. I understand a lot of the concepts around ML, LLMs, and text analysis that I picked up through different parts of my education and career. I personally feel AI is a misnomer, but I’m digressing a little on the point. I wanted to get myself up to speed on prompt engineering techniques, so I can better understand how to leverage…

PSA: Use Linters for Everything

This is a public service announcement. Please use linters if they’re available. Most things have linters available to check your code, YAML, Dockerfiles, Helm charts, Kubernetes manifests, Argo, etc. I think most people know about linters in the code space. Using tools like Ruff or PyLint for Python, JSLint for JavaScript, and Staticcheck for Go are just a few that people may have used. Did you…

Finding the Latest Version When It's Not Easy Using Python

Do you want to know a frustrating problem that I often face? I need to download some software as part of a pipeline that doesn’t have an easy way to download the latest version. This is often a challenging endeavor as many vendors don’t provide the latest tag to reference. I could probably have achieved this similarly to how it was done with this snippet of bash. View this gist on…

Thoughts on Devops and Platform Engineering

I read a LinkedIn Post that got me thinking about solidifying my thoughts on the topic. I was excited about platform engineering for a short period, then I just wasn’t. Let me break this down as this also applies to a lot of DevOps processes. This is going to be a long post, so I will just provide a TLDR, but I think it deserves a full read. TLDR I feel platform engineering is an unnecessary…

Custom Tools: Assists

I said in a previous post that I was going to be working on streamlining a lot of my personal processes and ways that I do things. One of the ways that I’m going to be achieving this is my working on my own custom CLI tool that packages of lots of the things that I find myself doing on a regular basis. With that said, I would like to introduce you all to Assists . It is a Python-based CLI…

Optional Properties in Terraform

I stumbled across an interesting issue this week, and I thought I would share. I needed to retrofit additional capability into a module without causing any changes. The Terraform would pass a map to the module and loop over it in a for each on a resource. There was a property that I wanted to see a value for only if that property existed in the object. The second item was to then use another map…

Cookiecutter Terraform

I have been wanting a more streamlined way to create my preferred style of creating a Terraform project. My preferred style is very close to what is documented in the official docs with a few modifications around how environments and backends are handled. I like to put as much configuration in source control and var files as possible. I strictly pass secrets using environment variables. I’ve…

New Relic SQL Server Monitoring With gMSA

Group managed service accounts , called gMSA, are a great way to allow automated processes to access resources using a domain account without worry about rotating passwords. One big issue with gMSA is that some software doesn’t work using it. I need to set the New Relic SQL Server plugin to monitor SQL Server using a gMSA, which took a little digging to work out how to make that happen. The…

Adding a Certificate to the Java Keystore in a Container

This was a fun little bit of knowledge to learn, as I haven’t worked with Java very much. I didn’t have a certificate available that was required to be available to trust the endpoint that was being called. Normally, I would add the certificate to the host, but it seems Java requires it to be added to the keystore. I also didn’t have the certificate handy, so I needed to download…

Moving Data Stored in AWS S3

If you have known me or have been following this blog for a while, you know that I’ve traditionally been much more Azure-focused. While I have been more focused on Azure, that doesn’t mean that I don’t know or use other clouds. This may be an unpopular opinion, but I feel that at the end of the day, all clouds are the same. They may have different names for things, but the…

Waiting for an OpenSearch Snapshot

I ran into an interesting challenge while doing some automation tasks. Taking manual snapshots of OpenSearch is an interesting challenge that I just didn’t expect. Everything isn’t very clear and I learned a lot figuring this out. Given that it was more challenging than expected I thought I would create a post to share what I discovered for future reference for myself and everyone else…

Podcasts Now Listed

I was asked if I had a list of all my podcasts appearences available. I have published a page on my blog here if you are interested. Thanks, Jamie

Review: Pearl Izumi X-Alp Launch Flat

I have kept this blog focused on tech for as long as I have had it. Like everyone else, I have hobbies outside of tech and often I’m looking for reviews on products that I can’t seem to find. I decided that I would write reviews of these products and post them myself to help others. Now that the lead-in is done, let’s get down to the review. I have been a long-time Five Ten user…

Learning and Growing in DevOps

I have been seeing a lot of posts recently on LinkedIn lately titled something like “Skills needed for being a DevOps Engineer” or “How to become a DevOps expert”. Instead of responding to these posts, I decided I would just write a blog post to share my thoughts so I can reference it in the future. Let me start by saying that tools are not the most important thing to learn…

Odd Issue Using BytesIO With Boto3

I’ve been trying to use more Python lately and I ran across an odd issue that I had to solve. I don’t know if it’s something that I’m doing incorrectly, a bug, or just a quirk. Hey this is Jamie from the future. I wasn’t doing it correctly. Anytime you want to read an IO stream object in Python it’s always best practice to call seek and set it to the beginning…

DIY Azure PIM With Kubernetes and the Azure Operator

I have been wanting to learn the Azure Operator for about a year. I often find it difficult to spend the time to learn something unless I have a real-world problem to solve, or I just get curious. It seems that the time has finally come for me to dive into it. The problem to be solved has been something that our team has been discussing for some time. A self-service opportunity for getting…

Using Terraform Outputs in Powershell

I have been using Terraform for more than five years, and in that time, I’ve never needed to consume outputs from executed Terraform until recently. It was a strange realization, and I found myself deciding the best way to do it. You may have noticed that I have been using Terraform with .NET , and I’ve also been using a project called Invoke-Build for my build scripting. I have found…

Azure DevOps, PATs, Git, and Terraform Modules

I learned a new trick this past week. The context I learned this in is how to access Terraform modules stored in a git repository , specifically Azure DevOps, without needing to use SSH and an SSH key. The SSH approach works fine, but I struggle with enabling that approach in a CI/CD system. Having to store that SSH key and ensure that it’s correctly in each environment is often cumbersome…

Terraform as a .NET CLI Tool

I have been working on a project in my limited free time the last couple of weeks called dotnet-terraform . The project packages Terraform as a .NET CLI tool that will be available for Windows x64, Linux x64, Linux arm64, and MacOS arm64. I’m only supporting LTS versions of.NET and the platforms listed previously unless someone requests to support additional versions or platforms. Why I…

Azure App Service Certificate and Terraform

I recently ran across an interesting issue with using Terraform to load an existing SSL certificate located in a key vault not in the same subscription or resource group to an Azure App Service. Here is an example of what was being used. resource 'azurerm_app_service_certificate' 'main' { name = 'test-eus-cert' resource_group_name = azurerm_resource_group . main . name location =…

End of the Silverblue Challenge

I ended the two-month challenge a couple of weeks ago. I successfully used it for two months and I don’t have any complaints. Installing flatpaks for desktop applications was a breeze and leveraging toolboxes for working with CLI applications didn’t pose any significant issues. I guess the big question is, will I be sticking with it? The short answer is no, I won’t be. I like the…

Initial Silverblue Device and Blogging Setup

It’s April and I’ve started my Silverblue journey. I picked a laptop to start as that allows me to chill on the couch and think about how I want to handle the setup. I will be using Ansible to do my installation of Flatpaks and my Toolbox setups. The laptop that I’m using is an Asus Vivobook with a 12th Gen Intel i3-1220p and 12GB of RAM. Silverblue was installed flawlessly and…

Fedora Silverblue Two Month Challenge

Starting in April I’m going to start a Fedora Silverblue challenge for two months. I’m going to do blogging, DevOps work, and .NET development using it. I’m going to have to put Flatpak and Toolbox through the paces to see if I can make it work for me. As a daily driver doing normal tasks, I’m positive Silverblue is going to work great. It’s the other items that…

Query Loggly Events With .NET

I haven’t done a lot of .NET development lately and I found this a fun little program to create. I needed to be able to query Loggly to get a list of events. Loggly returns a max number of results, if your results are larger than that max then your results become paginated. Loggly paginates using a JSON API inspired next link. After a little research as to what the latest recommended…

SSH Key-Based Auth for Windows

We often don’t think about setting up key-based authentication using SSH for Windows. It often comes in very handy for automation tasks and other headless use cases. After digging around, I discovered that it isn’t as straightforward as one would think. There are a couple of tweaks that need to be made outside of the documentation provided here . One of the tweaks is to ensure that you…

Terraforming a Terraform Project

I am back with another fun use of Terraform. I have this silly idea to bootstrap a Terraform project using Terraform. It’s a pretty interesting idea and these thought exercises push your understanding of what is possible. Let’s get into it. Creating the project I will be using the local provider and HashiCorp’s recommended project structure . The first step is to add our…

Validating Variables in Terraform

There are always new features being added to Terraform and a more recent set of features is the ability to put validations on your variables. I am going to add validation to my Terraform weather application called Terra Weather . I am going to put some constraints on the zipcode variable to ensure that it is only a number and that it’s only five digits. This limits it to just the USA right…

Terra Weather: A Weather App Using Terraform

I finally feel like creating some content again. It’s good to want to do fun things with tools that you like working with. I had this idea to see if I could be a version of my weather app like I did in Rust and Go using Terraform. I used the HTTP Provider along with post conditions to achieve it. I then used the OpenWeatherMap API to get the weather. You will need to set up a straightforward…

Kubernetes, Windows, and Air-gapped Environments

Air-gapped environments are always challenging to build solutions. Ensuring that you have all the dependencies documented and available is challenging enough for a simple application. More complex solutions like a container management platform for Kubernetes increases that challenge by 20-fold. You have to ensure that you have an OCI registry available, a certificate authority, and a list of…

Sway Transforms the Pinebook Pro

It has been a few months since I installed Manjaro ARM Sway Edition on my Pinebook Pro . It has taken since then to really think about the experince. I don’t use my Pinebook Pro often and oddly enough, I am able to pick it up and remember how to use Sway . I find Sway intuitive which was my largest concern trying to use it and that just isn’t the case. I have been able to consistently…

I'm Enjoying .NET Once Again

I recently started a SUSE Hack week project in .NET with a co-worker this week. This is the first serious .NET development that I’ve done in over a year and a half. I have been doing primarily Go development during that time which I found refreshing. Now with a little time away and doing this new project I realize that I enjoy using it once again. The language and the tooling have changed a…

Deserializing JSON or YAML With Rust

It’s been almost a year since I have written any Rust . I am a little rusty, to say the least, and things have changed a little. I will say that every time I come back to a functional style of programming after being away it feels more natural. I wanted to know how to deserialize a JSON or YAML file. In Go, it would be pretty easy to do it with struct tags and an if check. I stumbled across…

Yes, you can unit test Helm Charts

I have found creating Helm charts a challenge as it’s difficult to test as a chart gets more complex. Linting, packaging, etc. all help ease the pain and need to be used as part of a robust continuous integration, CI, process for maintaining charts. I wanted something more and started researching if it’s possible to unit test a Helm chart. After a little searching, I found Terratest ,…

Random Thoughts on Dev Processes

This post contains affiliate links. If you use these links to buy something I may earn a commission. I was sitting around thinking today about why I have some of the practices and beliefs that I have about the development processes. Often these practices and beliefs don’t appear shared among others and I am always curious how I have developed these over my career. Some of these practices and…

Hybrid Kubernetes Clusters Part 1

There are tons of articles about all aspects of Kubernetes. The one area that I don’t feel gets enough coverage is all the considerations of the Kubernetes cluster that aren’t uniform in the cluster operating system or architecture. These clusters are what people have been calling hybrid or mixed workload clusters. I prefer the hybrid designation. Let’s define a hybrid cluster.…