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).

Zeke’s Market Blend (second bag)

  • Beans: “Market Blend” from Zeke’s Coffee (Baltimore, MD)
    • Roast level: Medium (5/8)
    • Origin: Central and South America
    • Roast date: 5/13/2024
    • Purchase date: (TBD) at Green Valley Marketplace in Elkridge, MD
  • AeroPress:
    • 18-19g coffee / 250g water (1:13 to 1:14)
    • JX: 25 (75 clicks)
    • Water at 90°C
    • Prismo with metal and paper filters
    • Pour to 50g, stir to wet, and bloom until 0:45; top up to 250g and stir 5-6x; cover and steep until 3:00; stir 5-6x; press slowly

This is my second bag of these. I previously bought them last October, and I settled on kind of a convoluted V60 method where I used hotter water to bloom the grounds and then diluted the water to cool it before brewing. I didn’t want to go to that much trouble, so this time, I just tried V60 with 90°C water and grind setting 20(?). This was similar to what I did the first few times with the last bag, and the results were similar, too — it was on the bitter side. Since the beans are ever so slightly on the darker side of medium, I decided to try the AeroPress, which I don’t believe I had used at any point with the last bag. After an initial bitter cup at grind setting 20, I settled on the above, which was smooth and chocolaty. Rereading my first linked post from October, it looks like I ended up at a slightly finer grind setting (23) with V60, which is interesting, because I usually end up grinding finer with the AeroPress than with pourover. However, every bag is different, and taste always wins out over what seems logical on paper.

5/27: For the past couple of cups, I have reverted to a similar technique to last fall’s, using the AeroPress instead of V60: Heat water to 99C; pour to 50-60g; stir to wet; cool kettle water to 82-86C; bloom until 0:45; top up to 250g and stir 5-6x; cover and steep until 3:00; stir 5-6x; press slowly. Today’s cup was the best so far, and I used 20g coffee at grind setting 22 (2 turns + 6 clicks). It was a nice, smooth, rich cup. This brewing technique seems to work well with Zeke’s Market Blend, but I’ve never tried it with any other beans. I wonder if it would be worth trying with some other medium to dark roasts. The only downside is that it adds an extra step to the process, and sometimes (particularly first thing in the morning) I’d rather just keep things simple.

Second and third paddle outings of the season

So far, I’ve done well with my informal New Year’s Resolution to get out on the water earlier in the season. I’ve been out the past three Tuesday mornings, each time launching from Solley’s Cove Park. Last week, I paddled most of the way down Marley Creek, which is the longest creek upstream of the launch. Cathy came along as well. The last time I paddled here was early November 2022, and that day, I identified several potential hiding places for a geocache series I’m thinking about putting out. I checked each of the sites last week, and all but one still seemed viable. I have yet to paddle all the way to the headwaters of Marley Creek, which looks like around 6 miles round-trip, or a little bit farther if I check out all of the side channels along the way. Today, I paddled Furnace Creek and Bell’s Cove, which lie to the north of Marley Creek. I am pretty sure I did the same paddle last year — it’s a shorter creek than Marley, so I paddled all the way to the headwaters. My somewhat meandering route ended up being 5.4 miles round trip. I identified a few geocache sites along here as well, though there aren’t as many good ones as there are along Marley. A lot of the shoreline is severely eroding, a huge amount of it is developed (as is the norm in Anne Arundel County) and some of the more natural areas have posted private property signs.

I am working on trying to find a good setup to haul 2 kayaks plus our new SUP on the van at the same time. It looks like I can fit J-hooks for two kayaks outside the rack towers on either side of the van. The SUP mount should then fit in the middle. I have a love-hate relationship with J-hooks, as it seems like about 50% of the time, I don’t get the kayak side-on enough when I’m hefting it up there, and it ends up partially horizontal, requiring me to “finesse” it back and forth until it slips into the J-hook, all the while hoping it doesn’t fall. If I can get my loading technique down, I suspect the hooks will work OK on the van, though, at least for the short term. The Thule Hullavator loader looks nice, but I don’t think I’d be able to get two of them up there in addition to a SUP mount (and they cost $900 each). A trailer is another option, but most of them can’t accommodate a 16-17′ sea kayak. So, at least for now, I’m back to the J-hooks.

Also on the subject of kayak loading, as often happens this time of year, I’ve managed to tweak my lower back. My back is in remarkably good shape for all the abuse I’ve put it through over the years, but I’m not in my 20s any more, so I have to be more careful with it, which means not bending over and lifting heavy stuff (the old “lift with your knees” cliché). I’ve found that when my back is acting up, it doesn’t like me picking anything heavy up off the ground at all, whether I “lift with my knees” or bend over at the waist. That presents an issue with loading kayaks, as they’re heavy, and they’re usually on the ground. For today, I took the J-hooks off the Honda Civic and put a set of cradles and rollers on that had been on the van. Then, I used a rope extension on the kayak’s pull handles, so I could lift the boat up one end at a time without bending at all. Finally, I used my trusty boat loader extension that slides out of the crossbar and supports one end of the kayak while I lift the other side up. The combo worked out pretty well, and I managed to do my loading and unloading without aggravating my back.

Zeke’s Colombia Huila

  • Beans: “Colombia (Huila)” from Zeke’s Coffee (Baltimore, MD)
    • Roast level: Light (2/8)
    • Roast date: 4/20/24 or 4/28/24 (second digit of day hard to read)
    • Purchase date: 5/2/24 at Green Valley Marketplace in Elkridge, MD
    • Process: washed
    • Tasting notes: Orange, caramel, milk chocolate
  • V60:
    • 21g coffee / 300g water (1:14.3)
    • JX: 18 (54 clicks)
    • Water at 99°C
    • Recipe: Single Cup V60 Pourover with slow pour

I started these at setting 19 a couple of days ago, and it seemed like it needed to be a little finer, so I went with 18 today. This was a good cup. It will be interesting to see how I need to adjust things over the next couple of weeks. Some of it depends on the actual roast date. If it was 4/28, I expect I’ll need to tweak things quite a bit; if it was 4/20, probably a little less so. A couple of the bags on the shelf clearly read 4/28, so I’m wondering if mine is actually 4/28 also, with the bottom half of the 8 chopped off. But, it could also be 4/20. Who knows?

5/11: I have settled on setting 19 for my most recent several cups, and they have been fairly consistent, with some slightly better than others, but overall pretty good. I can definitely taste a hint of orange, as advertised, and the overall roastiness balances the acidity out nicely.

Rain Run

We appear to be back in a rainy weather pattern for at least the next several days. When it’s wet or rainy out, and I want to go running, I’ve always focused on trying to keep my feet dry. Vibram FiveFingers with toe socks do not work — the water ends up soaking through the socks, and my feet get cold. I’ve also used my Xero Terraflex hiking shoes (particularly in the winter) and they work well with wet pavement, but not rain, as they aren’t fully waterproof. The only truly waterproof shoes I currently own are my Altra Lone Peaks, and while they’re fantastic for mountain biking, I find them too heavy and bulky for running. Xero makes a waterproof trail shoe, as does Vivobarefoot ($$$), and either of those might eventually be an option. Today, though, I decided not to bother trying to keep my feet from getting wet. Instead, I wore the Vibrams with heel cups and no socks. I ran 9 miles with the temperature in the low 50s and off-and-on drizzle. My big worry was that my feet would freeze, but that didn’t happen. Instead, I noticed kind of a wet suit effect: the insides of the shoes got wet almost immediately, but thanks to body heat, the water never felt uncomfortably cold. It was definitely more comfortable than wearing the Vibrams with socks, although it likely wouldn’t work in really cold weather. I’d be interested to see how it works with temperatures in the 40s. Rounding out my wardrobe were calf compression sleeves, running shorts, long-sleeve athletic top, Gore-Tex running shell with hood, and Sweathawg head band. Most of my shorts have leg pockets which I use to stash my phone, but today, I used a small lumbar pack which fits underneath the shell, and it did a good job keeping my phone dry. Running without socks is going to require that I wash the Vibrams more frequently, but overall, this seems like a good option for rainy days during the warmer months of the year.

Run to UMBC

I tried my hand at running from home to UMBC today, which I had never done before. I had spent yesterday afternoon setting up a new computer at the office, and needed to pop in this morning to make sure the Apple Migration Assistant had finished moving all of my stuff over (it took several hours, but it worked great). I only needed to be there for the morning, so it worked out well to run over and then get a ride home at lunchtime. I stuck to roads, following a route that I’ve biked thousands of times. It was interesting seeing everything from a different vantage point. The overall route was just under 7.5 miles, which is about the same distance as my usual weekday loop from home. A couple of months ago, I picked up an Osprey Duro 1.5 running vest, mainly as a way to carry more water with me in the summer. It came in handy today, because I carried more stuff than I would on a typical run, and while the Duro 1.5 isn’t exactly a backpack, it had the extra capacity I needed. This was the 3rd or 4th time I’ve run with the pack, and it seems like it will work out fine. There’s a little bit of sloshing from the water reservoir if it’s filled to capacity (1.5L) but I ran with 1L today, and didn’t notice any sloshing. The vest doesn’t get in my way, and it doesn’t seem to rub anywhere where chafing might become an issue (July and August will be the true test, though). As I had kind of expected, it does get rather wet from perspiration (particularly from my back) so I’m probably going to have to wash it regularly in the summer to keep it from getting too funky. To me, it seems like an acceptable trade-off to being able to carry more water, which I definitely need in the summer. If I combine the 1.5L reservoir with my 16oz soft water bottle, I’ll be able to carry about 0.5 gallon. I just need to supplement that with something that will replenish electrolytes (gel packs?) and I’ll be ready to take longer runs in the summer.

Zeke’s BirdSong

  • Beans: “Bird Song” from Zeke’s Coffee (Baltimore, MD)
    • Roast level: Medium/Dark (6/8)
    • Origin: Central and South America
    • Roast date: 4/15/24
    • Purchase date: 4/22/24 at Green Valley Marketplace in Elkridge, MD
  • AeroPress:
    • 21-22g coffee / 250g water (1:11 to 1:12)
    • JX: 19 (57 clicks)
    • Water at 85°C
    • Prismo with metal and paper filters
    • Pour all 250g and stir 5-6x; cover and steep until 3:00; stir 5-6x; press slowly

I brewed the first few cups at 95°C. For a couple of them, I included a 45-second bloom step and steeped until 3:00; for a couple others, I skipped the bloom and steeped until 2:30. I didn’t notice much of a difference. The cups were a tiny bit on the bitter side, but not enough to be unpleasant. There was no acidity and not much in the way of complexity — more or less what you would expect from a darker roast, and not bad, but nothing to write home about, either. This afternoon, I dropped the temperature to 85°, and it made a big difference. The bitterness was gone, and the cup was rich and full-bodied. I’ll keep brewing it like this for the time being. I bet that this would also make really good French press coffee.

5/2: The past couple days’ cups were starting to taste a little bitter (right around 2 weeks past roast date), so I backed the grind off to 20 this morning. It would probably be good at anywhere from 18-20. The only issue I have with coffee brewed at 85°C is that sometimes it cools off more than I would like. Cooler cups can be good in the summertime, but a few options for a warmer cup would be:

  • Preheat the mug using water from the insta-hot or leftover hot water in the kettle. The former bothers me because it seems like it wastes water and energy. The latter seems inconvenient with the AeroPress, because once the water is heated, the brewer sits on top of the mug, unless I brew with it inverted.
  • Use an insulated mug instead of ceramic
  • Brew a stronger ratio and then dilute with hot water

5/5: I used the last of these up today. I settled on setting 19 for my last several cups, and they were pretty good.

First paddle of the season

Last year, I didn’t take my first paddle until early June, effectively missing out on a couple of months of nice paddling weather. One of my resolutions for 2024 was to get out paddling earlier in the spring, and I was able to make it happen yesterday morning. Spring paddling can be tricky, because while the air temperatures are warming up, the water temperatures tend to lag behind, which is often the reverse of what happens in the fall. When I’m looking to get out, I usually check the BLTM2 buoy to get a general sense for area water conditions. It’s located at the mouth of the Patapsco just north of Fort McHenry, and I’ve found it to be a fairly good gauge of whether the water will be warm enough for paddling in the various estuaries around Baltimore City and Anne Arundel County. Yesterday morning, the water temperature was just under 60ºF, and air temperature was in the low 40s, which was ideal, because it allowed me to dress appropriately for the water temperature without getting all hot and sweaty. I wore my wet suit with paddling jacket, paddling boots, paddling socks, and pogies attached to my paddle. It was my first time wearing the jacket and the boots. The boots (NRS brand) worked out well. They come up past my ankles, and I liked that the extra height kept water from washing inside while I was wading around the launch during put-in and take-out. They also have some fleecy insulation which kept my feet warm, and should work out nicely over a dry suit as well. I think I’ll probably save them for colder weather, and stick with my NRS Kickers or Vibram FiveFingers during the warm part of the season.

As for the paddle itself, I put in at Solley’s Cove Park and went into Tanyard Cove and back, for a total distance of about 3.5 miles. It was just far enough to get me warmed up for the season. I saw a bunch of deer swim across the water at one point, as well as a rather ill-tempered snapping turtle, and the highlight of the day was a bald eagle that had me wishing I had brought binoculars. I won’t forget them next time!

New Pool Pump

Earlier this month, I started work on replacing our pool pump, and as I write this, it’s mostly finished. I’d file this project under things I’m happy I did once, but wouldn’t want to do again. A hot swap of the old pump, with no plumbing or electrical changes, would have been quick and straightforward, but I completely redid the intake plumbing as well as the pressure-side plumbing between the pump and the filter, so that I could add unions (plus, the old pump had 1.5″ connections and the new pump has 2″ connections). Everything needed to be rewired as well, as the old pump was single-speed, and the new pump is variable speed (VS). The old pump used to be scheduled and switched on and off via the Autopilot SWG controller, but with a VS pump, it’s the other way around: VS motors have on-board electronics that control the pump schedule, run speeds, etc., as well as an auxiliary load circuit that will switch the SWG controller on and off as needed. The project was rather all-consuming for a week or so, as I really wanted to get the pool water circulating sooner than later so that it didn’t turn into a giant swamp (the longer you wait to Chlorinate in the spring, the more of a pain it is to get the water cleaned up for opening). I also wanted to make sure the pump, which cost upwards of $1200, actually worked.

The plumbing part of the project was the most challenging, but it went rather well, thanks to very careful planning and measuring. I built a platform for the pump out of scraps of Trex, and the biggest challenge was getting it level. While the pump doesn’t need to be level to work properly, it makes it a lot easier to get the pipes to align cleanly. I used the platform and some plastic shims to get the intake union lined up. I think a better solution might be to add adjustable feet to the platform, so I might do that for next season.

In my earlier entry, I mentioned that the suction pipes from the pool came out of the ground at different distances from the house foundation, meaning that if I wanted the pump exactly perpendicular to the wall, I’d have to either add extra 90° elbows, or use a specialty adjustable elbow on the intake. It turned out that in practice, it wasn’t really worth bothering with this — yes, the pump is not perfectly square to the wall, but the angle is so slight that it’s hardly noticeable. So, I got to save my adjustable elbow for a future project.

The other challenge was dealing with the water in the pool. A very rainy March/April had left the pool full to the brim, and since the pump intake is slightly below the waterline, water was constantly trying to overflow out of the main drain suction line once I cut the old valve out. I didn’t want to drain water out of the pool, because it’s convenient to have the water high for vacuuming to waste during opening. So, I had to figure out a way to keep the water at bay while I glued new valves to the suction line. I ended up taking a #8 winterizing plug and flipping the bolt around so that the wing nut was on the narrow end of the plug. Then, I jammed the plug down the pipe, tightened the nut, and glued the valve on. Once dry, I was able to pull the plug out through the valve body. Flipping the nut and bolt made this possible (in the regular orientation, the wide end of the plug would have gotten stuck).

Compared to the intake, the pressure side piping was a piece of cake — just some careful measuring. Unions made things easier, but it’s still a challenge making sure everything lines up, and I had to be careful not to drip PVC cement on the union threads or mating surfaces, which can be easier said than done.

I was rather nervous about starting the pump for the first time, but it worked just fine, and there were no leaks (I was fairly confident about the intake side, as it held water for a couple of days while I was working on the pressure side). The only real issue I had was unrelated to the pump — the handle shaft o-rings on the filter multiport valve were leaking. I ended up taking the valve apart, flipping and re-lubing the o-rings, and adding some teflon tape around the notch in the shaft where the o-rings sit. It seems to have stopped the leak.

I’ve been running the pump for the past few days to add chemicals and also break the pump in and observe how it works. I still need to wire the auxiliary load side to get power to the SWG and the pool cleaner booster pump. Then, I’ll need to figure out the minimum pump speed that I can use to get effective chlorination, as well as the minimum speed needed to effectively run the pool cleaner. But the end is definitely in sight for this project.

Rise Up Guatemala Single Origin

  • Beans: “Guatemala (Single Origin)” from Rise Up Coffee Roasters (Easton, MD)
    • Roast level: Medium
    • Origin: Guatemala (Asociación Chajulense, Quiché)
    • Roast date: 3/26/24
    • Purchase date: 4/9/24 at Green Valley Marketplace in Elkridge, MD
  • V60:
    • 21g coffee / 300g water (1:14.3)
    • JX: 17 to 20 (51 to 60 clicks)
    • Water at 95°C
    • Recipe: Single Cup V60 Pourover with slow pour
  • AeroPress:
    • 14g coffee / 200g water (1:14.3)
    • JX: 15 (45 clicks)
    • Water at 95°C
    • Prismo with metal and paper filters
    • Pour 30g and stir to wet grounds; bloom until 0:45; pour to 200g and stir 4-5x; cover and steep until 3:00; stir 4-5x; press slowly

I brewed my first cup of these on Sunday afternoon (4/14), using grind setting 20, and it was really good. The flavor was great with no bitterness and low acidity. Just as an experiment, I nudged the grind one “click” finer on Monday morning, and another “click” finer this morning (Tuesday), but those cups did not taste as good — not bitter, but just lacking the flavor of the first cup. I returned to setting 20 this afternoon, and it was much better. I have a hard time believing that such a tiny adjustment to the grind made such a big difference in taste, but I guess anything is possible. It will be interesting to see how subsequent cups turn out.

4/20: I seem to be alternating between good cups and mediocre cups, and I think it has more to do with technique than grind setting. Over the past few days, I tried grind setting 15 as well as 16, but both tasted a little bit bitter — not bad, but not as smooth as I would like. Today, setting 17 was really good. Earlier (see above), I was getting good cups at 20 and not-as-good cups at 19 and 18. I suspect that with more consistent technique, I’d be getting uniformly good cups at any grind setting from 17 to 20. I’m fairly confident that I’m keeping water temperature, proportion of coffee to water, and pour interval timing consistent from cup to cup. That leaves pour rate and height of pour, neither of which I have a way to measure, but neither of which I’ve varied much recently either. Today, I paid a little bit more attention to the bloom phase — I made a very deep well in the grounds, and poured quickly starting from the center, in an effort to get 100% of the grounds wet as quickly as possible. Initial results were promising, but we’ll see if it makes a difference going forward.

4/22: Deep well in grounds doesn’t seem to be the difference-maker, as my last two pourovers were subpar. I wish I could figure out the magic formula for making consistent pourovers. Obviously, something is changing from day-to-day. Maybe it’s my scale? Whatever the case, I brewed the last of the beans today in the AeroPress (see above) with my usual go-to AP recipe, and it turned out fantastic — maybe not quite as good as my best pourovers, but much better than the last two days’ pourovers.