Welcome to AspAdvice Sign in | Join | Help

I am retiring this blog and replacing it with two new blogs:

  1. My technical blog will cover .NET, SQL Server, etc. and will be hosted on asp.net.
  2. My personal blog will cover triathlons, running, family, etc. and be hosted on blogspot.com.

Thanks aspadvice.com!



I just uploaded the slides and samples from my 3 talks at the March 2009 DevConnections conference.

The Talks:

ADX201: Coming Up to Speed with LINQ
LINQ (Language INntegrated Query) is one of the new features provided with Microsoft’s Visual Studio 2008 and .NET 3.5 that lets you write strongly-typed queries right in your C# or VB code. In this session, Paul Litwin will introduce LINQ and the language additions to C# and VB that make LINQ possible. Paul will demonstrate a number of examples of using LINQ against collections as well using LINQ to SQL against SQL Server objects. Finally, Paul will opine on where LINQ fits in the Microsoft “Data” universe and how it stacks up against good old ADO.NET.

ARP201: Designing Reports with SQL Server 2008 Reporting Services
Microsoft has overhauled SQL Server Reporting Services for the 2008 release of SQL Server. Gone are the separate table and matrix regions, replaced by the Tablix region. Much has been improved, including visualization and the exporting report results to CSV, Excel, and now Word. Come to this session to hear all about designing reports with the latest and greatest version of Reporting Services.

ARP202: Programming SQL Server 2008 Reporting Services
In this session, you’ll learn how to programmatically manipulate SQL Server 2005 and 2008 Reporting Services (SSRS) and integrate SSRS into your ASP.NET applications by employing URL Access, Report Viewer controls, and the Reporting Services Web Services. A major issue with SSRS is that you can normally only display reports using Internet Explorer, but in this session you’ll discover how to integrate SSRS into your applications using any modern browser, including Firefox, Netscape, and Safari. Finally, you’ll learn how to extend reporting services by calling custom .NET assemblies from your SSRS reports.



Microsoft SQL Server 2008 Reporting Services has been out about 9 months or so now and I've finally gotten a chance to dig into my favorite reporting server product.

My top five new features:

  1. Ability to render reports to Microsoft Word format. This has been desired for years and is so nice now.
  2. Support for nested reports and subreports in Excel renderer. A lot of people have asked for this one and while it isn't something I've needed much, it's going to make a lot of people happy.
  3. Tablix Report Region. The new tablix report region allows you to build much richer reports that combine features of tabular reports with matrix reports. This region is infinitely more flexible than the older table and matrix regions. However, the toolbox looks the same because you start with either a table or matrix report. The cool part is that you can modify either type of report to add features of the other style report. Do be aware that this extra power/flexibility does come at a cost of a bit of a learning curve that you will encounter in mastering the tablix region but it's well worth the investment.
  4. Textbox control now supports rich text. While a little clunky in in its implementation in the designer, I just love the ability to control the formatting down to the character level of textboxes. Furthermore, you can choose to control the formatting using text and the designer or just feed the textbox a string with embedded HTML format tags. This feature combined with feature #1 (Word support), means you can move mail merge from the control of a desktop app (Microsoft Word) to a server app (SSRS 2008) with the built in scheduling and delivery capabilities that SSRS supports.
  5. Report Builder 2.0. The new version of Report Builder which you have to download separately (download from here) is vastly improved from its predecessor. It can now handle any report you can generate in Visual Studio and no longer requires you to build a model first. Of course, this may make the UI more difficult some users. Fortunately, for the non-power user, you can still point them to Report Builder 1.0 if you'd like.

The above features, IMHO, make the upgrade to SSRS 2008 a must have. In fact, at my organization, I am so intrigued with the new version that we are building an SSRS 2008 server even though it will likely be months (perhaps even years) before we move our other SQL Servers to 2008. Of course, this is not a problem since SSRS 2008 can pull data from any version of SQL Server (and many other databases as well).




I am putting out a call for abstracts to present at the Fall 2009 Microsoft ASP.NET Connections conference in Las Vegas, Nov 9-13 2009. The due date for submissions is April 5, 2009.
For submitting sessions, please use this URL:

Please keep the abstracts under 200 words each and in one paragraph. No bulleted items and line breaks, and please use a spell-checker. Do not email abstracts, you need to use the web-based tool to submit them.

Please submit at least 3 abstracts, but it would help your chances of being selected if you submitted 5 or more abstracts. Also, you are encouraged to suggest all-day pre or post conference workshops as well.

We need to finalize the conference content and the tracks layout by the middle of April, so we need your abstracts by April 5th. No exceptions will be granted on late submissions!

For Fall 2009 we will have a separate, dedicated Silverlight track of talks in addition to the ASP.NET talks, so please include those Silverlight talk proposals. Anything on ASP.NET or Silverlight is fair game. Topics of interest include (but are not limited to):
* ASP.NET Webforms
* Silverlight 2.0 / 3.0
* SP1 features, including Entity Framework/LINQ to Entities, Dynamic Data, Routing support, ADO.NET Data Services
* ASP.NET 4.0 features, as long as your NDA does not preclude you from mentioning them in April 2009.

Please realize that while we want a lot of the new and the cool, it's also okay to propose sessions on the more mundane "real world" stuff as it pertains to ASP.NET or Silverlight.

What you will get if selected:
* $500 per regular conference talk.
* Compensation for full-day workshops ranges from $500 for 1-20 attendees to $2500 for 200+ attendees.
* Coach airfare and hotel stay paid by the conference.
* Free admission to all of the co-located conferences
* Speaker party
* The adoration of attendees
* etc.

Your continued suport of Microsoft ASP.NET Connections and the other DevConnections conferences is appreciated. Good luck and thank you,
Paul Litwin
Microsoft ASP.NET Conference Chair


I contributed a blog post to the Microsoft MVP Summit 2009 Blog on Lucy's Legacy Exhibit at the Pacific Science Center in Seattle. If you enjoy paleontolgy/archeology/history/African culture and will be in Seattle for the MVP Summit or some other reason (or perhaps you live in the area) before March 8, I strongly recommend you go!


Lately, technologies like ASP.NET MVC (which hasn’t even been released), and client-focused AJAX have dominated the mindspace of the ASP.NET community. But in reality, most ASP.NET developers are still primarily focused on the server and using WebForms. And in my book, there’s nothing wrong with that! To help people along, I’ve decided to make some blog posts that talk to more of this typical and mundane style of ASP.NET web programming. 

In this post, I want to highlight some of the more useful data control events which you undoubtedly will need to use if you need to customize your data controls. The discussed events apply to the following data controls:

  • GridView
  • FormView
  • DetailsView
  • ListView

The GridView event names differ slightly from the three other controls event names. The basic difference is the word Item used in the FormView, DetailsView, and ListView controls become Row for the GridView control. (Aside: not sure the logic employed by Microsoft PM’s in deciding to name the events differently; I think Item would have sufficed for the GridView as well.) 

Here are the data control events I find most useful: 

DataBound – This event is called after the data control is bound to its data source. Use this event to modify data as it is being loaded into control. For example, I commonly use this event, to set default values when inserting new records. You may wish to use the data control’s CurrentMode property to determine which of the three modes the control is in (ReadOnly, Insert, or Edit).

ItemUpdating (or RowUpdating) – This event is called when an update button is clicked but before the update operation. Use this event to perform additional validation or manipulate the data before row is sent to the database. If you are validating data, you can use the event handler second parameter’s OldValues and NewValues properties to return collections of the values of the row fields prior to the user’s updates and after the user’s updates, respectively. In addition, you may want to use the second parameter’s Cancel property. By setting this property to true you can cancel the update. If you want to modify the data before it is sent to the database, you’ll want to use the NewValues collection to gain access to the row field values that are about to be sent to the database. 

ItemUpdated (or RowUpdated) – This event is called after the update operation has occurred. You can use this event to react to the database update, e.g. to refresh another control on the page or handle any update exceptions. If you are handling exceptions, you will want to use the event handler second parameter’s Exception property to determine if an exception has occurred (Exception will be set to something other than null (Nothing in VB)). Take a look at the ExceptionHandled and KeepInEditMode properties when handling exceptions. 

ItemInserting – This event is called when an insert button is clicked but before the insert operation. Since the GridView control doesn’t support inserts, there is no RowInserting event. Use this event to perform additional validation or manipulate the data before the row is sent to the database. If you are validating data, you can use the event handler second parameter’s Values property to return a collection of the values of the fields about to be sent to the database. In addition, you may want to use the second parameter’s Cancel property. By setting this property to true, you can cancel the update. If you want to modify the databefore it is sent to the database, you’ll want to use the Values collection to gain access to the row field values. 

ItemInserted –This event is called after the insert operation has occurred. Since the GridView control doesn’t support inserts, there is no RowInserted event. You can use the event to react to the database update, e.g. refresh another control on the page or handle any insert exceptions. If you are handling exceptions, you will want to use the event handler second parameter’s Exception property to determine if an exception has occurred (Exception will be set to something other than null (Nothing in VB)). Take a look at the ExceptionHandled and KeepInInsertMode properties when handling exceptions. 

ItemDeleting (or RowDeleting) – This event is called when a delete button is clicked but before the delete operation. Use this event to perform additional validation and stop the delete operation if necessary.You can use the event handler second parameter’s Keys property to gain access to the keys of the row about to be deleted or the Values property to gain access to the non-key field values.  

ItemInserted (or RowDeleted) – This event is called after the delete operation has occurred. You can use it to react to the database deletion, e.g. refresh another control on the page or handle any deletion exceptions. If you are handling exceptions, you will want to use the event handler second parameter’s Exception property to determine if an exception has occurred (Exception will be set tosomething other than null (Nothing in VB)). Take a look at the ExceptionHandled property when handling exceptions.



This was to be the week of a few easy runs and lot of carbs. It was time to enjoy my hard work and get psychologically ready for the race--the California International Marathon (a point to point race from Folsom to Saramento). I had been battling sciatica in my left leg and buttock for several months but I was hoping that it would be in check when race day came that Sunday and I could relax during my "taper" week.

On Monday, I flew up to Vancouver to speak at the Vancouver Technology User Group on LINQ. Turned out to be a great meeting with about 50 people attending the talk. I flew back to Seattle, grabbed my car from ShuttlePark2, and got back to work around 11 AM on Tuesday. I met with my boss, Scott, and a co-worker, Brad, at 1 PM and we decided to respond to an RFP (request for proposal) that we had been considering going for at the meeting. It was not going to be terribly complex proposal, however, the big issue was that it was due the next day (Wednesday) at 1PM and we hadn't started it. Furthermore, I had to write the guts of the document--the technical proposal. This meant dropping several other pressing projects and pushing real hard to get the work done. I ended up working until around 4:45 and then drove to a play my daughter Anna was in. The play was great and after helping get the kids to bed I continued to work on the proposal at home until about 10:30 that evening.

Work can be a Real Pain in the Neck
On Wednesday, I got into work early, getting there just before 7 AM and managed to get the technical proposal done about noon. I was pretty stressed about the proposal and the work I was ignoring to finish the proposal, still I rose to the occasion and I was proof-reading my work at about 12:15 when all of a sudden I started experiencing pain--actually pressure in my upper chest and neck. I stood up and walked around a little but the pain continued. I completed my part of the proposal and was going to assemble the final document from the other pieces that Scott and Brad were preparing. But I was beginning to get quite concerned a bout the chest pain so I asked Brad if he'd assemble it and send it off and walked into Eileen's office, shut the door, and asked her if she could drive me to the Emergency Room. Eileen was great; she immediately dropped whatever she was working on. I got my jacket and we headed for the door. On the way out, I asked Scott if everything was okay with the proposal and he thanked me for my work. I didn't mention the pain (other than I was feeling ill) to anyone else at work.

I called Suzanne on the way to Swedish. She was of course quite concerned and I told her I'd call her back as soon as I knew something. Eileen dropped me off and I told the clerk at the ER desk I was experiencing chest pain. I graded the pain as a 4 on a scale from 0 to 10. Fairly quickly they whisked me off to a cubicle and attached 12 electrode leads to various parts of my body and performed an ECG. The ECG looked good, which relieved me but it wasn't over that quickly. I used to work in cardiology research and I know that chest pain demands a very rigorous protocol, especially if the patient is a 50 year old male or in some other high risk group.

Chest Pain Protocol 101
So I was moved to a ER room where I stayed for about 4 or 5 hours. A continuously monitored ECG was attached as well as blood pressure cuff, a device that clamped onto a finger which measured pulse and blood oxygen, and an oxygen tube was inserted into my nostrils. Next an IV was started in my right arm and four vials of blood were taken. From the blood, a number of tests were run including several enzyme tests which check for heart muscle necrosis. One of the tests was actually done in the room by a tech using this device that measured about 12 by 3 inches. Like all the other tests, it was negative. Soon after a doctor visited to ask me a number of questions and schedule me for a chest x-ray. When I returned to my bed from the X-ray, they asked me where my pain was on the scale. When I got to the hospital, I noted it as 4 on a scale of 1 to 10. But it had mostly subsided by now--I now scored it a 1. The doctor had the nurse give me an aspirin and some nitroglycerine. The nitro has a dual purpose: to relieve the chest pain, but it is also diagnostic since if it does relieve the chest pain, that tells the doctor it was likely cardiac in nature. The nitro did not affect the pain, which as far as I was concerned was a good thing.

Since the pain was still there, the doctor ordered morphine to be given to me through my IV. I tried to decline, arguing the pain was so small at this point that it was unneeded. The nurse didn't take no for an answer and the morphine was given along with an anti-nausea med. I noticed my pulse, usually in the 50s went into the 40s after the morphine and I felt queasy.

Soon after this the pain was gone; all told I experienced chest pain for about 2-2.5 hours. I remained in the ER bed for several additional hours. I have to say that I was quite uncomfortable; all the various attachments reduced my mobility and it was pretty much impossible to get comfortable.

A Joy Ride
Around 5 PM, they decided to admit me to the hospital. Unfortunately, this meant being transferred by ambulance to the Cherry Hill Campus of Swedish (the old Providence Hospital). So my dignity was lowered a bit more while the ambulance crew transferred me to an ambulance bed, strapped me in and hooked me up to a different set of instruments. The ride took about 15 minutes whereupon I was wheeled to the Cardiac Telemetry unit on the third floor of the hospital.

Not Exactly Carbo Loading
So even though everything was normal, I had to spend the night at the hospital. Fortunately, the accommodations were much nicer at the Swedish Cherry Hill hospital room (private, by the way) than the cramped ER room. And I was detached from the oxygen, bp, and finger doohickey, plus the ECG hookup was considerably less intrusive. And I could order dinner! But I was put on a cardiac diet. So here I was in the hospital on Wednesday night, 4 days prior to my marathon, plotting how to carbo load on a cardiac diet in a hospital. Anyway, dinner wasn't half bad but it was a little lower in carbs (and no caffeine) than I wanted.

The cardiologist, Dr. Paul Huang, came by before dinner and told me everything was okay and that they would do two more sets of enzymes (read that two more blood draws) and then if everything was still normal in the morning, he would release me. After releasing me, he wanted to schedule me for an outpatient stress test and echocardiogram at his clinic on Friday. I told him that I was leaving town on Friday to fly to Sacramento for the marathon. Was there any way we could do the test on Thursday instead? He said he would see if he could fit me in on Thursday.

Suzanne came for a visit after dinner and asked me if I needed anything. I asked her to get me a latte from the Starbucks in the lobby. She first checked with the nurse and initially he said no until she explained it would be decaf. The latte was great and so was the little bag of nuts and stuff that she bought me too. Suzanne stayed for another hour or so and then headed home.

Sleep that night was less than optimal. I pretty much had to sleep on my back because the lead patches made it difficult to sleep on my side. Plus, they woke me up at 2:30 to weigh me, take vitals, and draw two vials of blood from a fresh poke in my left arm. Why the heck they weighed me at 2:30 in the morning is beyond me. I think it has something to do with how my GI system was working.

At 8 AM or so, I ordered breakfast. Shortly, thereafter, Dr. Huang, filled out my discharge paperwork and told me I was scheduled for a 10:30 stress test. The nurse informed me that I couldn't eat before the test so breakfast was cancelled. By the time they unhooked me, removed my IV, and I took a shower, it was more like 9:15, so headed to the Starbucks in the lobby where I did some reading (but no eating or drinking) until it was time to check in for my test which was in the James Tower next to the hospital.

The Stress Test
I checked in at the clinic a little early and after the usual paperwork was escorted into the stress test room at about 10:25. The two young techs asked me lots of questions and explained to me how things would work. They wondered why I didn't bring sneakers and more comfortable clothes since I would be walking and maybe running on the treadmill. I explained that I was just discharged from the hospital and hadn't had a chance to go home. I removed my shirt and they proceeded to hook up lots of leads. I was flattered when the two twenty-something techs double-checked that they had the right chart since I looked much younger than 50. At this point, I think this was the fifth set of ECG leads that I had been hooked up to. There was lead glue all over my body. Anyway, I then lay down on a table where they took ultrasound pictures of my heart -- the so called resting echocardiogram.

The echocardiogram went on for about 30 minutes. The techs remarked that my right heart chamber was enlarged but that that was normal for an athlete. A nurse then came into the room to give me the treadmill stress test. I was worried about having to run in my shoes, so I took off my shoes and socks for the test.

Based on my age, my goal was to walk or run on the treadmill until I hit my target heart rate of 145. The rate is calculated based on your age. By now, they knew I was a runner and that I was planning on running a marathon on Sunday so they were sure the test was going to take a long time since athletes' hearts start at a lower resting heart rate and take much more exertion than the average person to elevate the rate. So I hopped on the treadmill in my blue jeans, no shirt, no shoes, and no socks but a whole mess of leads coming off my chest and a blood pressure cuff attached to my arm for good measure.

The standard cardiac stress test is made up of seven stages of three-minutes in duration. With every change in stage, the belt goes faster and the incline gets steeper, thus stressing your heart more. Most people are done by stage 3 or 4. In fact, the tech who had been there the longest mentioned that no one had ever completed stage 7 or even started stage 7 in the three years she had been administering tests. She had heard of another tech witnessing a completed test but it was a very rare event. They explained that once I had gotten to my target heart rate, they needed to stop the treadmill and I needed to hightail it over to the echo table so they could take more pictures of my heart at the target rate. But once again, since I was an athlete, my heart rate was expected to recover very quickly so it might be smart if I went over my target rate. How far over, they never really said.

Stage one barely nudged my heart rate into the 60s. In fact, I think it wasn't until stage 3 that my heart rate exceeded 100. I'm not sure when, but between the discussions with the nurse and the techs, I decided I wasn't going to stop until the test was complete, that is, until I got through all seven stages of the stress test. I got to my target heart rate during stage 4, whereupon I was told I could quit but I said let's keep going. With each new stage, the nurse would ask me if I wanted to continue, and I said yes. The techs were excited because, it looked like I might go all the way, and that for them was quite interesting. At this point, I knew I couldn't stop until I had gone all he way, unless, of course, I had some cardiac event or was just too exhausted to go on.

At the start of stage 7, my heart rate was about 170. (About a year ago, I had done a VO2 test at Real Rehab. This is a running treadmill test that I used to help plan my training and set the zones on my Garmin heart rate monitor watch. Based on that test, we had calculated my max heart rate at about 185.) At this point, I blurted out that I would stop when I got to a heart rate of 175, worried that I perhaps could not make it to the end of stage 7 but when I got to 175 with about two minutes left, I changed my mind--let's go all the way. The techs were quite excited. My heart rate got up to 182 as the full 21 minute test was completed. Now the trick was to get off the fully inclined treadmill and over to the echo table without falling. Not only was it hard to get off the table, but I was reminded that I might feel dizzy. In reality, I wasn't dizzy at all and quickly made it to the table whereupon they started the stress echocardiogram.

The stress echo was done in about 10 minutes and then I got to sit up and watch them review the results while I tried to towel off some of the sweat that was pouring off my body. Amazingly, they were able to get the first pictures while my heart hate was still at 182. And the results looked good. Nothing from my ECG, blood pressure, or echocardiograms looked abnormal. In fact, according to the techs and the nurse, I had the heart of a sixteen year old! I think that might have been a bit of an exaggeration but hey I wasn't about to argue. On my way out another tech blurted out congratulations. Apparently, word had gotten around that I had completed the test.

I got dressed and called Suzanne and asked her to bring me a fresh set of clothes because I was a sweaty mess. I then walked over to Starbucks and got my requisite split-shot venti non-fat latte along with a bagel and cream cheese. No latte ever tasted so good! Suzanne picked me up and dropped me off at work with my change of clothes at around noon on Thursday. I went to the locker room in the basement of our building and showered and changed and then went back to work.

At about 2PM, the stress test nurse called me to tell me that Dr. Huang had had a chance to review my stress test and echocardiograms. Everything looked great and I should run my marathon on Sunday! I worked until 7 PM that night, drove went home to pack for my trip to Sacramento the next morning.

The Marathon
I flew to Sacramento on Friday to run in the California International Marathon on Sunday. I visited the expo on both Friday and Saturday and got together with several running buddies from Seattle before the race. All in all, I felt pretty good going into the race except for some GI troubles and the fact I got little sleep the night before the race. I ran the marathon on Sunday. I was hoping for a Boston Qualifying (BQ) time of 3:35 but alas the one thing I really feared did end up bothering me. I was on BQ pace and hovering between the 3:30 and 3:35 pace groups through mile 20. But around mile 20 the sciatica pain became too much; I could not maintain the 8:12 pace I needed to qualify at 3:35. I had to stop and stretch and walk. This continued for those last 6 miles: Stop, walk, stretch, start running again. Stop, walk, stretch, start running again. But I wasn't going to drop out, that's for sure. I finished that day with a time of 3:50, not what I had been hoping for, but not bad for a guy who spent Wednesday night in the hospital for chest pain.

Although I might have felt foolish, I did the right thing: checking into the ER when I experienced chest pain. I had someone drive me, but if the pain is especially severe or you are alone, you should call 911! The signs and symptoms of heart attack and stroke.



Just posted my session materials from Microsoft ASP.NET Connections, part of DevConnections Las Vegas, Nov 10-13, 2008.

The updated materials, which can be found here, include both slides and samples for the following talks from the show:

Data Control Tips and Tricks
We’ve all seen the basic drag-and-drop demos of the Data Controls, but you don’t build solutions using demo code. In this session, we’ll dig deeper into the Data Controls and the Data Source Controls. During this session, you’ll learn such things as how to add drop-down and check-box fields, how to set a default field value for inserts, how to update database fields that don’t appear in a FormView or DetailsView, how to create GridView controls that can be bound to different datasets on the fly, how to create cascading drop-down controls inside of a Form View, and how to deal with Identity columns during inserts. We’ll also take a look at using the new ListView and DataPager controls added to ASP.NET 3.5.

Programming SQL Server Reporting Services
In this session, you’ll learn how to programmatically manipulate SQL Server 2005 and SQL Server 2008 Reporting Services (SSRS) and integrate SSRS into your ASP.NET applications by employing URL Access, Report Viewer controls, and the Reporting Services Web Services. A major issue with SSRS is that you can normally only display reports using Internet Explorer, but in this session you’ll discover how to integrate SSRS into your applications using any modern browser, including Firefox, Netscape, and Safari. Finally, you’ll learn how to extend reporting services by calling custom .NET assemblies from your SSRS reports.

Ajaxifying Existing Apps with the ASP.NET AJAX Extensions
One problem with ASP.NET pages is that they normally work in an "all or nothing" page postback mode. That is, when you need something on a page to happen, you must trigger a postback. This causes your code to run on the server, with the net effect being that the page shown in the browser is completely replaced with a new page, even if only a small portion of the page actually changes. In this session, Paul will introduce you to the Microsoft ASP.NET AJAX Extensions, which allow you to trigger asynchronous partial page-postbacks, reducing the amount of data sent back and forth between the browser and the server, and improving the overall user experience. You will learn how to use the UpdatePanel and several other ASP.NET AJAX controls to AJAX-ify your existing ASP.NET applications. You’ll also learn about using the controls and extenders from the Microsoft ASP.NET AJAX Control Toolkit to ease your move into the AJAX world.


Note: the original post had several errors in dates. All the errors, I believe, have been corrected. Howerver, the URL of the post still uses the original, incorrect date but I don't want to change that URL. Sorry for the confusion.

I am putting out a call for abstracts to present at the Spring 2009 Microsoft ASP.NET Connections conference in Orlando, March 23-26th 2009. The due date for submissions is September 6, 2008.
For submitting sessions, please use this URL:

Please keep the abstracts under 200 words each and in one paragraph. No bulleted items and line breaks, and please use a spell-checker.

Please submit at least 3 abstracts, but it would help your chances of being selected if you submitted 5 or more abstracts. Also, you are encouraged to suggest all-day pre or post conference workshops as well.

We need to finalize the conference content and the tracks layout by the coming November conference in Las Vegas, so we need your abstracts by September 6th. No exceptions on late submissions!

New for Spring 2009: we will have a separate, dedicated Silverlight track of 9 talks in addition to the 27 ASP.NET talks, so please include those Silverlight talk proposals. Anything on ASP.NET or Silverlight is fair game. Topics of interest include (but are not limited to):
* ASP.NET Webforms
* Silverlight 2.0
* SP1 features, including Entity Framework/LINQ to Entities, Dynamic Data, Routing support, ADO.NET Data Services

Please realize that while we want a lot of the new and the cool, it's also okay to propose sessions on the more mundane "real world" stuff as it pertains to ASP.NET or Silverlight.

Note: You will not be able to speak at a DevConnections show if you are also presenting at a competitor's show, in the same state, within 30 days of the DevConnections show. To be more specific, if you wish to speak at Microsoft ASP.NET Connections or any other DevConnections show this Spring in Orlando, you are precluded from speaking at any competing conferences in the state of Florida between February 26, 2009 and April 23, 2009. Note: any events run by Microsoft (e.g., PDC, Tech*Ed) or user groups are NOT considered competitive.

What you will get if selected:
* $500 per regular conference talk.
* Compensation for full-day workshops ranges from $500 for 1-20 attendees to $2500 for 200+ attendees.
* Coach airfare and hotel stay paid by the conference.
* Free admission to all of the co-located conferences
* Speaker party
* The adoration of attendees
* etc.

Good luck and thank you,
Paul Litwin
Microsoft ASP.NET Conference Chair


I just posted my slides and samples for a new talk I presented at the Fort Wayne, Indiana .NET Users Group.

I thought the talk went well and hope you enjoy the slides and samples which you can find along with materials for several other talks at my downloads page.



FWIW, I found it helpful to create this table to compare the query syntax of C# and VB and how it translates into SQL.

orderbyOrder ByORDER BY
groupGroup ByGROUP BY
Count(), Sum(),…AggregateCOUNT, SUM,… with no group
SkipWhile()Skip Whilen/a
TakeWhile()Take Whilen/a

Have you seen the BBC article on shared keyboards being dirtier than a toilet? A consumer group named "Which?" swabbed a bunch of keyboards in their own offices and cultured the swabs.

"Out of 33 keyboards swabbed, four were regarded as a potential health hazard and one harboured five times more germs than one of the office's toilet seats."

On of the things the article recommend against was eating at the keyboard (which, by the way, I am doing as I write this post -- help me stop...). I am totally guilty of this at both work and home.

The fix: "She said dust and food crumbs should be shaken out of keyboards and they should be wiped with a soft, lightly dampened, lint-free cloth. They should also be disinfected with alcohol wipes."


(Comments Off)
Filed under:

Race Day
Sunday, May 4th came for me at 5:30 AM. I awoke before the two alarms I had set went off, which was good because I managed to get up, dress, eat, and leave without waking the kids. And with only waking Suzanne briefly before she dozed back off to sleep. The four of us were sharing a hotel room at the Shilo Inn in Springfield, 3 miles north of the marathon start. I poured my Nature’s Path Optimum Slim cereal into the hotel bowl along with some milk and closed the bathroom door as I ate my race day breakfast (plus a banana) and finished getting dressed. Shoes -- check. Shirt, shorts, socks, hat -- check. Water bottle and belt -- check. Garmin GPS watch and heart rate strap -- check. Glide slathered on my chaff points (where my shorts hit the inside of my thighs) -- check.  Race number, timing chip, and bag to check at the start -- check. Okay, say goodbye to Suzanne and time to go.

Getting There
Suzanne and the kids weren’t planning on attending the start. So my plan was to go down to the lobby and try to tag along with other people going to the race. Or, if that didn’t work, call a cab. Fortunately, just before I was to call for a cab, three women wearing race numbers and marathon gear walked through the lobby. I asked them if they were headed to the marathon and if they had room for me and they said sure though they were running in the half. Even better, they were planning on stopping off at Starbucks on the way! So to thank them I paid for their drinks—I got a tall non-fat latte—and we drove off to Autzen stadium where the marathon was set to finish. From there, we caught a bus to the start.

While walking to the starting line, I noticed a bunch of runners heading into a building. I instantly followed into the law school building. Racing tip: It’s always preferable to use the bathrooms inside of a building instead of the porta-potties. Real bathrooms usually have less of a wait (in fact, there was no line), are warmer, and frankly a lot nicer than the porta-potties. Score!

After warming up for about a ¼ mile, I went back into the law school building and stretched, followed by one final potty break. I then proceeded to the bag dropoff just past the starting line and then got to the starting line (or as close as I could to it) with about 15 minutes until the scheduled start.

Thankfully, I ran into Peter (my brother) and his friend Gerry at the start. The start was pretty crowded; it was a single combined start for both the marathon and half marathon on a somewhat narrow street which made it worse. I was planning on trying to run with Krista from ChuckIt but could not locate her in the crowd so I lined up with Peter and Gerry and figured I’d be running most of the race alone. 10 minutes prior to the hour, I downed a Gu per my fuel and hydration plan. Eleven minutes later, the gun went off and the race had begun.

Compared to other shorter running events, the marathon is less of a race and more like a contest or battle. I say this because in most other races, the results are much more predictable. Take a 5K, for example. You pretty much know at the start that you will finish and even if you go out too fast (like I did at this year's resolution run in Seattle), you can always slow down and jog it in. Same goes for the 10K and even a half marathon. Not so for the marathon. Take my last two marathons, for example. In 2003, I was cruising at around 7:40 per mile for the first 17 or so miles and then quickly fell apart and hit the wall around mile 22. So in 2004, I decide to go out slower and I still managed to hit the wall around mile 22 or so.

Let’s face it. The marathon is a formidable opponent. Things may go as planned, or they just as easily (perhaps more easily) may not. You may do everything right and you still hit the wall or bonk. And how do you decide pace? Based on your half marathon or 10K time? Well that may work, but then again, it may not (it was a poor predictor for me in 2003 and 2004). The point I am trying to make is that as much as you can strategize, it isn’t a race. It’s a contest between you and the marathon. A battle of sorts to see if you have what it takes. And it had been 4 years since my last try.

No matter how many articles and blog posts I had read, no matter how many discussions with runner friends I had had, I still had no idea what was going to happen that day. A lot of effort had gone into getting me to the starting line on race day but that saying about “the best laid plans” was doubly true for a marathon. I hoped for a good race because I frankly didn’t know how (and I still don’t know) how many more marathons I had in me.

The Plan
The race began at 7:00 AM next to Hayward field. My basic plan was this: run the first 13 miles at about 8:10 pace and the last 13 miles at 7:50 pace. This would give me a finishing time of 3:30. My Boston Marathon qualifying cutoff time was 3:35:59 so that gave me 6 minutes of slack time above my goal time. Most importantly, I was not to start out too fast. A little slower than 8:10 was okay but not faster; after all there was slack built into the plan and was determined not to bonk.

The Start
The gun went off at 7:01 AM. I ran most of the first mile with Peter and Gerry. I tried to relax as I chatted with Peter and Gerry and joked around. Mile 1 included the most significant hill in the race which went on for a couple of blocks. Nothing too bad for someone who trains in Seattle. Overall, the first mile went well at 8:31. The second mile included a significant down hill so the 7:53 time wasn’t anything to be concerned about. Around this time I came up upon two young women (in their early twenties) dressed identically with matching pink tops and shorts, white socks, the same shoes, and pink ribbons in their hair. I asked them if they were twins; they were not. I hung behind them for a little while but eventually let them go ahead as well as many other runners. I was determined to stick to my race pla, not theirs. Mile 3 clocked at 8:00, followed by 8:06, 8:01, and 7:59 for mile 6. Okay, I was running closer to 8:00 pace for those first few miles but that was no cause for concern. Just stay relaxed and it would work out.

For those interested, here is a map of the course.

For the first 7 miles we were running south of the University of Oregon (U of O) and then looping back through the U of O, through downtown, and then finally across the Willamette river. During mile 6 at around 50 minutes into the race I downed another Gu per my plan and finished the water in my bottle. Suzanne and the kids were supposed to be at or near the mile 7 water stop but I didn’t see them. The idea was that they would swap out my water bottle at miles 7 and 17. This would save me from having to stop at the water stops to drink and increase the quantity of water I could consume. So far the plan was working nicely since I was able to down the first bottle of water without having to stop once. Now where were they?

The Potty Stop
About this time I realized that I had to go to the bathroom again. Never mind the fact that I had used the bathroom at least 3 times prior to the start. There’s just something about gravity. Enough said. Anyway, at about 7.5 miles into the race I saw a unoccupied porta-potty on the right side of the road and made the executive decision to go now and be done with it rather than put it off until it after it became a crisis. Approximately two minutes later I was back running. Unfortunately, like the coach who cursed the fact that he or she used up their timeouts too early in the game, I would later question if the stop was necessary and whether I could have/should have did my business faster.

The other issue with the potty break was this: the Garmin GPS watch has this great feature called AutoStop which works like a charm during workouts to stop the clock when it has determined you have stopped. Unfortunately, the race organizers won’t take into consideration this fact when calculating your race time at the finish. In other words, I forgot to turn this wonderful feature off before race start so the watch stopped when I hunkered down in the port-potty which meant not only did I not know the actual clock time from the start but I also didn’t know how long I had stopped. I guessed 2 minutes.

So I jumped back on the course and noticed Gerry just in front of me. I caught up to Gerry and explained that I had made a potty stop. Funny thing is that we had just been talking about potty stops the night before when we were checking out the course. That’s the kind of thing that runners talk about in the nervous hours leading up to the start of a race. Since Gerry and I started together I was able to verify that my break took about 2 minutes. But at this point I also realized that my Garmin watch, as currently configured, didn’t report the elapsed seconds when the time went over 1 hour. Damn. If I had configured the watch correctly, this wouldn’t be a problem. The net effect of all this was that, for the remainder of the race, I would not know precisely the elapsed time of my effort. The best I could do was to take my time, sans seconds and add about 2 minutes to it. At this point, however, I was not terribly concerned because according to my race plan I still had 3 minutes of slack between my estimated finish time and the Boston cutoff.

Having someone to chat with as you run is a nice benefit for so many reasons, not the least of which it distracts you from thinking too much about your pace and the race. So I appreciated having Gerry to run with, even if it was the result of me taking a two minute break. The one danger, of course, with running with someone else is the temptation to adopt their race plan instead of yours. But for me, this was not the case, since I ran 8:04 (plus 2 minutes or so for the break) for mile 7, and 8:08 for mile 8. Just before mile 9, Suzanne, Anna, and Matthew appeared which I very much appreciated. Certainly, hearing your daughter yell “Go daddy, go!” is enough to lift your spirits. Anna and Matthew at this point were both trying to give me their water bottles but alas I only needed one at this time and grabbed Anna’s bottle first. (Later, after the race, I learned that Matthew was actually supposed to give me his bottle with Anna waiting until later in the race. Apparently, she got excited and offered me hers before Matthew had a chance and this caused some hurt feelings that Suzanne had to soothe for a number of minutes after I had disappeared.)


Shortly after seeing the family we crossed the river on the Autzen footbridge, Gerry and I said “goodbye” as he dropped back slightly (and ran “his” race). I turned on my ipod nano and settled back into focusing (or should I say obsessing) on the race. My mile 9 split was 8:05. After the bridge we took a right, heading east on a bike trail. Mile 10 was a bit faster at 7:55, followed by an 8:05 mile 11 as we headed onto the street. Despite slathering the glide on fairly thickly before the race, my legs were starting to chaff. So I stopped briefly to apply some Aqua Four before continuing. I also threw back another Gu at this point.

Second Half
I clocked mile 12 at 8:14 and mile 13 at 8:03. At this point the course looped back and headed west and it was time, according to the race plan, to drop down to 7:50 pace. In reality, I was pretty close turning in splits of 7:55, 7:54, and another 7:54 for the next 3 miles. At mile 14 we crossed paths with the slower runners running the other way (for them it was mile 11). It took me a second to realize they were actually behind me and not in front of me before I continued on the trail. At mile 16, we passed the Autzen footbridge, which by the way, was only a few hundred yards south of the finish line at Autzen stadium. But I had another 10 miles to cover before I would get there.

The trail continued east along the bike path and the Willamette river. I was looking forward to seeing the family at Mc Menamins at mile 17. Assuming they made it there in time. While Suzanne is not the most geographically inclined person, I was counting on the Tom-Tom One GPS navigation system I bought for her for Christmas and my instructions to get her there. My only concern was that roadblocks to prevent motorists from running over runners might thwart her efforts. Alas, she and the kids were there right in front of Mc Menamins with my next water bottle, which Matthew proudly handed to me. After exchanging my empty for the full bottle, I stopped and hugged them all. A half second later, Suzanne shooed me away, reminding me that it was time to get running again. I posted an 8:03 for mile 17. Between mile 17 and 18 I choked down another Gu and about this time, I started to doubt whether I could continue at a 7:50ish pace. I ran a little slower than that but still managed to maintain a steady effort nonetheless and clocked 7:56, 8:04, and 8:06 for miles 18, 19, and 20, respectively. Just after mile 20, the course double-backed on itself before heading across the river on the Owosso Bridge. It was at this point that I saw Krista and managed to quickly blurt out “Krista” as she ran by. She silently nodded as she continued in the opposite direction probably about 2 minutes ahead of me. She looked in pain. About this time I started to worry if it was my turn to feel pain too and, dare I say, possibly hit the wall?

Shortly after that I crossed the river and much to my surprise saw Suzanne and the kids at the other end of the bridge at an unplanned stop. It was a great surprise; I yelled hi and plodded on as I heard a chorus of “Go Daddy, go”. My spirits were definitely lifted as I raised my arms over my head and looked back. Mile 21 was clocked in at 8:03. As I headed east on the bike trail along the river I stopped thinking about whether I was going to bonk (I decided I was probably not going to at this point) and started to do the math of where I was in relationship to my Boston cutoff. Only last week I had turned 50 and gained another precious 5 minutes. Surely, I could run a 3:35 marathon. Surely I could. My quick math based on my estimate of a 2 minute potty down time assured me that if I could average 8:20 or for the remaining miles I would still qualify. No problem, unless…

Paul at Mile 21

Only 5 Miles to Go
Only 5 miles to go but, of course, these were the miles that separated the runner from the whatever you call a non-runner. This is where it mattered. Everything up to this point was setting the stage for the final 5 miles. I was definitely feeling fatigued at this point and redoubled my efforts to maintain an 8:00 minute-ish pace for the remaining miles. Mile 22 clocked in at 8:00 but at mile 23 I slowed down to 8:16 and was starting to drag. At this point I was supposed to down another disgusting Gu but I have to say that between all the water I drank and the Gu’s I had eaten I was starting to feel full and visualized my stomach filled with a mixture of water and Gu sloshing around at around the 95% full line. Still I feared the bonk more than getting sick and I managed to down another Gu somewhere between mile 23 and 24. In grabbing the Gu, I managed to drop my ipod and a fellow runner picked it up and handed it to me. I thanked him, stopping briefly to reattach it to myself and continued.

For the most part, I was mostly passing other runners who were fading at this point. But occasionally, someone would pass me and I focused in on a woman who recently passed me trying to muster enough strength to tag along behind her. I managed to hang on for a bit but she obviously was running too fast for me so I let her go and continued to plod along at my pace, which for mile 24 had now slowed down to 8:33. My average heart rate at this point was averaging around 164, which meant that I was definitely working hard to maintain the pace. Only 3 miles to go.

Could I hang on at this pace or would I slow to a crawl. Damn another hill ahead. Hey I thought this course was supposed to be flat. Now, note that I live and train in Seattle, which is full of hills. While I can’t say I love hills or even like them, running in Seattle gets you pretty used to hills -- lots of them and lots of big hills at that. Hell, it’s the rare workout that avoids any hill in Seattle and here I was muttering to myself about a hill that probably ascended a whole 10 feet, which was a sign I was hurting. Just about this time, the sun began to appear as well. Till that time, it was cloudy and cool -- the perfect marathon weather. But like a vampire, at this point, I was fearing the daylight because the only thing worse than hanging on for dear life during he last 2 miles of a marathon, was hanging on for dear life during those last two miles while baking in the hot sun.

Slowing Down
My pace continued to slow; I ran mile 25 in 9:07, which considering how terrible I was feeling, was amazing. However, I was thinking that 9:07 pace might just be too slow for me to make the Boston cutoff. Some quick calculations -- and believe me at this point my brain was not the best at calculating estimates -- and I came to the conclusion that it was going to be damn close but also that I didn’t care that much anymore. I was going to finish in as fast a time as I could but I wasn’t going to dwell on the Boston cutoff. In other words, I needed to concentrate on running. That’s all that really mattered at this point and, believe me, it was hard.

Around this point, I actually grabbed a cup of Gleukos, the official race water stop sports drink. I reasoned that it was too late for another Gu but maybe a shot of sports drink might help. I’m sure it didn’t do anything for me at this late stage but I drank it anyway. A half a mile or so after milepost 25, we crossed the river one last time and headed towards the finish line in the Autzen Stadium parking lot. As I approached the bridge, I knew it was a little less than a mile to go and I dug down deep inside of me to maintain my slightly slowed pace and not settle down to a 10 or 12 minute crawl or worse stop like I so very much wanted to. As had happened through the race, total strangers continued to cheer for me and this definitely helped. Thank you, anyone and everyone who cheered for me!

"Less than a mile to go" I told myself. "Time to give it all I had. Time to speed it up". But at the same time another part of me was saying "You still have almost a mile to go". So the glass was both half full and half empty at the same time. Speaking of empty, I was definitely running on fumes but the end was getting close and I managed to run mile 26 in 9:08 pace. Again, this was slower than I wanted to run but considering how bad my legs felt it was almost miraculous that I was able to maintain that very respectable pace.

The Finish
Of course, as any long distance runner worth his or her salt will tell you, the marathon is not 26 miles long, it's 26.2 miles and I still had another 385 yards to go at this point, to be exact. At this point, I managed to speed up, clocking the last .2 miles in 8:12 pace. I ran by Suzanne and the kids (and lots of other folks) cheering for me during the final approach to the finish line. I surged even faster the last 50 yards or so and it was over. The official clock time said 3:36 something. But that was the unadjusted time; there was still a chance I came in under 3:36. As I stopped to let the race volunteer cut off my timing chip I have to say I was happy. I wasn't sure if I had made the Boston cutoff, but I also didn't really care that much. After all, it was over, and hadn't bonked.

Paul finishing

After chowing down on some post race snacks, chatting with Krista (3:34, a person record (or PR)) and Gerry (3:37, a PR), and reuniting with the family, we watched for Peter to finish (he had a tough time with cramps; finishing in 4:07). At this point, I still didn't know my official time, so with trepidation I hobbled over to the official table and pointed to the number that was affixed to my shirt: #1011. The official plugged into his laptop and out popped a strip of paper from the printer that was about the size of a grocery store receipt. I had run 3:36:14. Wow. I missed qualifying for Boston by 15 seconds.

But despite failing to qualify for Boston, I did it. Here I was 50 years old and I managed to run a marathon, this time, without hitting the wall, and record a personal best (if one ignores the marathons I ran in high school). Not bad, if I don't say so myself.

Gerry, Peter, Paul, Anna, and Matthew

(See pre-race post for description of events leading up to race day.)


My marathon career started when I was 14 while a  freshman at Archbishop Molloy High School in NYC. I had run cross-country and  indoor track and there was a bit of gap before outdoor track was to start. My  brother Bill and some of his friends decided they were going to run in the  Earth Day Marathon that April in 1973. Bill, 2 years older than me, was  always up for a challenge and I said what the heck. Up to that point, I think  the longest I had ever run was maybe 9 miles but heck 26 didn't sound too  bad. I finished the race that windy, snowy April day in just under 4 hours,  swearing I would never run another marathon again.

I ran Earth Day 3 more  times in high school, running 3:24 as a sophmore, setting a PR of 3:09 in  1975 when I was in my junior, and DNF'ing because of a heel injury in my  senior year.

Just googled "Earth Day Marathon" and found this reference to the first Earth Day race I ran in 1973 in a June 26, 2007 article in Long Island Newsday by John Hanc (http://www.hamptonsmarathon.com/Stories/Documents/Newsday%20Article%206.26.07.doc):

... staged 34 years ago, in March, 1973, at the old Roosevelt Raceway in Westbury. It was called the Earth Day Marathon.

The Earth Day race was a spin-off of a race staged in prior years in Central Park (and before that in the Bronx) by the New York Road Runners. Held in the very early days of what would become known as the 1970s running boom, the race evinced the spirit of that time, and not only in its celebration of the then-nascent environmental movement.
The Earth Day Marathon, a loop course around the raceway (note: the author is wrong with this bit of history; the race started and finished at the raceway but then moved to 3 loops around Eisenhower Park), was tough and so were the competitors, as suggested by the words of founding race director Paul Fetscher: "Whatever kind of day it is, the weather will be a challenge," he told reporters, "and veteran die-hard runners will not shrink away from it, but fight it."
He was right. In conditions that the winner, Larry Frederick, would describe as "horrid," biting March winds reached 30 miles per hour, while temperatures sank to the freezing mark. Yet 400 runners battled through it, displaying determination if not great fashion sense.

… The marathon world, however, seems to be getting more and more crowded. When the Earth Day Marathon began, it was probably one of only 10 26.2-mile road races in the entire country...

Fast forward 28 years to 2003. After many years of off again, on again  running, I finally got serious about doing another marathon, having joined a  local running group (ChuckIt) run by Chuck Barlett in 2002. Unfortunately, my  first adult effort at Capitol City in Olympia blew up on me. I was cruising  in 3:22 pace through mile 17 when it all started to unravel; suffice it to  say I hit the wall (I prefer that metaphor to the more trendy "bonk") hard  but still managed to walk away (literally for several miles) with a 3:37. In 2004, I ran a bit more conservatively but still managed a visit with the wall and came in somewhere between 3:50 and 4:00. Two bad experiences in a row. Damn.

Right after that I started having severe pain in the ball of my left foot  right below the pinky toe. This continued to bother me for some time so I  laid off of running for a long while after getting an MRI, various other tests, therapies, orthotics, and treatment from various podiatrists, doctors, physical therapists, and massage therapists. I  continued to lay off of running, eventually taking up biking. At one point  late in 2005 I started running again, but was quickly sidelined with  a similar injury in my right foot after a couple of months. At this point, I  decided to learn to swim and took up training for sprint triathlons in early 2006, running two in the summer of 2006 and three in the summer of 2007. (I can't say  enough good things about Mary Meyer Life Fitness in teaching me to swim and  getting me in great triathlon shape.)

So after a successful triathlon summer and remaining injury free, I decided  to set my signts on the Seattle Half Marathon. I started training again with  ChuckIt. Training went  pretty well and I ended up running a respectable 1:37 on the grueling  Seattle Half-Marathon course. The weather was great in 2007 but I  have to say that the course is a killer. There's just way too many hills but  I ran well, managing to hold a pretty steady 7:30 pace pretty much  the whole race.

At that point, Peter (my younger brother) said he was doing the Eugene  marathon in May. I felt good coming off of Seattle, so I decided to start  training for Eugene. 

Training over the next four months went well. I did my second 20 miler 5 weeks prior to the race and was planning to do another one 3 weeks out but at 4 weeks before the race my left foot started hurting again after a 13 miler. Same pain at same location as before. My physiscal therapist, Bruk at Real Rehab  (highly recommended) fashioned a quick orthotic to try and take some pressure  off the foot and I took a full week off, substituting hard workouts on the  eliptical trainer for running. Meanwhile, my confidence took a dive; still I  managed to stay smart and combined running with eliptical work so that I  didn't lose too much fitness for the race. After all, this happened during  the last month which was always the month of the taper.

I took the Friday before the race off and Suzanne, Anna, Matthew, and I drove  down to Eugene--technically I did all the driving but you get the point.  Saturday, we went to the expo and I got my number, went to Eugene's version  of the farmer's market and generally had a relaxing day. We hooked up with  Peter (my brother), Gerry (his friend), and Cassandra (Gerry's friend) for  dinner at the Oregon Electric Station. I had vegetable lasagna and lots of  bread but no beer to cap off a sucessful week of carbo loading.

After dinner, Gerry, Cassandra, Peter, and I visited Hayward field (the exulted center of the running universe where Steve Prefontaine, et al trained and raced) at the U of O. When we were done checking out the course and discussing the finer points of running and having to go potty during the race they dropped me off at my hotel.

Before going to sleep, I mapped out 3 points on the course (at miles 7, 17,  and the finish) with approximate times for Suzanne and the kids to meet me. I  went to bed and after a half hour or so of tossing and turning managed to get  a good 6 hours of sleep. 

Race day events captured in separate post.


I finished my sixth marathon yesterday, the Eugene Marathon, and missed qualifying for the next Boston marathon by a mere 15 seconds. My time: 3:36:14. The qualifying cutoff time for my age/gender group: 3:35:59. Bummer.

Overall, a great race. Perfect weather. Cool, not cold. No precipitation. A little wind in places but nothing too bad. One thing of note: while it was not a "hilly" course, there were enough rolling hills in the last seven or eight miles to make it tough. I would not call it a "flat" course.

My pace was pretty constant around 8:00 most of the race until the last 4 miles where I slowed down to about 9:00 a mile. The average pace was 8:16. The difference was that I took a 2 minute potty break around mile 7. In retrospect that made the difference.

Oh well.

Stay tuned for more complete posts on the race and leading up to the race to come...

More Posts Next page »