Summer Theatre Notes

Diane and I have always enjoyed going to plays (in fact, one of our first dates was to see the RPI Players perform “Sweet Charity”), and we’re lucky to live in a place that offers us many opportunities to do so.

So far this summer, we’ve seen seventeen plays (and will see another on Sunday, with a high probability of an additional play or two next week).

I’d be foolish to write to write reviews of all of them, but I do want to point out a few of the ones which I thought were especially good and which are still playing. So let’s go to the theatre!

We saw the entire season (11 plays) at Oregon Shakespeare Festival. It took two visits. The first trip was in early June with Road Scholar (the class included 3 plays, and we added five more for a total of 8 plays in 6 days). We made a point of scheduling all of the outdoor plays for that visit to minimize the odds of fire-related cancellations. The second trip was a few weeks ago to pick up the plays that weren’t open in June – and I’m glad we didn’t try to see any of the outdoor plays then, because OSF had to move them to a much-smaller indoor theatre because of the Milepost 97 fire in Canyonville, 80 miles north of Ashland.

OSF’s season continues into October, and I can recommend all but one of the plays – Alice in Wonderland was disappointing. The music and costumes were good, but the characterization was limited, and I just couldn’t bring myself to care about what was happening on the stage – it was just a pack of cards, after all.

On the other hand, I found Mother Road, Hairspray, Between Two Knees, Indecent, How to Catch Creation, and Cambodian Rock Band to be thought-provoking, well-acted productions with something to say about society and how different groups interact. I’d recommend any of them without hesitation (though Mother Road and Between Two Knees are the weakest of this group).

The Shakespeare plays were all well-done and worth seeing; La Comedia of Errors was a very different take on Shakespeare!

We’ve already signed up for Road Scholar’s Ashland experience next year and hope to see the entire season again.

We’re season-ticket holders and supporters of three local theatre companies – none of them have the resources of OSF, but they produce great theatre.

City Lights Theatre in San Jose is currently performing Cabaret based on the original 1966 production. There’s a lot more story than I remember from the previous versions I’d seen – the music was there, but the story took priority. The similarities to what’s happening today were clear (not blatantly pointed out – but there to see) and chilling.

Earlier in the season, we saw their production of Silent Sky, a Lauren Gunderson play about the first female computers/astronomers at Harvard. I’d seen the play before, and thought that City Lights did a very good job with it.

We’re already signed up for their entire season next year.

Silicon Valley Shakespeare has two plays in rep at Sanborn Park in Saratoga through August: Macbeth and The White Snake. Their Macbeth was much crisper than OSF’s – we also got to see it from the front row, unlike our seats in Ashland! We haven’t seen The White Snake yet, but will this weekend – it’s an adaptation of a Chinese tale.

Earlier in the season, we saw SVS’s free “Shakespeare in the Park” production of A Midsummer Night’s Dream, and it was a lot of fun.

Again, we plan to go to their season next year – but they won’t be selling tickets for a few months.

Lyric Theatre started out as the Gilbert and Sullivan Society of San Jose, and they still do at least one G&S play every year. This summer, their “Discovery Series” presented the very first G&S, Thespis; it posed a special challenge because the original music was lost a century ago!

Lyric’s productions feature huge casts, wonderful costumes, and great music – we always have a good time there, and we’ve bought next season already.

I know 3 Below as the home of ComedySportz, but they show movies and put on other shows, too. We saw Disenchanted, a musical purporting to tell the truth about the Disney princesses – it was an enjoyable evening, and the songs were well-crafted.

And that’s the summer theatre report – so far!

Paying my technical debt

I’ve been involved in Toastmasters since late 2010. I volunteered to take on the Vice President Education role in my home club, the Silver Tongued Cats, soon after I joined, and looked forward to taking on a District Leadership role so that I could, eventually, become a Distinguished Toastmaster.

In 2012-13, I took on the role of Area B2 Governor. I had to look at several different reports (all of which were manually created in Excel) to figure out what was going on with my clubs. There was one report for progress in the Distinguished Club Program and another one for membership growth; it took some effort to pull all the information together, and many trees died in the process.

The following year, I was a Division Governor, and the effort to pull the info together for the 25 clubs in my Division was significantly greater – and so was the pile of paper I dealt with.

I thought there had to be a better way and started working on Python code to take the information available from the Toastmasters Dashboard and create a consolidated report. I decided to put the code onto GitHub to make it easy to develop on my laptop at home but run the real code on the web server.

Getting the information wasn’t particularly difficult (Toastmasters offers the data in CSV), nor was creating a consolidated report with the information that we needed. When I showed my report to the District Governor, she asked me if I could make it available to the entire leadership team. Of course, I said “yes”, and joined the District 4 Web Team as Statistician and Assistant Webmaster, a role that, unlike Division Governor, had no fixed term.

I didn’t want to fetch a whole year’s worth of data from Toastmasters every time I needed to create my reports, so I needed to save the data after getting it. I’d already had to do some transformations on the data (consolidating information from three separate CSV files into one object, for example), so I decided to save each day’s work as a Python pickle file, and had my reporting program unpickle all of the collected files. This was ugly code, to say the least, but it worked.

The leadership team liked the reports I generated, but they wanted more – they wanted support for District incentive programs, and, soon, support for reforming the District into two Districts. I was happy to oblige, and cranked out lots of code.

During the reformation process, I met George Marshall, the then-Webmaster for District 57 and the person behind Tools for Toastmasters. I told him what I was doing, and he made a very pointed suggestion: use a database instead of my pile of pickle files.

He was right. By using the pickle files, I had, unintentionally, built up a lot of technical debt, and the sooner I moved to a database, the less it would cost me to pay off the debt.

With that problem solved, I was able to support the District leadership fairly easily as we moved forward on the reformation, and took on the role of District 101 Webmaster and Statistician when the reformation happened.

Since I was posting the code to GitHub, I didn’t want to put things like the database credentials in the code, so I moved them to an external file, and then to a separate directory, just to make sure I didn’t accidentally post them.

And as long as I had a separate directory, I thought it would be a good place to store other files, such as the statistics I downloaded from Toastmasters, the maps and reports I created, Dropbox cursors, and so forth. Without planning it, I created a directory that had a hodgepodge of stuff in it – some was critical to the operation of the suite of code, and some was recreated every day. And there was no easy way to tell which was which.

Years passed. I wrote more code. I put more and more files in the “stuff” directory. But everything worked well enough, so I didn’t do anything about it.

Until last year, when I got serious about not being Webmaster and Statistician for Life. I put out a call for volunteers to help me with the code – when meant that I had to be able to explain the code. Most of it was easy to explain and document, but the “stuff” directory turned out to be a real problem.

So I’m fixing it.

When I moved from the pickle files to a database, I had, perhaps, five programs to fix. Today, I have more than 80 programs in my source tree; not all of them are actually in use (getting rid of the dead ones is another technical debt to pay off), but I have to look at each and every one of them.

I’ve been at it for nearly a week, and I’m about half-way through the first pass. Figuring out how to arrange things took a while, and I’ve made some false starts on the way, but now I think I have the setup under control, and adapting a program is fairly quick.

Even after I finish this project, I won’t be out of technical debt – I’m finding other problems that should be fixed, but they’re less urgent (little things, like making “verbose” and “quiet” options consistent through the code). Perhaps my successors will want to tackle them!

My biggest high school mistake

Back when I was in high school, every boy was supposed to take at least one year of Shop (and every girl was supposed to take a year of Home Ec).

I didn’t want to take Shop; I never played with tools as a kid and didn’t see any reason to start. I convinced the administration that it would be just fine for me to use that period for the Literary Magazine (most people on staff used their Study Hall period for that purpose) – I got away with a lot of things back then.

Boy, was I dumb!

Over the years, I’ve learned some of the basics of home maintenance when I had to – but I’m still not comfortable with tools and am always worried when I have to deal with electricity, and I wind up calling in contractors for projects that I feel I should be able to do myself.

It’s frustrating. And expensive.

I guess it’s too late to tell high school me to develop some manual skills, not just academic ones!

Getting by on less than a gigabyte

I recently switched my mobile phone from T-Mobile to Google Fi. The main reason I changed was for the better international service – T-Mobile gave me free 2G service internationally, while Google Fi gave me full-speed service at the same price I paid at home ($10/GB, capped at $60 for up to 15GB). Having full-speed data was worth paying a little money!

And it’s worked out well – I could use my phone in Europe and Asia as if I’d been at home, with great coverage, good speed, and no worries.

Every month, whether I traveled or not, I found myself using just under 6GB – so I was paying almost as much as possible while not taking advantage of the free data above 6GB. This seemed silly, but, unless I wanted to use data for no good reason, what could I do?

Last month, I decided to try something different. I’d already started using Apple’s Screen Time feature to add a little resistance to spending a lot of time on Facebook and Twitter; now, I decided to try not to idly pick up my phone while I was out and about, at least not without WiFi.

And at the end of the month, I had used 0.88 GB, for a data bill of $8.80 instead of the usual $57. I didn’t feel particularly deprived, and it was kinda pleasant to look at the world instead of my screen!

I don’t think every month will end up under a gigabyte, but having that tiny incentive to stay off the phone seems like a good idea.

Waiting is fine, but sometimes you need to take action

Diane and I got the old shingles vaccine as soon as we were eligible, because we knew people who’d had shingles and didn’t want to join them.

When the new recombinant vaccine was announced, we closely followed its progress to release (just like a new iPhone!), and we got on the queue at CVS as soon as we could.

That was six months ago. We added ourselves to the queue at a nearby Safeway four months ago, but there’s been no sign of progress in that time. If I call the pharmacy, their answer is “yes, you’re on the list; no, we’re not getting much supply; don’t call us, we’ll call you.”

In the meantime, my half-brother contracted shingles, and it was the worst case I’d heard of yet. It’s not genetically-linked as far as I know, but his experience encouraged me to keep calling.

Yesterday, I read the latest Consumer Reports on Health, which included an article on the need for vaccination and a link to vaccinefinder.org, the FDA’s source of information on vaccine availability. The site said that every CVS and Safeway near us carried the vaccine – but it also listed another local pharmacy, Pharmaca.

I called them, and the pharmacist said she had an ample supply. We decided to brave the beach traffic in Los Gatos and drive downtown – a good plan until we ran into heavy traffic. I found a parking place and we walked the last three-quarters of a mile (discovering that the heavy traffic dissipated a block after we got out of the car!) to the pharmacy.

A little less than an hour later, we left, with sore arms, lighter wallets, and the first of two shots (and assurance that they’d have the second shot in two months, when we’re due for it).

I wish I’d thought to check Pharmaca long ago – we walk by it nearly every week!

If you’re looking for the shingles vaccine, check vaccinefinder.org – it might help you, too!

(Edited to correct the VaccineFinder site – it’s vaccinefinder.org, not .gov. Thanks, Diane Reese, for the correction!)

Amsterdam DO’s and DON’Ts – revised 2019 edition

Back in 2012, I wrote a post with travel advice for Amsterdam. We just got back from another trip there, and I thought I’d revise my advice – most of it still applies, but there have been a few changes. So here’s my 2019 Amsterdam DO’s and DON’Ts. Come back in 2026 for another revision!

Amsterdam Dos and Don’ts – 2019 revised edition

We recently spent a week in Amsterdam before and after taking a river cruise through the Netherlands and Belgium; I might eventually post photos from the trip, but in the meantime, I wanted to share some possibly-useful tips for others travelling to Amsterdam and environs.

Money

  • DO tell your credit/debit card companies that you will be using your card in the Netherlands and when you’ll be there.
  • DO get money from ATMs rather than buying it before you leave the US; there are ATMs at the airport and all over town and you’ll get a much better rate. (2019 note: Use bank ATMs if at all possible to get the best exchange rate and lowest fees; avoid Travelex and the like.)
  • DO expect to find some shops which only accept cards and will not accept cash. (2019 note: I saw quite a few shops which were card-only, and a few which were cash-only. I ran into a couple of shops which would not accept Visa or Mastercard credit cards but would accept debit cards.)
  • DON’T get the Travelex “Cash Passport” Chip and PIN card – the exchange rate is hideous and they demand your Social Security number.
  • DO expect to be able to use your US credit card when you are dealing with people – even though the Dutch all have Chip and PIN cards, every credit card machine I saw in a shop could also accept a US magstripe card. (2019 note: Of course, all the machines accepted US chip cards, too; sometimes the shop wanted a signature, but often they didn’t.)
  • (New for 2019) DO expect to use your US credit card to be able to buy train tickets and transport cards from automated machines.
  • DON’T take the option of paying in US Dollars using your credit card. The rate is probably not as good as your card company will give, and if your card has a surcharge for international transactions, you’ll have to pay that surcharge even if the transaction is in US Dollars.
  • DO carry a few Euros in change with you at all times for small purchases and toilets – many public toilets charge between 20–50 cents for access.

Getting into town from the airport

  • DO take the train unless you’re staying far from the city center.
  • 2019 advice: DO expect to be able to use your US credit card at the machines at the train station to buy your ticket.
  • DO buy your train ticket in advance from Belgian Rail; print it at home and bring it with you.
  • DO buy Second Class tickets for this trip unless you have a lot of luggage or can’t manage four steps up or down stairs.
  • DO know that the trains to Centraal Station leave from Schiphol platforms 1 and 2.
  • DON’T get on a “FYRA” train at Schiphol – it will cost you! You want to get on an “IC” train. The trains are marked on the sides of the cars; both use the same platforms.

Getting around town

  • DO walk if you can – the touristy part of Amsterdam is small, and everything of interest is within a 45-minute walk (mostly less). Take public transport only when you’re in a hurry.
  • DO watch out for bicycles and motorbikes, especially when crossing a bike path (and every street has bike paths). Treat them as you would any other fast-moving dangerous vehicle.
  • DON’T be surprised by motorbikes (or bicycles) on the sidewalk, either, though they are usually going slowly there.
  • (2019 changes) DON’T plan on using cash to buy a ticket on a tram, train, or bus. Either buy your ticket (or pass) in advance or use your card to make the purchase.

iAmsterdam card

  • DO buy the iAmsterdam card.
  • DON’T buy it at the VVV office at Centraal Station – there are long lines. 2019 advice: Buy it at the iAmsterdam shop at Centraal Station (on the IJ side of the station); you can even use your US credit card to buy it from their vending machine!
  • DON’T pre-purchase the card over the Internet, which means picking up the card in person at the VVV office – in that same long line, of course.
  • DO be strategic about the time of day that you activate the pass. It is valid for 24/48/72 hours, not 1/2/3 days. If you activate a 24-hour pass at 11am on Wednesday, you can use it all the rest of that day and then enter a museum before 11am on Thursday and stay there the whole day. This works best for major museums, like the Maritime Museum or the Van Gogh, of course. If you’re really hardcore, you could go to the Maritime Museum at 10am on the last day of your pass and get a ticket, immediately go to another nearby museum and see it, then return to the Maritime Museum because your ticket is good for the entire day.
  • DO realize that the museum pass and the travel pass are completely separate after you buy them; you need not activate them at the same time (or even on the same day).
  • DO realize that the discount offers in the booklet are valid even after your card expires (I think they go to the end of the year); you just need to bring the card and the booklet.
  • DON’T plan to go to the Anne Frank House on the iAmsterdam card. 2019: You have to buy your tickets online in advance (they go on sale exactly 2 months in advance).
  • 2019: DO get your timeslots for the van Gogh Museum as soon as you have your iAmsterdam card numbers.

Sex, drugs, and rock ‘n’ roll

  • DON’T be afraid of walking through the Red Light District (of course, be aware of your surroundings, just as you would anywhere else).
  • DON’T take photos of “red rooms” or the women working in them.
  • DON’T go to a coffeeshop for coffee.

Eating and drinking

  • DO expect the inside of restaurants to be non-smoking (both kinds of smoke).
  • DO expect a lot of [tobacco] smokers just outside of a restaurant.
  • DON’T expect free refills on coffee.
  • DO expect free tap water but you have to ask for it.
  • DO expect service charges to be included in your bill; round up to the next Euro or two if you’re especially pleased. I ran into one restaurant where service was marked as “Not Included” on the bill and tipped about 10% – I have no idea if that was right or not.

Staying connected

  • DO arrange for an international package from your cell carrier (if it’s not already included, as it is with T-Mobile or Google Fi). DON’T use your phone if you don’t have a package – the prices are ridiculous.
  • DO consider getting a local SIM if you want to use a LOT of data.
  • DO look for “Free Wi-Fi” hotspots; many small restaurants offer free Wi-Fi. One near our hotel gave us the password when we stopped to look at their menu and told us the service was available 24/7. We wound up having breakfast there four times!
  • DO look for free Wi-Fi from free-hotspot.com if you’re near a fast-food chain like McDonalds, Burger King, or Subway.

    Language

  • DON’T expect to need to know much (if any) Dutch. All tourist-oriented businesses are completely English-friendly, and almost everyone in the Netherlands seems to speak and understand English.
  • DO try to sound-out written Dutch if you need to figure out a sign; it looks unlike English, but I found it fairly easy.
  • DO say “Dank U Well” (“thank you”).

TIL I learned how (and how NOT) to restore my Mac backup

They say you never know if you have a real backup until you try to use it. They’re right.

TL;DR

  • Don’t encrypt your drive until you’ve restored your data
  • Don’t exclude things from Time Machine backup

The details

I sent my 2017 MacBook Pro to Apple because the keyboard was acting up. And as long as I was at the Genius Bar, I thought it’d be a good time to mention a weird problem I’d had when using Screen Mirroring on my Apple TV (moving the cursor would reveal things lower in z-order – it was weird); the Genius duly wrote that down and sent my machine to the depot for repair.

A few days later, the machine was back in my hands; not only had they replaced the keyboard and the top case (as I’d expected), but they also had replaced a few other parts – and they’d either wiped or replaced the SSD, so I had a virgin installation of Mac OS and none of my data. I booted up the machine, and, for security, told it to turn on FileVault to encrypt the SSD; then I set about restoring my data.

Plan A

I had multiple backups: Time Machine, a bootable clone drive (made with SuperDuper!), and Backblaze for offsite backup. I thought that the easiest solution would be to reboot from the clone drive and restore to the SSD, so I did exactly that.

The restore went fine, except for one small problem – SuperDuper! was unable to update the PreBoot environment. When I tried to boot from the SSD, I got a blinking folder with a question mark, which meant that the system couldn’t find the startup disk. I booted from the clone again and used System Preferences to set the startup disk to the SSD; this time, instead of the question mark, I was asked for a disk password…which, of course, I didn’t have.

Back to the clone, where I could easily mount the SSD and see its contents. Searching gave me this thread, but I couldn’t figure out how to apply the hints to my environment, so it was time for Plan B.

Plan B

I booted the “Install High Sierra” USB stick I’d kept around from last year and erased the SSD. Then I restored from my Time Machine backup. Many hours later, I was able to boot the SSD, and all seemed well.

Except…my desktop background was wrong. And my Dropbox folder was empty (though that was easy to fix by firing up Dropbox). And when I looked further, I realized that I didn’t have any of my photos, nor my iTunes library, nor my DevonThink databases. It was as if they’d never existed. But they were on the clone drive. Hmmm….

Plan C

I booted the clone and fired up SuperDuper! again. And, again, I restored the SSD from the clone, using “Smart Copy”, which found 150GB already on the SSD, and about 200GB of data that needed to be copied.

This time, when I booted the SSD, all was well – I had all of my data.

I opened Time Machine Preferences and discovered that I’d excluded my iTunes library, my Pictures folder, and my DevonThink databases from being backed up in order to save space on the drive in the Time Capsule that I was sharing among several computers. Oops. Especially since I’d stopped sharing a Time Capsule months ago and was backing up to a directly-attached 4TB drive, with plenty of space.

Conclusion

All seems to be well; I’ve removed the exclusions from Time Machine and it’s busily backing up everything now.

I haven’t checked to see if the Apple TV screen mirroring problem has been fixed – I guess I should find out, though.

I think I’ll wait a few days after Mojave ships before I upgrade; I really don’t want to go through this again any time soon!

TIL how to build Python 3.7 with statically-linked libssl and libcrypto

I use a Virtual Private Server on DreamHost to run the Toastmasters District 101 website. For the most part, I’m happy with their service, and with a shell prompt, it’s usually easy to install whatever software I need.

Except Python 3.7. Python 3.7 requires a newer level of OpenSSL than DreamHost offers, and since I don’t have root access on a VPS, I can’t just replace OpenSSL. Compiling a current version and installing it in a directory ($HOME/usr/local) was easy enough:

./config --prefix=$HOME/usr/local --openssldir=$HOME/usr/local/openssl   
make   
make test   
make install   

Building Python 3.7 was also easy, but getting it to use my copy of OpenSSL was not.

At first, I tried adding my OpenSSL to LD_LIBRARY_PATH, which worked, but it made git complain: no version information available (required by ssh), and that seemed unfortunate (and made me worry that I might break other things).

After much searching, I found Python issue 21541, which had the hints I needed to statically-link my copy of OpenSSL into the Python executable.

First, run configure:

./configure --prefix=$HOME/opt/python-3.7.0 --with-openssl=$HOME/usr/local/

Then uncomment and change the section of Modules/Setup dealing with SSL to this:

# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
SSL=$HOME/usr/local
_ssl _ssl.c \
    DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
    L$(SSL)/lib -Wl,-Bsymbolic $(SSL)/lib/libssl.a $(SSL)/lib/libcrypto.a

After that, the usual make && make install worked.

I’ve moved!

Ducklings on the move with mama duckI’ve moved this blog to Linode. It should run a little faster, cost me a little less, and let me do more things with the server.

I took the photo near my house a couple of days ago while I was out for a walk; I was surprised to see a mama duck and her flock of ducklings going the other way!

In Praise of Venice Classic Radio

We like to have light classical music in the background while we’re at home. During most of the year, we usually listen to our local classical station, KDFC, or one of SiriusXM‘s classical channels. But once Thanksgiving rolls around, things change. “Holiday” music begins to creep into the playlist, and as the month goes on, it takes up more and more airtime.

But I’ve found an alternative – Venice Classic Radio. Their playlist is blessedly free from “holiday” music for most of the month – they do play the occasional real classical Christmas piece, but it’s a small part of their programming, and they mostly save it until Christmas Eve and Christmas Day. I heard Silent Night yesterday and Nutcracker today, both of which were very pleasant indeed; they also played Kol Nidre today, much to my surprise.

Check them out any time you want classical music without interruption (they play a 30-second multi-lingual station ID at the top of the hour, but that’s the only announcement you’ll hear) – and especially during December!

Happy Holidays to all, and to all a good night!