Tuesday 15 August 2006
 #
 

I wonder what spammers are actually thinking almost as much as I wonder why they bother me.

I've had a blog-spam problem for about three weeks now targeting my referral logs. Spammers with robots use robots that act like people browsing the blog, but they appear to come from gambling sites so that the site URLs show up in the system logs. Some blogs' referral logs are searched by Google and other sites, so the theory here is that the referral spam will generate a lot of inbound links into their sites driving up their search rankings. Sadly for all concerned, this doesn't actually happen; Google is too smart.

Then there's comment spam, like this thoughtful thing I got from a vistor in India this morning:

Remember to let her into your bedbug, then you can start to make it partial.
I don't care about Christopher Fargis, he is vivid, pubescent, and anatomic and I am not going to refracture about it. Dyno-blast Jason Chan hunch our lettering. Our hydraulic corer guard a specious otherness Sammy Schenker is a scornful chelicera? Then Mazen Nesheiwat skyjacks a blurriest nunnery. We will commend on the glitter; we will generalize on the commissure; we will never flick.
My to go cardiograph overconcentrates in the hole. Harmonic Airy Phanhyaseng lip the ambidexter. Therefore unless Gerald Cheatham solemnify Minh Nguyen, she westernize my fattiness but disvalue him

The trick here is that someone is monitoring the spammer's email address, and the subject of the spam comment suggests that anyone emailing the spammer will get information about a gambling site.

Some actual person had to enter the comment, though. The IP address of the comment shows that actual person to be in India, where I can only assume he or she was paid a few cents to copy the nonsense into the comment and submit it to the blog.

It's sad, really. But, in an absurd way, interesting poetry.

Tuesday 15 August 2006 11:32:49 UTC
 Thursday 29 June 2006

I have a bit of work to do today, but Chicago has the kind of weather this morning that makes people skip out for lunch at 9:30. So, by way of mentally preparing to ignore the clear skies and 22°C (72°F) breezes out my window, here's what's going on this week.

Over the past two days I've had to deal with four kinds of evaluations, three of myself and one of other people. One involved life-or-death decisions, one involved the future of my company, and the other two really pissed me off.

First the most important one: I passed my biennial flight review yesterday, with only one minor error landing with a 6-knot (7 mph, 3 m/s) crosswind component on one of my landings (I drifted left of the center line during my flare). All pilots have to have a periodic review to ensure they still know everything they knew when they got their most recent rating; for private pilots, the period is two years. In other words, every two years I have to essentially re-take my private pilot checkride and oral exam.

So, with lives at stake, I calmly and competently demonstrated that I can fly a Piper Warrior within the FAA's private pilot practical test standards. And sometime before 30 June 2008, I'll have to do it again, unless I somehow earn my instrument or seaplane rating by then. (Getting a new rating starts the clock at zero. But some ratings reduce the period; for example, if I get a commercial rating then I have to have an annual flight review.)

The kinds of questions you get during the BFR make a lot of sense, and they're immediately relevant. For example, after I demonstrated steep turns 3,500 feet (1,100 m) above a dairy farm in DeKalb County, Illinois, the flight instructor yanked the throttle back to idle and asked, "You've lost your engine; what do you do now?" Notice that I not only had to tell him my answer, I had to demonstrate it, explaining each step as I went along, including how I would brief a non-pilot passenger on the proper way to behave while I put the plane gently down into that row of corn over there.

Now compare this with the Microsoft certification exam that I failed Tuesday afternoon. This test was optional, possibly relevant to my job (though in retrospect a different test was much more relevant), and conducted in a way so far removed from actual experience as to render the whole thing irrelevant and frustrating.

I won't go into details, if for no other reason than I'm contractually obligated not to, and I won't heap criticism on the program or the specific test (for the same reason). I will, however, present you with an analogy.

Imagine you are taking a driving test, so that you can put "Certified Chicago Driver" on your CV. Never mind that you've done a great job driving in Chicago without this credential; for whatever reason, you think getting this credential is a good idea.

You get to the testing center, and rather than put you in a car, they plop you in front of a computer running—I am not kidding—Windows 3.1. Then you begin the multiple-choice test. Here is the first question:

You're driving from 1200 West Fullerton Parkway to 741 West Cornelia Avenue. What is the route you follow?
A. East on Fullerton, North on Halsted, West on Cornelia.
B. East on Fullerton, North on Clark, North on Sheffield, East on Cornelia.
C. West on Fullerton, North on Western, East on Addison, South on Halsted, East on Cornelia.
D. East on Fullerton, North on Clark, North on Broadway, West on Cornelia.

Do you know the answer? You have 60 seconds, closed book.

The correct answer is C, because the other three are illegal. Of course, no one would ever, ever, ever, choose C in real life, because it takes you three miles out of your way. But that's not the point. Certified Chicago Drivers may not know how to use a manual transmission, but they absolutely know all the one-way streets in the city.

See, in order to get this question right you need to know several things. First, Halsted is 800 West, so you need to be East of it to get to 741 W. Cornelia. Second, Cornelia is a one-way street that goes East and West from Halsted. In other words, if you're on Halsted, you can go either East or West on Cornelia, away from Halsted.

Further, if you got the question wrong, so what? So you're going up on Halsted and you turn the wrong way on Cornelia. Oops: you're on the 800 block of Cornelia, the numbers are getting bigger, so you waste maybe 15 seconds turning at the next street and trying again in the other directon.

And even more: Anyone who has ever spent time in that neighborhood knows you won't find a parking space on the 700 block of Cornelia unless you get really, really lucky. So you may want to turn West on Cornelia anyway, because it's sometimes easier to find parking over there.

Ready for Question 2? Good.

You are at the Eastern end of Hugh Hefner Way. How many traffic lights are between you and the Water Tower?
A. 4
B. 24
C. 118
D. 0

So, wanna-be-Certified Chicago Driver, what's the answer? You have 60 seconds, and if the test center catches you banging your head on the keyboard they'll throw you out.

Actually, I'm not entirely sure what the answer is. There are two major problems with the question. First, Hugh Hefner Way doesn't appear on any maps of the city that I'm aware of, because it's an honorary street name (on Walton Street between Michigan and Rush). So the Eastern end of it is, therefore, at the corner of Michigan and Walton, which is three blocks above the Water Tower. Only I'm not sure if it ends on the East or West side of Michigan, because "end of a street" isn't defined in the Chicago Municipal Code anywhere.

This dovetails with the second problem. How do you count traffic lights? Does the question want you to count intersections, actual light structures, or the lights themselves? Do you start counting with the ones nearest you? What does "between" mean, and anyway, doesn't it depend on where your car is sitting? Finally, if you want to split hairs, a car sitting at the point described should be pointing West, again because of the one-way street business Chicago has all over the place.

OK. You've spent an hour slogging through 40 questions like that, and you've got five to go. So you get to question 41, the only one of its kind on the exam, the only one with absolute relevance that every Chicago driver should know without thinking too hard about it:

What is the maximum legal speed, in miles per hour, for non-emergency vehicles on any street, road, or expressway inside the Chicago city limits?
A. 25
B. 30
C. 55
D. 65

Please tell me you answered C. This hasn't changed in my lifetime. It's important to remember, because speed limit signs are scarce on the expressways. If you don't know the answer you probably shouldn't earn any kind of Chicago driving certification.

So at Question 41, you have finally gotten something that everyone should know cold. Something that real people wouldn't need to look up. Something that's not necessarily obvious everywhere in the city, but that is nonetheless important to know. It's relevant. It's appropriate to ask in a multiple-choice format. It MAKES SENSE.

Then comes Question 42:

You are parking in zone LV-2 on the second Monday of July. Which of the following does not apply?
A. You must have a permanent LV-2 sticker or a 24-hour LV-2 pass to park overnight.
B. You may park without a zone pass any time between 6:00 am and 6:00 pm.
C. You must have a permanent LV-2 sticker, not just a 24-hour pass, on this particular day between 5:00 pm and 10:00 pm.
D. If you violate the LV-2 zone restrictions, you could get fined $60 by the city.

Think...really...hard...

Before I tell you the correct answer, can you think of any reason why a normal person, who can read parking signs, would ever need to have this information memorized? I only know it because I used to live in that zone, and even then, I forgot from time to time and had to look at the big red signs posted every 50 meters (150 feet) along Cornelia.

The correct answer is C. Here's why: The LV-2 zone surrounds Wrigley Field. When there is a night Cubs game, parking is prohibited to all but permanent LV-2 sticker-holders between 5pm and 10pm. However, the second Monday of July is night before the All-Star Game, so there is no possibility of a baseball game on that night.

It's important to note that the night-game regulation is posted on the corners of every block in the zone, on big yellow signs, that have the exact dates of all the season's night games listed. If you get a night-game ticket it's because you are illiterate or because you were at the game and felt that the $60 ticket was a better value than the price-gouging lots near the park.

Aren't you happy you took the Certified Chicago Driver test? And don't you see how Certified Chicago Drivers are more skilled drivers than you?

Next, the third evaluation, which has also annoyed me. I am trying to find someone to help with a project. I plan to pay this person to write HTML code to clear specifications. I have posted a want-ad on Craigslist, and I have received about 25 responses. Sadly, fewer than half of the responses meet the two firm requirements listed in the ad.

Finally, the fourth evaluation. I am in the process of re-writing my company's business plan. That's a whole other story, one which I may post here tomorrow.

I am not yet done responding to these résumés, so I will now finish, I hope in time for an outside lunch.

Thursday 29 June 2006 15:33:48 UTC
 Tuesday 6 June 2006

One of my daily digests contained a link to "How to choose the best database for your business." By Oracle.

Golly. Which database do you suppose they recommend? Think it's MySql?

Tuesday 6 June 2006 15:21:23 UTC
 Friday 12 May 2006
Here's some code I discovered while tracking a bug this morning.
Friday 12 May 2006 12:56:34 UTC
 Tuesday 2 May 2006

Very funny: How To Write Unmaintainable Code: Ensure a job for life, by Roedy Green.

Very helpful, even in C#: Tips for maintainable Java code, by Rolf Howarth.

Spend an hour reading them, then send them to your teams.

Tuesday 2 May 2006 22:10:43 UTC
 Tuesday 11 April 2006

My project manager sent around this link to Joel Spolsky's rules for software management:

I've come up with my own, highly irresponsible, sloppy test to rate the quality of a software team. The great part about it is that it takes about 3 minutes. The neat thing about The Joel Test is that it's easy to get a quick yes or no to each question. You don't have to figure out lines-of-code-per-day or average-bugs-per-inflection-point.

I totally agree with Spolsky's list. I have never been on a project that scored better than 7 until now (which scores 9, IMO, but we're moving toward 11), and only one, ever, has answered "yes" to #8 (quiet working conditions).

Tuesday 11 April 2006 17:24:16 UTC
 Friday 7 April 2006

We spent two hours yesterday debugging some code that kept firing early. It wasn't clear to anyone, including the people who wrote it, why this happened. We patched it with the C# equivalent of duck tape, but really, it still doesn't work right.

This incident shows how important it is to know what your code is supposed to do, and not to accept the code if it doesn't. Many tools exist to help—most notably, unit-testing tools like NUnit—but they have trouble with the specific problem that we encountered: events fired from black-box controls.

I will have more to say about this later.

Friday 7 April 2006 12:10:56 UTC
 Monday 3 April 2006

I mentioned Friday that I've completely refactored the section of the Inner Drive Extensible Architecture™—the Idea™—that handles quantitative functions. (I've also decided to make some SDK documentation available.) The actual design of the IMeasurable classes—Length, Speed and the like—bears more discussion.

Monday 3 April 2006 15:25:33 UTC
 Tuesday 7 March 2006
My colleague Cameron Beatley sent me this handy comparison guide for programming languages.
Tuesday 7 March 2006 21:08:28 UTC
 Saturday 25 February 2006
Just this morning I wrote about choosing a class over a struct to take advantage of inheritance and abstractness. It turns out, I was wrong.
Saturday 25 February 2006 00:36:36 UTC
 Friday 24 February 2006
I've encountered a problem familiar to veteran C# developers: whether to use a class or a struct for a particular design. So I'm going to follow my own advice and develop first for elegance and second for execution speed.
Friday 24 February 2006 16:22:19 UTC
 Sunday 29 January 2006
Genius Boy here just spent ten minutes debugging a class because I used the private field directly inside the class, instead of the property accessor method.
Sunday 29 January 2006 22:17:44 UTC
 Monday 16 January 2006
The Inner Drive Extensible Architecture™ contains a very useful namespace called Quantitative that contains classes and interfaces to use in measuring things. Essentially, there is a trio of interfaces, IQuantity, IUnit, and IPhenomenon, that allow you to create and convert any kind of measurements. The principal implementation of IQuantity is the Numeric structure.
Monday 16 January 2006 18:39:25 UTC
 Thursday 15 December 2005

I've finally added an explanation of Evolutionary Delivery to my corporate site. I wrote this as part of a proposal to a client in September, and for reasons that passeth understanding, I neglected to publish it online.

By the way, I write software for a living, so if you're reading this and realize you need a small, agile development team for a .NET project, send us a message.

Thursday 15 December 2005 23:08:41 UTC
 #
 
An example of a piece of code that desperately needs refactoring.
Thursday 15 December 2005 19:23:22 UTC
Read Microsoft's Framework Design Guidelines, written by the guys who wrote the .NET Framework.
Thursday 15 December 2005 00:23:04 UTC
Search
Navigation
Categories
On this page....
Archives
<August 2006>
SunMonTueWedThuFriSat
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789
Total Posts: 65
This Year: 1
This Month: 0
This Week: 0
Comments: 9
Blogroll
Contact me
Send mail to the author(s) E-mail RSS 2.0 Atom 1.0
Administration