The Daily Parker

Politics, Weather, Photography, and the Dog

User Self-Blame

Microsoft's Scott Hanselman blames us computer professionals for users thinking they don't know computers:

In my recent podcast with UX expert and psychologist Dr. Danielle Smith the topic of "user self-blame" came up. This is that feeling when a person is interacting with a computer and something goes wrong and they blame themselves. I'd encourage you to listen to the show, she was a great guest and brought up a lot of these points.

Self-blame when using technology has gotten so bad that when ANYTHING goes wrong, regular folks just assume it was their fault.

This harkens back to the middle ages when the average person couldn't read. Only the monks cloistered away had this magical ability. What have we done as techies to make regular folks feel so isolated and afraid of all these transformative devices? We MAKE them feel bad.

This on the same day that Jeff Atwood tells us our passwords suck (and he's right):

The easiest way to build a safe password is to make it long. All other things being equal, the law of exponential growth means a longer password is a better password. That's why I was always a fan of passphrases, though they are exceptionally painful to enter via touchscreen in our brave new world of mobile – and that is an increasingly critical flaw. But how short is too short?

...[Y]ou can't really feel safe until the 12 character mark even with a full complement of uppercase, lowercase, numbers, and special characters.

This is also a UX failure, but of a different kind. Until two-factor authentication becomes ubiquitous—and until users start accepting the need for it—passwords are going to be the chink in Smaug's armor.

Of course, it doesn't help that users typically don't have accurate conceptual models for things. The number of times I have explained the difference between authentication and authorization (which is a necessary conceptual model for understanding why you should never, ever give your passwords to anyone)

Things on Chicago Streets

First, a not-so-smart car:

I'm not sure what amused me more, the disproportionate tow truck or that the Smart Car driver parked in a rush-hour tow zone long enough for Streets & Sanitation to remove him.

Then, for everyone who takes his dog to work, there's this food truck:

I didn't pick anything up for Parker yet. ($2.50 per biscuit? Did I read that right?) But if it comes back, maybe.

Divvy is faster than the El, usually

Now that Chicago's bike share has hundreds of stations, its efficiencies are becoming clearer:

But what about convenience? Recently Divvy held its second annual data visualization challenge, and one of the winners, by Shaun Jacobsen at Transitized, compares the speed of Divvy with the speed of the CTA. And Divvy wins by a nose.

Jacobsen’s “Who’s Faster” project starts with a look at the 1,000 top “station pairs"—i.e. the places that people most often go from point A to point B using Divvy. Then, those are compared to the same route on the CTA at noon on a Monday.

And a couple patterns emerge. One is that the bulk of station-to-station trips are faster, centering on five minutes’ savings. It might not sound like much, but it adds up; Jacobsen calculates 32,023 hours saved over 571,634 trips. The other is that the most heavily-used station pairs tend to save more time than less frequently-used ones, as if people are starting to figure out how it works.

Cool stuff.

He is serious, and don't call him Shirley

I had a mind-numbing email exchange with a large corporate IT department today.

One of our best customers has a problem: no one has been able to use our software since Friday. We’ve been troubleshooting this problem. But we haven’t been able to fully investigate the issue, despite tremendous effort. We think we've uncovered the main issue preventing us from fixing the main issue.

We couldn't connect to either their production or user-acceptance test (UAT) Web services from inside our office because (we thought) their IP whitelist (a list of Internet addresses allowed to connect to them) didn't have our office on it. We got in touch with one of their developers—let’s call him "Bugs"—and requested the change. He responded that he had forwarded the request to his network team and we should expect whitelisting in 2-3 weeks.

I responded that I would be happy to get anyone else at his company involved to see about resolving this matter more quickly. Anyone, for example, like the division president who happened to be visiting Chicago this week. Or the vice-president whose users couldn't connect. Bugs, in turn, set up a call with their network team for the next morning, India time. So on our 9:30pm call last night (8am for them), we got sufficient firepower from inside their organization to get whitelisted wiki-wiki.

This morning (US time), we again attempted to run our tests against their UAT environment, and again could not connect. We could, however, connect to their Production environment. So their network guys did something, we just couldn't tell what. At least we can start trying to reproduce the production issue.

I sent another email to Bugs: “We can reach Production but not UAT. We are able to hit {production URL}, but not able to hit {UAT URL}. We’re seeing an error message that there is no endpoint listening at {UAT URL}. Is UAT offline or in an unstable state?”

Bugs sent back a message from his network guys showing a screen shot of their whitelist. Sure enough, the network guys did their jobs; we were whitelisted to both environments.

I responded, “OK, but we still can’t connect to {UAT URL}. Is it possible the UAT environment is offline?”

Bugs chewed on his carrot for a moment and responded, “We have stopped the UAT environment.”


So now I’m weighing responses. I have “Would you please start the UAT environment?” as my opening sentence, but I’m stuck on how to proceed. Options include:

  1. “We anticipate a higher likelihood of successfully testing against it if it’s running."
  2. "Ah, so this is a PEBCAK problem after all. Please address the issue between your chair and keyboard and try the operation again."
  3. "Now you're just fucking with me."
  4. "I don't know who you are. I don't know what you want. If you're looking for ransom, I can tell you I don't have money but what I do have are a very particular set of skills. Skills I have acquired over a very long career. Skills that make me a nightmare for people like you. If you let my UAT environment go now, that will be the end of it. I will not look for you, I will not pursue you. But if you don't, I will look for you, I will find you and I will kill you."

At some point I just expect him to respond with, "A møøse bit my sister once," but I'm also fairly certain he has no demonstrable sense of humor.

Ah, an email just came in from his supervisor's supervisor. Apparently they're restarting the UAT environment. I will now resume my labors.

Update: Once we finally connected to the UAT environment, we got back an error message, clearly indicating that their environment is misconfigured. Not that we were suspicious of Bugs' insistence that nothing at all has changed on their end, but once we got this particular error message, we forwarded the details to his team with the suggestion that they check their logs too. It's just past 2am IST so we expect that nothing much will happen until later tonight.

Lotus 1-2-3 epoch day weirdness

The ancient spreadsheet package Lotus 1-2-3 set "0 January 1900" as its day zero. Whenever you entered a date into a Lotus spreadsheet, the program actually stored the number of days before or since that mythical date. Microsoft Excel needed to maintain compatability with Lotus early on, so it set 30 December 1899 as its day zero, which worked very well except for dates between 30 December 1899 and 1 January 1900, and it added the other mythical date 29 February 1900 because Lotus had that bug as well.

Flash forward a few decades, and today brings us a little bit of weirdness that only shows up in the American Month-Day-Year format.

Today is 4/21/15 in the U.S., and also day 42115 in Excel.

This bit of nerdiness brought to you by the Daily Water Cooler and one of The Daily Parker's readers.

Exceptionally high WTF-to-LOC ratio

(Note: The developer in question does not work for my company.)

I'm looking at some code in one of the products I'm responsible for, and I just came across this.

// ReSharper disable once RedundantAssignment
Tuple<List<SomeChartData>, string> objReportdata = null;

Let's review the WTFs:

  1. The developer didn't understand ReSharper's admonition that the "= null" is completely useless, so he disabled the warning.
  2. The Tuple is actually the return value of the method. It doesn't even need to be declared as a variable; it can simply be returned to the caller.
  3. Why are we using a Tuple in the first place?
  4. Oh; the string part of the Tuple is the title of the chart. This is a code smell, but I haven't analyzed it deeply enough yet to figure out how to clean it up.
  5. Wait, so why a Tuple? Why don't we simply have a first-class data transfer object that has everything one needs for a chart?
  6. OK, so even with a Tuple, why are we declaring it with a List instead of an IEnumerable or ICollection? What business is it of the calling method what concrete object we use to return chart data?
  7. Despite repeated directions to read our sodding code standards document, he named the variable—which is useless, remember—with a forbidden Hungarian prefix and used what I'm going to call for the moment "humping camel case." I don't know what that camel is really doing, but I'm pretty sure "data" should be capitalized.

The entire method of 40 lines had too many WTFs in it so I simply had ReSharper re-write it for me. It's now 20 lines, avoids the second of two doubly-nested foreach loops, and uses named constants instead of magic numbers. And it still stinks.


Bloomingdale Trail opening June 6th

After almost two years, the trail opens June 6th:

Built on a long-defunct railroad line, the trail runs through Bucktown, Wicker Park, Logan Square and Humboldt Park.  Work on the $95 million project began in fall 2013.  Take a look at the path under construction.

When the trail opens, four of the access points will be through ground-level parks: Walsh Park, 1722 N. Ashland Ave.; Churchill Park, 1825 N. Damen Ave.; Julia de Burgos Park, 1805 N. Albany Ave.; and Park 567, 1805 N. Milwaukee Ave.

When completed, the 606 it will include six parks, an event plaza, an observatory, art installations, educational programming and other amenities, Emanuel said in a news release.

Parker and I will take a hike on it as soon as practical—possibly June 7th.

Cascading failures

Parker didn't get picked up this morning by 8:15 so I had to cart him off to day care. Apparently the guy showed up around 8:20. But no matter, because at that point I was nearly an hour past the time I usually leave and nearly 90 minutes past his usual Monday pick-up time.

So, survey: should I just trust that he'll get picked up and leave him home? Or should I continue to make sure he leaves the house before I do, just in case there's a problem and they can't pick him up?

How Spirit is hurting air travel writ large

New Republic's John Paul Rollert explains:

That a flight on Spirit will occasionally cost you less than $40 highlights for its defenders the airline’s essential promise: bargain basement ticket prices. “Offering our low fares requires doing some things that some people complain about,” [Spirit’s CEO, Ben] Baldanza wrote in an email to the Dallas Morning News last April, after the paper ran a story about the egregious number of complaints his company receives. “[H]owever, these reduce costs which gives our customers the lowest fares in the industry.” The contention is not unreasonable, it's merely disingenuous. Baldanza would have us believe that the frustration with Spirit is simply a matter of obtuse passengers confusing the constraints of a low-cost carrier with a wanton unwillingness to afford First Class frills. Most people, however, don’t expect artisanal mustard at McDonald's or concierge service at Save-a-Lot. The discontent is not a consequence of failing to meet ridiculous expectations, but flouting those that are entirely reasonable.

Success breeds admirers. In December, Delta announced that it was introducing five categories of service, including its answer to Spirit’s Bare Fare: Basic Economy. In addition to its precarious grammar, Basic Economy does not allow passengers to pick their seats, change their itineraries, or fly standby. The move is merely the most recent evidence that Spirit has become a trendsetter—arguably, the trendsetter—in the American airlines industry. But what trend is it exactly? Baldanza has repeatedly affirmed that Spirit is refining the art of offering affordable airfare, an effort which he qualifies as nothing less than an essentially democratic endeavor. He has a point, insofar that we live in a world where social mobility and simple mobility increasingly go hand-in-hand. Yet other low-cost carriers have long provided models of budget air travel without engendering nearly the angst of Spirit.

This seems like a familiar story. I mean that literally: didn't someone else run almost the same story a few months back?