...in no particular order.
As anyone who does triathlon knows, triathlon training takes up gobs of time. Relationships/marriages are repeatedly tested, life gets put on hold, your availability revolves around your training and racing schedule.
This is an attempt to meld everything.

Social Icons

Pages

Thursday, November 19, 2009

Love him or hate him, President Obama can teach you about patience. I cannot recall anything, even going back to the early days of his 2008 presidential campaign where he rushed to judgment or hurried through something in an effort to either appease the masses or to make it look like he was reacting. President Obama picks his battles and he picks them carefully.

Now, I'm not saying that in some cases this lack of reaction isn't a liability or that the careful choosing of battles is not politically motivated - on the contrary, I believe that plays a part. Take for instance two major topics in the news right now: the health care debate and the investigation into the Ft. Hood shootings.

The White House has taken very careful steps to let Congress handle most of the details of the health care debate and one wonders would things be different if, perhaps, it had taken a much larger and more active role. On one hand, the fate of his presidency would be more closely tied to the health care bill and perhaps he learned some lessons in 1992 from then President Clinton. On the other hand, however, it is not the "job" of the White House to craft legislature, the Bush administration notwithstanding. His hands-off approach has returned Congress to it's rightful place in the three branches of government - the capacity to create laws. Whether or not you happen to like that is open for discussion, but it is his choice and were you to ask him, I'm sure he'd mention the previous administration's way of doing things as an example of how NOT to do things.

I also mentioned the Ft. Hood shootings. Certain Senators are clamoring for their own, Congressional, investigation. The White House has asked them to wait until the military, et. al. completes their own investigations. Without proof, I suspect that this is because the White House is fearful of unwarranted retribution and xenophobia from, let's say, the lesser educated. Doubt me? Fine, but I'm betting you can't sit there and tell me with a straight face that ignorant people, just like the rest of us, aren't at some point subject to overreaction. On the flip side, though I've not seen anything yet to indicate this, I suspect that the public is demanding answers. There's nothing inherently wrong with this except that the politicians to whom these people are complaining are compelled to give them answers. And, the problem stems from said politicians giving out either half answers or just plain wrong answers.

So, we then have politicians, under the guise of "doing the right thing," speaking to anyone who will listen about the travesty of not acting fast enough and "we need to protect the troops now." It seems that they have learned nothing about what happens when we rush to judgment from the previous 8 years. It also seems that they care more about seeing themselves on TV or in print, than they do about actually solving the problem at hand.

Wednesday, November 18, 2009

Anyone whose ever worked on a software engineering project has at one point or another either said or done (or both) "let's just implement something quick and dirty for now and we'll fix it later." While I've been living through the nightmare of this statement for the last 2 years at work, it just hit me today as to why this is so bad.

A co-worker just asked me if I knew what the c-rt.tld file was about and why it was only referenced in one JSP page. It struck me almost immediately what that file was and even though I'd seen it before, it never clicked until now. We opened it up and as expected it was a JSTL tag library definition file, in this case, for the core library. Now, we also have a c.tld which also defines the JSTL tag for the core library. Diffing the files yielded that the JSTL versions were slightly off, but that other than ordering, the files were the same. Looking at the SVN history made it all clear.

First, a brief background: in late spring 2006 my company hired a non-American subcontractor to implement a rather large and important piece of functionality for our web application because at the time, we simply didn't have the resources to do it in house. They initially branched our code and went at it while we did our own thing in our existing code branch. According to the check-in comment for this c-rt.tld file, the file was added as a result of the merging of these branches some 6 months (!) later.

My guess as to what happened is this: the developer for this check-in ran into conflicts the likes of which even god has never seen and instead of trying to understand the conflicts and why they were occurring, they just created different versions of the file and "fixed" the references in the @taglib directives in the JSP pages. The result is that instead of only having one TLD for the core JSTL library, we have four(!). Likewise, we have four for the fmt library and three for each of the sql (which you should NEVER use, by the way, and we don't) and xml JSTL libraries.

I realize that this example alone doesn't directly state why "Quick and Dirty" is bad, but consider this: We fired said subcontractor in December 2007 and we've been cleaning up, rewriting, and removing their code ever since. This means that we've been working on fixing issues with their code for longer than they were even contracting for us.

So, the next time someone on your project says "let's just do it the quick and dirty way for now," push back, put your foot down, and say "no." For better effect, replace "no" with "over my dead body." If you're overruled, and this is bound to happen, file a P1/Severe bug against the code fully documenting where in the code the egregiousness lies, why the decision was made to not do it correctly the first time, and the right way to fix it. Trust me, you think you won't forget, but you will - and the bug documentation is all you will have.

Wednesday, August 26, 2009

Nothing exciting other than MY RELAY TEAM PLACED 2ND AT THE 5430 Long Course Triathlon!!!! Woo hoo!

I did the swim for my wife's relay team at the Boulder Peak Triathlon in mid/late July and had the fastest relay swim time. Building on that and some major last minute drama in getting a team together I was able to field a team for the last 5430 Long Course triathlon (5430 Sports was sold to the Ironman Corporation). And when I say last minute, I mean I was dropping a check and the racing forms off at Jodee and Barry's house on the Friday night before the race - packet pickup was Saturday morning and the race Sunday.

Out of over 50 teams, I had the 6th fastest relay swim time. Kevin, our biker, had a fantastic ride, and Morgan ran a great half-marathon. We lost to the 1st place co-ed team by over 10 minutes, but their biker was Neal Henderson from the BCSM and their runner was Jimmy Archer, a pro triathlete. So, I think that's very respectable.

I'm not running now to try and let my foot heal a bit but I've been biking 2-3 times/week and swimming 2-3 times/week. I can tell I'm not nearly as fit as I used to be and I'm really antsy for some structure, but it's good to have some down time and it's good practice for me.

Sunday, July 26, 2009

One of the most important things you can do when creating JavaScript Objects/Classes for reuse throughout your web application or website (or both) is to utilize a namespace that will ensure no pollution occurs when you start to use other JavaScript libraries and APIs. Just like C++ introduced the concept of namespaces and Java introduced the concept of packages, it's good to ensure your code is isolated enough so that it's guaranteed (well, mostly) to work the same no matter which libraries you wind up utilizing.

That's pretty much it. You can add additional methods as you see fit. You can now instantiate class Foo and execute getBar() as follows (note that I don't define what the bar parameter is, but it can be anything - here it is an integer):

var f = new Foo(1); alert("bar is: " + f.getBar();

The problem with this is that anyone can add any method to your class by calling and executing:

This is kind of bad, yes? Namespacing your class makes it harder (and in one case as we'll see below, impossible) for people to do this effectively making your class "final" in that no methods can be added, polluting your class. So, how do we namespaceify our class? Simple. Change the above to the following:

var Foo = function(theBar) {

return {

method1 : function(message) { alert(message); },

method2: function(anotherMessage) { alert(anotherMessage); } };}();

Now, if someone tries the same 'Foo.prototype.bat = ...', they will get a JavaScript error saying prototype doesn't exist - because it doesn't.

One downside to this is that all the methods defined above are "static" meaning that they can be called via 'Foo.method1()' or 'Foo.method2().' We can add a constructor function to the namespace and while the "outer" class Foo is still immutable to prototype, we cannot prevent methods from being added to instances of the constructor function - however, using a namespace will better protect against namespace pollution. Here's the final example:

var Foo = function(theBar) {

var privateField;

function privateFunction() { // contents }

return {

method1 : function(message) { alert(message); },

method2: function(anotherMessage) { alert(anotherMessage); },

// a "constructor" function aClass: function(theFoo, theBar) {

this.foo = theFoo; this.bar = theBar;

this.getFoo = function() { return this.foo; }

this.getBar = function() { return this.bar; } } };}();

Notice that we've added a private field and private methods as well as a constructor function with private fields and member methods.

Friday, July 10, 2009

Ok, so there's really no drama here. I'm done for the season but that doesn't mean I'm going to let myself go. I still workout at least 4 days a week. It would be nice to get into some type of pattern, but then, that would kind of imply training and I'm definitely not doing that.

So, if I feel like running, I'm going to go for a run. If I feel like swimming, I'll go to Master's swim, and if I feel like riding, I'll ride my road or mountain bike because I'm not touching my tri bike unless absofuckinglutely necessary.

I left my keys at work today and I didn't realize it until I was looking in my bag for my wallet and keys about to get off the bus some 30 minutes after I left a locked office for the weekend. Within the next 40 minutes, however, I was at home, my keys were on their way home to me, and I didn't even have to walk home.

After I got off the bus, I called my wife some 10-15 times until I got a hold of her to inquire as to where she was. As she'd not yet left Denver, she was pretty much out for getting a ride home. I then called our friend Ashley who happened to have driven to work that day. After a quick explanation of my situation, she said she could swing by and pick me up on her own way home. I spoke with my wife again who offered to stop by the office and pick up my keys. The problem was that I needed someone in the office to let her in as it was locked and most everyone had already gone home. I wound up getting a hold of Randy, one of our sys admins and all around office god. He brought my keys down to my wife and the crisis was averted.

Now, take out the cell phone and what would have happened? Better yet, what if I weren't married or lived alone? I'd have had to go back to the office to get my keys.

Saturday, June 27, 2009

Favorite race day quote (from a woman behind me upon entering an aid station on the run):

"Gatorade! Gels! Oh my god, if I have another gel I'm gonna puke."

Everyone I talk to keeps telling me that I should be proud and happy to have finished. But honestly, there was never a time that I didn't think that I would be able to finish. Even if I had to walk the entire marathon, I was going to finish. I wasn't nervous. I'd been training for 10 months. To me, finishing was an expectation, not a goal - even for my first Ironman. I mean, if I was a weekend warrior or lost 100 lbs in training for this thing and had never done a triathlon before, just finishing is a HUGE accomplishment.

Someone recently pointed out to me that as athletes, we're our own worst critic and I'm sure that's the case here. For me, the hardest part of Ironman was the training. The race itself wasn't THAT difficult. I had some time goal expectations and I missed them all for various reasons. To me, that was the most disappointing thing and why it's hard for me to be happy.

One thing I've noticed is that over the past 2.5 racing seasons, while my run has gotten MUCH better, my cycling has gotten slower. After a lengthy conversation with my coach, we think it's because I've been focusing on the endurance events (halves and Ironman) and not the speed events (sprints and Olypmics). My plan for next year was to only focus on the speed events and this idea was confirmed by our conversation after my coach said the year after his first Ironman, he stuck with the speed events and in his next Ironman in the following year, he was faster.

As far as this guy is concerned, his racing season is over - I need a break. My goal for next year is very simple: get fast.

The run course, like the bike course, consisted of two laps around several loops: first, a small 0.9-mile out-and-back loop, and then a larger 6-mile-ish loop. The first thing I noticed was that my legs felt great. The second thing I noticed was that my fuel belt was fucking heavy and I remember thinking there's no way I'm going to carry this thing for the whole marathon. I was thinking about how to go about losing it when on the way out the small loop, I passed by the special needs station for the run and I figured I could just throw it in there on the way back, which I did. After losing the 2+ lb weight belt, I started moving. My pace for the first mile was 7:41 and I was like, "whoa adam, slow down there" so I backed off a bit and just ran. My pace was good and I was passing tons of people. At mile 6, I had to go again and this time I made damn sure I got everything out before leaving the port-a-potty so I'd not have to go again. After another 5-minute stop, I was on my way again, feeling great, and knowing full well that my entire nutrition plan went out the window. I ran through aid stations taking sips of water and cola and trying to get down some Cliff Bloks, but at that point, I couldn't eat anything. The hill on the large loop at the turn-around sucked not because it was steep, but because it banked severely to the right going up. Almost at the top, I saw Glenn coming down for his finishing stretch and gave him some props. He said hi and honestly looked like he was just out for a Sunday stroll he was so relaxed. He wound up doing a 9:45 or so and placing 2nd in his age group. The run back into town kind of sucked because most of it was this gradual up hill. About a mile or two from town, it started raining, nothing hard, just a light sprinkle - but the temperature started dropping. I came back through the expo area on lap two heading towards the short loop turn-around and passed my sister coming the other direction. She gave me props and I don't recall if I said anything. I hope I did.

A couple miles out I ran into Kerrie coming in for the finish. She looked like shit. I mean, she looked absolutely miserable and like she was trying to pass a watermelon but still run the 7:07/mi pace she averaged for her marathon leg. I moved to my left and we gave each other a waist-high five as we passed. I told her "way to gut it out." She won her age group running up from 7th place after the bike.

My run out on my second lap just plain sucked. When I passed under the bridge by the Coeur d'Alene Resort's golf club about 3-4 miles out I grabbed a thermal parka from a volunteer passing them out. It was raining and 50 degrees and I could see my breath at times. I walked/ran to the turn around and continued a walk/jog combination for a little while longer. At some point on the way back, I just started running and didn't stop. With the thermal parka on, my clothes were getting dry and the rain had finally let up but it was still cold so I kept the parka until I had about 3 miles left and not wanting to finish with it ditched it with a volunteer who seemed rather surprised that I was giving it up. I was motivated at this point and I was flying - or at least it felt like it. I kept passing people saying "come one guys, only 2 miles left!" One response I got from a guy from either Spain or Central/South America: "yes, but I am so tired." I came up on the split where finishers go left and runners heading to lap 2 stay right and I remember feeling so good to stay left and seeing the "to finish" painted on the ground. A left turn, a slight downhill, a right turn, a slight uphill and a left turn had me seeing the finish line a scant half mile away. Sherman Ave. was still rocking despite the weather and it was still very much daylight so I could see everyone in front of me seeming to simply just jog towards the finish but I wasn't having any of that I picked up my pace even more and rocked it to the finish. Gritting my teeth and giving a fist pump ensured two things: 1) that my finishing photo looks really funny, and 2) that I completely missed Mike Reilly announcing my name (if he did) or what he was even saying. Run time 4:52:34 for an average pace of 11:10/mi.

The bike course is two times around what I can only describe as a 3-loop course. The first loop is an out-and-back course around 14 miles and change in total distance. The middle loop (which I will refer to as the big loop) is the monster - a 40-mile pseudo out-and-back (there are sections on the way back that differ, sometimes significantly, from the way out), technical course with a large amount of climbing and a ton of turns. The third and final loop (to which I won't really refer to at all) is a 1-mile out-and-back stint that feels like it was added simply to get the distance right at 56 miles per course iteration.

My bike started out well enough. I felt good and fast even with the wind and slight hills. People were passing me, but I was consciously focusing on keeping my heart rate from going through the roof. It was already high from coming out of transition and my goal was to get it back down as soon as possible. The long, gradual downhill going out on the first loop allowed this to happen. The bike wasn't very exciting in general. It's 112 miles. That's a lot of time to just ride and think about anything and nothing. I'm pretty sure I got bored at some point and just wanted it to be over. The hills were fine on the first lap and I stuck to my nutrition plan almost perfectly. Just like in training, it was damn near impossible to get any solid food down which makes it very good that most of my calories were liquid. My coach, who uses Infinit as well, said that there was enough water in the bottle when I asked him if I needed to supplement my drink with plain water. Infinit is just a powdered mix that one mixes with water.

My only real complaint about the bike is that people were blatantly drafting and I never saw any penalties given out or in the results. I understand it's hard to not draft when there's a pack of 8 riders all together, but it seems like there could be some better enforcement here because of a lack of spacing out. One might argue that at the beginning of the bike everyone is clustered together so it's almost impossible to space out, but I'm not talking about the beginning of the bike, I'm talking about mile 40 and beyond. My coach said that this may be what eventually drives him from the sport. It's almost impossible to be competitive at those distances when you're the only one following the rules.

I came in for the end of the first set of loops and went out on the second stopping at mile 61 to get my special needs bag - a new set of bottles and two more energy bars which wound up going uneaten. The hills on the second lap were a lot harder but I suffered through them fine. My average speed didn't drop very much between the laps which meant I was being consistent - a good thing in an Ironman. At mile 75 on the way out, I finally saw my sister and she didn't look happy. I did some math in my head and figured that I was well over 20 miles ahead of her and remember thinking "oh my god, what happened?" It turns out, her rear derailleur cable broke at mile 4 on the bike and due to a mixup in communication they sent a sag wagon instead of the support vehicle so she wound up waiting an hour before being able to get back on the roads. I wouldn't see her again until I was over halfway done on the run. At mile 81, the gastro-intestinal problems started and while I'd had to stop for a quick 0:30 pee earlier, this was a 5-minute bowel expulsion - as gross as that sounds. However, after getting back on the bike, I felt great and was able to pick up the pace a bit and made good time coming back into town and T2. Bike time: 6:24:38, a full 24 minutes slower than I was hoping for and even given the potty stops, I wouldn't have hit it. I have to look at the data to see what happened.

My dismount was good and I left the shoes in the pedals rolling right up to the dismount line which looked like it was being manned by a group of volunteers playing red rover as they were lined up side by side across the dismount line. I remember yelling, "I got it, I got it." hopping off in perfect time and running with my bike a few steps before a volunteer said "here, let me take that." I forgot that in Ironman, you don't have to do a lot of stuff you normally have to do in the shorter events. I grabbed my run bag and headed into the changing tent. Finding an open seat towards the exit (everyone tends to cluster towards the entrance) I sat down and the volunteer following me asked me if he could just dump my stuff out on the ground. I said yes and he did so going through the stuff that had fallen out and putting stuff he didn't think necessary back in the bag. One such item was my bottle of sunscreen. By that time it was fully overcast but not yet raining. The wind at this point was moot because it wouldn't make much of a difference for me on the run. Changing shorts, donning my visor, putting on my fuel belt and spare race number (the one I wore during the bike came off due to some clumsy hands - mine), I headed out of the changing tent and got about 10 steps when I had to go again. Fortunately there were vacant port-a-potties right there in T2, but unfortunately, I was in there for probably 5 more minutes hence the rather slow 8-minute T2 time. After I did my thing, I headed out of T2 and on the run.

Thursday, June 25, 2009

I was only able to get in a few minute swim before the kayakers started kicking the swimmers out of the water and making them head towards shore. I felt much warmer than when swimming the week before - it felt like the water was warmer. I wound up standing in about knee to waist deep water on the far right of the beach - this gave me a straight line shot to the turning buoy as the rectangular loop slanted out and towards the right.

The filming helicopter was right overhead so no one around me could hear anything coming over the PA system. BANG!!!! The gun went off and none of us were ready for it and we all charged out into the water. The first thing I noticed very quickly was that the water was pretty rough. VERY rough. There were white caps and pretty large swells that if I had to guess were well over a foot high. It made swimming interesting as there is a very distinct up and down motion when going in and out of the swells. I recall sighting 2-4 strokes in a row and seeing only water and sky. No marker buoys, no swimmers, no kayaks. On that first leg, actually, I don't recall sighting on an actual buoy until the last one before the left turn.

As usual, the turns were a disaster. Swimmers piled high and in a very tight cluster. This causes the pace to slow considerably just like in a traffic jam. Making the next left turn back towards shore and the second lap, I had to stop swimming for a second and the guy next to me did the same and I recall saying "good god: to which he replied, "no kidding." I have to believe that if there were a way for one to be in a washing machine during a wash cycle, this is what it would be like. The swim back in was much nicer as we had the wind and waves at our back though it occasionally gave the sensation that I wasn't actually moving and upon getting closer to shore and seeing the bottom this illusion proved more than just a feeling. I would take a stroke and the lake bottom wouldn't move beneath me. I suspect it was just an optical illusion but it really did feel like I wasn't making an progress.

Of course with everything going on between the ton of swimmers and the rough water I totally forgot about my form. Which simply means that it was shit and I need to work on it such that it's engrained and natural - that I don't have to think about it. On the second lap, the last section, the last leg if you will back to the beach and T1, I finally felt like I was able to get into a rhythm and started flying by people. But, by that point, it was too late to really get a decent time. Don't get me wrong, a 1:09:02 is decent at a 1:49/100m, but I was shooting for and am capable of doing a sub-hour swim.

My swim run out was good and I got my wetsuit top off quickly. I waited to take the bottom off and did it in the change tent. My one oops here was that I ran the wrong way but was quickly pointed in the right direction to pick up my transition bag and into the tent. I changed fairly quickly taking time to wipe off my feet and face and catch my breath. One mistake I made here was that I put my bike shoes on before I put my compression socks (calves only). I should have put them on under my wetsuit but by the time I realized that, I'd already had my wetsuit on and it was too late. So, I had to take my shoes off and then on again. I ran out straight to my bike but since there were so many of us, my bike wasn't waiting for me with a volunteer and I had to get it directly. The racks were too short for the bike to fit underneath it with my bottles in the cages behind the seat so I had some trouble getting it out and had to turn the bike sideways spilling some of my aero bottle drink in the process. I ran out the the mount line and angling off to the side so I wasn't in the way, hopped on and away I went.

We went to bed fairly early and I expected to get only a small amount of sleep. On that note, what amazes me even more about people who do Ironman races is that unless the person doing them isn't nervous or anxious at all, they're done on a ridiculously small amount of sleep. I don't recall when exactly I fell asleep, but I awoke around 1:30 knowing that I'd not get any consistent amount of sleep after that.

I don't recall tossing and turning for the next 3 hours (the alarm was set for 4:30) but I do recall waking up every so often and checking the time. I got out of bed at 4:29 before the alarm went off.

Not to be disgusting, but I had my normal morning BM and then went downstairs to choke down my normal pre-race breakfast for 70.3's and higher: whole wheat bagel with peanut butter and honey, a bottle of Ensure, and instead of water I drank my Infinit endurance drink mix for some extra calories. After breakfast, in what should have given me a warning of things to come, my second BM came rather quickly - it usually doesn't it until on the race site and I have to stand in line for the port-a-potties, which are by then, usually quite nasty. Instead of a normal BM, I had mild diarrhea.

Not thinking anything of it, I got my race gear on, and the rest of my bags together and went downstairs and soon thereafter, we were off to the race start.

I was in a very good mood and I was confident. I wasn't nervous at all and was joking around with the family even posing for pictures in my wetsuit - pictures which I'll spare you from having to view, however, my little sister has already posted them on Facebook.

The pros had already gone off by the time I was in my wetsuit and it took forever to make it to the break in the wall to get down to the beach. I went on ahead and wound up missing being able to get a good-luck kiss from my wife and to tell her I'd see her out on the bike.

Tuesday, June 23, 2009

I'm going to break the report up into multiple posts because while I've not written anything yet, I assume I'll have a lot to write and if it turns out I don't, at least I get to pad my total number of blog entries. (He who dies with the most blog posts wins)

We last left our hero lamenting about the ever changing weather reports last Thursday. Friday, I went for an early morning ride as I didn't do anything on Thursday. Later that morning, we headed back down to the expo on a quest for a rain jacket for my sister who found something that probably wouldn't have sufficed had she wound up wearing it anyway - and she might have, but given her attire as she came across the finish line, it didn't matter. I digress.

We made some small errands before returning to #235 to rest and start preparing our bike and run transition bags. The mandatory athlete meeting started at 7:30 so we headed out for our obligatory pre-race burrito dinner around 6 thinking it would be plenty of time however, the restaurant we found was packed and so we settled for Qdoba and headed straight for the meeting. It turns out the meeting wasn't at the same location as the expo, but rather about a half mile past on the other side of the host hotel, the Coeur d'Alene resort (where for a cool $350/night, you too, could have the privelige of sleeping mere yards from all the action).

We arrived at the banquet tent at 7:15 to find that not only was the athlete dinner completely over (which was fine, we didn't plan on eating there anyway), but they'd already started the meeting and were essentially done with the explanation of the bike segment. After finding a seat mid-tent, I asked the guy next to me when they started and he replied they'd started early, around 7. Needless to say I was little peeved because as anyone who does triathlons knows, the odds of getting a penalty on anything other than the bike or bike related infractions are pretty damn small. I didn't get any penalties, but what's the point of having a schedule and passing it out to all the athletes if you don't follow it?

After the meeting, we returned back to #235 and finished packing our transition bags. I wound up getting to bed a little later than I would have liked, but I don't think it caused too much of a problem.

Saturday morning, we awoke and and eventually made it down to the expo to drop off our bikes and transition bags. After doing so we left to return to #235 to relax for the rest of the day. A mid-afternoon movie with the family that had arrived around noon helped us stay off our feet. We had dinner after a late afternoon nap and went to bed early to get ready for race day.

Today, we went to pick up our race packets and all the other crap they give out at these races: coupons to local/national retailers, cards for other races, cards for bikes, cards for sponsors, sample packets of various liquids and food (although, this time, there was no food in our packet - perhaps Ironman's sponsorship fees are a tad too high for some of the big athlete food providers).

While I meandered in the expo, my sister went for a swim. We met up later, and after some quick shopping by her, we went back to #235 for a late lunch.

After lunch we drove the course. The small loop of the bike and the run loop were very similar past a certain point, so we drove the run course out and bike course back. The run course is a little hilly for the first few miles but we do get a long downhill back to the start of the 2nd loop and the finish. As I'd already ridden the small loop of the bike, there were no surprises. Those came on the big loop of the bike course.

After several miles of gently sloping uphills and false flats heading North away from CDA, the mother-lode of hills kicked in and all I can say is OH MY FREAKING GOD there's a lot of hills. I don't know how many miles they cover, but shit, I am officially concerned. I'm not worried about the first bike loop. The second, however, is going to suck...badly. I can honestly say that I am actually looking forward to the run because it means that I'll be done with the bike and seeing how my run has improved enormously over the last season and a half (and even more so this season) it should be the easier of the two for me. This means I REALLY need to stay focused on my heart rate on the bike and save the legs not only for the run, but for the second lap of the bike.

This will probably prove to be the hardest part as I tend to completely zone out and I really need to make sure I'm drinking and eating on schedule.

With the past two days taking its toll, I slept in late missing a chance to go swim in the morning before having to go pick up my sister from the airport in Spokane - about 35 minutes West of CDA. But after we returned to #235 for some lunch and some time to let the food digest, I went for a swim sans sister.

Last year, the water was apparently ridiculously cold. This year, it's still cold. I asked a lifeguard and 61 degrees was his reply. It took me probably over 10 minutes to warm up. To make matters worse, the wind was pretty strong giving the North end of the lake where I was some pretty serious chop. I battled through the cold, green water and got in a good swim workout. I now know that I should do at least a 10-minute warmup prior to the race start. Complicating that may be the fact that the pros go off some 35 minutes ahead of us amateurs ensuring that many of us will never actually see them on the course - at least, the ones who will win anyway. I'm hoping they let us in the water after the pros start.

After returning to #235, my sister and I go for a run downtown on the bike path (2 miles from #235) where she tests the water temperature before we return home.

After I was reasonably unpacked and the cart with the broken and flat wheels returned to its den in the parking garage, I dressed for a bike ride. #235 is in a complex called Riverstone and is conveniently close to a bike path that, conveniently, goes straight downtown. I followed the path downtown and wound up, quite by accident, following the small loop of the bike course. It essentially heads straight East through town and turns South/Southeast on to some road that essentially follows the river shoreline. 6 miles down, I run into the hill that is the run turnaround (but since the run loop is run twice, I get to run this hill twice). Unfortunately, for the bike, we continue down the other side of the hill for another 1.5 miles or so and turn around in a parking lot where the road dead ends. The journey back involves the same hill in the opposite direction and I realize that since the bike loop is done twice, I get to do this hill, in all its glory, twice. Fine, I can live with that. I ride back through downtown getting lost several times before heading home to deal with this magical squeaking sound that's been happening since I left #235.

Lucky for me there's a new bike shop downstairs from #235 and I explained my problem to one staff member. He came outside with me and had me ride by him. He heard it, although it was faint. Hopping off the bike, in about 30 seconds, he figured out it was the cap from the pump rubbing against my crank arm. A quick twist and voila, it was fixed.

Following the directions to the resort management office, I went in and picked up the keys to our condo rental for the week. The condo, #235, is gorgeous. It's brand new and I'm almost certain we're the first tenants to rent it out from the owners. It's deep and narrow like a DC row house, but it's brand new and not from 1911. I'd give approximate measurements but given how badly I screwed up the wind turbine blades, I'll refrain from embarrassing myself again.

I emptied the Jeep in segments, first carrying everything to the elevator lobby. Then loading up the cart with the broken and flat tires into the elevator (much harder than it should have been) along with the two bikes (mine and my sister's) and the rest of the bags that didn't fit on the cart. The elevator freaked out and started screaming at me. It must have thought someone was stuck in the door because when they finally started closing, it took forever. Arriving at the second floor, I tried to empty the elevator as fast as possible to avoid it screaming at me again and while I was successful, the cart with the broken and flat tires tried very hard to remain on the elevator with all my stuff. After a bloody battle in which no lives were actually lost, I won and the cart begrudgingly allowed itself to be wheeled down the hall to unit #235 where we were going to be staying.

Dragging everything inside and to its appropriate location (as determined by me), I returned the cart with the broken and flat tires to its lair in the parking garage knowing that we would meet again in a final battle of sorts come next Tuesday when we pack up and leave.

While the training portion of my Ironman CDA experience began 10 months ago and culminates this coming Sunday with the actual event (hooray!), the road trip there began Monday around 9am as I chose to drive, splitting the 1000+ mile journey over two days to avoid my normal, little I, "ironman" driving routine in which I drive for 12-15 hours before stopping for the night (but not gas or potty breaks).

Traffic was somewhat heaving heading North on I-25 towards and beyond Ft. Collins. At some point, however, and I don't recall exactly where, the traffic just disappeared and it was just me and the open road (and the very hard/uncomfortable seat in our Jeep Liberty). Sometimes the miles flew by and I eerily "came to" wondering how many close calls I had while zoning out. I'm sure I'm not the only person who's had this happen to them, but it is kind of freaky how we can just drive on autopilot and actually stay on the road while our mind wanders off into La La Land. And sometimes the miles dragged on. One thing is for sure, after I passed I-80, I was on roads that I've never driven on before - or even been on as far as I know. So, the scenery, and there was a lot of it, was all new. Wyoming on I-25 all the way north to Montana is very rolly and very beautiful. With all the rain the front range has had this year, everything is just green....which means bugs....lots of them....impaling their little bodies against my windshield. Some white, some clear with baby eggs that will never hatch, and some, quite grossly, red.

All through Wyoming and Montana, I kept seeing huge flatbed semis passing in the opposite direction each carrying two wind turbine blades. Last Thanksgiving, we drove back to CO from Dallas via US-287 which passes through Excel Energy's wind farm in the Southeast corner of CO. Those things were huge and when we passed by a maintenance shed where several of the blades were on the ground, they were still huge and I (very wrongly) estimated that they were like 40 feet long. The length of the flatbed semi trailer is 120 feet. These turbine blades were hanging off the trailer on both ends. They were absolutely enormous. 40 feet? Are you kidding me?

Billings, MT is about halfway between CDA and Boulder being just short of the mark. After having a rather long time to think about how long it was going to take to get into Coeur d'Alene on Tuesday and the fact that I still wanted to do a ride on Tuesday, I came very close to hitting the low end of my little I, ironman driving hour range as I pulled in to Bozeman, MT a full 150mi beyond halfway and slightly before 8pm ensuring that I would not have a ridiculously long driving day on Tuesday. That said, I rolled into CDA around 1pm having gained an hour due to driving so fast I went back in time. Actually, Northern Idaho is in the Pacific Time Zone. The highlight of day 2 was having to schlep everything but the food from the Jeep to the hotel room and back again in the morning where someone found it fit to park in the middle of the roundabout leading into where the front desk was and also my loading door. The car, a red Nissan Sentra sedan effectively blocked any traffic from getting through the roundabout so I had to back in in order to load effectively. The car was parked there the entire time it took me to repack and load the Jeep and as I was finishing up, this old couple came out to claim their car. I almost said something but decided it wasn't worth it. Besides, she was using a walker.

Thursday, June 11, 2009

The purpose of a fuel test is to determine how many calories one's body burns from fat and carbohydrates (carbs/CHO). Essentially, you want to burn as many calories from fat as possible for as long as possible because you don't have to replace these calories while training. The more intense a workout is, the less energy your body gets from burning fat calories and the more it gets from burning carbs.

As an aside, any decent weight loss plan would include a fuel test to inform the participant how many calories from fat and carbs they burn at different levels of intensitites and focus on the levels of intensitites that burn the most amount of calories from fat. This, supplemented with a good diet, is arguably the best way to lose weight.

Now, as any triathlete will tell you, their goal is not really to lose weight. That comes naturally, especially if you're training for half or full Ironman events. Most of the time, I don't care or watch what I eat since I'm burning so many calories. But this doesn't mean that race day nutrition goes out the window. For sprint and olypmic distance triathlons, my normal breakfast of cereal will suffice though I will usually add a few more calories for an olympic-distance.

For longer distance triathlons I'm very type A and for halves, I've got my nutrition dialed in perfectly. As this is my first full Ironman, I've broken out the spreadsheet. Assuming an initial 1800 kCal in the bank and assuming 1 24oz. bottle of my cycling Infinit drink mix per hour on the bike and 2 8oz flasks of my running Infinit drink mix, and taking into consideration the kCal burned from CHO on the swim, bike, and run, I'm about 1800 kCal in the hole. This means between the bike and the run I need to consume an additional 1800 kCal.

I'm not sure how fine the line is between consuming too many calories and not enough. I've been on the losing end of that battle and it's not fun. That said, too many calories, I've been told, can result in bloating. I've never actually been bloated in a race, but it doesn't sound like fun.

After consulting with my coach (and I still have a question outstanding), my current plan is to have one PowerBar TT (which tastes lightyears better than the original PowerBar) every 90 minutes on the bike and a Cliff Blok every mile on the run. These extra calories put me at only ~115 kCal in the hole. Not much else I think I can do here and honestly, I'm not too worried.

Last weekend's ride and run were fantastic. The ride was just solid and the run smooth and steady. I did the run with a master's swimming buddy and honestly, I'd forgotten what it's like to train with someone else. It makes the time go by MUCH faster and you don't have time to think about quitting, or focus on some tiny pain that you wonder if it will become larger and make you stop.

The swimming incorporated some really fast interval sets including an 800m TT followed by 6x200m and a 4x600m, on different days and the body felt good. My swim speed has risen a bit from a month or so ago when I could easily do sub-1:30s consistently. Now, it's a struggle to consistently do 1:35's. However, in yesterday's master's swim class I was able to turn in several sub 3:00 200's. I think it might have been due to my focusing on my stroke finish, i.e., where the hand passes the side of the quad. I think my stroke is normally shorter because I pull my arm out too soon. Leaving my arm in the water a little longer to finish my stroke, allows me more glide time and it's also the strongest part of the stroke.

I'm hesitant to really focus on it during the Ironman swim because since I just started, there's a good chance it'll get sore and I'm not sure what that will do to my shoulders/upper arms for 112 miles in an aero position (yes, I'm aware that I'd not actually be IN the aero position for the full 112 miles).

It's definitely less volume than I've been doing previously but it really doesn't feel like a traditional taper. My coach says "when in doubt, leave it out." However, I've not really missed any workouts yet. I will after tomorrow but I'm adding my last pre-Ironman massage.

People keep asking me how I feel and I tell them, truthfully, it depends on the day. Last night, after master's swim, I was totally amped. Right now, after a run and splashing around in the pool for 30 minutes, I'm tired.

I guess I just want to get up there, check out the course and just chill.

Saturday, June 6, 2009

Tomorrow marks two weeks until Ironman CDA and while I've officially started my taper, the long ride/run on the weekends are coming down a little slower than I was expecting. I suspect this is where my coach's comment "when in doubt, leave it out" comes in to play.

I'm the type of person who absolutely *hates* to miss workouts and while I know my body and will bag a run if I'm just not feeling it, I just don't miss workouts. This probably accounts for my sporadic fatigue on the weekends and sometimes shitty long workouts. After explaining my training program to friends (also triathletes), I get interesting feedback mostly lead by "holy shits" due to the long volume.

This, unfortunately makes me second guess my training regimen. At this point, however, it doesn't really matter since I'm only training for another two weeks and am then taking some much needed time off.

Wednesday, June 3, 2009

JSON is pretty powerful when working in web pages because as a hash, it gives you all the benefits of say, a C struct (namely grouping [unrelated] data, but you can declare it on the fly and you can add/remove to/from it on the fly.

Let's say I have the following Javascript JSON object (I used strings as the values but they could be anything: objects, functions, etc...):

var f = {foo: 'bar1', bar: 'bat1', bat: 'baz1'};

The call f.foo would return the string 'bar1' (sans quotes).

But, what if you have a JSON object and you want to iterate over all the values, but you don't know all the keys? The following will generate an alert box for each key/value pair but the alert is simply used to show the results and any type of processing could be done instead:

for (item in f) { alert(item + ', ' + f[item]);}

NB: Two major caveats:

Because of namespace pollution by, shall we say, less than kosher JavaScript APIs, you can get whamboozled here through JavaScript's allowance of the prototype operator in that items can be magically added to your hash without your knowledge.

While this is a bug (not a flaw as some websites state) in JavaScript, the onus is on the developer to ensure they don't pollute the namespace with their code. jQuery is very good about this by ensuring that everything is encapsulated so no pollution occurs.

As it is a hash, we are NOT guaranteed the order over which items will be iterated. This can easily be mitigated by using an array to store the keys separately and then iterate over the array to get the correct order. It should be noted that in this case, we can retrieve the length of the hash via the lenth field on the array and thus, don't need the for-in loop.

Fortunately, the fix for this is simple. We simply change the above block to:

Tuesday, May 26, 2009

Today was a very nicely appreciated day off to let the legs recover from yesterday's 18-mile run. While they felt fine yesterday, today the legs are a little sore and a little more sore than I would have expected. However, tomorrow's lunchtime bike ride and early afternoon massage should fix that right up. I've found the best cure for sore muscles isn't a hot tub (though it feels fantastic) or a massage (ditto), or an ice bath (uh, not ditto), or Advil (but it does help), but actually an easy workout on the bike (for legs) and an easy swim in the pool (for arms). Nothing hard at all, all Z1, maybe Z2, just get the HR up and blood flowing through the muscles. And follow it up with a good stretch.

We'll see if I have anything left after tomorrow's ride and massage to go swimming afterward.

3-mile warm-up for the Bolder Boulder.6.2 miles for the Bolder Boulder.9-mile run home.

The race was great though I missed my time goal. This was mostly due to my not doing my math homework ahead of time to determine exactly what pace I needed to hold to make my time goal. As a result, and as you might expect, I missed my time goal.

I started way too fast and saw my 1/2 mile split and slowed down. It's hard because the course is downhill for the first 3/4 mile. But, it's not a race to the first mile marker and once we all settled in I started passing a bunch of people. Because I qualified for the B wave I'd thought things would be better than racing in the C wave a few years ago in which I spent the bulk of the time weaving in and out of people and darting through gaps where I could find them, but it turns out the same thing happened, only to a lesser degree. There's always people who go out way too hard and you have to go around them because they've blown a gasket. It's particularly bad in the corners where everyone seems to move in to the apex and slow down. It's very frustrating actually. I was told by a friend, it's not much better in the A wave though I'd think that the faster you run, the less people with whom you have to deal.

But still, I can't be too disappointed. it's still a new PR and considering I've been doing Ironman training for the last 7 months the fast twitch muscle fibers are working pretty well. As I only plan on doing Olympic distance or shorter next year, I'm very curious and excited as to just how fast I can become.

After the race, we gathered in our usual section (work employees) where I chilled (literally, it was getting cold) for a bit before deciding that it was time to leave. Finding my sister, we walked back to the car, got ready for the long run home and headed out. I wasn't feeling great for those first 1.5 miles, but after a short stop at her boyfriend's apartment for her fuel belt, I was feeling good. The legs felt great and I was moving. I suspect it was the caffeine from my sports drink, but I didn't care. The run itself went by really fast and I can only hope this will be the case in my Ironman. The last mile was all uphill as I made my way from Baseline over to South Boulder Road via several open space areas on a bike path and what I can only describe as Louisville's version of L'Alpe D'Huez complete with a ridiculous number of switchbacks including some connecting segments that are so short you literally take one step before having to do a 180 to continue on the path.

I don't even remember my time and haven't yet downloaded my HR data but will do so soon.

Tuesday, May 12, 2009

Sunday's 14-mile ride was the first where my wife rode next to me on her bike while I ran. It was also the first time I had to deal with several ornery cows. They may be cute and funny, but they are NOT friendly. On the way out, one made my wife and I traverse around the path a bit dodging cow pies to avoid getting too close. On the way back, no less than 5 bulls were hot footing toward the path on an intercept course before changing direction when they hit the path and trotting away. It was, by far, the most nerve-wracking moment I've experienced while training.

Wednesday, May 6, 2009

Hooray for off weeks! I feel absolutely AWESOME. My total volume for this week is just ridiculously low compared to my on weeks. It's a fantastic chance to recover, heal, and see about fitting in a massage at some point.

So far, it's working great. I feel great and am having great workouts when I have them. In today's Master's swim class I felt absolutely awesome. And then I got totally schooled by some VERY good triathletes in my lane. Our intervals were on around 1:26-28/100m and while I was able to hold the intervals, I was NOT able to maintain contact with the others who were easily swimming sub 1:20s. As crappy as that is, I know I'm getting stronger and if you had told me in 2006 after I moved here that I'd be consistently swimming in the 1:20s I would have asked to take a toke of whatever you were smoking. But here I am, 3 years later and 40-50 seconds faster.

The only keys that currently come to mind are patience and to not be afraid to move up or down a lane to test the waters or when you need a recovery swim.

Saturday saw a cold and rainy day in Colorado and along the front range. Originally having been slated to do a 120-mile ride, after having a come-to-Jesus meeting with my coach we will be reducing my bike mileage and increasing my running. That said, my 120-mile ride was reduced to first 3 hours and then 4 but since it was raining, I did 3 hours on the trainer and then a 2-mile run on the treadmill.

Sunday, I did a 12-mile run outside (the weather was MUCH nicer) and it was a really good run. I started to fatigue around mile 8/9, but gutted it out and was able to maintain a good pace for the entire middle set.

For the week, I wound up running a whopping 42 miles! Yay! And the legs felt good. 6.5 weeks until race day and I think I'm on a good track. Caught the problem early enough.

Friday, May 1, 2009

For all the running I've done this week, the legs feel like they're in good shape and the intervals I had to run on Tuesday and Thursday turned out pretty decent. I'm fatigued, but it doesn't seem like I'm as fatigued as I've been in the past.

On that note, after Master's on Wednesday I had a good chat with Laura (Billy William's fiance) and Kerrie/Glenn all of whom think that my training regimen has way too much volume. So I had a long chat with my coach about scaling back the cycling and upping the running here in the last month or so before my taper so as to get my running to a decent state because I feel like it's really been crap up to this point. I've not yet been able to complete a long brick - well I did one, probably 50/11 but that was so long ago. My legs shouldn't be so shot after a ride that I can't do at least some running.

So, we changed my long ride and long runs and it will be really interesting to see how it pans out in this last month or so. I'm not worred about the swim at all. I'm only slightly worried about the bike - to the extent that I need to make sure I take in enough calories and stay in Z3. My big fear is the run. With no bike, I'm not worried that I couldn't do a nice long run - but with the bike, everything changes....have to be smart and have to be prepared.

Sunday, April 26, 2009

Today's long brick was to be 68/16. Considering the race yesterday, the legs felt really good. I rode out to Carter Lake with my sister who turned around about a mile West of County Rd. 23 while I wanted to see just how full the reservoir was so I rode to the top of the dam with the expectation that I'd catch up to her somewhere on the way back to Boulder. While there was a headwind going back, it wasn't so bad as to make my 22 mile Z3 interval terrible. The problem started around Nelson and 75th when the wind (headwind, of course) picked up to about 30 mph with nasty gusts to probably 50mph.

It's not a long stretch of road from the afore mentioned intersection to Westbound Niwot Rd and 73rd but after that long of an interval it was awful and at some point, my legs became shot. Luckily I was done with the interval and had a nice cruise back to the gym, but the damage was done. I had nothing left for the run and couldn't even eek out 3 miles. A very bad omen for an Ironman.

Saturday, April 25, 2009

I went to bed a little later than I should have because I was watching a movie on HBO and it's usually really hard for me to stop watching a movie halfway through. I'd not even bothered turning on the TV but I was verifying the start time of my race and realized that I was off by well over an hour. The 7:25am I saw was when registration opened, not when my race started - it started at 9am. So, I figured I had more time.

Then, this morning, for whatever reason I kept thinking that it started at 9:30 and was planning my warm-up, stretching, and post warm-up BM but then realized on the way to the reservoir, I was wrong in my planning and was very glad at that point that I'd left really early.

The weather was cold, 35-40 degrees with light rain on and off on the drive over but none at the res itself. I got my race packet and taking the rest of the crap in the bag back to the car I affixed the number to my race belt, strapped the belt around my waist and headed out for what was a 3-mile warm-up. Good rule of thumb: the shorter the race, the longer the warm-up needs to be. I'm not sure if 3 miles was necessary, but I was nice and warm (and unfortunately also somewhat wet from sweating) when finished. I got back to the car with about 20 minutes before start time so I did my normal stretches, stripped to my race gear (HEP tri shorts and my sleeveless running top emblazoned with HEP logos and the faint white outline of an iron - apparently the Howie's ironing board needs a little more padding - from when Jen ironed on the logos) donned my Halo headband, and jogged to the starting line with about 5 minutes to spare.

(The race strategy my coach came up with was breaking the race down in to 3 parts: 2 miles, 2 miles and 2.2 miles hopefully negative splitting the parts but shooting for a time goal of 45-47 minutes. The first part was to be Z3/Z4 cusp, the second, mid Z4 but below threshold, and the third, whatever I had left. The goal was also to get faster by only increasing the cadence. As I don't have a cadence sensor on my Garmin FR 305, I have no idea if I did just that, but my times did come down at the end.)

As there was no one at the starting line and indeed no less than 5 volunteers had no idea where the starting line even was I wasn't worried about missing the start, but rather staying warm. Thankfully, we started right on time and since it's the Canine Classic, there were dogs everywhere, including in the run. I started out a little quicker than normal to stay ahead of the slower people and doggies but some of them passed me (never to be seen again until after the race...there were some fast doggies). I settled in to a low Z4 pace and essentially wound up running with this really tall guy and a couple and their two border collies.

Somewhere between miles 2 and 3, I dropped the tall guy and the collies and caught up to the dog/owner in front of me passing him in a corner. I never saw any of them again though I peeked back a few times to see where they were.

As we were running counterclockwise around the res, anyone who knows that section of the road knows it's rather rolling. I'd thought that my mile splits would either stay the same or slow a tad, but because of taking advantage of the hills and upping my cadence I was able to drop the times rather significantly for the last two miles which leads me to believe I was too conservative in the middle part of the run (explained below), a mistake I will not repeat for the Bolder Boulder.

My splits were as follows: 7:10, 7:22, 7:17, 7:19, 7:04, 7:03.

I think I was a little nervous after the first mile and backed it off a tad to make sure I had enough left at the end. As briefly touched on above, I think I might have over reacted a bit and backed off too much. Ideally, for the Bolder Boulder, I'd like those last miles to be sub-7 which, with that nasty hill at the end, might be hard.

I'd originally thought this week was going to be kind of bad because the gym was completely closed which mean no swimming. In actuality, it turns out that this week was pretty frickin' awesome. I was able to get all my workouts in and throw in two extras because of replacing the swim ones. The end result: for the first time in a while I've hit my mileage goals for biking and running. This assumes tomorrow won't be any different.

Monday, I did my ride at lunch and as I was going under the overpass at I270 and the Platt River Bike path, there was a car(!) parked under the bridge on the path. Forgetting for the moment that this was a really bad spot for a car (under a bridge on an Interstate), I had no idea how the car got there because there were guard rails along the highway on both sides which would have prevented the car from driving down there. So, being a good little American that spies on his neighbors for the police (big brother, anyone?) I phoned it in to the Denver police department's non-emergency number and continued on my ride. My initial thoughts weren't of anything malicious, that came later, but that car had no business being parked where it was and besides, he was blocking the path meant for cyclists and pedestrians. I should also point out that this section of the Interstate and bike path has really nothing else around it but open fields and an oil refinery.

I turned around and when I got back to the same place, the car was gone and there were two sheriff's vehicles on the path. I asked about the car and the trooper said they'd made the owner move it and I then saw that a section of the fence was down which is how the driver got through. The trooper said that he was one of the highway workers but didn't want to park his car on the side of the road. I looked down the highway and saw about an 1/8th of a mile away there were a bunch of cars parked along the side of the road. So the owner apparently drove his car an additional distance down the road, across a large swatch of grass/weeds, through the fence onto the bike path and then under the bridge.

Monday, April 20, 2009

After doing most of my workouts that were slated for last Thursday and Friday this past weekend, today saw me get back on track with my training. Well, sort of. You see, the gym, in its infinite fucking brilliance, decided that closing for it's annual maintenance week in late August didn't make sense because....well, honestly, I have no idea why they thought it didn't make sense. So, they moved it to this week, in April. You see, in late August, most people's training seasons are winding down whereas in April everyone's training season is in full swing. So, naturally it makes sense to pick this week to close the gym.

On the bright side, I feel my swimming is totally solid. I have zero qualms about the Ironman swim. I'm a tiny bit nervous about the bike, but only because I'm afraid I won't hold back enough - which could wind up being a double-edged sword and I could hold back too much. I'm reasonably worried about the run. I have done long runs, but only up to ~13.5 miles or so. And my weekly mile totals haven't been on track because I seem to always blow off one run each week. This is where the gym being closed could be a blessing. It allows me to run and bike 4 days in a row this week with a day off on Friday in prepration for my 10K race on Saturday.

Last week was going well, until Thursday when the sun disappeared and it started raining. The sun wasn't seen again until Sunday. In between, we got a ton of rain, and a ton of snow. 9 News has the official total for Louisville at 8.3" but I know better. I had to shovel my sidewalk and driveway 4 times in < 12 hours. And this wasn't the light and fluffy stuff that skiers go "Woo hoo! Powder day at Vail!" This was the stuff that my neighbor accurately described as like shoveling cement. The shit was heavy.

My in-laws were in town for my Wife's 30th birthday and quite coincidentally, my weekend was free of workouts, or, was supposed to be. With Thursday's rain punting my workout to the evening and that also being my wife's actual birthday made it day off #1. Friday it snowed all day. It never stopped. It got heavy at times, and then lightened up a bit, and then got heavy again. But it never stopped snowing. I could have worked out inside, but didn't.

Friday, April 17, 2009

After scouring the web for how to do this, I wound up having to piece through at least a half-dozen blogs to figure out how to do this and to get it working. So, to keep you from having to do the same, I give you:

How to NFS mount an Ubuntu Linux drive in Mac OS X Leopard-- UPDATED for 9.04 support --

One assumption I have made are that both computers are running on the same network, but they don't have to be. Your Mac needs to be able to "see" your Linux box. If they're on separate networks, you will most likely have to deal with portmaping through routers and firewalls which is still fairly straight forward, but beyond the scope of this document.

I reference my Linux box by name because I have its IP address in my Mac's host file. You don't need this however, and can simply use it's IP address instead.

I also assume you have some rudimentary knowledge of your Mac and Linux, specifically, being able to open terminal windows to get a shell and command line as well as having sudo privileges on your Linux box.

Before we begin we'll need some information for later. From your shell or terminal window in Ubuntu, execute the id command. You should see something similar to:

uid=1000(doej) gid=1000(doej) groups=4(adm),20(dialout),1000(doej)

All we care about are the uid and gid values for your username. In the output above, we see the uid and gid values are 1000 for the user doej (John Doe).

Now, execute the same command on your Mac from the Terminal program. You'll notice the output is a little different:

uid=501(doej) gid=20(staff) groups=20(staff),98(_lpadmin)

Note that the uid is 501 and the gid is 20. In my examples, my username is the same between my Mac and Linux, but they don't have to be.

Save these numbers or shell output for later.

In Ubunutu make sure you have the following packages installed: nfs-user-server and nfs-common. Do this by executing "sudo apt-get install nfs-user-server nfs-common" fromyour shell or terminal window.

NB: this will fail in Ubuntu 9.04 because the brilliant folks at Canonical decided to remove it and I don't know why. However, fear not you can still get the package here. Install this file with the command "sudo dpkg -i [filename]" - this will error out if you somehow already have the nfs-kernel-server package installed.

Now we need to make a map of our user and group IDs we obtained in #1 and #2 above. This will ensure that when we NFS mount our drive on our Mac, the permissions and file ownership will all be set correctly. A common directory for this file is in /etc/nfs. If this directory doesn't exist for you, go ahead and create it.

Create a file in this directory called foo.map - it can be called anything, but the naming convention is to use the name of the accessing server, in this case the hostname of your Mac. Mine, creatively enough, has a hostname of mac so my file is called mac.map.

Here's what my file looks like:

# mapping for client: mac# remote localuid 501 1000gid 20 1000

The first two lines are just comments. The second two map theuid and gid from steps 1 and 2 above. Here, remote means your Mac, and local means your Linux box.

NFS gets its export information (the directories that are allowed to be NFS mounted) from the file /etc/exports. If this file does not exist, just create it. Here's what my file looks like:

/home/doej mac(rw,insecure,map_static=/etc/nfs/mac.map)

The first argument is the directory on Linux that you want to be able to NFS mount. In this case, I've chosen to mount my home directory. The second parameter are the mount options. To see a full list of options, execute man exports. I've listed my Mac hostname as the server that is allowed to NFS mount this directory. The options I've chosen are:

rw - read/writeinsecure - allow non-root user to NFS mount directorymap_static - the file we created above that maps our user and group IDs from Mac to Linux box. If you want to be able to write to your NFS mount, you MUST have this option set and set correctly.

Before you can mount anything on your Mac, you'll need to restart NFS on your Linux box (so it picks up the exports) with the following command:

sudo /etc/init.d/nfs-user-server restart

Finally, on your Mac, you can mount this drive with the following command:

mount -t nfs bajan:/home/doej /Users/doej/foo

This will mount your home directory on Linux (bajan is the hostname of my linux box) to the foo sub-directory in my home directory on my Mac. To test everything is working correctly, cd into the foo directory in Terminal and try creating a new file. If you can, you're all set. If not, shoot me a message and I'll try and help you out as best I can.

That's it! NFS is really easy once you get the hang of it, and even if you aren't Linux savvy, it should still be pretty easy to do.

Tuesday, April 14, 2009

This week's training, for the first time in recent memory, is going very well. Recovery ride on Monday at lunch and then a hard Master's swim practice where the coach moved me up to the fastest lane (faster than I normally do, but not with the swimming gods, they didn't show up, at least not all of them). The main set was 4x75m, 6x75m and 8x75m. The set of 4 was 25m kick, 50m swim on 1:25, the 6 were 25m drill/50m swim on 1:15, and the 8 were all swim on 1:05. Those hurt. A lot. But I hit my intervals and even got a "good job" from one of the gods in my lane.

Today's first workout was a 6-mile run w/ mile repeats. My times were 7:39, 7:02, and 6:40, but the weird thing was that the first one was by far the hardest. More intervals later on the trainer so that now, my legs are a bit fatigued. That's a lot of Z4 in one day. Luckily tomorrow's run is Z2 and I'll have most of the day to recover for tomorrow's Master's class.

After Sunday's recovery ride and botched attempt at running out side in 40-degree temperatures with an ice cold rain shower thrown in I emailed my coach my week 31 data and basically lost it. I told him I was tired all the time, the week sucked workout-wise and a lack of energy to do workouts, let alone get through them.

He did what a coach should do. He gave me a good pep talk and pointed out the positives this training season:

huge base miles

LONG workouts in a difficult time of the season

the 5-hour trainer ride

going from not running at all to running half of a 10-mile run at a sub-7:40 pace.

The last may not sound like much, but remember, this is Ironman training, not short (or even long) course training.

The result: Week 32 has started off well and continues to be a good training week.

Sunday, April 12, 2009

Saturday's 110-mile ride was interesting for several reasons. First and foremost, I managed to leave for my ride before 10am, which never happens. Second, I saw a woman get arrested - that was entertaining. And finally, most of the ride was a blur because I totally zoned out for most of it. The last isn't so crazy as I usually zone out in races and for short spans in my workouts. But never for several hours. It's like being on autopilot. It's creepy, but I guess good in a way.

The route I took was my normal ride to work route plus an extension that saw me go all the way to Chatfield State Park. At some point on the Platt River bike path I realized my HR was a little higher than it should have been and at mile 38, I realized why. At mile 38, I looked to my left and saw the most sexy thing one can see out on a bike ride aside from a sexy female (if you're a guy, that is). At mile 38 I saw a flag galliantly flapping in the breeze indicating that I was riding dead on into a headwind. Which meant that I'd have almost a 30-mile tailwind on the way back. Oh, and did I mention that it would also be downhill?

Knowing this didn't make the ride out any easier. By the time I reached Littleton, the wind was really gusty and since Chatfield State Park is very exposed, the wind there was incredible. But turning around was oh so sweet. I was making awesome time. Right at the junction of the Clear Creek and Platte River bike paths, there was a couple attempting to change a flat. So, as I normally alwasy do, I asked if they needed any help. Either they didn't respond at first or I didn't hear them so I asked again and heard something about whether or not I had any tire levers. It appears they had left theirs behind. I'd like to think I taught them how to change a flat, but they were pretty novice and I'm essentially hoping that just a few tidbits stuck.

After the flat fix, I was on my way. 22 miles back to the house and all up hill. Well, 98% uphill. There's a nice downhill stretch at McCaslin and 128 and then again at the top of the hill by the Key Bank going North towards Costco. I still have to download my data to see how good the ride was speed wise. But I think it was pretty awesome w/ that long downhill tailwind.

Friday, April 10, 2009

I rode to work on Wednesday. This entails getting up at 5am and leaving by 6 in order to get to work at a reasonable time. I got up at 5:15, went through the obligatory "do I really want to do this?" and finally got out of bed closer to 5:25. I still managed to leave before 6 though, so no harm there.

The temperature was 37 and knowing that when I hit the valleys in Westminster and along the Coal Creek bike path, the temperature would drop, I dressed for a cold weather ride: leg warmers, booties, and two long-sleeved layers up top. I got the chance to wear one of my new Castelli cycling tops I scored off of BonkTown. It was awesome and more importantly, didn't prevent me from riding in the aero position.

Thursday, however, I was just too tired to do anything and wound up taking the entire day off - which I know is bad, but I just didn't have the energy.

Tuesday, April 7, 2009

After the 4-day beating my legs took commencing Friday and ending Monday today was a VERY much needed rest day as my body is just flat out exhausted. I'm not really sure how much more I can take of this, but my coach assures me that next week will be very light and the miles will start coming back down.

Until then, this week has 6.5, 8, and 10-mile runs, along with 2 25+ mile rides and a 110-mile ride scheduled. So far, I'm already a mile behind on the running and one of the two shorter rides was done on a trainer so I'm not really sure how that equates realistically over to distance.

Sunday, April 5, 2009

So we didn't get 16 inches of snow as promised yesterday. What we did get was 3 inches that didn't stick to the roads but was very wet nonetheless. Additionally, it was REALLY cold w/ 30mph winds driving the wind chill down close to zero if not below.

Saturday's brick wound up being a shortened run w/ the full run coming today. I finished my ride on the trainer yesterday and was outside for all of 2 minutes waiting for my Garmin to figure out where I was and was thinking, "there's no way in hell I'm going to run 13 miles in this..." So, I did 6 and called it a day.

This morning, I did my full 13.5-mile run and the weather mostly cooperated alternating between sunny and not sunny until the last 3-5 miles. I must have taken off my gloves and headband and put them back on at least 5 times before just leaving my gloves on. I wound up doing a huge 13.5 mile loop from my house that had me take McCaslin to Marshall Rd by Costco and Marshall Rd all the way to the South end of the BoBo link trail. I then took the trail back to South Boulder Rd. and followed SBR back into Louisville.

If anyone's ridden out SBR, they're fully aware of the hill that starts kind of half way between Cherryvale and 75th but just keeps going up until McCaslin. It's not what I would consider to be an "oh my god" hard hill, but it sucks nonetheless. Add that the entire shoulder was completely covered in sand and I was running into a headwind my ~7:30 min/mi Z3 pace dropped to over 10 by the time I reached the top. It dropped back down once I crested at McCaslin but by then I only had a half mile left so it wasn't long enough to get my average lap pace back down.

I also haven't broken in my home copy of my new running shoes so I had to do this run in my old ones and my feet are reasonably sore. I'm curious as to whether or not they would have been had I had my new shoes and had them broken in. As I have a 10-mile run tomorrow, we'll see if my work copy of my running shoes make a difference.

Friday, April 3, 2009

It's supposed to snow tonight, big time. Supposedly a foot of snow....yay...after last week's two debacles I can honestly say I'm not really looking forward to it. What I am concerned about is my long brick: 65-mile bike, 13-mile run.

I'm not worried about the trainer ride, after my LOTR marathon last week, trainer rides are a piece of cake, regardless of the workouts. It's the 13 miles I'm concerned with. You see, my tolerance for treadmill running is at an historic low. I hate the damn thing. It's incredibly boring, the speed is constant, and the damn thing is so loud that I can't hear the TV so movie watching is crap. And even if it were enjoyable, the prospect of running 13 miles on a treadmill makes me cringe. Running 13 miles outside is like watching a REALLY good movie, it goes by fairly quickly and is relatively pain free. Running on a treadmill for 13 miles I would have to guess is like watching History of Violence or Last Action Hero, basically, a really, really, REALLY bad movie where each scene just drags on and every time you look at your watch thinking surely 10 minutes have passed, it turns out it's only been 3.

If we get a foot of snow tomorrow, there's no way I can run outside. Snowshoe, sure, but not run. I suppose I could go to the gym and do the elliptical machine - it's at least faster than a treadmill, but I'm still looking at probably 90 minutes (I can go 8-9 mph on an elliptical, not really realistic for real world times, but better than blowing it off all together, no?)

I have two pairs of running shoes. One for work and one for home. The reason I have two pairs is because several years ago I left a pair on the bus. The really shitty thing about doing this, aside from the fact that no one ever turned them in to lost and found, is that they were only a week old. Additionally shitty was that I also had my pull buoy (with my name on it) from swimming in the same bag. I never saw either again.

So, I bought two pairs of shoes, one for work and one for home so I would have to worry about being responsible and actually remembering to take all my crap off the bus with me when debarking. While a little more expensive an option than some would choose to take, it's worked well for me ever since.

My most recent pair has definitely seen better days. They're a bit over a year old and each have about 400 miles on them including a bunch of triathlons and running races. They were purchased as part of a Cyber Monday, free shipping, deep discount, online shopping extravaganza. As any triathlete will tell you, the surest way to decrease the lifespan of any piece of equipment is to race with it - especially in triathlon. Things get wet from swimming, wet and salty from profuse sweating (hey, some of us perspire), and wet and sticky from sports drink spills. Anyway, these shoes were probably long overdue for changing.

Before anyone considers criticizing my length of shoe usage, consider this: cheap running shoes are essentially the same as expensive running shoes except that they don't last as long. As someone put it to me, the expensive running shoes last about twice as long as the cheap ones, so you don't really save any money. Whether or not that's true, I do know that if I wear running shoes too long, I get shin splints. And, I haven't gotten shin splints since I was a kid. 'Nuff said.

I dug around online looking for the same model as my current shoes, the ASICS Gel-Nimbus IX, only to discover that they had been replaced (of course) by the next model, X. Oh, I found plenty of IX models online, but they were in sizes of <> 11. So, I had to "settle" for the X model.

They came yesterday and man, are they sweet. I put my new orthotics in them and went for a run today. All I can say is "wow." It's awesome. Sometimes you don't realize just how bad something is until you replace it with something good.

I just need an extra set of running orthotics so I don't have to keep pulling them out of my work pair to bring home.

Tuesday, March 31, 2009

I've bonked enough times now to know how to eat before/during a workout. Yet, I still make dumb mistakes. I had the Whole Foods equivalent of a bowl of Frosted Mini Wheats for breakfast and took a bottle of my endurance formula drink on my ride. Sadly, it was not enough calories to prevent some bonking on the run. Approximately 4 miles into the run, it happened. The slow welling up of the combination of dizziness and fatigue with an increasingly light-headed feeling that signifies your body saying "Ok, I'm done."

When it snows here in Colorado, typically, the weather that follows is clear, sunny skies with a balmy temperature of 60+ degrees. While Friday turned into this and melted a significant portion of the snow, I was not really looking forward to a 100-mile ride on roads that I now clue as to their condition. Additionally, even if some local loops proved clean enough, the prospect of doing said loops 3 or 4 times to reach 100 miles was also not very appealing. Thus, the 5-hour trainer ride was born.

In all honesty, it wasn't as bad as it sounds. I threw in the extended version of LOTR: The Two Towers, watched it all the way through (3 hours, 40 minutes) and then threw in it's successor, The Return of the King. Fast forwarding through all the Gollumy parts, i.e., slow plot parts w/ Gollum, the last 1:20 went as quickly.

Thus, at least for me, I think I've found the solution to the boredom of trainer riding: Find an epicly long movie that has stuff you really like, e.g., action sequences and before you know it, you'll be stretching, and your wife will yell down that it's 6:30 and you're meeting your sister for dinner in 30 minutes.

Friday, March 27, 2009

After shoveling our sidewalk and driveway 3 times in 18 hours and nursing a VERY sore shoulder/neck for the last 24 hours, the sun came out today and teased us with typical gorgeous CO weather right after a hellacious snow storm.

The garage door is now fixed so we have the use of our cars back. As the repair guy left, his final words were "That's about as bad of a crashed door as I've seen in a long time."

Ha, nice.

It was bad enough that I totally blew off my workouts for Thursday but we also ordered Pizza Hut for dinner...yikes...but OH so good.

Thursday, March 26, 2009

That's how much snow is surrounding our house. I've shoveled the sidewalk and driveway twice today and the wall of snow lining the driveway would serve any child as a solid snow fort or barricade as protection against snowballs.

But alas, there were no children or snowball fights. Just a solid day of working in front of the computer from the home office and blowing off both scheduled workouts. I can handle several hours on the trainer. I cannot, however, stand more than a few minutes on the treadmill. Even with the TV on.

It really sucks too because overall, this week had been going rather well training-wise. I will do some sort of workout or workouts tomorrow, but I was supposed to do a 100-mile ride on Saturday. There's no way in hell, well, maybe only in hell, all this snow will disappear from the roads by Saturday. I don't care how great the plows are.

On top of all this, our garage door is broken. It is currently at a very odd angle and is mostly no longer on either of its tracks. A repair person is supposed to come by tomorrow but with this weather - I wonder if he'll show up. I hope so because both our cars are trapped inside.

Friday, March 20, 2009

I'm in San Diego on vacation and as anyone who lives at altitude will tell you, going to sea level and training is a huge treat. You have to workout a lot harder to get your heart rate in the proper zones. E.g., today's run had mile Z4 intervals in it. I was able to do 6:40s in low Z4 whereas at altitude, if I could even do 6:40s they'd either be in high Z4 or in Z5. The difference? At altitude, that's above my LT which means there are side effects, namely lactic acid.

Additionally, this was the first real run on my new orthotics and my feet felt weird at first but after a mile or two, they felt great.

Tuesday, March 17, 2009

I'm now the proud owner of custom running and cycling orthotics! Yes, two separate pair - one for running and one for cycling. I had a chance to use the cycling ones on a 25-mile ride today with Z3 intervals and they were AWESOME! No stress on my fascia at all. Dr. Andy Pruitt is a god...and he is ALL business during a session. I swear, I think they keep him so fully booked at the BCSM it must be why he doesn't do chit-chat.

I tried out my running inserts but it was only for a shorter run and on a treadmill at that. I'll have to wait until Friday before I can give them a good test.

The desire to blog starts like that feeling of getting a new toy - exuberance and excitement at first as you play with it all the time but it inevitably fades as more important things make you forget. And when you remember that you forgot, you're not in a place to mitigate the issue.

It was not my intention to wait over a week before blogging, life and training invariably get in the way. Thus, I have an enormous amount of respect for folks who blog daily on their own. Those that blog for a living get somewhat less respect because hell, if I had to do it for a living, I'd find something to write about too.

Sunday, March 8, 2009

Still tired from yesterday's ride and LATE night post-JJ Dinner festivities (we got home after midnight) I wasn't über excited or ready for today's interval run. I finally got to the gym after noon and as I turned on my Garmin I immediately received a low battery warning meaning I'd have to wing it on the distance. I swapped my dead GPS for a watch from the lost and found and away I went.

The run got better as it went on. My intervals got progressively faster. The way out was slightly uphill and into a gusting headwind (of course). But this time, when I turned around, I had a nice tailwind.

When I got back to the gym I wrote down my splits from the borrowed watch and exchanged it back for my Garmin. Earlier this evening I manually entered the split data into my training log and realized that something was wrong. I was only supposed to run 7 miles but with my splits, that meant my penultimate split meant I was running 30-minute miles. I don't even think I can walk that slow. After mapping my run on mapmyrun.com, I realized that I wound up running 8 miles instead of 7.

It seems to be a recurring theme doesn't it? This week has seen more windy days than I can remember in a long time and while it may be good training, it sure is tiring. Saturday's Z3 ride became more of a race to get back to Boulder before it started snowing. It turns out, while the fog in the foothills looked foreboding snow never actually materialized. The wind, however, never stopped materializing. In fact, it materialized in several different directions.

My ride out was in a headwind but I was going easy because I knew that I'd be able to fly when I turned around. After all, headwind going out = tailwind coming back right? I turned around about 5 miles North of 75th where it crosses 66 and prepared myself for the awesome tailwind in which I was about to ride. Any minute now, it'll kick in...any minute now...

Much to my dismay, the tailwind was not to be found and the only solace I had was that it was essentially all downhill to Hygiene and flat to Gunbarrel. My speed increased significantly from my first hour to my second hour but I don't believe it was due to any wind assistance since a large portion of that hour was in some form of head/crosswind. Riding into Gunbarrel I became rather frustrated at how difficult riding had become in the past 10-15 minutes and why I didn't seem to have any power. Riding by the fire station in Gunbarrel revealed why. There, on a flag pole, was the American flag rippling proudly in the breeze. Indicating that I was riding head on into the wind. So much for my previous equation: headwind out = tailwind back.

As a rule triathletes, well, many of them anyway, don't draft. In competition (save for ITU events) it's illegal and in training it's not really conducive to effective training (though I'm sure there are those out there who will beg to differ). As such, I don't draft when training, even when I'm on my road bike.

For drafters out there, proper drafting etiquette when it comes to a total stranger is to make sure the person you're drafting off of 1) knows you're there, and 2) is ok with you sucking wheel. For me, I don't like drafters...period. And if you don't ask and just magically show up on my wheel, well, I'm either going to make you pay, or make you pass. Friday's ride saw a very windy day (as appears to be becoming the norm here these days) with the headwind coming on the ride back to my office. About 5-6 miles from the office I rode past a park where a guy was walking his bike down towards the path from what I assume to have been the port-a-potty located there. About 5-10 minutes later, I happened to turn and see him sucking my wheel and I have no idea how long he'd been there.

When he finally passed me, he never said a word to and parked himself right in front of me, I assume to return the drafting favor. I dropped back outside the draft zone and just let him hang out there. After about 4 minutes he dropped back behind me again because it must have really sucked to have to sit in the wind like that for SO long. We did this back and forth for a few cycles, him pulling for a few minutes with me hanging back and then dropping behind me. Finally we hit a "hill" while he was pulling and slowed down considerably forcing me to draft because I couldn't pass due to oncoming path traffic. After the traffic went by, being really annoyed, I passed him, kicked it up to Z4, and dropped him.

I guess it shouldn't bother me as much as I let it, but the dude NEVER SAID A WORD. Sure, I could have said something, but then, I wasn't drafting.

Thursday, March 5, 2009

Up until yesterday my recovery week wasn't anything to write home about, other than my tempo ride on Monday. Tuesday was a rest day and Wednesday was a bunk workout day because I had a meeting at work from 10:30-1:00 and 5 minutes into my run I felt dizzy. I managed to slog through 2.5 miles mixing walking and running because I really just had no energy and bailed on the swim I was supposed to do.

Today, however, was different. Much different. And much better. My mile intervals in my 6-mile run at lunch were awesome even with the gusty wind blowing debris and dust everywhere. My trainer ride was fine on the new saddle but I'll withhold judgment until I can get more rides/time in the new saddle before I declare victory.

Tuesday, March 3, 2009

I had several appointments at the BCSM today to get fit for running and cycling orthodics. I'd been waiting for my new FSA to kick in which it did at the beginning of February. I procrastinated an entire month. My reason for obtaining orthodics was because in between last year's Vineman 70.3 and the 5430 Long Course (3 weeks) I managed to do something to my left foot which turned out to be acute Plantar Fasciitis.

If you Google Plantar Fasciitis, you'll get well over 600K hits. It's a common problem and there's a lot of gimmicky devices out there to supposedly help you get rid of it.

My solution at the time was to stop training for the season (after all of the 5430 Long Course, well, up to the first mile marker on the run), take a month off, and start training again, but using the elliptical machine in lieu of running. Additionally, I took to massaging my foot twice a day with whatever I could find. It turns out that the shaft of a long screwdriver works really well. After another few months of that, I started running again in late November (I think) starting my runs at a mile and upping by a half mile every other day (or so) until I got to 7-8 miles. I then got back into my regular running regimen for training. All that worked great....until a few weeks ago when I managed to tweak my foot in the pool, of all places, from pushing off the wall.

I've not been as good about massaging it as much as I did before but will be after today's appointment. It turns out, that I now have a bone spur on my left heel. Bones can only do one thing under trauma...grow. My fascia either partially tore, or partially detached and the bone grew to try and fill the gap.