Nov 02


I have to use the bathroom now. I’ve been hyrdating since 5:00 AM. It is now 7:30 AM. I just emerged from an hour and a half of car, Metro and walking and I must go to the bathroom now. I can’t wait until the portapotties at the five mile mark, and I am certainly not going to crouch behind a dumpster along the way. I stand before two rows of twenty portapotties. Nervous-looking runners stand thirty-deep in lines before each one. I fear that I that I won’t make it. I won’t be able to wait my turn, and if I do, I’ll miss the start. Thousands of numbered spandex-clad people swarm around me. Some cast off their shame and squat under the pine trees. Others scramble down hillsides seeking cover. Small groups congregate, consuming packets of goop, discussing sore knees, torn ligaments and mile times. We have hydrated, carbo-loaded, lubricated. We wear our motion-control shoes, our cushioning socks, our Coolmax shorts with built-in underwear, our sweat-wicking singlets, our ventilated jackets, our timing chips. Everyone wants to tell someone how this one compares to his last. The gun will fire in twenty minutes. I hope you slept well. Twenty-six miles is a long run.

Finally free of the sucking whirlpool of portapotties, I head for the start. Five minutes! Other people run. I run too, joining a seething, anticipatory mass. I can barely see the start line. The gun goes off. Minutes pass before we start to move. At last we begin to run. We lope down the city streets, and spectators yell out our names. We are the kings of the world, we marathoners. We are superhuman, and we do what no one else can.

Eight miles later, my training partners are struggling. “We are we running so slow?” inquires Joel as we pull a bit ahead. “I guess they’re tired,” I reply. He shakes his head. Eight miles into a marathon is not the place to be tired. The group begins to splinter. At the ten mile mark, I leave my remaining companions. They are slowing, and I want to be done as soon as possible. I don’t like running. I want the race to be over.

At thirteen miles, my knees hurt. I stop to don elastic braces. The braces are tight around my knees and cut off the blood flow to my calves. I push them down to my ankles to give my legs a break until my knees hurt again. Such is the plight of a long distance runner: something always hurts.

At twenty miles, I’m ready to be done. Why is a marathon so long? Why do I do this? Wasn’t once enough? Haven’t I proved myself? I already did the impossible. Everything hurts. I can’t go on any longer.

Twenty-two miles: dazedly, I think that this is the longest mile I’ve ever run. A woman by the side of the course is yelling, “one more mile!” I hate her. She is every person who told me during my first marathon, “This is the last hill.” They were all lying. She is lying. I will never finish. I will collapse right here in the streets of DC, another casualty of the sport.

Rounding a bend, I hear a subtle roaring. I think it’s my ears. The people around me are picking up speed. I vaguely wonder why as I look up and see the end. The world snaps back into place. With my salvation in sight, I can do anything! I am the wind, and I whoosh past struggling runners in my desperation to be done. I want to stand still, so I heave myself toward the finish line, crossing at full gallop. Five and a half hours! I’ve been running for five and a half hours. Apparently, someone removes my timing chip and puts a finishers medal over my head, because I find myself eating a banana and gazing serenely upon my excited family. I spend the rest of the day drifting on my own cloud. I am the king of the world.

Jun 02

Access Cheat Sheet

These are from ye olde Access 97 days and may no longer apply.

COUNT DISTINCT isn’t supported

To get around it: SELECT COUNT(1) FROM (SELECT DISTINCT column FROM table)


When using multiple ANSI joins, you must surround each set in parentheses.

FROM (users INNER JOIN messages ON = messages.idUser)
INNER JOIN topics ON messages.idTopic =

Object Names

If there are queer characters or reserved words in your table/query names, you can reference them in SQL statements by surrounding the name with square brackets, just like SQL Server.

SELECT email, [date] FROM [List Members]


Surround dates in SQL with #.

SELECT * FROM users WHERE joined > #3/4/2002#


Apr 16

Return the folder of the current ASP file

ASPToday ASP Tip of Day for 17 April 2001, by Ian Vink

Return the folder of the current ASP file being accessed.

set fs = server.createObject("scripting.fileSystemObject")

Full_ASP_FILE_PATH = server.mapPath(request.serverVariables("PATH_INFO"))

PATH_ONLY = fs.getParentFolderName(Full_ASP_FILE_PATH)

response.write "This ASP page is being run in the folder: " & PATH_ONLY