Checklists and Procedures


As a programmer / site reliability engineer / cloud infrastructure administrator I am very familiar with processes and procedures. Some are anecdotal and others are formalized. The best ones are automated, so that they are precisely repeatable.

My wife is having hip replacement surgery today. As with her first hip replacement last year, there are a number of processes and procedures at play, and a few checklists. We both appreciate the thoroughness of the preparation. Having each stage mapped out, knowing what to expect, and having people verify and explain as they go, all make the experience better.

One of the procedures requires no food or drink within six hours of the surgery. Usually they tell you nothing after midnight, regardless of the procedure time, as it is a definite, unambiguous time.

As a part of the pre-op preparation, there were several pills my wife needed to take. She is unable to swallow pills using water alone. We explained this prior to the first surgery to the hospital intake nurse, to the anesthesiologist who called the day before, and to the nurses preparing her for surgery. In order to swallow pills my wife use a small bite of soft food: a cracker chewed up, or a bite of banana.

On the morning of the first surgery the nurse presented her with a little cup full of pills and a small cup of water. We explained once again the inabilty to swallow with only water. So the pills didn’t happen.

We explained this requirement again during all of the pre-op visits and calls. During the pre-op anesthesiologist phone call yesterday, we again explained about the need for a small bite of soften food to swallow pills. This morning we explained that to the nurse. She offered a saltine cracker, which did all the pills to be taken. An hour later, as we were waiting in the holding bay outside the operating room, we were told that due to the cracker surgery would have to be delayed. By six hours.

The procedure wasn’t followed. Had the nurse contacted the anesthesiologist for today’s surgery and asked, it might have been allowed, or they may have said, “Nope, no food”. Either way the surgery would have happened at the original 9 am time. Since there wasn’t any communication to verify the use of a cracker, the surgery was delayed.

I understand and appreciate the importance of procedures and checklists, and that there are consequences for not following them. That the surgeon and anesthesiologist are paying that much attention bolsters my confidence in their focus and dedication to my wife’s care.

The consequence of not following the no food edict is a six hour delay. The irony is that the efficacy of the medication taken at 7 am with a bite of cracker will have worn off by the start time of the delayed surgery.


Infinited Lego Domino Ring


Whenever my wife or I sees something like this, we’ll say, “When do people think up stuff like this?”, to which the other will say, “Not between 9 and 5.”


Heliotrope House


This house is wonderfully situated to embrace its location. I especially like that different parts of the house have distinct views.


Making High Quality Go and Shogi Boards



Scratch Vm Using Docker


After watching 0 to LSP: Neovim RC From Scratch I wanted to experiment with my own Neovim configuration. Fortunately, someone tweeted a very nice way to have a scratch environment, totally separate from your current Neovim configuration, for experimentation.

Start by creating a scratch directory on your host machine. Then using that directory run this command:

docker run -it --rm -v {$PWD}:/root/.config/nvim -w /root/.config/nvim --net host alpine sh

After the image is started, run

apk add neovim neovim-doc

to install Neovim and its documentation.

The Docker instance will start surprisingly quickly, and since it is mapped to a directory on your host machine, the configuration you make will be saved. I can see myself using this pattern for other experiements.


Algorithm of Code


I’ve known about the annual Advent of Code challenge for several years. I decided to participate this year; I’ve been slowly teaching myself the Go programming language and this would be a good way to reinforce what I know. Or to discover what I don’t know.

My bachelor’s degree is in “Applied Computer Science”. I was in college from 1979 until 1983. While algorithms may have been discussed in a couple of courses, I did not have a course specifically about algorithms. I graduated with a college level understanding of COBOL, JCL, VSAM, IMS, and CICS. The next decade was spent honing my use of those tools.

The problem domains I worked in were centered around batch processing of transactions, we weren’t looking for the speediest way, or the most memory efficient way, or the least costly way to solve problems. We wanted reliable, durable, functional code to generate bills, update accounts, and manage assets. We wanted code that was easy to understand and work with at 3 am when your pager went off.

Fast forward 40 years to the Advent of Code, or as I am calling it in my head, the Algorithm of Code challenge. So far I’ve completed the first three days puzzles; 6 puzzles total. My solutions produce the correct answers, but they are not elegant or pretty. My approach is somewhat brute force. Effective? Yes, but I’m convinced that someone with a better grasp of algorithms would be able to solve these challenges with fewer lines of code, perhaps more efficiently.

Going forward I plan to alter my approach to solving the puzzles. If I realize that I need to find the intersection between three sets, I’ll search for “algorithm to find intersection between sets” and try to incorporate what I find into my solution. Once I have a feel for the crux of the problem, I’ll research to see if there is some known algorithm useful in overcoming that hurdle.

A couple months ago I discovered that FrontendMasters is offering a free algorithms course. I started to watch the first lesson, but life intruded and I haven’t continued. Over the extended year end break I want to try to complete the algorithm course to gain a better understanding of what they are an how to utilize them.

In the meantime, I’ll be plugging away at the next set of puzzles, and hoping to learn a bit more about programming.


When the Internet Was New and Fresh


In the winter of 1994 I bought my first personal computer. A Gateway 2000 with a 486 33SX processor, 170MB hard drive and a 15-inch monitor. At my day job we were using OS/2 Warp and a CASE tool to create new code, so naturally I erased the Windows installation that came on the PC and put Warp in its place.

I no longer remember the name of the web browser that Warp had, but I do vividly remember being on a site hosted somewhere in Australia that let you control a robot arm from your computer. You got a picture from a camera, a still picture, showing you some blocks within reach of the arm. You could enter commands to try and pick up a block and move it. You were allowed 5 minutes control, and then it passed to someone else.

It seemed like the early World Wide Web was filled with new and fascinating destinations. There was the guy who wanted to see how fast he could light charcoal. Using a cheap $2 grill and a 20 pound bag of charcoal and some liquid oxygen, he managed to not only light, but completely consume, the charcoal in about 2 seconds.

Everyday there was another site to explore. Things didn’t always work, connection speeds were glacial, and browser standards were years in the future. Even with all the rough edges it was exciting and invigorating.

Over time the web has become homogenized, parts of it are walled gardens, and very little of it has the same “let’s see what we can do with this” energy. An unexpected side effect of the turmoil at Twitter has been the discovery of a tiny corner of the Internet that has some of that “damn the torpedoes, full speed ahead” energy. Mastodon.

Quite by happenstance I discovered a small Mastodon instance called Hachyderm.io. Originally a small Mastodon instance for a couple hundred people, it has exploded in size to over 30,000 members in less than a month. This has not been without some growing pains. The core team, led by Kris Nóva (@nova@hachyderm.io), has risen to the challenge, risen and soared. Through her Twitch channel, The Kris Nova Show, @nova has taken us all along as the Ops team has dealt with scaling from a set of servers in a basement rack, to a co-location service in Germay, with proxy servers geographically spread out.

It has been bumpy at times, but it has been fun too. Seeing how other system administrators deal with production issues in real time has been some of the best stuff I’ve seen online in a very long time.

I now see that my previous social media experience had become a large, often angry, frequently anger inducing, echo chamber. Like a traffic accident that you can’t not look at, Twitter has become an unhealthy place. Moving to Mastodon, and to Hachyderm in particular, has shown me that you can get positive energy from social media. It has also brought back a bit of that “what happens when we try this” feeling the Internet had in 1994.


The Greatest | Apple



Indiana Jones and the Dial of Destiny


I am so looking forward to this movie.


Gas Leak or Debugging a House


For the past couple of weeks, we have been noticing a faint sour odor at times in the house. Usually located in the hallway between the living room and bedrooms. It was never very strong, nor was it persistent. It came and went. At first I didn’t say anything about it as I sometimes have olfactory hallucinations—I smell smoke when there isn’t any smoke. When I did mention it to my wife, she could smell it also.

Eventually I thought to do a search online. When I searched for “house smells like skunk” the results were filled with ‘Gas Leak’. So we called the gas company. The gas man came, and using a gas sensor found a leak where the gas feed line joins the junction where the gas lines splits to go to the furnace or the water heater.

We called the plumber, who came and redid the connection. The feed line is corrugated and he removed the last one or two rings and reassembled the joint. Apparently the nut compresses the corrugation so that it flattens and makes a seal. I watched him tighten the joint using a couple of large monkey wrenches; it isn’t coming apart any time soon.

Problem solved.

Or maybe not.

A day later I still caught a whiff of skunk-like odor in the same location in the house. Nuts. In programming one error often masks a second error. It seems that debugging a house is a little like debugging a program. Finding one error doesn’t mean you are done, it just means you stopped looking.

The second gas man did a more thorough inspection of the fittings and lines between our gas line and the water heater and furnace. He found two places where the meter beeped.

The first was the “drip leg” and the second was a junction between the flexible feed line and a 90° elbow near the water heater. The drip leg is a short length of pipe below all the other fittings, straight down from the incoming gas line. It is there to allow any debris in the line from construction to fall harmless out of the gas before getting carried to the mechanisms in either appliance.

The plumber came and discovered that the drip leg was no more than finger tight. It seems that the code inspection does a pressure test from the meter to the shutoff valves to the furnace and water heater. The code inspector doesn’t (I guess?) inspect the final couple of feet to the appliance. The plumber being thorough, took all the fittings apart, applied a new, generous amount of pipe dope, and refastened them all. The gas company, having been to our house twice in 3 days, requested a new air pressure test. The pressure test passed.

After turning the gas on and reigniting the water heater, the gas man ran his sensor over the whole affair one more time. It beeped again.

The problem by the water heater hadn’t been the junction between the flexible hose and the cast fitting, it was the fitting itself. When he applied some soap water to the elbow a tiny, tiny bubble appeared along one flange.

The plumber returned again, and replaced the elbow. Hopefully now we’ve found all the leaks and repaired them. Both my wife and I are still pausing here and there in the house to sniff critically to see if we detect an odd, sour, skunk-like odor. So far so good. The house is odor free.

Lessons Learned

The first error you find may or may not be the actual problem. It may be a cascade from the real problem. The first inspection on Sunday stopped when gas was detected at the junction between the incoming gas line and the fitting between the furnace and water heater. He was following the direction of flow for the gas and stopped at that point. The actual leak was lower, where the drip leg was. It may have been a false reading at the feed line junction.

The second lesson is to verify the information you’ve been given. Anecdotal information is good, but verifying for yourself is better. Had the plumber done his own test he might have discovered the lose drip leg or the faulty cast fitting.

The third lesson is to retest everything when you are finished with your repair / fix. (A) To ensure that you have addressed the problem that was presented, and (2) to make sure you didn’t create a new problem.

Lastly, don’t be afraid to call the gas company or police or fire department when something seems amiss. It’s their job to check things out. Everyone is happier in the end, and your house doesn’t go kablooey.