About bilborg

I am who I am, there's plenty of data on this site to tell you more. Briefly, I'm a husband, computer geek, avid reader, gardener, and builder of furniture.

25 October 2020

But First … for my friends and others in the US …

I don’t ask for a lot here, but I have one request to make of y’all – VOTE!

Democracy requires citizen participation: VOTE!

OFFS, just get out there and VOTE!

It’s probably too late for absentee/mail-in ballots, which is how Marcia and I have exercised our civic duty. But there’s early voting almost everywhere. Don’t sit home, don’t sit this out. VOTE!

Unless, of course, you’re offended when I ask that if you plan on voting for the incumbent, just keep your ass on the BarcaLounger ™ at home, in front of Fox and Friends. But even if you’re in that special camp, be smart enough to wear a mask, wash your hands, and avoid large gatherings. I do not wish illness or death on you and your family just because you’re … wrong.

Progress

Lexi guards me from my office window while I’m working. She sees squirrels on the deck, and barks. She sees squirrels on the far fence, and barks. She sees squirrels on the tennis court, several hundred feet away … and barks. Additionally, she barks at any other unexpected movement. So, leaves falling from the trees can mean that she’s hoarse for hours. Yay?

Lexi, the chippuggle mutt. at her guard post
Lexi at her guard post

Working with Wood

After doing some chores yesterday morning, I headed down to the woodshop to do a small project – it’s been a while. And as is often the case, the first thing I end up working on is something unrelated to the work I set out to do. In this instance, I ended up re-fabricating my cross-cut sled for the table saw. The first iteration of this handy shop fixture was a shade too big (and thus too heavy). Additionally, I’d gotten the tolerances between the two slide rails a bit too tight, so it was an effort to actually use.

New cross-cut sled on my tablesaw.

The new one is a bit smaller, a bit lighter, and a lot easier to use. Especially, I added lightness by hogging out much of the back fence of the sled, since it doesn’t need much besides center and side-to-side structure. I used the cut-outs to fabricate a couple of stops I can clamp to the front fence for repeatable operations.

The actual small project I wanted to work on took less time than the sled, although I did finish it up today, since I had just finished glue-ups before supper last night.

Shop-built drawer trays for my home office
Shop-built drawer trays for my home office

What I made were a pair of identical trays for the top drawer in the home office I built 7 years ago. This has all been functionally fine, but as the drawer closest to hand when sitting at the desk, it’s become a bit of a catch-all. And it’s really deeper than it needed to be. So I tacked in a slide rail of pine on each interior drawer side, and fabricated two trays. They’re 1-5/8″ deep internally, and 14″ x 7″ each. Assembly with rabbited corner joints, glue, and pin-nails.

The trays are sub-divided by a central rail that rises above the level of the drawer (still clears the opening in the cabinet carcass) and provides an easy way to keep stuff separate, and I can easily lift the front tray out and slide the back one forward. I reinforced the dividers and the tray corners with small, nearly full height corner blocks.

I didn’t put much of a finish on the trays – just a quick coat of paste wax to seal the wood. I’m pretty happy with the completed project. Small enough in scope to see through in a weekend, including the bonus sled rebuild.

Winding Down

We’re coming up on an important election, so VOTE!

667

It has been a month or so, but I’ve been … busy. Even though we’ve been healthy, as have our extended families, the coronavirus situation, in juxtaposition with the political environment has made for a stressful time. I wish I were hopeful on all fronts, but I’m going for survivability at the moment. Or an asteroid strike. Decisions, decisions.

Why 667? Well, it’s the number following the Number of the Beast, and the post that’s been sitting on top of the page for the last month was also the post numbered similarly. So it’s a bit of a celebration of having snuck past Old Scratch.

While I haven’t packed on a lot, I have been doing a fair bit of stress eating over the last few months. Having drawn my own attention to that behavior, I am working on replacing that with anxiety exercise. Wish me luck, I’m doing okay so far…

We did get out fishing once in the past month, and I caught a small bass, yay! This week, when we could have done that again, Marcia had an appointment, and I filled two mid-week vacation days with non-relaxation tasks: drywall, roof sealing, and some serious cleaning of both vehicles. Today I was glad to be back at chair and keyboard for a bit – it’s less tiring than “days off!”

()f course, it’s a three day weekend in these parts, so I’ve got three days to fill with further chores – probably some more fall yardwork, to be honest. Then I’ll drag out the trench coat and the squint for Columbo Day. One more thing…”

Winding Down

Our condolences to the families and friends of the following fallen warriors:

  • Senior Airman Jason Khai Phan, 26, of Anaheim, California, died on September 12 in a single-vehicle non-combat related accident while conducting a routine patrol outside the perimeter of Ali Al Salem Air Base, Kuwait.
  • Staff Sergeant Ronald J. Ouellette, 23, of Merrimack, New Hampshire, died on September 14 in a single all-terrain-vehicle non-combat related accident on the flightline at Ali Al Salem Air Base, Kuwait.

Take care of each other, y’all.

7 September 2020

Staying Busy

Yeah, it’s been a month. I’m dancing as fast as is reasonable in these terrible and weird times. And sometimes I’m building stuff… Sometimes building stuff means building other things first, in order to build the thing desired. Yep, a fixture:

A fixture. That 30 degree angle is important…

Once the fixture was done, I could work on parts:

The fixture holds some schedule 40 pipe… and there’s a router?

With the fixture to guide the router, I could cut slots into the schedule 40 pipe, in a specific orientation to the 30 degree angles the pipe was cut at. Then I could screw the pipe lengths onto the final product:

The thingumy has been built.

The slots at the bottom? Just for access to screw the pipe into the backing there, too. The slot at the top? That’s for accomodation of the things stored therein:

It’s a fishing rod holder for Marcia’s truck.

Yep. A fishing rod holder. This is a lot better than a clutter of rods tangling themselves while lying on the floor mat in the back, there.

Keeping Alright…

We’re keeping alright, thanks. Between the coronavirus and this administration, things are frankly a little too “interesting times” for my taste, but all I can do to improve the prospects for both is to vote.

Vote, y’all! Make sure your registration is correct and current. If you want to do a mail-in (or absentee) ballot for the safety of all concerned, please research how to do that in your jurisdiction, early. Don’t procrastinate.

Winding Down

There have been no casualty announcements on the DoD site in the last month. If true, I’m glad.

9 August 2020

Fishy Business

The fish jigsaw art piece featured recently is now done and on the wall. I put on a couple of coats of clear matte water-based polyurethane on the back to seal it, and four coats front and sides. After the first coats, I used some 220 grit on the wood surfaces to knock down the nibs, and gently with some single ought steel wool for the face of the puzzle, just to give a bit of bite for the ensuing coat. All the other coats were followed by a light pass with the steel wool. Here it is on the wall in the master…

A fishy jigsaw puzzle mounted on wood, on the wall.
A fishy puzzle on the wall

Gardens

In the front yard, everything remains green. That’s undoubtedly due to the unusually consistent and high amounts of mid-summer rainfall. A usual July and August pattern yields the occasional thunderstorm, which retains the power to terrify the dog, but drops just a couple of tenths of an inch, when it doesn’t miss us altogether. But we’ve had some good storms come through over the last month, for a total of 9″+ measured on the backyard meter here. And we haven’t had a week without at least one good soaking.

Two major effects there – first is that the lawns, which have usually gone a bit brownish and less enthusiastic in their growth have remained green and chugging right along generating requirements for mowage. Second, the tiger lillies, which usually are blooming in the first days of July, then done and gone by just past mid-July, were epic this year. We still had blossoms on the tops of the lilies in the last week.

Tiger lilies in the front yard

In the back yard, sadly, the news isn’t as good. After losing all of my first plantings to frost in late April, most of the second plantings have failed due to rust. So while tomatoes were produced, they are sickly and not really edible. Two exceptions to the rule – a pair of plants producing small roma tomatoes, planted in the other bed with the peppers, are thriving. I think they came from a different wholesale nursery than the others. Ah, well. So we have peppers and some tomatoes – so a bit of salsa, then.

Tomatoes and peppers harvested from the back garden

Other News

I’m waiting to hear back from La-Z-Boy, we have a broken mechanism in the Gibson recliner we bought a decade ago. They offer lifetime warranty on reclining mechanism parts, so it’s just a nominal shipping/handling charge to get parts. Good news: I have the tools and ability to repair it myself, given parts. Actually, had I a machine shop, rather than a wood shop, I probably could have bought some raw stock and made replacement parts myself. But I don’t.

Work continues busy, which is a good thing. I continue to shop for groceries sporadically, at 10-14 day intervals, as we try to minimize our outside contacts while we wait for Big Pharma to figure out how to overcharge us for the vaccine(s) we’re paying them (as taxpayers) to develop.

Winding Down

Our condolences to the family and friends of Sgt. Bryan Cooper Mount, 25, from St. George, Utah, who died as the result of a vehicle rollover accident while conducting reconnaissance operations on July 21, 2020, in Eastern Syria.

19 July 2020

Almost Caught Up

The last two weekends have been full of chores, catching up on the early summer yard suffering. Temperatures had been reasonable, and there’d been a fair bit of rain during our absence. That meant that lawns, weeds, everything was growing like gangbusters. But I’m almost caught up. Some of the tomato plants are starting to produce, as are most of the pepper plants. Others of the tomatoes don’t look entirely … enthusiastic about the ONE job they have this summer.

Work is ongoing for me. I’m still going into the office once a week for a weekly process related to backup that requires hands on site, as well as once a month for a printing process that has a bit of complexity, and tight deadlines. So, for me, that’s Monday and Tuesday of this week.

Additionally, I’ve got a full plate of online trainings and a couple of exams to knock out in the next month to keep my certifications in top form. So, there’s that.

Art Project

Today, after the bi-weekly shopping, I went down to the basement to work on our latest art installation. Months ago, Marcia assembled a fish jigsaw puzzle, and was entranced. She wanted it mounted in some way, to hang on the wall. She applied some form of mod podge to the puzzle itself, to make it robust enough to adhere to a backing. It was my job to come up with the backing.

Weeks ago, I assembled a collection of old southern pine boards into a backing, per Marcia’s specifications. Today, I did the masking:

The puzzle backing display, masked for adhesive

Once masked, I sprayed the clear area of the backing boards, and the back of the puzzle with 3M Type 77 spray adhesive, and waited a few minutes to let it set up to a high tack.

With a few dowels laid across the boards to suspend the puzzle near, but above the backing, I positioned the puzzle, and then started to adhere it to the backing, starting from the bottom, then moving towards the top, removing dowels as I went.

Finally the masking is removed, and the whole is revealed:

Puzzle firmly on board

Marcia’s happy with it, which means that I am, too. I’ll give the adhesives a couple of days to off-gas, then we’ll apply two or three coats of matte polyurethane. Finally, we’ll figure out where to hang it in the house.

Winding Down

Our condolences to the families and friends of these fallen warriors:

  • Spc. Vincent Sebastian Ibarria, 21, from San Antonio, Texas, died as the result of a vehicle rollover accident, on July 3, 2020, in Farah, Afghanistan.
  • Pfc. Alexander Blake Klass, 20, from Willamina, Oregon, died as the result of a non-combat related incident, on July 4, 2020, at Camp Novo Selo, Kosovo.
  • 1st Lt. Joseph Trent Allbaugh, 24, from Folsom, California, died as the result of a non-combat-related incident, on July 12, 2020, in Kandahar, Afghanistan.

28 June 2020

A Month!!!

We hope that all of you are keeping well and in reasonable health.

Yes, yes, it’s been a month. Sorry to those of you who worry. We’re all okay here. And for a couple of weeks, we were okay up in Maine, too!

The view of the lake from the door of the camp, in the middle of Maine.
The view of the lake from the door of the camp

Three days before we left for Maine, we learned that they had updated the rules for out-of-state visitors. If we could show proof of a negative COVID-19 test taken within three days of arriving in Maine, we could forego the otherwise mandatory two week strict quarantine. We found a clinic, got a test each, and on Friday evening we got our negative test results. 12 hours later, we were on the road to Maine.

Lexi  (our chipuggle mutt) likes hanging out in Maine, too!
Lexi likes hanging out in Maine, too!

It was a lovely two weeks, the best run of weather we’ve had in our many trips up there. The fishing was fun, the catching was … sparce, at best. The best bit about not needing to quarantine is that we could spend time with Marcia’s sister. We didn’t do much in the way of tourist-ish stuff, out of an abundance of caution. But it was really quite relaxing.

The garden lives, that’s good, and I’ve weeded them out. The lawns are now mowed again. And I’m back to work, mostly remote as before, tomorrow morning.

Winding Down

Our condolences to the family and friends of Spc. Nick Bravo-Regules, 20, from Largo, Florida, who died on June 23, 2020, in Jordan while supporting operations in the U.S. Central Command area of responsibility, from a non-combat-related incident.

28 May 2020

Rather Closer to the End

Well, the beginning was a good long time ago. And one thing I can always take away from the Drake Equation is that a primary reason that we’re alone is because civilizations just don’t last long enough to get past the deeply stupid stage that follows the enlightenment. Whether we do it to ourselves, or Giant Asteroid ’20 does the job for us, the bell is tolling.

I know, I’m a cheery sort of bloke, eh? You look at the news. I’ll go back to the small shit that I have control over. Like …

The garden is alive. Almost two weeks and nothing’s dead yet. On Saturday I’ll take off the bird netting, weed out the beds, and set the tomato plant cages. Yay!

SSH Agent Persistence vs CSH/TCSH

Y’all can skip this part if you want. It’s here as much for me to find it again if I ever need it as for anyone in Greater OutThereLandia.

The problem is “simple”. I have a group of systems I’m responsible for. The developers have a whole suite of scripts and processes based on the fact that they use the modern incarnation of the C shell, tcsh. I’m migrating them to newer platforms, and newer code repositories, remote code repositories. Access to these repositories requires SSH access. SSH key pairs are the answer to the problem, but the private key requires a passphrase to meet our security requirements.

Persistence across multiple login sessions is the key for the developers. Once they have an active login session on the platform, they want to leverage their SSH authentication without re-entering the passphrase each time it’s needed, or even each time they login (simulateous sessions) on the system.

All the tools I have laying about for managing persistent SSH keys across multiple sessions are pretty much Bourne shell based, and mostly I use a tool called keychain, written a while back by Daniel Robbins of Gentoo fame. I needed to find out how other people are solving this problem for csh/tcsh users.

What I learned is that not very many people are using csh/tcsh anymore. BUT. But, I found Mark A. Hershberger, who many moons ago wrote a page about managing SSH Agent via scripts, with a link to a sub-page with solutions for alternate shells (like tcsh/csh) – http://mah.everybody.org/docs/ssh-agent-startup … yes, that’s a plain HTTP link, no SSL, and your browser will hate it. Don’t worry, you’re not logging in or doing any banking there.

This was an awesome find for someone like me that spends little or no time in tcsh, but knows that it’s a bit of a janky environment for scripting things. I read, understood, and implemented the script as written. It didn’t work. Sigh. After a couple of hours complete with gnashing of teeth and pulling of hair, it turns out I was getting clobbered by a default feature of the environment called noclobber, which effectively prevented me from overwriting a file that already exists via redirection. So, if noclobber is set (which is part of the environment for these devs), then this code won’t work, if the target file, /tmp/blue.txt, already exists:

echo "I\'ve got the blues!" > /tmp/blue.txt

Once I learned about noclobber, and determined that I could not unset it and leave it unset because of user expectations, I found that I could force the overwrite with the judicious application of a ‘!’ character to decorate the redirection. This works, whether or not /tmp/blue.txt exists:

echo "I\'ve got the blues!" >! /tmp/blue.txt

With that problem out of the way, I was able to get the code to run at login. Then I started piecing together the logic I wanted to actually apply for these development users. For login, look for a file that defines an existing SSH Agent session. If that file doesn’t exist, or if it contains information about a defunct session, it will start a new SSH Agent session. IF there’s a running SSH Agent session, it’ll check to ensure the key is loaded, and prompt to load it if needed. So, this code goes into the users .login file in their home directory:

set sshAgent=/usr/bin/ssh-agent
set sshAgentArgs="-c"
set tmpFile=~/.ssh/ssh-agent-info
#
Check for existing ssh-agent process
#
if ( -s $tmpFile ) source $tmpFile
  echo $SSH_AGENT_PID
  if (! $?SSH_AGENT_PID ) then
    # echo "No $tmpFile, starting new agent…"
    $sshAgent $sshAgentArgs | head -2 >! $tmpFile
    source $tmpFile
    echo "ssh agent started [${SSH_AGENT_PID}]"
    ssh-add
else
  # the tmpfile was present with data, check it…
  # echo "Found $tmpFile, check data"
  set this=`ps -elf | grep ${SSH_AGENT_PID} | grep ssh-agent`
  # start ssh-agent if status is nonzero
  if (( $? != 0 ) && ( -x "$sshAgent" )) then
    # tmpFile exists, but stale data
    $sshAgent $sshAgentArgs | head -2 >! $tmpFile
    source $tmpFile
    echo "ssh agent started [${SSH_AGENT_PID}]"
    ssh-add
  else
    # Agent running, ensure a key is present
    set sa_data=`ssh-add -l`
    if ( $? != 0 ) then
      # need to add key
      ssh-add
    endif
  endif
endif

The original script for exiting the session would kill the SSH Agent outright. This is not so useful if you still have other login sessions running. So I wrote a few lines to attempt to ensure that only when the last running login was being exited, would the SSH Agent be reaped. This code goes in the user’s .logout file in their home directory:

set tmpFile=~/.ssh/ssh-agent-info
set sessCount=`w | grep $user | wc -l`
if ( $sessCount == 1 ) then
  # last user, clear out the ssh-agent
  eval `ssh-agent -c -k`
  /bin/rm $tmpFile
endif

And the solution works. The developers are minimally unhappy about the increased security wrapped around access to the code base, because they know I worked to make it as painless as possible while meeting policy requirements. It could always be more robust, but I tried to get all the common failure cases, and mostly the resolution to something I didn’t catch is for the user to log out of all of their sessions, then log back in again to reset.

Winding Down

Our condolences to the family and friends of 1st Lt. Trevarius Ravon Bowman, 25, from Spartanburg, South Carolina, who died on May 19, 2020, in Bagram Air Force Base, Afghanistan, from a non-combat-related incident.

Our hearts go out the families who have lost loved ones to COVID-19. Y’all, socially distance, wear a mask when you need to (indoors around other people for sure), and WASH YOUR DAMNED HANDS way more often.

Please don’t be one of the people who want to go into retail (or any other) businesses without a mask. Don’t be one of the people trying to up your chances of being DEAD by the time the General Election rolls around. Even if you don’t care for yourself, do you want to get ill, pass it on to an elderly parent (or a young child) and have them DIE because you’re behaving like a petulant child yourself? No, no, I understand that your role model in this case does indeed behave much like a petulant child. Don’t follow that particular lemming off the cliff. Stop. Think. Listen to medical professionals and keep safe.

I love you ALL.

17 May 2020

Spring, huh?

So, since we last were here together, we had several more overnight freezes. Sadly, at least one of them was a surprise. So one night I didn’t tarp the garden beds, and everything died. Yup, all of it. So I started over. Rototilled again, raked it all out flat again, bought new plants again, and got ready to put them in the ground, again:

Two garden beds ready for planting... again. Tomatoes and peppers in ready for transplanting into the soil.
Two garden beds ready for planting… again.

We’re not due for anything below 48F in the next ten days, so I expect that we’re actually done with overnight frosts. (Famous last words). But the plants look good, and since I did that work yesterday, everything is still alive:

Plants in the ground
Plants in the ground

Right now I’ve just got a variety of tomatoes and peppers, since those are what I want most. I’ll probably pick up some herbs and some beans to go in, in the next few days.

Lexi the mutt at my office window (Lexi TV)
Lexi at my office window (Lexi TV)

While it remains spring-ish, Lexi likes watching “Lexi TV”, quivering and growling at the vicious bushy-tailed rats (squirrels) invading her back yard.

Winding Down

Our condolences to the family and friends of Sgt. Christopher Wesley Curry, 23, from Terre Haute, Indiana, who died on May 4, 2020 in Erbil, Iraq, from a non-combat-related incident.

Marcia has been baking up a storm, and, well, I love it. I’m ordering some double doors to install in all the door frames, and getting pricing information on the necessary permits…. but it’s all delicious!

We continue, reasonably healthy, mostly home-bound, wondering what the idiots are going to say next.

The bright spot is that our state, in the process of putting off the primary, did so to ensure that this was a vote-by-mail election. We received our ballots, and our instructions in Spanish, completed and mailed them. Yesterday, the instructions in English arrived. Ah, well. We were able to figure it out. Pleased that unlike some Republican-led states, ours was sane enough to ensure that people didn’t have to stand in close proximity to each other to exercise their constitutional right to vote. Yay, Maryland!

Be safe, stay home as much as possible, mask and socially distance when you must be out. Please. If not for yourself, then for the people who love you and will miss you when you die of covid-19, with complications of politics and lack of sanity.

3 May 2020

Nothing to Report

Seriously. Boring is great, by comparison with the many things that could be going wrong. The garden is alive. We’re alive. Life is (distantly) okay. That’s good enough, right? Be well.

20 April 2020

Fun with WordPress

Note – this is a discussion and solution for a technical problem for a WordPress instance that uses an SSL certificate signed by a non-public CA. If you don’t care about this sort of thing, please move your eyes down to the next section.

The error text that I saw in the new-to-me Site Health page following upgrading to WordPress 5.4:

cURL error 60: SSL certificate problem: unable to get local issuer certificate

The error above was generated because WordPress/PHP couldn’t verify the site certificate. When this is broken, the impact can be significant on a WordPress instance. Some features just don’t work quite right. Auto updating can fail, and so on.

The context here is that for a variety of internal and external sites, I use site-specific SSL certificates that are signed by our internal CA. That’s a good thing, because prior to Let’s Encrypt, it was easy to spend a bunch of money on SSL certificates from a reputable source. We won’t discuss the non-reputable sources. Since I’m using an external resource for caching and web app firewalling, I am able to use the internally signed certificate for several external sites as well.

With the most recent update adding Site Health as a core feature, this error surfaced for me on a couple of sites. It took a couple of hours and some false starts before I found this solution.

In the WordPress file tree, there’s a file at wp-includes/certificates/ca-bundle.crt (using UNIX-style slashes). This is the file of CA certificates that WordPress and the PHP functions use to verify a certificate is valid. Tryijg to get WordPress and PHP to use the system CA certs file (which has my Root Certificate added as a trust source) was a non-starter, although I tried. So I copied the text of my Internal Root Certificate into thewp-includes/certificates/ca-bundle.crt file. Boom! Problem solved … for now.

The downside of this solution is that any given WordPress update in the future may (will?) overwrite that file with newer info, and will once again exclude my Internal Root Certificate. So I created a text file that contained an identifying header string and the Internal Root Certificate. I then wrote a shell script to check thewp-includes/certificates/ca-bundle.crt for that header string, and if not found, adds the content of the text file to the ca-bundle.crt file. That shell script runs once a day in the wee hours of the morning.

Now, anytime there’s a WordPress update that overwrites ca-bundle.crt, by the next morning, the Internal Root CA certificate will be back in place, and things will continue humming along nicely.

Staying at Home

We continue to stay at home, which is a good thing.

I’ll ask you to determine for yourself if it’s a good thing that some people who, for reasons of politics, mistrust etc., continue to gather in groups, putting themselves and their loved ones at heightened risk of severe illness and death. I personally would rather that people be sane and safe. But bailing any water at all from the deeply stupid side of the gene pool can only be for the good of humanity, in the long term.

I didn’t do any yardwork this weekend. We did a number of other inside chores, including re-loading shelves and such after dealing with a multi-phased ant invasion.

Additionally, on the yardwork front, I will point out that planting veggies HAS brought the usual effects on to our region: We had two overnight frosts in the last week, and we’re due for one more on Tuesday night. I’ve been tarping the veggie beds for those events, and so far haven’t lost plants to them.

Happy Dog

While I was dealing with a training event late last week, I ran across the first picture we took of Lexi on her gotcha date in March 27, 2010:

Our first picture of Lexi the chipuggle mutt, taken on March 27, 2010.
Lexi’s First Photo Op

Winding Down

Nothing particular to report here. Be well, okay?