Welcome to the .NET Developers Blog
This is an aggregated blog of non-Microsoft .NET developers
I don't have a problem with Microsoft blogs and love reading them, but I feel that there is also need for a non-Microsoft blog site to see what the .NET community is buzzing about.
Another reason why I created this aggregator site is because I don't want blogs to be restricted to any specific domain. So, regardless of where you are hosting your blog, feel free to add your blog to this list.
The idea is to have a centralized website that aggregates all those .NET, C#, VB.NET, ASP.NET, Whidbey, Longhorn, WinFX blogs into one. Email me for any suggestions and feedback.
- Minh T. Nguyen
|
Visual Studio .NET Tips and Tricks
|
|
|
RadioButton with Image instead of text
Michael Freidgeim - 5/16/2008 10:27 PM PST
|
|
I want to have RadioButton with Image instead of text, that clicking on image the check-box will be selected
In the thread it is shown Radio button (without any text) and image on it's side.(but not inside radio-button)
<asp:RadioButton ID="RadioButton2" runat="server" GroupName="A1"
/><asp:image runat="server" id="Image2" /><br />

|
Note on Customizing Content Query Web Part
Colt Kwong - 5/16/2008 8:36 PM PST
|
|
Content Query Web Part (CQWP) is a powerful feature in SharePoint, where users can create custom view of data that is queried from various sources, lists, libraries, and present all in one web part. One of my tasks yesterday is to create a content query web part, and query the contents from two sub-sites. Specifically, I have 2 calendars in 2 sub-sites and I have to query all events and combine into a master calendar in the top site (Of course I can make use of the great filtering, sorting and grouping features in CQWP).
After adding the CQWP, my next step is to customize the layout because the default one is too plain. I google and find all these useful articles:
One of the techniques in customizing CQWP layout is to make use of internal field name and modify CommonViewFields in the exported .webpart file. I follow all steps, modify the .webpart and xsl files as I wish, but I still can't display the content in my CQWP (I can see some other default fields like Title though).
Later, I find the bug is at the key element - CommonViewFields - It does not allow SPACE in the value string. For example:
Wrong: <property name="CommonViewFields" type="string">Title, Text; Description, Note;</property>
Correct: <property name="CommonViewFields" type="string">Title,Text;Description,Note</property>
My note is that we developers cannot add SPACE when typing the value, or even anywhere in the tag. And, we should not add a semi-colon at the end of the string.
P.S. After customizing the layout and fields on the CQWP, we will most probably need to format the field, such as changing the time format of a DateTime field, number of decimal points etc, and here is a very useful reference article: Customizing the Content Query Web Part XSL
|
Welcome to Atlanta
Chris Hammond - 5/16/2008 8:33 PM PST
|
|
Short post, it's late, too much work to do, and I need to get to sleep soon.
Nick and I made it to Atlanta, took 11.5-12 hours, too long, stupid traffic!
|
Oddities in F#/C# interaction
Oliver Sturm - 5/16/2008 4:36 PM PST
|
|
I have been working on getting a sample for using XPO from F#. My first sample was easily created back in January this year:
#light
open DevExpress.Xpo
type Person = class
inherit XPObject as base
public new(session : Session) = { inherit XPObject(session);
name = string.Empty
}
val mutable private [...]
|
7 Simple Questions for Service Selection
Udi Dahan - The Software Simplist - 5/16/2008 3:57 PM PST
|
|
“So, which services do I need?”
This innocuous question comes up a lot. Usually I get this question after a short problem domain description. One of these came up on the nServiceBus discussion groups. Ayende took it and ran with it turning it into a nice blog post, An exercise in designing SOA systems. I’ve been [...]
|
Silverlight Consuming REST Services
John Papa - 5/16/2008 2:34 PM PST
|
|
I just finished writing the first draft of a sample I am including in my upcoming book tentatively titled Data Access with Silverlight 2 by O'Reilly. Without giving too much away yet since the final details of the contract are not set in stone, the application example consumes a REST service, manipulates it through LINQ to XML, and binds it to various controls and some composite controls. The interaction with the REST (REpresentational State Transfer) services is pretty slick and quite easy when using Silverlight and LINQ to XML. Of course there are always issues to deal with, but overall it works very nicely. Why use REST? Well, REST services are becoming more abundant on the web. They do not expose a contract like WCF so when you deal with this type of data you can parse the XML using LINQ to XML or some other XML tools (though LINQ TO XML is so smooth why bother with anything else in this case). So this raw XML comes barreling into your Silverlight application asynchronously, LINQ to XML makes it fall in line, and its bound to where it needs to go via XAML. Sending data back via REST is also very cool. I've got that working now too. I have to be careful not to go overboard fine tuning the examples though or the book will never get written :) Interacting with REST from Silverlight applications is just one piece of the data access puzzle, but its pretty cool. Cross posted from johnpapa.net
|
Automatic Properties and Object Initializers in .Net 3.5
DevPinoy.Org - 5/16/2008 11:37 AM PST
|
|
With the release of .Net 3.5 alongside with Visual Studio 2008 , new
enhancements was again introduced . Some maybe well pronounced such as
the inclusion of WCF, WPF , LINQ in .Net 3.0 and some just came
unnoticed. If you have been accustomed of using a particular method or
technique in implementing a certain code in .Net 2.0 , because of
backward compatibility , you may not even notice that there are new
ways of implementing it in .Net 3.5.
Here are two new concepts in .Net 3.5 that a developer may not notice ( at least in my opinion ) : Automatic Properties and Object Initializers
. To illustrate these two , I am going to present the pre-.Net 3.5 way
(.Net 2.0) and the .Net 3.5 way in creating a simple class with simple
properties. Read More on this Article
|
Testing Environments
Adron Hall - 5/16/2008 9:37 AM PST
|
The new project is going to require multiple OS, Browser, and Office versions support. This is just a list of my ideal platforms to test for. In other words, "What I find acceptable to build modern platform tools to". OS - OS-X, Linux, Windows Vista, and Windows XP (In order of growing priority, with the later two possibly swapping spaces in the next year or two) Browsers - FireFox, Opera, Safari, IE (I'm not even touching the absurdity of IE6 though) Office 2003, Office 2007. ...(read more)
|
Follow me on Twitter
Wallace B. McClure - 5/16/2008 8:40 AM PST
|
|
As if we don't have enough things that waste our time, follow my comments about life and things upto 140 characters on twitter. My twitter url is http://twitter.com/wbm and enjoy.
PS. If you follow me, I'll follow you, assuming you aren't a twitter spammer.
|
Come to GANG next week!
Patrick Steele - 5/16/2008 8:26 AM PST
|
|
Next week, our local user group (GANG) is having Jason Beres -- INETA Speaker and Director of Product Management for Infragistics -- come and talk about building applications with Silverlight 2.0. I'm really looking forward to this one since I haven't had time to dive into Silverlight myself. Come on down to Microsoft's Southfield, Michigan offices on Wednesday, May 21st at 6:30pm. PS: Sorry about the GANG website -- it's a little plain right now. We're in the middle of re-working the website and should have the new one up before next weeks meeting.
|
Compleanni... Virtuali
Andrea Saltarello - 5/16/2008 7:49 AM PST
|
|
Alessandro ricorda che ieri VMWare ha compiuto il decimo anno di età, e non posso che accodarmi agli auguri: considerando i miei ultimi 10 anni di "carriera professionale", "architettura" e "virtualizzazione" sono state le "folgorazioni" che più mi hanno segnato. So che ciò che sto per scrivere mi collocherà una volta di più nella casellina degli "uber geek", ma i feticci professionali cui sono più legato sono probabilmente proprio le fatture d'acquisto di VMWare 1.0 (datata 7 febbraio 2000) e Rational Rose (datata 18 maggio 2000). Ricordo quanto tormentata fu la scelta di effettuare investimenti così onerosi (Rose lo pagai 3.830.000 lire +IVA, VMWare fortunatamente un bel po' meno e le versioni successive le ebbi gratis in qualità di MCT) per un freelance, ma a tutt'oggi sono soddisfatto della mia scelta e mi diverto un sacco a gestire il cluster ESX che ho installato in bottega, tampinando proprio l'amico Ale quando ho un problema che nessuno può risolvere (e non riesco a trovare l'A-team <g>). E poi si sa: l'hypervisor fa parte delle invenzioni più determinanti nella Storia dell'Uomo, al pari di: ruota, fuoco e... Sedile reclinabile <g>
|
May Meet And Code Dinner
Justin Etheredge - 5/15/2008 5:03 PM PST
|
|
We are going to hold our third "Meet and Code" dinner ("Geek Dinner" if you will) on Thursday May 29th. SnagAJob.com is generously providing us with a meeting space. They are located at 4880 Cox Road, Suite 200 Glen Allen, VA 23060, which is in Innsbrook on Cox road just after you cross over Nuckols road. The "Meet and Code" dinners are an open forum for developers to come and discuss anything any everything they want. You can give a mini-presentation if you want, or you could bring a problem that you have from work for other developers to take a look at. There will also be some food provided, some come hungry! We have applied for an account on Microsoft's Click To Attend site, so we will add a signup link soon!

|
Anatomy of an ASP.NET site for amusement park fanboys
Jeff Putz - 5/15/2008 11:02 AM PST
|
|
This is a post I've meant to write for a very long time. Since 1998, my part-time job of sorts has been to maintain a number of community sites. One of those, started ten years ago, was Guide to The Point. "The Point" in this case is Cedar Point, an amusement park an hour west of Cleveland and about two hours from Detroit. It's home to more roller coasters than any other place on earth, and for people how grow up in the region, it's a summer ritual. In 2004, I joined forced with a friend doing another site, and we called it PointBuzz, inspired in name by my woefully neglected general coaster enthusiast site CoasterBuzz. These sites have become a business to a certain degree, since the ad revenue isn't exactly small coin. And if you can make money doing something you enjoy, why not?
Late last year we rebuilt the site. The old version was still running on v1.1 of .NET, and frankly a lot of the code was vintage 2001 stuff built on the beta of .NET. Our goals for rebuilding it were to concentrate on what we were good at: news, forums and photos. Our previous attempt ended up being a huge array of content that, frankly, was just as easily found on the official Cedar Point site and we didn't really have time to maintain it. A secondary goal was to boost performance (the site peaks around a million page views a month, sometimes as much as 100k a day) and get the code base into something maintainable. Let's face it, in 2001 I barely understood what OOP was, and even in 2004, prior to writing my book and having experience in a giant company, I had a lot to learn. The app as a whole was rather fragile when it came time to change something. Naturally the first priority for me was rewriting POP Forums. The benefit of experience is that I know how many things I did poorly in the previous version from late 2003. I've tried to eliminate much of that legacy, but there are still things I find in my code, often inconsequential, that should be different, like checking for a string to be empty or null instead of String.IsNullOrEmpty(). I spent literally years trying to make it work with Membership and Profile in a way that I liked, and generally it did, but I abandoned that cause. You had to give stuff up too often when making efficient database calls, and that annoyed me. It's not that there aren't logical architectural solutions, it's that I was spending all kinds of time worrying about it, when I was the first and primary user of the app! What was important to me was using a little AJAX where it made sense, and using the ASP.NET AJAX framework for any client script I had. The version you can download doesn't have it yet, but the version running on PointBuzz does, and I'm very pleased with the way you can encapsulate it and reuse it. The primary use is to load stuff into the page, like user profile data, dynamically. Most forums who you the user's name, number of posts, astrological sign and other useless shit that doesn't advance discussion, and I've always been annoyed by that. (Heck, you've been able to turn off signatures and profiles in my app, also annoying, since 2003.) So I just load that when a user chooses to view it. I also do first post previews this way, but not as tool tips the way vBulletin does (because I find that annoying too). Finally, I refactored the mess that is my rich text control, dating back to 2000 at least, so that it uses the AJAX framework. The forum app does a whole lot of caching, but not to an extent that it isn't necessary. In old versions, I found that it wasn't holding on to much because the cache collection got enormous and it was always cycling items out. I also didn't cache on a paged basis, so if you viewed a topic with 1,000 posts, it read and cached the whole thing. That was silly. I've found that nearly all of the performance tweaks have to do with the database and caching, which I guess is certainly no surprise. Custom controls were also a big part of it, using list controllers to handle UI elements based on the data they created. I had mixed success with this, because the thread page still has a lot of code in it because of all the stuff going on. On the other hand, the forum index page is pretty lean in code-behind. Doing custom templated controls also helps, because you can easily drop in an ad, for example, in between forums, topics or posts. I prototyped a search engine for the forum way, way back in 2004, and after some tweaking I got something I'm pretty happy with. The SQL is incredibly ugly, but the performance isn't bad. Basically, when a post is updated, it's marked for indexing. A background thread on a timer dissects all of the words, throws out the junk and scores them on frequency and appearance in the title. I think the scoring formula needs some work, but most of the time I get pretty relevant results.
Honestly I could probably talk about the forum as a stream of consciousness forever, so I'll move on to photos. The truth is, we have too many. Walt, my partner on the site, went through a document everything phase, and we have over 6,000 photos to prove it. This is honestly not a totally solved problem. We have categories and albums as units of navigation, and we also have tags. The truth is that people generally go to photos of the roller coasters or to albums we link to from news items. We don't know if that's good enough, and we have thousands of photos untagged. From a code standpoint, we started testing the photo app months before re-launching with live data. Contrary to the advice a lot of people gave me, I decided to store the photos in the database. My reasoning had mostly to do with ease of backing up. HttpHandlers serve the images and the thumbnails, and frankly I've not encountered any performance issues at all. I also kept permissions for editing the photo collection as abstract as possible. There's a simple HttpModule that does the required plumbing to map forum user data into the photo app. I can just as easily wire it up to anything else. The news management is nothing special, and as such doesn't exist as its own project. The only interesting thing is that it will replace the first post of a special forum topic with a user control that has the news item in it, so essentially there are two views of it, either in the forum or the regular news page. That's really the bulk of the site. The forum is used for all the member handling junk and e-mail. Incidentally, I do hope to have another beta of the forum out soon. In addition to the items I listed on the PF site, I've also rewritten the private messaging. A question I get a lot is, "Why not just use stuff that's already out there?" Aside from being my own code monkey, all of the stuff out there tries to be too many things to too many people. I don't have excessive database tables to deal with, superfluous UI, rigid style elements, etc. The forum is a lot of code, sure, but overall the rest of this stuff isn't hard to roll on your own. If you've got the skills, why not?
|
Spherical/Web Mercator: EPSG code 3785
Morten - 5/15/2008 10:15 AM PST
|
|
I just received an update from the EPSG mailing list:
New to Version 6.15 are (among other things): Added spherical Mercator coordinate operation method and associated CRS as seen in popular web mapping and visualisation applications.
It looks like they FINALLY added the spherical Mercator / Web Mercator projection used in Virtual Earth and Google Maps.
This is a big surprise. EPSG’s earlier statement whether to include it was this:
"We have reviewed the coordinate reference system used by Microsoft, Google, etc. and believe that it is technically flawed. We will not devalue the EPSG dataset by including such inappropriate geodesy and cartography.”
guess they changed their mind, or they just devalued the dataset ?
Anyway, finally we get an official code for !
Here are the details of the entry:
COORD_REF_SYS_CODE: 3785
COORD_REF_SYS_NAME: Popular Visualisation CRS / Mercator
AREA_OF_USE_CODE: 3544
COORD_REF_SYS_KIND: projected
COORD_SYS_CODE: 4499
DATUM_CODE:
SOURCE_GEOGCRS_CODE: 4055
PROJECTION_CONV_CODE: 19847
CMPD_HORIZCRS_CODE:
CMPD_VERTCRS_CODE:
CRS_SCOPE: Certain Web mapping and visualisation applications.
REMARKSUses spherical development. Relative to an ellipsoidal development errors of up to 800 metres in position and 0.7% in scale may arise. Some applications call this WGS 84. It is not a recognised geodetic system: see WGS 84 / World Mercator (CRS code 3395)
INFORMATION_SOURCE: Microsoft.
DATA_SOURCE: OGP
REVISION_DATE: 3/14/2008
CHANGE_ID:
SHOW_CRS: TRUE
DEPRECATED: FALSE
|
Evoluent Vertical Mouse now available in wireless model
Loren Halvorson - 5/15/2008 8:57 AM PST
|
|
I've praised this mouse before, but just discovered that the wireless model of the Evoluent Vertical Mouse is now available. I have the wired version, and it is without a doubt the most comfortable mouse I've ever used. I throw it in my bag and drag it back and forth between the office and home. (I wonder how long before the cord gets a short?).
The only modification I made was to physically disable the large bottom button closest to the desk by inserting a small rolled up piece of paper behind it because I kept hitting it inadvertently while just moving the mouse.
The wireless one would be nice if anyone wants to buy it for me, my birthday is coming up. Anybody have one yet? How does it work? How is the battery life?
|
Wrox introduces new distribution model
Bill Evjen - 5/15/2008 7:15 AM PST
|
|
Ever want to get information for a reliable source then find what you need in a book but really not that interested in buying the entire book? Well, that is the type of customer Wrox is going after with the introduction of their new "Chapters on Demand" service. You are now able to purchase individual chapters as a PDF file. Looking at the site, you will also find a lot of free chapters made available as well. Rather interesting to see how it goes - some people will love it and others will not. Funny for me is that I still love to read so much on paper that I even still print out longer articles on the web to read/highlight/etc. I have a tough time getting into a long read of something on the screen .... maybe because I'm getting older now. ;) 
|
Funny
Thea Burger - 5/15/2008 7:01 AM PST
|
|
Sorry Steven, stole this from you, but I found it very funny and applicable... 
|
The Book Of Ruby - free in-depth Ruby eBook
Huw Collingbourne - 5/15/2008 6:23 AM PST
|
The Book Of Ruby is a free 400-page-plus eBook which will be released one chapter at a time over the next few months. It comes with hundreds of ready-to-run Ruby programs all of which are also supplied as free downloads. I first started work on The Book Of Ruby over two years ago. The book was, in fact, written in parallel with the development of the Ruby In Steel IDE. To be frank, we felt we needed a comprehensive ‘test suite' of programs that would explore every facet of Ruby, (...)
|
The Easiest Thing to Do Should Be the Right Thing to Do
Milan Negovan - 5/15/2008 5:55 AM PST
|
|
If you haven’t read Michael Nygard’s book Release It!, you absolutely need to! It’s heavy on the infrastructure side of things, which isn’t my strength, but it’s an eye-opener to a lot of real-world issues I never considered. It’s also just fun to read.
Michael’s recent blog post caught my attention:
“Normal attrition means that the largest population of developers will always be the youngest and least experienced. This is not a training problem: in the post-commoditization world, the majority of code will always be written by undertrained, least-cost coders. That means we need platforms where the easiest thing to do is also the right thing to do.”
I fully agree with his statement that the easiest thing to do should be the right thing to do. The reason I’m growing so frustrated with Microsoft is that they do just the opposite.
ASP.NET AJAX (read UpdatePanel) is the easy thing to do, but it’s also the
wrong thing to do from the standpoint of performance and resource hogging.
LINQ to SQL is the easy thing to do, but also the wrong thing to do because it’s meant for the RAD crowd. I often hear the misleading assertion that what the designer surface gives you, once you drag tables on it, is your domain model (which is incorrect). At the same time, the Entity Framework project has been on the ropes for god knows how long.
The Enterprise Library creates an illusion of easily applied building
blocks, but it’s a horrible monstrosity I prefer not to even touch anymore. EntLib is definitely not “the right thing to do.”
Frameworks need to do the right thing out-of-the-box, not pander to the incompetent crowd.
|
Information Overload
Holly Styles - 5/15/2008 3:09 AM PST
|
The email server is refusing to get out of bed today, it's having a 'duvet' day :) Personally I won't be complaining about that. In modern times I often feel there are too many ways to demand my attention. Email, SMS Text, IM ...
Once upon a time you had to husband cattle and fish for squid before you could contact anybody with the written word. (Before paper, calf skin was used.) So nobody tried to get hold of you unless it was *really* important.
|
My Eugene Marathon Experience
Paul Litwin - 5/15/2008 2:21 AM PST
|
|
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:25: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 un | |