Category: Administrivia

  • Trail Running Again (and Podman)

    Trail Running Again (and Podman)

    After my initial foray a couple of months ago, I’m still getting my feet wet (occasionally literally) with trail running. I didn’t do much of it in September or October, but I’ve picked it back up in November, and have now hit the trails for the past two weeks in a row. Last week’s run was a roughly counterclockwise circumnavigation of the trails surrounding Belmont Manor, and today’s was a loop through Rockburn Park. Several observations:

    • I still stumble occasionally, though it’s much less frequent with the Vibram V-Runs than it was with Xero Mesa Trails with a full toe box.
    • The biomechanics are different from road running. It’s somewhat akin to the differences between road and mountain biking. Trail running is less forgiving of overstriding and heavy stepping. If I come down hard on a rock or root, I feel it. My feet, particulary the arches, have been a little sore after the past two runs. I suspect this will improve as I get better at it. Light, springy, high steps and fast cadence seem to be keys. It’s important to bend the knees and engage the core muscles.
    • Autumn leaves add an extra challenge, because they cover up obstacles like the aforementioned rocks and roots. I really have to be laser-focused on what I’m running over, even more so than with mountain biking.
    • I noticed that I ran more confidently after I fully warmed up, which took me about 3 miles. Today, I ran 0.6 mile to the trailhead, then 4.5 miles on the trails, then 2 miles on pavement. Next time, I’m going to try running the road segment first, to see if the extra warm-up helps.

    I suspect that because trail running requires me to pay much closer attention to technique and biomechanics, over time, it will make me a better road runner. I’m going to try to do it once a week (conditions permitting) and see how it goes.

    In other news, I’m back to doing some housekeeping with our home network. I run two instaces of Pi-hole on our LAN, which the router hands out as DNS resolvers via DHCP. Pi-hole is very good at blocking ads and trackers, and it works great with things like Smart TVs as well as web browsers and phone apps. Pi-hole instance #1 was a bare-metal deployment on a Raspberry Pi 3, and instance #2 ran on a Mac Mini running Docker Desktop. This all worked great, but #1 was still running Pi-hole v5, which is coming up on 2 years out-of-date. Also, because of networking limitations with Docker Desktop on Mac, I couldn’t run #2 with host networking, which made most of its logging useless, as all of the client connections appeared to come from the Docker bridge network’s IP. I had been dragging my heels with updating #1 to Pi-hole v6, as there were a lot of reports of issues doing so, and I didn’t want to have to deal with the hassle of re-imaging the Raspberry Pi (which also runs a printer) if the upgrade somehow went south.

    That brings us to Podman. I had previously run Pi-hole in Docker on the Pi, but stopped doing so because Docker was a bit too resource-hungry for the Pi 3. Podman is more lightweight, as it doesn’t rely on a background daemon process. It’s also easy to run rootless containers, which improve security, and it’s tightly integrated with systemd, which makes it well suited for running on Linux-derived host systems. Containerization gets me past the “upgrade paralysis” issue, as upgrading is as simple as pulling a new image and restarting, and in the event of problems, I can just revert to a previous image, vs. trying to downgrade in place. And, if I have to re-image at some point in the future, it should be relatively easy to get the containers back up and running quickly.

    To make a long story short, Pi-hole #1 and Pi-hole #2 are now running identical containers via Podman. Both instances are using host networking, meaning they’ll get accurate source IP logs now. I moved Pi-hole #2 over to a VM running Ubuntu, and am waiting for all of the DHCP clients to move over to it, at which point I can shut down the old Pi-hole container running on Docker Desktop. Coincidentally, the Ubuntu VM is running in VMWare Fusion on the same Mac Mini that runs Docker Desktop. I still have a couple of containers running on the latter, but my goal is to move those onto the Ubuntu VM as well, and shut down Docker Desktop, so the Mini will then solely be used to host VMs.

  • Where did 20 years go?

    Where did 20 years go?

    Today marks the 20th anniversary of my first post here. I can’t believe it has been that long. I started out hosting the blog on a spare PC in my office at work. Then, for a while, I hosted it at wordpress.com. Most recently, I’ve self-hosted it in the cloud. I tried two other blogging engines, Blosxom and B2Evolution (both of which still seem to be around) before settling on WordPress. I’ve gone through phases where I’ve posted entries almost daily, and I’ve had multi-year posting droughts, but typically, I fall somewhere in the middle of those two extremes. I use the blog to write about anything and everything that comes to mind. I don’t really care who reads it now, but someday, years down the road, I hope that it will still be around for my heirs to read and learn a little bit more about me. This brings up an interesting issue that I often think about: while older generations kept physical photos, diaries, letters, etc., my generation and younger generations tend to keep everything online, in the form of digital photos, social media, and blogs. Physical photos and letters can fade and disintegrate. Digital media has different issues. Case in point: if I were to stop paying my AWS and/or Cloudflare bills, this blog would just disappear. This is true of a lot of information on the internet, and it drives home the importance of including digital media as part of legacy and estate planning. It also underscores the important work that the Internet Archive is doing to preserve the history of the web.

    Anyhow, it will be interesting to see if I am still posting here in another 20 years!

  • Farewell 2024 Pool Season

    Farewell 2024 Pool Season

    Looks like pool season is over for the year. My final swim of the season was September 21, 6 days later than 2023’s final day and 6 days earlier than 2022’s. This year came in third since 2021 in total swims (74), second in total strokes (52,564), and first in average stokes per session (710). This will be the third straight year with no swimming in the month of October. Like last year, the culprit was the onset of a multiple-day period of overcast, humid, drizzly weather. Almost every September features a stretch of this kind of weather, which is why October swimming is so rare around here. Hope springs eternal for next year, though.

    I have to figure out how I’m going to winterize the pool this year with the new pump. I plumbed it with unions to give me the option to remove it and store it inside for the winter. However, the wiring will likely make this somewhat of a pain. I may still try it, although I may hate myself for it next spring. I figure I have until around the second week of November to decide, as that’s when I usually finish winterizing the pool. I’m hoping to get the winter cover on it this weekend or shortly thereafter.

    After starting it a few months ago, I’ve finally got all of my web infrastructure moved out of AWS RDS, and I shut the RDS instance down this evening, with the intent of deleting it if I don’t see any issues. Also, I’m in the process of switching domain registrars for lpaulriddle.com. When I initially registered the domain (at least 10-15 years ago), I used Yahoo! Small Business, and while slightly pricier than GoDaddy, I was happy with it until it ended up morphing into Turbify. Last year, the registration renewal fee jumped to $45, and this year, they wanted $55, which was enough to motivate me to switch. After some research, I settled on Cloudflare, and the transfer is now in progress, with a pending completion date of 9/29. In the meantime, I moved the DNS over to Cloudflare, which went off without a hitch. If all goes well with moving the registration, I’ll probably move my other domain (currently at GoDaddy) to Cloudflare as well. I’m not doing much with that domain, but I do have email forwarding set up for it, so I’ll need to figure out how to do that with Cloudflare. I will say that their registration fees are much cheaper than GoDaddy’s, let alone Turbify’s.

    Edit (9/29) just in case it’s helpful to someone: I got a confirmation email from Turbify/Tucows a few hours after initiating the transfer with Cloudflare. It said that if I took no further action, the transfer would complete at 2024-09-29 01:30:17 UTC. That time came and went and nothing happened, so I revisited the email and noticed that there was also a link to “visit our website” at the end. I clicked the link, and it took me to a page with options to approve the transfer immediately or cancel. I clicked the approve button, and the transfer completed a few minutes later (verified by an email from Cloudflare). Not sure if it would have eventually happened automatically had I not done that, but it’s done now, and reflected in WHOIS. Now to go cancel the Turbify plan…

  • Swim Notes

    Swim Notes

    I just finished moving the database for this blog off AWS RDS and onto a MariaDB Docker container with the database files hosted on EFS. RDS turned out to be overkill for my use case, and it was costing me more per month than I had expected. By contrast, EFS storage space is cheap, and the EC2 instance I’m running MariaDB on is free until the end of 2024. The trade-off, of course, is that it’s almost surely not going to be as performant as RDS, although I’d be surprised if I notice any difference. We’ll see. If I do, I can always try something like a persistent object cache and/or page cache.

    I also wanted to write a quick note about swimming this season. It’s been a good season thus far, and the hot summer has led to a lot of time spent in the pool. As a matter of fact, according to Apple Health, I’m only 7 or 8 swims away from eclipsing last year’s total, and we’re only halfway through August. The best times of day for swimming are mornings before 9:00, and afternoons after 4:00, because that’s when the pool is out of full, direct sunlight. On really hot days, I’ve occasionally done pool running in the mornings in lieu of “real” running, as I have a hard time getting over 3-4 miles on really hot, oppressive days. Most of my swimming has been in the afternoon and evening, with a tether, same as in recent years. In July, I typically swam in the late afternoon before dinner, but this month (August), I’ve been swimming more in the evenings, sometimes going as late as 9:00pm. Usually, I do 3 sets of 60 breast stroke, 60 front crawl, 60 butterfly, and 60 backstroke, for a total of 720 strokes, which takes me about 40 minutes. I’m happy with how my backstroke has progressed this year — I first started doing it regularly about midway through the 2023 season, and it felt awkward and uncoordinated for quite a long time. Lately, it has improved quite a bit.

    As with every year, the end of the pool season can be a wild card depending on the weather. In 2022, I was able to swim until October 4, but last year, a persistent bout of cloudy, cool weather brought things to an early end on September 14. We will see what this year brings. We set the record for latest day in the pool (October 9) in 2007, and it still stands. I wonder if it will ever be broken?

  • lpaulriddle.com re-architecting

    I needed to get lpaulriddle.com moved off an old EC2 instance running Ubuntu 16.04, which has been EOL since 2021. About a year ago, I started the process by moving all of the services to Docker containers. Then I moved all of the persistent data (web pages, images, etc) to a EFS filesystem, and I moved my MariaDB database to RDS. After that, I kind of forgot about it until just recently. I saw that AWS was doing a promotion for its new t4g.small instances for 750 free compute hours per month through 2024, so I spun one up and worked on moving the services over. It went more smoothly than I had expected. This is what I did:

    1. Installed Docker and docker-compose on the new instance
    2. Tweaked AWS security groups to allow the new instance to mount the EFS filesystem and connect to the RDS database
    3. Copied my Github ssh credentials over to the new instance
    4. Cloned my Git repo to the new instance
    5. Copied secrets (.env) into the git tree
    6. Built all of my images (docker-compose build)
    7. Started containers (docker-compose up -d) – I actually did these one at a time, but this would have worked as well
    8. Tested everything out by modifying my /etc/hosts file
    9. Disassociated my elastic IP address from the old EC2 instance and assigned it to the new instance

    This all went off without a hitch, and everything seems to be working. Functionally, the new instance is ARM vs x64, and the OS is Amazon Linux 2023, which is yum based, vs Ubuntu, which is based on apt/dpkg. This post will serve as a test that I can create blog posts using the new infrastructure.

    Next, I think I’m going to move my database off RDS and back onto a MariaDB container with the database in EFS. RDS has turned out to be a little bit pricier than I had expected, and I think it’s overkill for my rather modest needs (basically a single WordPress blog and a MediaWiki instance).

  • This and That

    I’m trying a new WordPress theme out. I had been using “Twenty Twenty” for a long time, but never liked that it didn’t have a widget sidebar. So, I’m trying one out called “Simple Life”. It’s responsive, has a sidebar, and seems fairly lightweight, without a lot of bells and whistles and other stuff I don’t need. So, I’ll probably use it for a while until I get tired of it.

    As promised yesterday, I brewed a pourover cup of my medium roast Mexican coffee beans using 18 grams of coffee to 250 grams water (around 1:14) and it was just about the perfect strength. It did have a tiny touch of bitterness that I didn’t notice yesterday, but I think that was because I wandered away and let the coffee sit and drip for a little too long. I’ll fix that tomorrow, and if it’s not perfect, I’ll try it just a tiny bit coarser.

    I did my usual Friday morning session at the climbing gym today, and felt pretty good after climbing 8 routes ranging from 5.10- to 5.11-. There definitely is a huge difference in my energy level between my morning and evening climbing sessions. I suspect part of it is because I typically commute 22-25 miles on the bike on the same days as my evening climb sessions, with the 8-mile homeward leg wrapping up an hour or so before I leave for the gym. Something probably needs to give there…

  • Run Notes

    It’s another very un-summer-like day here in central Maryland, with clouds, mist, and temperatures in the low 60s on the day after the solstice. I actually wore long sleeves for my morning run. I ran 6.8 miles, which is a pretty typical distance for me on a work day. My overall pace was around 10:30/mile, which also is about average for me. The first half of the run was great, but the second half felt like a struggle. I’m wondering if I started out trying to run too fast, which has gotten me into trouble in the past. My next run will likely be in two days, and I’m hoping to go 9 miles or so at a more relaxed pace.

    My work to move the blog (and a couple other web sites) off my old EC2 instance is moving along. I’ve now moved all of my persistent Docker volumes onto an EFS volume, so there is no more persistent data stored on the EC2. Next step is to start moving containers into EKS/Fargate. I find it kind of amusing that, behind the scenes, the EC2 instance uses NFS to access the EFS volume. As someone who administered systems running NFS back in the 1990s, I remember it as a buggy, insecure system built on Sun RPC. Apparently, though, it has improved in the ensuing 30-odd years. At any rate, it seems to perform pretty well over a AWS VPC connection, at least for my purposes, which aren’t all that demanding.

    Anyhow, that’s more than enough acronyms for one post. 😀

  • Today’s (cold) brew notes

    • Beans: German St Coffee & Candlery Private House Blend
    • Coarse grind (JX: 3 rotations + 4 clicks / 94 total clicks)
    • Recipe: https://www.acouplecooks.com/french-press-cold-brew
    • 140 grams coffee (roughly 2 cups ground), 840 grams water

    With summer upon us, I decided to try making some cold brew. The hardest part of this was grinding 140 grams of coffee with the JX. This job would be better suited to a higher capacity electric grinder. Other than that, there’s not much to it: just add the ingredients to the french press, stir, cover with plastic wrap, refrigerate for 24 hours, and strain into a glass jar or pitcher. The resulting brew is concentrated, and the recipe recommends diluting 50/50 with either water or milk. I tried it with milk, and it was pretty good. Now, I need to work on trying to get a good cup of regular hot brew with these beans, but that’s for another day…

    On an unrelated note, I just moved the back end database for this blog to a AWS RDS MariaDB instance. It had previously been running in a MariaDB Docker container on my old EC2 instance. This is the first step to getting my stuff off the EC2 instance and into (probably) EKS with Fargate. If you’re reading this, it means that it worked. 😀

  • I’m baaaack..

    A few years back, I set lpaulriddle.com up on Ubuntu Linux running on a AWS EC2 instance. It ran just fine there, but to be honest, was kind of a mess. I was dreading the day when I would eventually have to update it or move it somewhere else, because I didn’t document anything that I did while configuring it, and thus, it would take forever to get everything working again.

    Last summer, I decided to bite the bullet and redo everything on the site to run in Docker containers. That way, I’d have a repeatable build/deploy process that I could easily move around independently of the underlying support framework, be it ECS, another EC2 instance running Docker, or whatever. It’s still a work in progress, but it’s inching closer to completion. One of the first things I did was to move the MariaDB instance that hosts this blog’s database tables, into a container. This worked mostly OK: the blog still rendered just fine, and I could click around and read all of the posts the same as always. However, when I logged in at /wp-admin, It gave me a permission error, and I could not get to the dashboard. That effectively locked me out of the blog, preventing me from writing new posts, among other things.

    About 4 months later, I finally got around to fixing it. Since I planned to move WordPress into a Docker container anyhow, I decided to start over with a fresh database, and just import all of my original blog content into the new instance. The catch was that I needed to somehow get into my old instance one last time to export the data. After some searching around, I found a snippet of PHP that I could add to my theme to bypass the permissions checks. That did the trick: I finally got back in, exported the data, and brought everything back up in a new, shiny Docker container. The blog is now powered by a Nginx front-end that talks to WordPress over a FPM proxy. Fun stuff.

    Now that I can post again, I’ll try to write some more as the spirit moves me. As you can imagine, 2020 has been an interesting year with some pretty big changes to my daily routine.

  • Blog administrivia

    OK.. figured out a somewhat better solution for links to blog posts. Use relative URLs, and use named permalinks. Then, I should be able to move the blog in the future without breaking self-referential links (providing that the new blog either runs WordPress or can support WordPress-style permalinks). I still need to go through and update all my old links, which looks to be a tedious process, but with any luck it’ll be the last time I need to do it.

    I discovered the other day that it doesn’t work to set up a CNAME pointing to ‘lpaulriddle.wordpress.com.’ I just end up getting sent to the main wordpress.com homepage. Using an HTTP redirect (or meta refresh) seems to work. However it doesn’t appear that I can set up a redirect with my current domain hosting provider, at least not without signing up for web hosting that I don’t want. However, I’m going to be shopping around for a new home for my domain within the next couple months anyhow, so I’ll check into this as I’m evaluating new providers.