Category: Random

  • Clearing the Clutter: Physical and Digital

    Over the past few weeks, I’ve been on both a physical and digital cleaning spree. It was long overdue, and honestly, it feels like a weight has been lifted from my shoulders.

    Winterizing everything

    Technically, fall just started a week ago. But in the Northeast, “fall” can mean anything from 80-degree afternoons to an early snowstorm. With school and sports in full swing, the pool had seen its last swim of the season, which meant it was time to close things up. Along with that came the annual migration of tropical plants into the house for the winter.

    Before I could even get there, though, my storage shed and garage were in desperate need of a purge. Ten contractor bags later, I finally had the space to neatly store the things that actually matter.

    With that newfound space came the itch to reorganize. I moved a few items from the garage to the shed, built out some shelves and lofts, and—of course—came up with a dozen new project ideas, like adding a ramp to the shed. Luckily, I reined in the scope creep and wrapped things up neatly for winter.

    Digital Destruction

    On the digital front, I’d been putting off a project for a while: decommissioning my local Active Directory domain. The only reason I had one in the first place was to make managing Windows servers easier. But as I’ve shifted to Proxmox and Kubernetes clusters, the need for Active Directory dropped off pretty quickly.

    Most of my DNS had already moved to my Unifi Gateway. The only holdup was that a few personal machines were still joined to the domain, meaning I had to migrate user profiles. Not difficult—just tedious.

    In full cleanup mode, I finally bit the bullet. After an hour or so per machine, everything was running on local profiles, disconnected from the domain. With that, I shut down the AD servers and haven’t looked back.

    Streamlining

    I’m happy with where things landed. While I don’t have a centralized user directory anymore, I’ve gained flexibility—and peace of mind. My AD domain was running on “lab-grade” hardware, so losing it would’ve been a headache. Now, I don’t have to worry.

    Nearly everything powering my home automation has already been moved off the lab gear, except for a single NodeRed instance. I haven’t decided where to run it yet, but it’ll be migrated soon.

    With this cleanup, I’ve officially decommissioned my last two Windows servers—the domain controllers. My home lab is now fully containerized, and my garage and shed are finally ready for winter.

    In short: a fall purge on both fronts—physical and digital—left me with more space, less clutter, and a lot more breathing room.

  • When “as code” makes a difference

    I spent a considerable amount of time setting up my home lab with a high degree of infrastructure and deployment “as code.” Googling “Infrastructure as Code” or “Declarative GitOps” will highlight the breadth of this topic, and I have no less than 10 different posts on my current setup. So what did all this effort get me?

    Effortless Updates

    A quick Powershell script lets me update my GitOps repositories with the latest versions of the applications I am running. With the configurability of ArgoCD, however, those updates are not immediately rolled out. My ArgoCD configurations are setup for manual sync, which gives me the ability to compare changes before they are applied.

    Could I automatically sync? Well, sure, and 9 times out of 10, it would work just fine. But more than once, I ran into updates which required some additional preparation or conversion, so I still have the ability to hold off on upgrades until I am ready.

    Helpful Rollbacks

    Even after synchronization, sometimes things do not go according to plan. Recently, as an example, an upgrade to Argo 2.12 broke my application sets because of a templating issue. Had I been manually managing my applications, that would have meant a manual downgrade or a hacky workaround. Now, well, I just rolled back to the previous version that I had deployed and will patiently await a fix.

    Disaster Recovery

    My impatience caused me to wreck my non-production cluster beyond repair. With my declarative GitOps setup, restoring that cluster was pretty simple:

    • Create a new cluster
    • Add the new cluster to ArgoCD
    • Modify the cluster secret in Argo with labels to install my cluster tools
    • Modify the applications to use the new cluster URL

    As it was my non-production instance, I did not have any volumes/data that needed transferred over, so I have not yet tested that particular bit. However, since my volumes are mounted with consistent name generation, I believe data transfers should work equally well.

    Conclusion

    Even in my home lab, a level of “as code” helps keep things running smoothly. You should try it!

  • A Quick WSL Swap

    I have been using WSL and Ubuntu 22.04 a lot more in recent weeks. From virtual environments for Python development to the ability to use Podman to run container images, the tooling supports some of the work I do much better than Windows does.

    But Ubuntu 22.04 is old! I love the predictable LTS releases, but two years is an eternity in software, and I was looking forward to the 22.04 release.

    Upgrade or Fresh Start?

    I looked at a few options for upgrading my existing Ubuntu 22.04 WSL instance, but I really did not like what I read. The guidance basically suggested it was a “try at your own risk” scenario.

    I took a quick inventory of what was actually on my WSL image. As it turns out, not too much. Aside from some of my standard profile settings, I only have a few files that were not available in some of my Github repositories. Additionally, since you can have multiple instances of WSL running, the easiest solution I could find was to stand up a new 24.04 image and copy my settings and files over.

    Is that it?

    Shockingly, yes. Installing 24.04 is as simple as opening it in the Microsoft store and downloading it. Once that was done, I ran through the quick provisioning to setup the basics, and then copied my profile and file.

    I was able to utilize scp for most of the copying, although I also realized that I could copy files from Windows using the \\wsl.localhost paths. Either way, it didn’t take very long before I had Ubuntu 24.04 up and running.

    I still have 22.04 installed, and I haven’t deleted that image just yet. I figure I’ll keep it around for another month and, if I don’t have to turn it back on, I probably don’t need anything on it.

  • I appreciate feedback, but..

    I am really tired of deleting hundreds of spam comments every couple of days. While I have had a few posts generate some good feedback, generally, all I get is spam.

    It was not too bad until the last few months, when spam volume increased by an order of magnitude. I would rather not burn resources, even for a few days, on ridiculous incoming spam.

    So, while I really appreciate any feedback on my posts, you will have to find another channel through which to contact me. The management of spam comments far outweighs anything I have gained from the comments I have received.

  • Hitting my underwater stride

    It’s not always about tech. A recent trip to Cozumel has only strengthened my resolve to continue my underwater adventures.

    Hitting the Road

    Neither my wife nor I have ever been to Cozumel. Sure, we have been to Mexico a few times, including taking my kids to Cancun the past few summers. But, and I cannot quite stress this enough, Cozumel isn’t quite Mexico. This quiet little island situated about 12 miles off of the Mexican shores of Quintana Roo is a tourist mecca.

    We were able to get 5 nights away this time. Rather than dive four mornings, we took the opportunity to rent a Jeep and drive around the island. You can pretty much divide Cozumel into 4 parts:

    1. Town: San Miguel de Cozumel is the port city where multiple cruise ships can dock and offload their thousands of passengers. Plenty of shops, restaurants, beach clubs, and activities are available.
    2. Leeward beaches: The leeward beaches on the west side of the island, south of town, are either resorts or beach clubs which charge an admission fee. Most of the coast is rocky, but little wave action and coarse white sand make for a great beach day.
    3. Windward beaches: The east side of the island has significantly more wave action, with some beaches that offer a little more fine sand (more waves = finer sand). Still rocky, but more opportunity for water activities like kite surfing and surfing.
    4. Nature preserve: The north end of Cozumel is mostly natural preserve. There are some beach clubs and islands north of town, but we did not venture in that direction.

    The island caters to cruise ships. Certain activities, including the Mayan ruins, are only open when cruise ships are in port. “No cruise ships, no money” was a phrase I heard more than a few times. As we rented our Jeep on a day with no cruise ships, we missed out on some of those activities. We also missed out on the mass of humanity coming from those ships, so I was not terribly mad.

    If you venture to Cozumel, bring cash! Many places on the east side of the island are remote, with little cellular signal of any kind. Many places do not take credit cards, or charge a service fee for using cards. The west side is a little more tourist friendly, but its never a bad idea to have some cash. Most places seem to accept the US dollar, but pesos aren’t a terrible idea.

    Jump In!

    The Cozumel barrier reef is part of one of the largest reef systems on the planet. A quick glance in the luggage area at the airport will tell you it is a scuba diver’s destination. There are a ton of dive shops on the island, so many that I used two different ones for my three dive days.

    Nearly everyone does a two tank dive, with prices ranging from $80 to $110 for each two tank dive. Gear rental is available, I had to rent a BCD and regulator, which put me back about $25 USD a day.

    In 6 dives, we dove 6 unique spots. Both dive shops did a “deep/shallow” dive, with deep dives being wall dives that range from 75-85 feet, and shallow dives in the 50-65 foot range. One thing that caught my attention was the lack of attention to certification levels.

    I got my PADI advanced open water certification last year so that I would be certified for depths up to 100 feet. PADI open water certifications are only certified to 60 feet. By that standard, you need an advanced open water certification to dive on the deeper walls. I’m fairly certain that some of the folks I dove with did not have that level of certification. Now, it is not my business: I will always dive within my limits. But taking someone to 80 feet when they have not had some of the additional training seems dangerous, not to mention a bit of a liability.

    Both dive houses, though, we accommodating during the dives. This trip marked dives 18 through 23 for me, but I can feel myself getting more comfortable. But, as comfortable as it is, it is never truly comfortable. There is an element of risk in every dive, and situational awareness is critical to keep yourself and your dive buddy safe. But I find myself becoming more aware with each dive, and with that awareness comes a great appreciation for the sights of the reef.

    What did I see? Well, a ton of aquatic life, but the highlights have to be a 6 ft blacktip shark, a sea turtle, a couple large rays, and a few large Caribbean lobsters.

    Next trip?

    These dives brought my grand total to 23. Diving in Cozumel, I’m sitting next to folks who are easily in the hundreds, but never once was I intimidated. I have been very fortunate: my dive groups have been nothing but helpful. I get helpful pointer on nearly every dive, and it has made me more comfortable in the water.

    The only question is, where to next?

  • Nerd Humor

    Easter eggs in software are not a new thing. And I will always appreciate a good pop culture reference when I find it.

    As I was cycling my Kubernetes clusters, I had an issue with some resource contention. Things were not coming up as expected, so I started looking at the Rancher Kubernetes Engine 2 (RKE2) server logs. I ran across this gem:

    Apr 03 18:00:07 gk-internal-srv-03b rke2[747]: 2024/04/03 18:00:07 ERROR: [transport] Client received GoAway with error code ENHANCE_YOUR_CALM and debug data equal

    While I cannot be certain of the developer’s own reference, my mind immediately went to the Stallone/Snipes classic Demolition Man.

    You never know what you’ll find in software.

  • Foyer Upgrade

    Not everything I do is “nerdy.” I enjoy making things with my hands, and my wife has an eye for design and a sadistic love of painting. Combined, we like to spend some time redesigning rooms around the house. We save a ton doing the work ourselves, and for me it is a great break from the keyboard.

    The Idea

    My wife has been eyeing up our foyer for quite some time. Our foyer is a two story entry featuring stairs leading to our second floor, doors to each of our office spaces, and a hallway back to our kitchen and living room area. Off of the foyer is a half bath.

    Foyer View from Front Door

    As part of our kitchen renovation a few years ago, we replaced the vinyl flooring with LVT, and had no plans to change that. However, we wanted to open up the stairway with a different railing and add some applied moldings to the walls.

    The Plan

    Timing on this was a little odd. I was well aware of the work, and we did not want to have a construction zone around Christmas, so we split the work into two phases.

    Phase 1 was removing the half-wall on the steps and replacing it with a newel post and railing. It also included removing the existing carpet, painting the stairs, and installing carpet treads.

    Phase 2 would be the installation of the applied moldings, some new light fixtures, and a lot of painting.

    Phase 1

    Demo took about a day. We ripped out the old carpet, cut the half wall down to the existing riser, and removed the quarter round and baseboards. We also removed the old air return grates, as we ordered some new ones and would not be re-using the old ones.

    The installation of the newel and banister was not incredibly difficult, but took a while to ensure everything was accurately cut and secured. I built out a good deal of blocking at the end of the stairs to ensure the newel was solidly anchored.

    After everything was installed, there were a few days of drywall patching to get everything back to acceptable. The steps took a few coats of floor paint, and a new set of stair treads. They are secured with adhesive, but easily replaceable, which I am sure will be helpful in the future.

    All in all, Phase 1 took about 8 weeks. Mind you, this is 8 weeks of work some evenings and weekends, working around sports and social calendars for the kids and ourselves. If you were working on this full time, you could probably get it done in 5-8 working days. We finished Phase 1 just in time for the new banister to get some holiday decorations!

    Phase 1 Complete

    Phase 2

    Phase 2 was, for me, the more dreadful of the two. The plan was to take applied moldings all the way to top of the half wall in the loft, and create a framed look with the moldings. This required 1″x4″ boards (we used pre-primed MDF) and 11/16″ concave molding, and a lot of it.

    Before we installed the molding, we hired a painter to come in and put a fresh coat on the ceiling and the upper walls of the foyer. While she loves to paint, getting up on a ladder to hit the 18′ ceilings and cut in to the wall did not appeal to my wife, and I agreed.

    The process for the 1″x4″ boards was pretty simple: frame each wall, running horizontal boards the length of the wall, then vertical boards on each end. In between, run boards horizontally to divide the wall into three, then add vertical boards to complete the rectangles. Around the door frames, we used 1″x4″ boards to build out the existing molding, giving the doors a larger look.

    After the 1″x4″ installation, I went back through and installed the 11/16″ concave molding inside of each square, creating a bit of a picture frame look. This was, well, a lot of cutting and placing. In particular, the triangles on the walls with the steps were challenging because of the angles that needed cut. I did more geometry in the last few months than I have in a while.

    After everything was buttoned up, my wife took on the task of painting all the installed trim. All it took was time, and a lot of it: I think that task alone took her about 4 days. With the painting complete, I installed the last of the quarter round and she added some design touches.

    The last install was to rent a 16′ step ladder to change out the chandelier. I had done this once before, and was not looking forward to doing it again. The combination of wrestling the ladder into the foyer, setting it up, and then climbing up and down a few dozen times makes the process somewhat cumbersome.

    Phase 2 took about 9-10 weeks, with the same caveat that it was not full time work. Full time, you are probably looking at a good 8-10 business days. But the end result was well worth it.

    After Pictures

    Overall, we are happy with the results. The style matches my wife’s office nicely, and transitions well into the kitchen and living area.

  • Taking Stock

    My wife has a go-to birthday question: Name the best thing and the worst thing about the past year. We realized that she has a habit of asking this for the New Year as well.

    Many of our family and friends have birthdays that fall around the holiday season, so the question becomes somewhat repetitive. As we sat at what will end up being our New Year’s celebration (she’s out of town over the holiday), we came up with a new question.

    What are you most excited about in the coming year?

    She and I broke this down into “personally and professionally,” which gave us some interesting talking points. Personally, we both identified some new travel destinations. After all, I have some new scuba gear I need to take for a test dive.

    Professionally, well, I had a pretty lengthy reflection on my years at Four Rivers and Accruent back in October. That was, however, primarily a gaze into the past. As I considered what’s in store in 2024, I realized that there are some pretty exciting things happening at my new company. These things give me a chance to apply what I have learned in my years of software engineering, all while learning new and exciting technologies.

    Growing my “brand”

    I really don’t like to use the term “brand” to describe what I am doing here. I use it, though, because it pretty accurately describes what I would ultimately like to do.

    My goal with this publication is to make what I do fun. I mean, it is fun to me, and I know it is fun to others, so why not give that excitement a voice. Do I refer back to this blog as a reference for things I have done? Absolutely! It has become a great reference for me on its own, and hopefully others find some use in its pages.

    Through the last year, I have done a better job of being consistent in terms of generating content. I had, oddly, 35 posts in 2021 an 2022, and I am up to 76 posts in 2023 (this one makes 77). This equates to a post about every 5 days. My goal is a post every 4 days, so I’m pretty close.

    As to content quality, well, that’s harder to judge. My most popular pages, by far, are the write-ups with details instructions. Sadly, my anecdotes do not far so well on content. That said, it is far easier to write the anecdotes than it is the write-ups, but, I guess you get out what you put in.

    So my goals for this blog in the coming year are two-fold:

    1. Get closer to my “post every 4 days metrics”
    2. Increase the number of technical write-ups

    That last one gets difficult, as I cannot divulge work I do that remains IP for my company. Most of my technical write-ups end up being small, general pieces of a larger puzzle. So I’ll have to figure out how to get more creative in that regard.

    Happy New Year!

    It’s good to have goals. I’ve shared some of mine, and hopefully you have some of your own. In the meantime, I wish anyone reading this the best of luck in the new year!

  • Adding a Little Style

    I have never really liked the default code blocks in WordPress. So I went looking to find a better plugin… Then I went looking again.

    Round 1

    I literally went into WordPress’ Plugins section, clicked on Add New, and searched for syntax. For whatever reason, I landed on SyntaxHighlighter Evolved, and it seemed like it fit the bill.

    So, I installed it, and went through the process of finding all my wp-code blocks so that I could convert them. That was a slightly laborious task, as I had to get the list from the database and then click through and edit. Sure, I could have probably wrote a small application to make the replacement. I only have 35 posts with code blocks, and I figured I’d only do it once, so I did it by hand.

    6 hours later…

    I hated it. I like the dark theme of my site, so the giant white blocks of goo on page were very intrusive. Language support was decent, but missing some of my favorites (including Dockerfile and HCL).

    A more detailed Google search lead me to Code Block Pro. Before I went through 35 posts replacing code blocks, though, I decided to test this one a bit more. The language list is extensive, and there are a bunch of included themes. There are a few dark themes, and GitHub Dark seems to fit fairly well into the site style.

    A bit more confident of my new choice, I went back through those 34 posts and replaced the SyntaxHighlighter Evolved blocks with Code Block Pro blocks. I am starting the stopwatch to see if this one makes it longer than 6 hours.

  • New Cert, now what?

    I completed my PADI Advanced Open Water certification over the weekend. The question is, what’s next?

    Advanced Open Water

    The Advanced Open Water certification is a continuation of the Open Water training with a focus on opening up new dive sites, primarily by expanding the available depth. My certification focused on five areas:

    1. Deep Dive (below 18m/60ft)
    2. Navigation
    3. Bouyancy
    4. Boat
    5. Drift

    The Boat and Drift specialties were a fun introspection into pretty much the only dive types I’ve ever done: of my 17 official dives, 16 have been boat AND drift dives. Truthfully, I’d be a little anxious if I had to find an anchored dive boat by myself.

    The Deep specialty opens up a number of new dive sites below 60 feet, and taught me a little more about the pressure at those depths. On paper, I see the math regarding depth and atmosphere, but it’s incredible to see just how much difference there is between 20m and 30m in terms of pressure. I also learned a bow knot, and how to tie one at 90 feet.

    Navigation was interesting, although pretty easy considering the environment. Swimming a square with a compass is much different when you can see the full square in the 30+ feet of visibility of the Caribbean versus the 6 feet of visibility in a quarry. Considering I’ve only ever done drift dives, precise navigation has been somewhat less important. I will have to work on my orienteering on dry land so that I’m more comfortable with a compass.

    Buoyancy was, by far, the most useful of the specialty dives. I’ve been pretty consistently using 10 kilograms (22 lbs.) since I got certified. However, I forgot that, when I did my certification dives, I was wearing a 3mm shorty wetsuit (short sleeves, short legs). Since then, I’ve shed the wetsuit since I’ve been diving in warmer waters. However, I didn’t shed the weight. Through some trial and error, my instructor helped me get down to diving with 4 kilograms (8.8 lbs.). My last 4 dives were at that weight and there was a tremendous difference. Far less fiddling with my BCD to adjust buoyancy, and a lot more opportunity to use breathing and thrust to control depth.

    So many specialties…

    PADI offers a TON of specialty courses. Wreck Diving, Night Diving, Peak Performance Buoyancy, Search and Rescue, and so many more. I’m interested in a number of them, so the question really is, what’s my plan?

    Right now, well, I think I am going to review their specialty courses and make a list. As for “big” certifications, Rescue Diver seems like the next logical step, but it requires a number of specialties first. However, there is something to be said for just diving. Every dive has increased my confidence in the basics, making every dive more enjoyable. So I don’t anticipate every trip being a “certification trip.” Sometimes, it’s just nice to dive!