On being burgled

I came home the other day to find that one of the two windows in my bedroom had been shattered. My apartment is on a third floor; the fire escape is accessible through these windows, and vice-versa. At first I thought, that’s odd. A window broken, yet everything seems otherwise intact. The previous day had been a holiday for us public sector workers and I had devoted nearly all of it to cleaning and straightening out this apartment, so it was exceptionally neat and organized. Computer equipment and sexy skinny TV, still in place. Beautiful flowers on the clutter-free dining room table.

Later that evening as my four-year-old daughter and I were sitting down to dinner I had the impulse to take a picture. Oops, no digital camera. Hmmm, how about that portable computer that my mom gave me? Also gone. I had been considering whether to report the incident to the police — what can they do? Is there any point? — but at this point I decided I would definitely do so, if only to become an official statistic. Let the record reflect that this guy’s apartment was broken into one day in February 2008 and his laptop and camera were stolen.

Two Jersey City police officers came promptly, and were impeccably courteous and professional. They summoned two more cops to the scene to look around and ask questions, then they left.

My bedroom was impossibly cold, and my daughter’s is closer to the gaping window than the living room is, so I decided my daughter and I would both sleep on the fold-out in the living room that night. I felt curiously equanimous in the face of an experience that most reasonable people find distressing — “violated” is the word people use to describe the feeling resulting from such intrusions. It was disturbing and inconvenient, but my material losses were modest and I felt I had gotten off easy. We went to sleep.

Ah, but at 3:30 a.m. I woke up a bit paranoid about the window open to the world, and did not get back to sleep. At around 5:00 I decided to get up and do zazen. The blinds rattling in the wind sounded like a person sneaking in, and scared the shit out of me before I figured out it was just the wind. As my mind meandered along, it ocurred to me that next time I come home and put my key in the lock, I will not know what to expect. In the next instant I thought, yes, but you never know what to expect when you put your key in the door. Indeed you don’t even know if there will be a door. Welcome to reality. Back to the breath.

I have no ill will against the intruder. I do not want the incident to recur, but that’s entirely different. In the days since the break-in I have wondered about the experience from the burglar’s point of view. Who is she or he? A drug addict? How old? What race or ethnicity? The intruder evidently exited through the window adjacent to the one through which she entered, because I found it unlatched, and why risk cutting yourself on broken glass? She thoughtfully lowered it behind her, perhaps to keep the cats from escaping. I imagined Vernon and Lin-chi, ever sociable, greeting her warmly as she made her way through the kitchen and into the living room searching for portable items of value. Will you feed us, they must have asked.

You know how it is when you enter someone’s home for the first time as a guest. You look around and take in the whole environment. Then, if left to your own devices for a couple minutes, you amble over to the bookcase and inspect the titles. You look at the art on the walls, perhaps the music collection. Looking, looking with pure, normal curiosity for things of interest, points of contact between guest and host.

What did my apartment look like through the thief’s eyes? What did she observe? What registered? Anything? Did she notice the photographs on the refrigerator? The zabuton and seiza bench? The childrens’ drawings taped up everywhere? Did the intruder form any impression at all of the apartment and its inhabitants?

We will never know, but it makes for interesting speculation.

Ah, the Department of State

You spend numerous minutes filling out a multi-page “wizard” for your passport renewal application. You notice that when you click a checkbox somewhere, the whole page pointlessly reloads with the data in the same state. It’s annoying, but you carry on.

You notice that when your textfield input exceeds the maximum number of characters allowed, instead of just refusing to accept more characters, this form has some Javascript that erases all your input in that field, so you have to start over. Very annoying, but you carry on.

You notice an error in your input, but when you put your mouse cursor in the field to edit it, all the input disappears, so you have to start over.

By now you’d like to have a talk with the people who coded this application — even more so, with the people who tested it and declared it production-ready. But you sigh and carry on until the final page, and then…

Server Error in ‘/’ Application.
Index was outside the bounds of the array.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.IndexOutOfRangeException: Index was outside the bounds of the array.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[IndexOutOfRangeException: Index was outside the bounds of the array.]
WizardManagerForNewForms.processControls(Control control, String FormType) +31109
WizardManagerForNewForms.processControls(Control control, String FormType) +31063
WizardManagerForNewForms.processControls(Control control, String FormType) +31063
WizardManagerForNewForms.UpdateApplicantData(StateBag activeViewState, ControlCollection activeControls, String ApplicantSSN, String ApplicantFirstName, String FormType) +313
[etc]

Version Information: Microsoft .NET Framework Version:2.0.50727.832; ASP.NET Version:2.0.50727.832

Lovely, isn’t it? For you non-geeks out there, this type of verbose technical information is often useful to the developers of a program in the course of debugging — although usually only a couple lines of the strack trace are actually relevant to your problem (the function that dumps the stack trace doesn’t know that, so it gives you the whole thing). But you the end user do not know or understand any of this, nor should you. What you should see, if the application pukes, is a polite and vague error message apologizing for the inconvenience, while behind the scenes the technical stuff is saved in a log file or other storage. The geek-speak is just annoying and confusing mumbo-jumbo.

Displaying all the error output is not just bad form. It also leaks internal information that might be useful to a potential attacker. It should be none of our business that State is running
Microsoft .NET Framework Version:2.0.50727.832 and ASP.NET Version:2.0.50727.832 and that it bombs when it tries access an array element that does not exist.

Whether it’s a .NET issue, or an application-level bug, I gotta go. I have a paper passport renewal application to fill out.