Have you got it yet?

There’s an apocryphal story about Syd Barrett pranking his band mates by ‘teaching’ them a new song. Every time through the melody he’d change it just a little bit. They thought they were just a little out of practice, or something, they wouldn’t have blamed Syd. After twenty or so slightly – slightly– different repetitions, they wised up. The story says that was the last straw for that incarnation of the band, ’cause no one trusted Syd anymore.

A couple years ago, I wanted a way to close (or open) my garage door via an SMS message. I got the hardware side of things hooked up, using an Internet service that turns SMS messages into webservice calls, and it worked as simple as you please. Text ‘Open door’ to the Internet service, and poof! Up she goes. It even works if you’re two states away.

But I thought it’d be nice to put a simpler face on it, so I built a basic ‘app’ for my Android smartphone. In the background, all the app did was send text messages, but in the foreground:

That’s a picture of the front of the house. Well, actually, it’s three separate pictures: the upper portion (above the doors) is a single image, and then each of the doors down below is its own image. The door images are wired (through the app) so that when you touch one of the doors, it sends the appropriate SMS messsage, and the door on that side should open … or close, depending on where it was when you started. Neat!

I took some severe shortcuts building the app. Normally coders need to account for all kinds of different size screens on phones, so the images they display need to be ‘scalable’ and ‘responsive’ to different screens. Lucky me: Renee’s phone had the same size screen as mine, so a single set of images worked on both fones. The app kept working after we each replaced our phones, because the screens were still the same size!

But around July of this year, the app on Renee’s phone began looking different.

There’s a white margin at the top of the screen, and a white box around the lower images, and it was a lot harder to hit the correct ‘button’ when you wanted a door to move. I thought maybe the app had been corrupted on her phone, so I reloaded it. No difference. Gotta dig deeper. I started up the ‘interactive development environment’ used for building Android smartphone apps, and I had to wade through two dozen “Update available!” messages. At first I tried to ignore the messages, as the previous version of the IDE operated just fine – but a little later I caught the IDE ‘updating’ code anyway. And it wasn’t just updating itself – it was updating the code that I’d written.

The version of the app built with the updated IDE behaved the same on Renee’s phone. More digging, thank Alphabet there’s google. What’s this? Samsung pushed a new version of the Android software to its (well, her) phone in July, and that new version changed the resolution on the screen from ‘quadHD’ to ‘fullHD’. Without asking, even: the manufacturer knows best. So I found the setting and restored the resolution to ‘quadHD’.

Now the app crashes on her phone. The debug messages complain about failing to allocate a huge chunk of memory. Back to the google. What’s this? The Android coding standards say that if you are using images at a fixed resolution, they can’t be stored in the coding project where they used to be. The images must instead be stored over in this other directory.

So I moved ’em, and rebuilt the app. The app works now! (just as it used to).

The pattern for the Android core software and the IDE seems to be: Make slight changes, subtle changes, every single day. For folks who aren’t building apps every single day, there’s no way to keep up. You’re always chasing problems that come out of nowhere. This is the same pattern that Microsoft displayed with successive versions of .NET and the rest of the Windows development stack: change, tweak, change, tweak, change…

When Syd did it, we thought he was malicious.

Time is Relative

Einsteinian physics says that key characteristics of events involving motion (such as the distance travelled, or the time-in-flight) will vary for different observers. Science says these different observations are both real; it’s not that one observer’s right and the other’s wrong.

This dis-agreement would cause no end of problems for us Earthers if it weren’t tempered by another factor: the magnitude of the difference is related to the speed that the observers are travelling vis-a-vis one another. At low speeds, the differences are too small to perceive. You have to really be moving to notice a difference; like near-to the speed of light.

So there we were, on Day One of the Oregon 1000 rally. This every-other-year production starts just outside Portland, and runs down to the southern Oregon coast for an overnight stop. Day Two returns competitors to I-5 around Corvallis. It’s one thousand kilometers of backroads driving, packed with scenery and wildlife and friendly competition. As with all TSDs, speeds are tightly controlled, and enforced at multiple timing locations along the route. We’re driving to the coast, not racing to it.

Just before lunch, we were on a paved section. We were perfectly on our average speed until we reached a tight uphill hairpin turn, followed by a steep climb. At the crest thereof, I’d fallen behind a bit, so when the road straightened, I accelerated to regain the time I’d lost. The car we’re in has a lot of power, so it should take only a few moments. I floored the accelerator pedal. Car said “oooooOMMMMMMAHHHH”.

A few moments later, we were approaching the average (and besides, the road curved ahead) so I lifted my foot. Hmm.  Car was still saying “oooooOMMMMMMAHHHH”, and we were still accelerating.  Uh-oh: the throttle was stuck, wide full open.  🙁

I got hard on the brakes, and our acceleration lessened. But the motor joined the battle with the brakes like a dog playing tug-of-war on its leash.  I had, though, a trump: the ignition key. I turned the key to the ‘off’ position, and the motor’s roar was quelled.

But I turned the key one notch too far, and engaged the steering wheel lock. We were still at a goodly pace — and pointed, sadly, off the pavement.

time    slows     down

ahead on the wide overgrown shoulder a thicket of saplings hides whatever boulders and dropoffs there are

the steering wheel won’t turn

the brakes are slowing us but not enough

my hand moves with the speed of an advancing glacier toward the key

we’re mowing through the saplings

the key’s turned and the steering wheel is free

foliage across the windshield 

slowing but not stopped and somehow no boulders

I popped the clutch, and the motor fired, no longer stuck wide open. I steered up toward the road and gassed it, and we smoothly returned to the pavement. Relatively smoothly.

The co-driver had a few questions at that point, because I’d not clearly communicated the predicament that led to the detour. No time for chit-chat: we were somehow still on our average speed, so we kept going… and when the control came up 0.9 miles later we zeroed it. After the excitement wore off, we made a series of mistakes that took us off course and had us backing up thrice and …   a mess of leftover neuronal activity.

So anyway, though the physicists say that differing observations of time can’t be noted without near-light speeds being involved …  I beg to differ.

Preamble

The speeds look similar to last year, which should be reducing our anxiety. Should be…

We’ll run four warm-up stages today. The first green light is on the other side of four hours of meetings and administration.

Right on time…

for our first ferry crossing tomorrow, the tail of Hurricane Somebody is whipping up the waves. Bay Ferries cancelled Monday’s run from Portland to Yarmouth. 

Looks like we have to drive into Nova Scotia. How dreadful!