A Lyrical Day

This afternoon, we went back to the Hammer to see Lyric Theatre‘s production of Iolanthe, which has two more performances next weekend. I quite enjoyed it. This was the second time I’d seen Lyric do Iolanthe; the first was in 2015, and it didn’t seem quite as politically pertinent then!

After the production, we went to Lyric’s 50th Anniversary Gala on the fourth-floor terrace of the Hammer; it was a nice evening, and I was happy to run into old friends from IBM and ham radio, Weo and Sharon.

This evening, we started the process of getting bids for the new Kia EV-6 we want to buy. I’ve sent out requests through Costco Auto Program (which only put us in contact with one dealer) and Consumer Reports Build and Buy (aka TrueCar), which has gotten responses from four dealers (so far). The Consumer Reports system also showed prices from those dealers, and it was interesting to see how much the offers varied for similar cars; the dealer closest to us (Capitol Kia) had the highest price, and the next closest dealer (Stevens Creek Kia) had the lowest price.

We’d like to get the car in Yacht Blue, but that seems to be a very rare color for the trim we want (Wind RWD).

The other question is whether to buy or lease. Leasing makes the $7500 tax credit available, but has other disadvantages (like the interest rate they charge), though apparently you can just buy out the lease immediately and pay very little interest (tens of dollars) and still recoup the tax credit. I’ll have to look very carefully at that once we have a car and price in hand.

And I want to get offers for the Subaru that the Kia will replace; I’ve found a list of online purchasers on Leasehackr and will start contacting a few of them tomorrow. I created a temporary email address and phone number for this process so that I can make it Go Away when we’re finished!

Tudor Cosplay

We spent most of the day at the Legion of Honor so we could see The Tudors: Art and Majesty in Renaissance England before it closes in a few weeks. We were not alone; there was a group of cosplayers who arrived about the same time.

The exhibit was jointly organized by the Met, the Cleveland Museum of Art, and the Fine Arts Museums of San Francisco; I expected it to be interesting, educational, and beautiful, and I wasn’t disappointed. We rented the audio guides, which gave a lot more information than the wall labels did; I think we spent an hour in the exhibition and I really enjoyed it.

The Tudors wasn’t the only special exhibit at the Legion. We found out about Bouke de Vries: Memories in Porcelain by seeing this piece as we walked into the museum.

We made a trip to the Bowles Porcelain Gallery to see the rest of the exhibit; de Vries takes shattered porcelain and turns it into something new. It was fascinating. The rest of the Gallery wasn’t half bad, either.

And as long as we were at the Legion, we toured a few other rooms. I always enjoy seeing this painting of the “New Lutheran Church” in Amsterdam because I’ve stood at almost exactly the same spot and the church is still there.

The Singel, Amsterdam, 1697 (Gerrit Adriaenszoon Berckheyde)

The fog hadn’t quite lifted when we left, but the sun was trying to break through.

A second chance

I was the Tech Chair (aka Zoom Facilitator) at today’s Silver Tongued Cats hybrid meeting; I’ve done it before, and it’s usually easy to get set up.

Today, though, when I plugged in the USB-C to HDMI and USB-A minidock I needed to connect my webcam to my computer, I got a prompt asking me whether it was OK for the minidock to talk to the computer. I clicked “Yes” (or so I thought) and I went about the rest of the meeting setup (starting Zoom, calling it from the conference room phone for audio, and so forth). The HDMI connection worked fine, but Zoom couldn’t see my webcam.

I was puzzled. I was more puzzled when I fired up System Information and it didn’t even show the minidock on the USB device tree.

I thought we’d have to go through the meeting without the webcam (fortunately, our Toastmaster had set up his phone to show video of the lectern) until I plugged a power brick into the other USB-C port on the computer. Suddenly, I got another prompt asking about the USB minidock; this time, I was very careful to answer “yes”, and as if by magic, Zoom saw the webcam and all was well.

I guess I have to be more careful about what I click.

More wanderings along the PATH

I kept looking for good ways to solve my problem of yesterday. One idea which came to mind was editing /etc/profile to be better behaved with regards to leaving my changes to the PATH alone, but I expected that my changes would be lost every time I installed a new version of Mac OS, so I didn’t try it.

But then Apple released Mac OS 13.5 with significant security fixes, and I needed to install it. I changed /etc/profile before doing the installation, and I was delighted to find my changes were still there after the update, so that may be a viable strategy.

I also looked at my Ubuntu systems to see what they did in /etc/profile – they’re even more brutal than Mac OS. Mac OS puts its preferred directories at the front of the PATH so they’re seen before whatever was in the PATH when /etc/profile is read; Ubuntu simply overwrites the PATH with its own version.

Oh, well; who said using a computer would be easy?

Straightening out my PATH

I ran into a strange problem yesterday when I wanted to run the Python program I use to print a nice version of our weekly menu plans – the system complained that a package was missing, even though I’d been able to run the program just a few weeks ago and I certainly hadn’t uninstalled any packages since then.

I installed the package so I could run the program and called it a night.  But I was bothered.

Today, I looked at the problem again.  I knew I’d installed the most recent version of Python, Python 3.11, installed a bunch of packages (including the one that was missing last night) and made it the default version, but suddenly I was getting Python 3.9.  Python 3.11 was available, complete with packages, but I had to explicitly specify that version or I’d get Python 3.9.

It took a bit of research before I figured out what was happening.  When you open up a terminal window on a Unix system (or otherwise start a shell), the system runs several scripts before you get control.  One of the things that gets done in those script is setting the path that the system uses to find a program if you don’t specify its exact location (so you can say python3 instead of /opt/homebrew/bin/python3, for example).  In a fit of cleanliness and optimization, I’d moved the line that adds programs (including my preferred version of Python) which were installed by Homebrew to the path from .zshrc to .zshenv, and that was the cause of my woes. I fixed the problem by moving the line to yet another initialization script, .zprofile and all was well again.

In case anyone else is confused about the various initialization files that are called when a zsh shell is started, here’s a brief summary of what runs when, at least on Mac OS (thanks to harrymc for his clear explanation, which I’m simplifying further for Future Me). I’m omitting files that don’t seem to exist by default in Mac OS.

File Typical Purpose Sourced when…
.zshenv Set environment variables always
/etc/profile This is a SYSTEM-PROVIDED file, typically used to set the PATH. On Mac OS, calls /usr/libexec/path_helper which prepends its result to any PATH that’s already been set. when logging in (or starting a new terminal)
.zprofile Runs any commands appropriate for a login shell, including PATH modifications when logging in (or starting a new terminal)
.zshrc Runs any commands to set up an interactive environment when starting an interactive shell
.zlogin Final commands to set up a login shell when logging in (or starting a new terminal)

Putting the Homebrew copy of Python into the PATH in .zshenv would have been OK if there hadn’t been a copy of Python in one of the system directories that /etc/profile put in the front of the PATH; after /etc/profile made its modifications, the Homebrew copy was hidden by the system copy.

So Future Me, please note: don’t set up the PATH in .zshenv. It’s OK to set up other environment variables, but not that one!