The Daily Parker

Politics, Weather, Photography, and the Dog

Let me end the year here

My evening is kicking off soon. It will be relatively low-key: GMT New Year at O'Shaughnessey's (mostly because I'm curious about the neighborhood), back home for a quick bite, thence my remote office where all us regulars will talk quietly until about 12:30 when Eddie calls last orders. We might even notice when it's midnight. (We missed it in 2011 and 2013, and awkwardly made festive noises when someone called out, "Hey, it's 12:05 already!")

This is the 537th Daily Parker post of 2013, the 3,907th since its launch in November 2005, and the 4,104th since the proto-www.thedailyparker.com kicked off in May 1998. Sometime in 2014 I'll post for the 4,000th time in this iteration; move to a different part of Chicago; watch my nephews turn 2 and my dad turn redacted; visit five or six states and three or four countries (including Canada); and maybe rewrite the UI for Weather Now and finish the 30-Park Geas.

For the next 16 hours, though, I'll be offline.

Happy new year, З Новим Роком, bonne année, cheers, 謹賀新年, and नया साल मुबारक हो, y'all.

Whole Foods responds

WFM Lincoln Park Store Team Leader Rich Howley responded to my complaint right away:

We are really sorry for the inconvenience in our garage this afternoon, we realized immediately that we were over-whelmed and brought in additional security, they unfortunately had not yet arrived.

They are doing exactly what you had suggested.

I walked the entire area around the store, and what exacerbated the situation was traffic on North Ave was bumper to bumper in both directions, and this gridlocked traffic trying to get from Kingsbury/Sheffield Sts onto North, which in turn backed up the traffic directly in front of the store, in clogged up people trying to get out of the lot.

We are terribly sorry that you got hung up in our garage.

My response:

Thank you for your prompt reply. I have to disagree with you about the timing, however. There was a traffic jam on North Avenue around 12:30, true; but I didn't leave the store until almost 1:15. By that time the traffic on Sheffield going north and Kingsbury south of the store had thinned out to a still-heavy but more-common level for holidays.

However, by 1:30, when I finally got out of the parking structure, there was no traffic on Kingsbury south of Blackhawk. Had your team directed third-floor exiting traffic out the southeast exit and then south on Kingsbury, cars would have fanned out along Blackhawk, Fremont, and Eastman, reducing pressure on the Sheffield/Weed/Kingsbury intersection. Anyone observing the situation at the southeast exit would have seen this; but your security team didn't have anyone standing there, didn't have anyone on the third floor, and didn't appear to have radios.

People might have been annoyed had they wanted to go north on Sheffield, but at least they'd be moving. And--more to the point--people would have *seen your guys keeping traffic moving*. Instead of 30-40 seconds per car getting onto Kingsbury, you could have gotten maybe 3-4 seconds per car, and cleared the upper deck within five minutes.

Ask any airline: keeping customers informed, and keeping up the appearance of trying to solve the problem (even if it's truly insoluble), makes people less likely to fire off notes to Customer Service--or worse.

Sorry if this seems like a rant; I'm trying to help. I've seen the store handle huge surges of traffic before, so today's failure was really surprising. I think you need to have a serious talk with your security team about it.

Kudos to Howley for responding so quickly. And he's mostly right. But someone on his security team screwed the pooch on this one, whether by not thinking or by not acting, and a lot of people were inconvenienced.

How I lost an hour of my life because of incompetence

I go to Whole Foods Market twice a week or more, almost always the Lincoln Park, Chicago store. Even when they have lots of customers, they have plenty of space and plenty of parking, so I didn't worry about ducking out of my house this afternoon to pick up lunch and dog food.

Here's the result. Don't let the international units confuse you; that's an hour and 13 minutes to go about 4 miles:

Here's the situation when I arrived, which looked remarkably like the situation when I left:

Here's the store layout from Google Earth; the red arrow points to the south exit ramp (click for full size):

Now that you have the visuals, here's the note I just dashed off to Whole Foods Customer Service:

Your response to a traffic surge this afternoon made a bad situation worse, and created a safety hazard even as it inconvenienced dozens of customers.

In short, dozens of cars were trapped on the third floor of your parking structure for more than an hour because your security team were unable or unwilling to take the simple, necessary actions to alleviate the problem.

I arrived at the store around 12:40 this afternoon. Because it appeared busy on the second floor parking area, I headed straight up to the third. Even before going up the ramp, however, I noticed cars having difficulty coming down the ramp because of snow. It was difficult for cars coming down the ramp to negotiate the tight turn, and they were slipping into the other lane. That, while dangerous and creating unknown liability for the store, wasn't the worst part, as I discovered when I finally got to the third floor and got stuck in a total gridlock.

No one could leave the third floor parking area. It took me twenty minutes to get into a parking space because of this. But that's still not the worst part. No, twenty minutes later, when I tried to leave, cars were still unable to leave the third floor, even though the parking area was nearly empty, and even though a CSR had told me that you had actually stopped people coming up the ramp.

When I finally got onto the ramp and arrived at the second floor, I discovered three security guards directing one car at a time up, down, or across. This was actually no help as drivers are perfectly capable of zippering together as long as the cars are moving. No, it wasn't until I got to the Kingsbury exit that it became obvious how the situation had become so grim. With no one directing traffic out of the parking structure at Kingsbury, cars could only exit singly and about every 30-40 seconds.

It's irrelevant that you may have needed Chicago Police permission to direct traffic onto Kingsbury. Given the traffic load and safety hazard it posed, you would have had no trouble getting permission--if it were even required. Regardless, anyone who observed and thought about the traffic situation would have seen this obvious bottleneck.

Here are a number of concrete suggestions to prevent this kind of unsafe and inconvenient situation from recurring in times of high traffic load:

  1. Station a security guard at the south exit onto Kingsbury to halt southbound traffic on Kingsbury while directing exiting traffic south on the same street. This will avoid the bottlenecks at Weed and North, alleviate pressure on the exit ramp, and give the security team better visibility of the entire traffic situation.
  2. Station a security guard at the top of the third floor ramp to keep all traffic on the third floor moving only clockwise. Cars should move only along the outside (south and east) walls before splitting into two streams by the third-floor main entrance near the air conditioning units. Cars that can't find parking moving south in the second and third rows can go around the outside again. But the security guard will have visibility into the parking situation and can let others know when the third floor is full.
  3. Station a security guard at the second-floor junction of the third-floor ramp to keep cars moving clockwise on that level, too. When the Kingsbury guard allows a stream of traffic to leave, the second-floor guard should halt all traffic except those cars spiraling down to Kingsbury from the third floor.

This is not rocket science. It just requires that someone observe, coordinate, and above all _think_ about the problem. The security team today completely failed, costing me and dozens of other customers more than an hour of time.

I will post any response they send.

Global warming continuing to chill Chicago

Here's the Tribune's weather infographic for today:

The warmer-than-normal temperature formerly over Alaska has now swung around into the arctic, dragged by a persistent high pressure over the pole. That's pushing cold air down into the Prairie Provinces and the upper Midwest. Meanwhile, warmer-than-normal temperatures over the south-eastern U.S. and Caribbean is dragging moisture right over the lower Midwest.

Consequence: it's -12°C here right now, and in 36 hours we'll have 250 mm of snow.

We're getting a real winter this year. W00t. :/

Almost 2014, so check your copyrights

Well, I mean, it's already 2014 in time zones east of UTC+8 (Singapore, Tokyo, Australia), but here in Chicago it's 10:30 in the morning. Which means, here in Chicago, many creative works created before 1 January 1924 are still protected by copyright. Many, like the last 10 stories about Sherlock Holmes:

A US district court in Illinois found itself wading into the details of the fictional detective's imaginary life this week in a copyright ruling on a forthcoming collection of original short stories featuring Holmes characters.

Ten Holmes short stories, however, were published after 1923, the public domain threshold pinpointed by Melville Nimmer in his authoritative Nimmer on Copyright. Details from the last ten stories could still be subject to copyright claims by Conan Doyle's descendants, Judge Rubén Castillo ruled on Monday, in a decision that went unnoticed until Friday.

In protecting the last ten stories, however, Castillo reinforced access to the rest of the Holmes oeuvre. Castillo rejected an argument by the Conan Doyle estate that some aspects of pre-1923 Holmes were not plainly in the public domain because the stories and characters were "continually developed" through the final ten stories, which will not entirely enter the public domain until 2022.

Yes, 2022, thanks to the Mickey Mouse Protection Act that extended corporate ownership of copyrights to 90 or even 120 years in some circumstances. (The last Holmes story is from 1932.)

This is an interesting ruling to me. The court has drawn a clearer distinction between ideas and expression, which I think is the intent of copyright law in the first place.

It's not an earth-shaking ruling, though, and I don't think it changes much. Still, I'll be watching for an appellate ruling on this.

Another bit of sanity brought to you by unit testing

I just saved myself hours of pain by creating a unit test around a simple method that turned out to have a subtle bug.

The method in question calculates the price difference between two subscriptions for a product. If you're using the product, and you use more of it, the cost goes up. Every day, the application looks to make sure you're only using your allotted amount. If you go over, you get automatically bumped to the next subscription level and charged the difference, pro-rated by how much of the subscription term is left.

Here's the basic code:

var delta = subscription.IsAnnual ? 
   newTier.AnnualPrice - currentTier.AnnualPrice : 
   newTier.MonthlyPrice - currentTier.MonthlyPrice;

All well and good, except MonthlyPrice, for reasons known only to the previous developer, is nullable. So in order to prevent an ugly error message, I made sure it could never be null using the ?? operator:

var delta = subscription.IsAnnual ? 
   newTier.AnnualPrice - currentTier.AnnualPrice : 
   newTier.MonthlyPrice ?? 0m - currentTier.MonthlyPrice ?? 0m;

Do you see the problem? I didn't. But I learned today that - takes precedence over ??. So here's the correction:

var delta = subscription.IsAnnual ? 
   newTier.AnnualPrice - currentTier.AnnualPrice : 
   (newTier.MonthlyPrice ?? 0m) - (currentTier.MonthlyPrice ?? 0m);

I discovered that when the unit test I wrote kept insisting that 6 - 6 = 6. This is because without the parentheses where I put them, the compiler thinks I meant this:

newTier.MonthlyPrice ?? ((0m - currentTier.MonthlyPrice) ?? 0m)

In English, the compiler thought my first attempt meant, "Take the new monthly price, except if it's null, in which case take zero minus the old monthly price, unless that's null too, in which case take zero." What I meant, and what my correction means, is, "Take the new monthly price, or zero if it's null, and subtract the old monthly price (or zero if that's null)."

I'm glad I use NUnit.

Evanston restaurants destroyed in morning fire

Two popular Evanston restaurants, Pine Yard and Taco Diablo, burned to the ground this morning:

Fire crews from several neighboring communities -- including Morton Grove, Wilmette and Skokie -- were called to the scene to assist Evanston firefighters in battling the blaze.

The fire apparently broke out sometime before 3 a.m. and fire crews were still fully engaged in battling the blaze nearly three hours later.

The bike shop next door suffered water and smoke damage. Twelve pets at the Bramer Animal Hospital (where Parker went to the vet for his first year and a half) got evacuated.

Pine Yard was Evanston's go-to Chinese restaurant. Taco Diablo also had a large following.

A brief cooling-off period

I'm a few minutes from leaving my folks' house, looking at the weather forecast for Chicago. We may set a new record:

The unseasonable late-season 10°C “warmth” which greets Chicagoans Saturday has swept into the area from southern Missouri over the past 24 hours. It’s stay is to be one of limited duration.

A bitter southward plunge of frigid arctic air begins a downward temp spiral here Sunday which is to culminate in colder-than- -18°C Monday morning lows and single digits daytime highs—the coldest readings to occur here in the nearly five years since January 16, 2009 when the high temp rose no higher than -15°C

A temperature drop of that magnitude would become the 2nd greatest three-day late December temp dive on the books over the past 143 years. The only 3-day temperature drop more significant than this is the 34°C drop—from 15°C to -19°C back in January of 2009.

This is why I've just booked a trip to somewhere warm for February.

While my nephew gently sleeps

Nephew #1 arrived yesterday evening while I sat a mile away talking with the manager of San Benito House and, apparently, challenging people to a Scrabble game later today. Nephew #1 is a much lighter sleeper than the rest of us, which causes him frustration, and when he gets frustrated he sets out to determine how much noise is required to make everyone exactly as light a sleeper as he.

Fortunately, I'm on Chicago time, so getting up at 5am PST (7am CST) does not bother me. And it gives me some time to read the articles that crossed my inbox overnight:

It's still an hour before dawn here, so I'm rocking out the nearly-empty Peet's, about to resume some client work. I promise another photo of the ocean before I return home tomorrow.