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.


Neovim Autocmd to Call Lsp Formatting on Save


Recently I added this autocmd to my Neovim configuration, to format Go language code when the buffer was saved.

acmd({ "BufWritePre" },
     { pattern = "*.go",
       callback = function()
         vim.lsp.buf.format()
       end,
       group = _go})

The vim.lsp.buf.format() call executes the LSP provided formatter for buffer being written. By having it tied to Go language (.go) files I was missing out on formatting of other languages.

Today I moved that autocmd to the general section of my autocmd.lua file, and set the pattern to be *, so that it would work for all languages.

acmd({ "BufWritePre" },
  { pattern = "*",
    callback = function()
      vim.lsp.buf.format()
    end,
    group = _general })

Now when I save a buffer, whether it is Go program, or Rust, or even the Lua code in my Neovim configuration, it gets formatted.


GNU Readline Keyboard Shortcuts


More information about command line keyboard shortcuts via GNU Readline than you really wanted to know.


Arch Linux Turns Twenty


I use Arch Linux (sometimes) by the way.


Using Starship for My Bash Prompt


For many years now I have been using Liquidprompt to create and populate my bash shell prompt. Prior to discovering Liquidprompt, I had a hand-rolled prompt that did some of what I wanted.

I’ve now switched to using Starship for my prompt. In particular I like the bracketed segments preset.

So far I’ve only switched on my personal computer. If by the end of the Thanksgiving break I’m still liking Starship, I’ll set it up on work computer.


Not Following Through on 'Or Else


The summer I was 16 I went on a backpacking trip to the Tetons with a YMCA camp. One of the rules of the trip was “no drugs, no alcohol.” The consequence for breaking this rule was to be sent home, immediately, at the parent’s expense. After two days doing day hikes to acclimate to the altitude, we did a 3 day hike into the mountains. Then we had a night back in town, followed by a 4 day hike.

During our between hike break in town, three dipshits borrowed money from one of the counselors and proceeded to buy some beer. The three were charismatic “bad boys” who were popular with a lot of the other kids on the trip. The news that they were to be sent home immediately caused tremendous turmoil within the group. Eventually there was a secret vote to determine if they would be allowed to stay or be sent home.

The vote was to allow them to stay. Mid-way though the following hike in the high country, they managed to cause a large rock slide. They had tested the rules and discovered that the consequence wasn’t going to be enforced. The lead counselor was furious, and wanted to hike them out of the mountains that night.

I was old enough to understand the dynamic of what had happened. They were told, behave or else. When they misbehaved and the “or else” wasn’t imposed, they escalated their inappropriate behavior.

Two years ago Twitter removed the former president from their service, as he had incited a violent insurrection, and was unrepentant. Apparently the new owner of Twitter has seen fit to reinstate the former president’s account. The “or else” is being rescinded.

This isn’t about free speech. Twitter is a private company, not the government. They get to moderate the content they allow on their service. Claiming free speech and allowing an insurrectionist back on the platform is really a vote of support for the neo-fascist stance he represents.

The former president will now be emboldened and even less controllable than before. Whether or not Twitter survives the turmoil caused by the new owner’s ham-fisted approach to running the company, they have lost their stature by reversing the decision to de-platform a menace to society.


Tmux Ls Operation Not Permitted


I updated to MacOS Ventura a day or two after it was officially released. I had been running it on one of my computers since the public betas started mid-summer. Until tonight, I haven’t had any real problems with it.

This evening I created a new tmux session and wasn’t able to run the ls command. I got this error message:

ls .: Operation not premitted

A few searches led me to a couple of articles talking about a similar issue with Apple’s Terminal app. The solution there was to make sure Terminal was listed in the “Full Disk Access” pane of “Security & Privacy” inside System Settings (formerly System Preferences).

I added tmux to that list, and quit out of all the active tmux sessions I had, then recreated one and my ability to run commands from within tmux had been restored.

Here are the steps to do the same thing I did.

  1. Open System Settings
  2. Select Security & Privacy
  3. Select the Privacy tab
  4. Select Full Disk Access from the list
  5. Click the + sign to add a new entry
  6. Search for tmux and select it
  7. Restart/recreate any open tmux sessions

I hope this was a mistake on Apple’s part that will be correcting in a future release. I really don’t want to add all the Homebrew installed utilities and applications to the Full Disk Access list.


Horizon Helvetica


A beautiful, and functional, pocket sized drawing aid with an isometric grid, compass, ruler, protractor, and more.