October 5th, 2018

Real World Rollback

When doing anything, it’s always a good idea to have reasonable a way to undo it. Sometimes reverting something, while possible, requires too much effort or costs too much. On rare occasions, it may be impossible and one is faced with a “point of no return”. If dealing with digital data, the standard process is to restore from a recent backup.

My first introduction to computers and writable storage involved 5.25″ floppy disks and cassette tapes. The saved data consisted of typed documents, which often ended up being printed. Worst case if the electronic copy disappeared, I could re-type the documents from the printed version. And of course if I lost the printed version, another could be easily generated from the digital file.

By the time I started writing software, the source code resided on a hard drive inside the computer I was sitting at; the stuff I really cared about would also get copied to a 3.5″ floppy disk and then it would be set as read-only. There was no geographic redundancy, those disks resided a few feet at most, from the computer. There was also no water/fireproof safe; but if the hard drive failed or I fat fingered a command, it might take some time and I might have lost some work, but I could recover something. As time passed, I began to use source control, CDs, DVDs, network attached storage, scheduled offsite backups etc. to minimize the amount of lost work. Storage is not infinite, or at least not free, so backups often get deleted after some time, thereby somewhat limiting the window in which one can successfully restore from a given state.

As I began writing the type of software that got deployed to and run on other machines, “undo” became more difficult. The standard process was to rollback to the previous version i.e. a backup, but that only covered the software, not the data that might have been generated, mutated, corrupted etc. Sometimes restoring data from a backup was an option, but more often some sort of cleanup or back-fill needed to take place, or worse additional defensive code had to be deployed to handle cases should corrupted data be loaded and processed. On some occasions, the least traumatic option might be to roll forward i.e. live with the problem a bit longer and just deploy an update with a fix.

Still, as tedious and onerous as building, maintaining and executing these processes might be, they’re all in the digital realm, at least one layer of abstraction away from the physical “real world”. I hadn’t given much thought to how and when things get rolled back or forward in the “real world”. If a stop sign is installed improperly, one could rollback but it’s probably easiest to roll-forward. If a high rise apartment building starts to sink and tilt after people have moved in, it’s not realistic to rollback or obvious how to roll-forward.

For the majority of work days during the last twelve years, I’ve taken a public Alameda County Transbay Bus from the East Bay to San Francisco. For the first four years the ride ended at the Transbay Terminal. For the last eight years the destination has been a Temporary Transbay Terminal. A little over a month ago, it became the Salesforce Transit Center.

My walk to work took me past the temporary terminal and one morning I decided to take a few photos as the plan was to tear it down and build housing and a park in its place, and I had no reason to believe it would ever be used as a terminal again.

Temporary Transbay Terminal

Jaywalking Safely

I even “jaywalked” across it a few times since it was safe; while it was in use the supervisors would loudly chastise (rightly so) anyone who stepped out of the crosswalk since it was not only dangerous for the pedestrian, but it slowed down the flow of the buses. However, within a week a chain link fence had gone up around the whole block, can’t have nice things.

My rides home from the new transit center offered a nice viewpoint of an interesting mural and what appears to be some sort of staging area for the construction.

Leaving the Salesforce Transit Center

But then only a month after opening, they discovered a crack in a steel beam. I remember walking by a worker on a ladder the previous day who was working on the ceiling with a circular saw. The scene caught my eye due to the numerous sparks flying everywhere. Perhaps it was that worker who discovered the crack while continuing his work the next day. All of a sudden, portions of the chain link fence were removed and the Temporary Transbay Terminal was in use again, quite a size-able rollback in the “real world”.

At the time it was unclear how serious the crack was or how long it would be until the transit center would reopen, but the reports were optimistic. So I decided to take some more photos of the temporary terminal in action before it was too late. As it turns out, there was no rush as it’s likely to be at least a month. No more jaywalking…

Temporarily Reinstated

Back to Waiting for the Bus Outside

July 11th, 2018

Father’s Day, Perf and PII

For Father’s Day this year my daughter presented me with a sheet of paper containing a variety of “my dad…” statements e.g.

  • My dad’s favorite color is:__________
  • My dad always says:__________

My thoughts drifted to The Newlywed Game as I wondered how many of the questions I would have answered with the same exact answer she had given. She definitely got my favorite color. The more open ended questions all had “correct” answers e.g.

  • My dad’s job is: to work to make money for our house
  • My dad and I like to: eat ice cream sundaes

Then I began to wonder if I would have been able to answer the questions about her with the same accuracy. I’m fairly certain I know her favorite color; I’m pretty sure I know her favorite food (when not qualified with “healthy”).

For better or worse, I next started to think of it from a performance review angle. Over the last 12 years I’ve worked at companies that have fairly rigorous performance review cycles and every now and then I’m surprised by what my peers and/or manager think I do well, could improve, as well as what things they felt were worth mentioning in general and what they omitted. For example, I may have spent a lot of time providing what I thought were insightful comments in design documents, taking great care to word them so as not to provoke knee jerk defensive reactions, only to have none of my co-workers mention it. Meanwhile they might mention they appreciated how open I was to being interrupted at my desk to answer random questions and that they wished I didn’t jump on production issues so they had more chances to learn how to handle them.

So while it’s certainly true my daughter loves to eat ice cream sundaes and I’d be hard pressed to say no if one were offered to me, I wonder what other things she thinks we both like to do together. What if she thought about it for a while and nothing else came up?

There were two topics that came up multiple times, pizza and juggling. I suppose it’s not the end of the world if those are the most prominent things that come to her mind when she thinks of me since they’re both things I enjoy as activities with her. However, they’re not the top two characteristics that (I think) define me; so I’ve been feeling pressure to alter the time I spend with her so she has a chance to discover other things that are more important to me than pizza and juggling (though perhaps I should spend some time learning how to juggle pizzas).

Looking at the links I’ve chosen to display on this blog, there are 3 related to hiking. My daughter has been very resistant to going hiking, she still often refuses to walk when we walk the dog (instead riding in a stroller). On my birthday she threw such a fit regarding going for a short hike, partially because it was just what I wanted to do that we aborted. It would have been her first actual hike. We have been trying to work through this need to defy and control for some time now as she did the same thing for Mother’s Day and also my wife’s birthday. For Father’s Day we tried again and she agreed to go hiking and actually enjoyed it. Perhaps over time it will supplant pizza or juggling when she thinks of me.

The last unwonted association I’ll make between Father’s Day and my job revolves around personally identifiable information or PII. It’s a topic that comes up often at work…I shudder to think how much effort was put into companies regarding General Data Protection Regulation (GDPR) and over time I’ve become less and less open about things I post. As a kid BBSes and AOL were my first introduction to the ability to connect with arbitrary people all over the world (other than a few random digit dialing pranks via a landline telephone). Shortly after I discovered HTML followed by animated GIFs then JavaScript, setting up presences on http://members.aol.com and GeoCities. One of the pages I had on AOL was called Ask The Singularity. No one in their right mind should fill out that form, even though inspecting the source it’s clear none of the data was transmitted out of the client’s browser. Yet, 20+ years ago plenty of people probably did. In fact that page won a Worst of the Web award on 1997-08-13 for whatever that’s worth…

In this post, I did not include my favorite color because it’s possible that has been used as security question on one or more websites I might have an account with. I haven’t included my daughter’s name (though I have revealed my child’s current gender). I must really be getting old because I yearn for the time when there both seemed to be less to fear about being open online and I was less concerned about the potential damage.

May 4th, 2018

Crossover Dates

My wife and I recently crossed a round number year anniversary of the date we first met in person. It occurred to me that it was actually more than half my lifetime and (in hindsight) thought that “crossover date” might have been another moment in time worth paying attention to.

Below is a quick and dirty form that will calculate the crossover date given a start date e.g. my birth date, and an event date e.g. when I first met my wife. Any textual representation of a date that the JavaScript Date Constructor recognizes should work e.g. 2018-05-04 for May 4, 2018.

Start Date: Event Date:
Crossover Date:

In my case, the crossover date of meeting my wife was three weeks before this most recent round number year anniversary. According to Vanguard there’s an 80%+ chance that I’ll live long enough to reach the crossover date of my daughter being born i.e. I’ll have spent more years alive with her than without. Sadly (without some significant advances in veterinary medicine) it will not be possible to reach the crossover date of when we adopted our dog.