The Daily Parker

Politics, Weather, Photography, and the Dog

Leaving Nashua

I'll be away from the blog for a couple of days while I return to Chicago. I've enjoyed Nashua, and I'm sure I'll come back to visit. Everyone here was friendly; for example, my unexpected dinner companion, Max:

Back Monday. Enjoy the weekend.

Microsoft to Contractors: Take a (short) hike

Microsoft has suspended at least 1,000 contracts with developers for a week, just like (*snap*) that:

Microsoft spokesman Lou Gellos said Monday that Microsoft told vendors who supply the contractors that about 1,000 workers globally would not be needed this week. The vendors, whose workers do software development for Microsoft, also were told to schedule two other days off, Gellos said.
Gellos also said the decision was unrelated to a move, announced late last week, to offer new perks to its Redmond employees such as enhanced child-care benefits, access to dry cleaning and grocery delivery services, and better cafeteria food.

Now, it's well known in the industry that Microsoft uses contractors as their primary workforce. This demonstrates one of the reasons. You can't lay off 1,000 employees for a week; it winds up costing more than you save. But contractors? No such restrictions.

It works both ways, however. Contractors rarely have the long-term interests of the company in mind. (I hope the companies that have contracted for my services feel I'm in the minority.) Over the past few years I've gotten increasingly distressed seeing the quality of work that many contractors produce. The simple solution, I think, is to have long-term employees supervise the contractors better on the one hand, and to create a workable system of warranties on the other. If contractors had to maintain their own code, I guarantee you they'd write better stuff.

Those topics will have to wait, however, while I go back to fulfilling the last day of my current contract.

Judge allows AT&T documents in EFF case

In the ongoing, and now expanded, case the Electronic Frontier Foundation has brought against AT&T for its role in aiding the National Security Agency's efforts to spy on us, U.S. District Court Judge Vaughan Walker will allow confidential AT&T documents into the case:

The evidence at issue was filed as support for EFF's motion for a preliminary injunction against AT&T, seeking to stop the company's ongoing violations of the law and the privacy of its customers.
AT&T had requested that the evidence be returned to AT&T, and not used in the case. Wednesday, Judge Walker denied that request. Although the allegedly proprietary documents will remain under seal, Judge Walker instructed AT&T to work with EFF to narrowly redact any confidential material from EFF's brief and supporting declarations so that they can be made public as soon as possible.

Salon (reg.req.) reports that the documents came from retired AT&T technician Mark Klein, who "was motivated to blow the whistle in 2004 'when it became clear to me that AT&T, at the behest of the National Security Agency, had illegally installed secret computer gear designed to spy on Internet traffic.'"

Pop quiz: Why does this code fail?

Here's some code I discovered while tracking a bug this morning:

const string DATE_FORMAT = "M/d/yyyy";

string dateString = 
   ConfigSettings.GetString("Some setting", DateTime.Now.ToString(DATE_FORMAT));

DateTime someDate = 
   DateTime.ParseExact(dateString, DATE_FORMAT, CultureInfo.InvariantCulture);

The DateTime.ParseExact method throws a FormatException if the string (dateString) doesn't exactly match the format string. I mean, exactly. So when dateString comes back from the configuration settings class as "5-12-2006" (instead of "5/12/2006"), guess what happens.

My correction:

DateTime someDate = DateTime.Parse(dateString, CultureInfo.InvariantCulture);

The DateTime.Parse method takes any legal input and attempts to parse it, freeing the developer from having to know what formats may occur. The DateTime.ParseExact method has some specific applications, but when you don't know what you're getting, it's risky—especially when you don't actually catch the FormatException anywhere.

Of course, the DateTime.Parse method could also throw a FormatException. In the code I'm debugging, since the date isn't really coming from a configuration set that we control and is, in fact, coming from an unknown third party[1], I'm actually going to go with an even more forgiving option:

string dateString = ConfigSettings.GetString("Some setting", string.Empty);

DateTime someDate;
if (DateTime.TryParse(dateString, someDate) == false)
   someDate = DateTime.Now;

Moral: Never assume anything about inputs you don't directly control.

[1] You could tell all that from the name of the class, right? I mean, if you see something called "ConfigSettings" you kind of assume that the class has something to do with configuration settings, and doesn't have anything to do with talking to computers in Ohio, right? I'm not making this up: the method call in question may go to Ohio for its data. This highlights the importance of naming your classes correctly so that people trying to use your code don't curse your name unto the generations.

New, improved El cars coming

The Chicago Tribune reports today that the Chicago Transit Authority has agreed to buy 406 new El cars for the Blue and Pink lines. The cars will have aisle-facing seating rather than the mixed seating arrangement currently in use (see the Tribune graphic). This is a long-overdue improvement on the Blue line, whose trains go to O'Hare. Struggling with luggage on the current trains causes pain; the new arrangement will alleviate it.

The CTA expects the cars to roll by 2009, shortly after we have a new President (984 days from now).

Getting your pocket picked without your knowledge

Bruce Schneier linked to this Wired article about Radio Frequency ID (RFID) tags. It will fascinate or terrify you, depending on how thorough and disciplined you think the implementations will be. Choice passage:

"I was at a hotel that used smartcards, so I copied one and put the data into my computer," Grunwald says. "Then I used RFDump to upload the room key card data to the price chip on a box of cream cheese from the Future Store. And I opened my hotel room with the cream cheese!"

Cool...?

Really frustrating part about being out of town

My office building decided to wash windows today. I am not in my office building; I am, in fact, 1,330 km (826 mi) away. Despite clear instructions to be careful with the Inner Drive Webcam, and to replace it when done washing the windows...well... Let's see what happens in the next hour, because I don't want to stare at this for the next four days:

This is on top of a strange "image freeze" issue I've had for about three weeks. I'm looking into that as well, as much as possible from New Hampshire.

The damn thing ran flawlessly for four months. This is most aggravating. Nothing has changed—except possibly a Windows 2000 patch mid-April, which may be the source of the problems.

Update (10:25 CT/15:25 UTC): My building manager is on top of it. The window washers are apparently taking a long time. She graciously turned the webcam for me so that it now points to something more interesting: the other wall.

Schneier on who owns your computer

Security expert Bruce Schneier has a good article today about threats to your computer (hint: Sony is one):

There are all sorts of interests vying for control of your computer. There are media companies that want to control what you can do with the music and videos they sell you. There are companies that use software as a conduit to collect marketing information, deliver advertising or do whatever it is their real owners require. And there are software companies that are trying to make money by pleasing not only their customers, but other companies they ally themselves with. All these companies want to own your computer.

This essay originally appeared on Wired.com.