Friday, February 22, 2008

Adventures in Home Decor

Our story begins a little more than two years ago. I spent the summer taping old sheets in the windows when I wanted to keep the sun out, but my parents were visiting my apartment for the first time and I felt like I ought to have something more. So I went up 7th Ave to the little fabric-and-upholstery shop, picked out cheap inoffensive beige curtains, and hung them up.

Over the following two years, I came to believe that I didn't really want beige curtains after all, and even if I did, I'd want ones that looked a little less cheap. At the end of December, I decided to finally do something about it. So I went to Google Maps and found a bunch of drapery places in Chelsea, took the subway into Union Square, and wandered up Broadway stopping in shops.

At the first place, the guy was very friendly, but said things like "We have these books of fabric swatches, but we don't use them much, since most of our clients are designers who already have the fabric." He also quoted me a price, just for materials, which was about twice what I had in mind to pay total. So I politely said I'd think about it and left. The guy at the second place was also very friendly, and deigned to search through fabric books with me for the perfect shade of navy. I found a good one and checked the book out to see how it looked at home. At the third place, the the fabric guys had already left for the day, but they'd be happy to come by my apartment next week to pick out fabric and give a quote, and yes they'd honor that coupon I pulled out of the ValuePak mailing. Then I went home, satisfied that I had two reasonable options.

The following Monday morning, the second place called me and gave me a quote that was five times what I had in mind to pay. I wasn't going to go for that. But it meant that when the guy from the third place came, proposed something nicer than I'd had in mind, threw in "professional installation," and said it would only be four times my original price was, it suddenly sounded quite reasonable. He said he'd knock more off the price if I made the order that day. I felt like I was probably being taken, but I knew that angsting over it for a while wouldn't help anything (and hey, I could afford to pay that much, I just hadn't planned to)--so I signed the order.

That brings us to this morning, nearly two months later, when my curtains finally arrived. Well, somebody's curtains arrived, at least. They were definitely the same color I'd ordered. On the other hand, the professional installation guys noticed as soon as they walked in that the curtains they'd brought were a couple feet taller than my ceiling, let alone the top of the windows.

As long as they were there, though, they wanted to install the brackets to hold the rods up (the non-tension rods being one of the extra bits that the sales guy had tempted me with). One of them tried putting the bracket into the moulding the way I wanted. He really did try. But the moulding, being moulding, didn't present a nice flat surface, and while he was trying to deal with that, I could see a crack forming between where the two screws had gone in. He saw it too and pointed out that the moulding wasn't actually strong enough to support the curtains. We agreed that he'd put the brackets in next to the moulding instead.

And put them in he did. Unfortunately, he wasn't exactly from the measure-twice cut-once school of carpentry. When he tested the rod over the first window, it was just a bit crooked. He tried lowering the right-hand bracket by bashing it with a hammer, but no such luck. So he took he bracket down and did the only really stupid thing I saw him do, which was to try to get the screw to go in an eighth of an inch lower. Of course, the result was that the two screw-sized holes merged together into one big hole. He tried using a longer screw, but since my walls are apparently made of one thickness of drywall followed by two inches of air, that just made the hole bigger. He turned to me apologetically and pointed out that my wall sucked and he didn't know what to do. I didn't say anything, on the theory that maybe if I kept my mouth shut he'd figure something out.

He and the other guy talked it over for a bit, and finally came up with something. They plugged the hole with a metal disc attached to an expandy thing that I assume was gripping against the other side of the drywall, and that seemed to work, but didn't get them any closer to getting the bracket back up. After a little more discussion they hit on the idea of mounting a metal angle-bracket to the wall and then screwing the top of the wooden bracket into that. After a small amount of undoing what they'd done and redoing it with the angle-bracket involved, they had everything mounted. Voila, one window done.

On the other window, they again discovered the brackets were crooked. This time, though, they had a better idea than moving the screw in the wall: move the hole in the bracket! I'm really not sure why they didn't think of that the first time, especially since the first thing they did when they got there was attach the metal plate with the holes to the back of the wooden brackets. But anyway, this looked like it was going to go well. Except that on the first attempt, they moved the holes the wrong way and it was even more crooked. As they were fiddling with that, one of the guys put a little too much weight on it and the screws pulled out of my poor drywall, making another big hole.

But now, at least, they'd reduced the problem to one they'd already solved. Out came another expandy thing and another metal angle-bracket, and in a few minutes they were done. They were even nice enough to seal up the first holes they'd made in the moulding, before they left.

But now I'm back where I started, except with four wooden brackets mounted next to my windows. I've wiggled them a bit, and the non-metal-bracket ones are a bit wobbly. At this point I'm just hoping they don't fall down before my real curtains get here.

Tuesday, February 05, 2008

And now for some meaningless coincidences

I grew up in a suburb outside of Washington, DC. During that time, the Redskins won 3 Super Bowls, making them the champions for 17% of the time I lived there. They hadn't won any before I was born, and they haven't won any since I moved away.

In the five years I lived in Boston, the Patriots won 3 Super Bowls, for a 60% success rate. They also hadn't won any before then, and they haven't won any since.

Now I live in New York, and the Giants have won one Super Bowl, giving them a score of 33%. Though to be fair, they did previously win two earlier ones when I was somewhere else. (It should also be mentioned that the New York Giants don't technically play in New York, but that's just a detail.)

Relatedly, there hasn't been a ticker-tape parade in Manhattan since 2000, because foreign dignitaries apparently don't like to ride slowly around in open cars anymore, and New York sports teams haven't been doing especially well recently. But there will be one tomorrow morning, and because Trinity is right on top of the parade route, we'll get to ring for an hour (with sound control completely opened!) as they all go past.

Friday, February 01, 2008

Debugging is fun!

It's occurred to me in the past that one of reasons I watch House is that it's more about problem-solving (and making good guesses) than it's really about medicine, and that it has a lot in common with problem-solving in other domains, like, say, debugging software. In that spirit, here's an hour from my Tuesday afternoon, if it were an episode of House.

(It also occurs to me that this may be the first "creative writing" I've done since my freshman advising seminar. There was probably a reason for that.)


Scene 1

We see a man, mid-40s, at his computer. He's working happily with children playing in the background. One runs up to him and bumps his elbow, causing him to spill coffee all over his desk. It narrowly misses the keyboard. He wipes it up with a few paper towels and gets back to work, but a few moments later an error message pops up on the screen. He swears.

[Credits]

[Commercial]


Scene 2

House: So we've got a user with an error page.

Taub: Do we have any idea what caused it?

House: (Sliding folders across the table) Here's the stack trace.

Foreman: It's probably just left over from that bug we fixed last month.

House: Nope. This one was working up until yesterday.

Foreman: Then it's probably something related. The entries were probably written out of order.

House: Probably. Go see if the entries are out of order.


Scene 3 - In House's office

Thirteen: The entries were out of order. It looks exactly like that bug we fixed last month.

[Commercial]


Scene 4

Thirteen: It must be the same bug recurring somehow.

House: Am I the only one who's looked at the changelists? We fixed that bug. We haven't seen it in a month. This is something else. Ideas?

Kumar: Maybe they were written fine, and the server just read them in the wrong order.

House: But we read them again, and they're still in that order. You think we read them wrong twice? Either the data store has completely lost its mind and is out to get this one particular user, or we wrote them wrong. (Idiot.)

Thirteen: Maybe something weird happened at the same time as we were writing them.

House: Okay, go look at the debugging logs.


Scene 5 - In the lab

Kumar: Man, these sanitized debugging logs suck.

Thirteen: Yeah, but too many people have access to these logs. You know Cuddy won't let us keep anything juicy here.

Kumar: And there's all these interleaved sessions... I can barely even tell what I'm looking for.

Thirteen: No, look, if we just grep for the session we want... here! The timestamp!

Kumar: That's just saying that it wrote out of order. We already knew that.

Thirteen: ... you're right. It's normal.

Kumar: Told you.

[Commercial]


Scene 6

House: Well, if it doesn't look like anything weird happened... Maybe that just means nothing weird happened.

Foreman: Sure, the entries just wrote themselves out of order. Perfectly normal.

House: I mean, maybe these entries always do that. In which case, if we can write the same entries again--

Kumar: But the logs are sanitized! We don't know what data the user entered.

House: Which we would care about if the user had actually entered any data. But according to these logs, they just pressed four buttons.

Taub: You're saying you think it breaks any time a user pushes these four buttons. And nobody's ever noticed before?

House: Look at them! They're pretty weird buttons. Have you ever pushed them in this order?

[Silence.]

House: Me neither. Go try it.


Scene 7 - In the lab.

Taub: This is stupid. We're just making this sequence of four edits, there's no way we could reproduce anything this way.

Thirteen: Wait! What was that?

[Dramatically zoom on their faces.]

Taub: It's a NullPointerException!

[Commercial]


Scene 8

House: So there was a NullPointerException, and you guys didn't even notice it in the logs because didn't include any context in the grep. (Idiots.)

Taub: But we still weren't able to reproduce the issue the user saw. The entries were all written in order.

House: Who cares? We found a bug. Go fix it.


Scene 9 - The cafeteria

House: How's that refactoring going? Still think that making your code into thirty small files instead of one big one will make it somehow better?

Wilson: Actually, yes. When I moved the code around, I found three subtle bugs that had probably been annoying users for months.

House: Moving the code... (stares into space with a satisfied look)


Scene 10

House: You weren't able to reproduce it because you were running the wrong code.

Thirteen: But we checked! The bug fix from last month was already in production.

House: Not that bug fix, the other one that I made because I was annoyed that NullPointerExceptions could cause entries to be written out of order.

[Team stares blankly at him.]

House: Here, move these four lines back down to the bottom of the method, then push the shiny buttons again.

Taub: He's right, it reproduces.

House: And that bug fix is already lined up to go to production, and the NullPointerException's fixed now too.

Kumar: So you're saying we're done?

House: Yeah.

Kumar: Well, that was anticlimactic.