Triathlon

Race Report: Spirit of Racine Half Ironman

Sunday, November 16th, 2008

Spirit of Racine Half Ironman Triathlon, Racine, Wisconsin

Better late than never…this is a race I did almost 4 months ago.

To cap of my trip to Wisconsin, I took part in the Spirit of Racine Half Ironman with 2000 random midwesterners willing to get up at 5 am and jump in Lake Michigan.

I did one Half Ironman last year, and it was a painful experience. I ran out of fuel about 5 hours in and struggled to the finish. My goal was to finish much more gracefully, and beat my time from last year. I was successful in those two goals and had a great race.

Spirit of Racine Half Ironman 2008
Death march up the beach…

A cool aspect about this race is that it was a point-to-point swim, so not curving around buoys and swimming laps in a lake. But that mean you have to walk to the start–in this case 1.2 miles up the beach. It was a beautiful beach, though, and it was cool walking to the foggy start with 2,500 people.

Spirit of Racine Half Ironman 2008
Game face…3 minutes to start.

The start was delayed because of the fog. Not affecting the start time was the 55 degree water temperature. The beach was abuzz with conversation about how cold the water was. And it was really, really, cold. I saw a few people with dish-washing gloves on to keep their hands warm!

Spirit of Racine Half Ironman 2008
Hey, that wasn’t so bad!

There were three aspects of the swim that made it the best open water swim I’ve ever done:

  1. Swimming stright is just plain more fun than swimming in circles.
  2. When you swim point-to-point, there is no bunching up at the corners!
  3. The water was so clear I could see the sand bottom–I just lined myself up with the ripples and used them like lane lines.

The swim was my best leg relative to the field. I really enjoyed it!

I hit the bike and ate and drank like crazy. I was determined to fuel up properly and did a good job staying on my eating schedule. The course was pretty good–through the city of Racine and then out on rural highways. But Wisconsin gets cold in the winter, and years of freezing and thawing causes concrete roads to develop big cracks every 20 feet or so. It was no fun biking 56 miles with that periodic jarring. Ugh. I was glad when it was over!

Spirit of Racine Half Ironman 2008
The last quarter mile was a bit of a haze…

The run was great, if a bit hot. By the time I finished it was 85 degrees. But I kept a steady pace on the two-loop course, and kept in the game by shouting out supportive comments to other runners. I’m not usually very talkative, but I’ve found it’s a great distraction, and I think most people don’t find it too annoying.

The last quarter mile was really hard, but I guess that’s a sign of leaving everything on the course. I was really pleased to have the pain be so short-lived. Much better than last year. I got a PR by 40 minutes, and I’ve never been so pleased to finish in 516th place!

Overall Place: 516
Age Group Place: 89
Overall Time: 05:17:36
Swim: 00:29:52 (554th)
T1: 02:13
Bike: 02:40:59 (652nd)
T2: 01:41
Run: 02:02:50 (650th)

VisualForce Email Templates

Friday, November 14th, 2008

When I saw that Winter ‘09 was going to include VisualForce email templates, I got really excited. I thought about all the cool things I could do with pages running custom controllers and getting whatever data I wanted.

And then I saw that VF email templates weren’t going to be able to use custom controllers and I wrote them off.

Well, I’ve dug back into them and turns out they are going to be amazingly useful. And when we get custom controllers on them, they will be seriously butt-kicking.

Here’s a VF email template:

<messaging:emailTemplate subject="Thank you for your Support!" recipientType="Contact" >
    <messaging:htmlEmailBody >
        <html>
        <body>
            <p>Hello {!recipient.Household_Greeting__c}--</p>
            <p>Thank you so much for you giving this year. Every gift helps us make a difference in our envrionment...</p>
            <apex:outputPanel rendered="{!recipient.Total_Gifts_YTD__c>0}">
                <apex:outputText rendered="{!recipient.Total_Gifts_YTD__c>0}">
                    <table>
                        <tr>
                            <td>Gift Date</td>
                            <td>Check Number</td>
                            <td>Check Date</td>
                            <td>Amount</td>
                        </tr>
                </apex:outputText>
                <apex:repeat value="{!recipient.OpportunityContactRoles}" var="opps" id="theRepeat">
                    <apex:outputText rendered="{!opps.Role=='Individual Donor'&&opps.Opportunity.IsWon&&opps.Opportunity.Year__c=='2008'}">
                        <tr>
                    </apex:outputText>
                    <apex:outputText rendered="{!opps.Role=='Individual Donor'&&opps.Opportunity.IsWon&&opps.Opportunity.Year__c=='2008'}">
                        <td><apex:outputField value="{!opps.Opportunity.CloseDate}"/></td>
                        <td><apex:outputField value="{!opps.Opportunity.Check_Number__c}"/></td>
                        <td><apex:outputField value="{!opps.Opportunity.Check_Date__c}"/></td>
                        <td><apex:outputField value="{!opps.Opportunity.Amount}"/></td>
                    </apex:outputText>
                    <apex:outputText rendered="{!opps.Role=='Individual Donor'&&opps.Opportunity.IsWon&&opps.Opportunity.Year__c=='2008'}">
                        </tr>
                    </apex:outputText>

                </apex:repeat>
                <apex:outputText rendered="{!recipient.Total_Gifts_YTD__c>0}">
                    </table>
                </apex:outputText>

            </apex:outputPanel>
            </br></br>
            We look forward to seeing you in 2009!

            Best,
            Steve

            </body>
        </html>
    </messaging:htmlEmailBody>
</messaging:emailTemplate>

In line 1 I connect this template to the Contact record as RecipientType. Then when I send to a Contact, I can merge fields. So in line 5 I’m pulling a custom field on Contact called Household_Greeting__c. So far so good.

On line 7 I start building an HTML table, and I only want to show it if this Contact has given money this year, so I render only if their Total_Gifts_YTD__c>0. Slick. No custom controller, but I can still put some logic in there.

On line 17 I create a repeat that will loop through all OpportunityContactRoles this Contact has. Whoa! I suddenly have access to all their donations!

On 18 I want to create a table row, but only when the opp we’re dealing with is won, was in this year, and this contact was the individual donor role on it. We have to repeat the same rendering logic on each field as well.

I’m looping through OpportunityContactRoles, but I want Opportunity information. That’s really easy. On line 22 I get {!opps.Opportunity.CloseDate}–the close date off the Opportunity on this contact role. Simple!

So with no controller, I can get any related list off the Contact and iterate through it. And I can traverse across multiple relationships. Only getting the records I care about requires some rendering hacks, but it works. Also, I don’t think I can sort the items at all.

I’m impressed with what VisualForce email templates can do with no controller. Check them out, they’re easy to use! And when they give us the ability to use Custom Controllers, we’ll be able to do crazy things.

Update: In the comments Andrew sets me straight on a key feature–you can put custom VisualForce components in VisualForce email templates. Wow. We can now do just about anything we want. Seriously, there are very few limitations to what can be done now. Thanks Andrew for pointing out that killer feature!

2 miles from my house

Monday, August 11th, 2008

discovery

Another reason I love where I live–Discovery Park and it’s miles of running trails right in the middle of Seattle.

Race Report: Lactic Edge Sprint Triathlon

Thursday, July 31st, 2008

Lactic Edge Sprint Triathlon, Steven’s Point, Wisconsin

A week after the Wautoma tri we made the hour drive further north to Steven’s Point for the 19th annual (just missed the big round number) running of the Lactic Edge Sprint triathlon.

Fresh off my first podium appearance I wanted to do well but suspected I would be outclassed. Steven’s Point is a bigger town with a university, the race was on a Saturday, and it was an established race.

It turned out to be larger, but more loosely run than our previous race. It wasn’t chip timed, and it wasn’t the standard sprint distances, clocking in with a 500m swim, 18 mile bike, and a 3 mile run.

We swam in the Wisconsin river, which was wind-whipped and tamarack stained. You couldn’t see the bottom, even in 6 inches of water. The swim started up-wind and up-current, which wasn’t the most pleasant experience I’ve ever had. I self-selected into the elite wave, not knowing if I was seriously over estimating my relative speed.

Lactic Edge Triathlon 2008

I hit the bike somewhere in the middle of the pack of my wave. On the relatively long bike leg, I got passed by about 4 guys. Again, I’m a slow runner, so I knew I wasn’t going to pick up places on the run. But I only lost two positions. One of the guys who passed me was Brian, the guy I passed in the Wautoma tri. Way to get me back!

The finish was a real joy. I was very happy to be done racing and I crossed the line with my kids, Malcolm and Louise, which was really fun. The crowd cheered for them and they were all smiles!

Lactic Edge Triathlon 2008

I ended up 2nd in my age group and 18th overall. Prior to the Wautoma race I’d never cracked the top 10 in my age group, so I was really happy. I won a beer glass with the race name on it!

Overall Place: 15
Age Group Place: 2
Overall Time: 1:22:53.6
Swim: 7:42.9
Bike: 50:59.4
Run: 24:11.3

Lactic Edge Triathlon 2008

While I look incredibly tired, I want to contrast that with this shot of my wife looking like she’s having the time of her life.

Lactic Edge Triathlon 2008

Well, it turns out she was having a blast! Beth had a great race, finished very strong and experienced some great camaraderie along the way. Hopefully we’ll do more triathlons together soon. I want to thank my parents for bringing the kids up for the race–it was really fun to have a cheering section!

John’s take on the Half Ironman

Tuesday, July 29th, 2008

He felt the full weight of middle age shake his exhausted frame as the fog poured across the muddy blanket of ground his feet were soaking on in the early morning haze. The attendant marked his wife, first on the upper arm, then on her lower calf making sure to caress her flesh with meaty paws that deliberately stroked his love a little harder than necessary for the benefit of the onlookers. In the midst of the confusion, he ran into a childhood friend. They embraced, not knowing when their paths might cross again. The embrace reminded him that life was coursing through his body, if only to soon be tested in a way that it had never been tested before. The muck of the wet ground added to the stench of slaughter and decay coming from the makeshift toilets all the gape eyed men and women were clamoring to use before they submitted to the pain and anguish that they all had hoped to avoid but knew was on the horizon in the hours to come. As he turned to walk to the edge of the icy water to see her wife herded into a bitter cold bath along with a torrent of writhing bodies, he thought he might be in hell.

While I was in Wisconsin doing triathlons, I ran into my old friend John West. He’s a writer, and has detailed his race experience with a scholarly treatise on the dark underside of the Ironman movement.

Great to see you John!

Ain’t Right

Monday, July 28th, 2008

Thanks Tate!

Race Report: God Bless America Triathlon

Thursday, July 24th, 2008

Things have been pretty quiet here as I was on vacation for much of the month of July. I put work completely out of my mind (well, almost completely, more on that later). But I didn’t put triathlon out of my mind–I did 3 races in 3 weeks!

Here are some things I learned:

  • I’m better at short races than long ones
  • 55 degree water doesn’t really bother me
  • Once you try a singlet, you’ll never go back

Here’s my first race report.

God Bless America Super-Sprint Triathlon, Wautoma, Wisconsin

The city of Wautoma, in central Wisconsin, has a population of about 3000, but that probably increases 5 fold in the summer when all the lakes are filled with visitors from the south–mainly Milwaukee and Chicago. We vacationed about 10 minutes from Wautoma, and our visit happened to coincide with the 3rd annual running of the God Bless America Triathlon on the 4th of July.

I surely couldn’t pass up doing a race with a name like that, only 10 minutes from our vacation cottage. So my wife and I signed up for this insanely short race–200m swim (!), 9 mile bike, and 2 mile run.

It turned out to be a lot of fun, and is probably the only triathlon I’ll ever do with a 7 foot tall fiberglass steer in the transition area. About two hundred hardy souls braved the 75 degree water of Silver Lake, and took in the beautiful rolling countryside around the lake.

I’ve never been anywhere near the front of a triathlon. I’m always solidly in the middle of the pack. I’ll paraphrase Joe Friel–one thing you can’t control in Triathlon is who else is going to show up at the race. I’m used to getting my butt kicked by Seattlite triathletes with their $7000 bikes and high VO2 maxes. But this race was on a holiday, in northern Wisconsin, and was crazy-short, so maybe I had a chance to do well.

I can’t really describe what the swim was like. It was over in 3 minutes. I just flailed as fast as I could. I was 7th out of the water and 4th out of transition on the bike. I moved up to second and was a couple bike lengths behind the leader and the motorcycle escort for a mile before he slowly pulled away from me. I ended the bike second overall. Unheard of!

I’m not a fast runner, so I’m used to getting passed on the run. But I vowed that I could go really hard for 2 miles–only 2 miles! I made it about a mile before I was passed, putting me in 3rd place. After the turn around I saw that the guy in 4th place wasn’t far behind me. He caught me with about half a mile left.

But, I didn’t let him go. I stayed behind him and did something I’ve never done before, I passed him back, with about 100m left. I really wanted to place, since I wasn’t sure I’d ever have the opportunity again. I mean, I didn’t want to have to travel to Cutbank, Montana for a race in February or something like that…

Right after I passed him, I saw Beth running out the other way and gave her a high five, even though I was dying. I’m sure that is what kept him from catching me. (He’d have his revenge in a week…)

Beth had a great race even though she hadn’t been training for it. She got really fired up by the racing aspect and remembered how much fun she had in her previous tris.

I ended up 3rd by 3 seconds! I won a sweet t-shirt with a red white and blue eagle head on it, a trophy, and 16 ounces of Heed gel. The race was well-run and a ton of fun. I hope to place in a race again, but I will have to search out the rare opportunities like this one, and hope all those athletes faster than me are at a barbecue or something.

Overall Place: 3
Age Group Place: 1
Overall Time: 41:57
Swim: 3:12
T1: 1:11
Bike: 23:26
T2: 0:46
Run: 13:22 (fastest I’ve run since a dog chased me when I was 10)

God Bless America Triathlon 2008

Brian wins Mountains to Sound Race

Monday, June 30th, 2008

The 100-mile Mountains to Sound relay race was run yesterday in 90 degree heat. 25% of the proceeds of the race go to ONW/Northwest client Mountains to Sound Greenway Trust.

The race has 5 stages starting at Snoqualmie Pass at 3000′ and ending in Ballard, at sea level, a mile from my house. Most competitors are part of 5 person teams, but a few hardy souls attempt the race solo.

My friend Brian Bruininks was one of those people who ran it solo. I had the pleasure of running along with him for moral support the last 6 miles of the race, and watching as he won it all! It was truly an inspiring performance and I’m going to try to take some of his ability to “suffer well” into my next few races this summer.

Incredible work, Brian!

Also congrats to Pat Shaw who’s relay team broke the top 10 overall! Nice work Pat!

Race Report: Cascade Edge Olympic 2008

Monday, June 23rd, 2008

On Saturday, I did an Olympic distance triathlon. I did the same race a year before and wrote it up here.

I am really happy with my results:

Total Time: 2:27:23
Overall place: 28th
Place in my age group: 5th

Swim split: 0:25:54
Overall Swim place: 38th

Bike split: 1:07:32
Overall bike place: 22nd
Place after the bike: 20th

Run split: 0:49:30
Overall run Place: 58th

The swim went fine. Last time I did the race I breathed every other stroke the whole .9 miles. This time I relaxed a bit and did some breathing every third stroke when things opened up a bit. The new wetsuit was great, and I hardly noticed the frigid water. I knocked almost 4 minutes off my time from last year.

I love my bike! At multiple points during the 28 mile ride I thought or even said aloud how cool a machine this bike is. It’s amazing how little energy is wasted converting muscle contraction to rolling. I hit 39.9 mph on one descent, and the bike was solid as a rock. What a blast! I was shocked to learn after the race that I was only 5 minutes off the best time overall. I’ve been focusing on the bike leg in my training, but I didn’t expect it to pay off this much. I averaged 24.6 mph.

The first mile of the run was painful. It was also painful to be passed by so many runners! In the swim you can’t really tell how well you’re doing because you’re underwater. In the bike, I don’t get passed a lot. But in the run, you hear people coming up behind you, then they pass you, and then you watch them slowly pull away. I ran around 8 minute miles, which was great for me, but I need to get to 7 minute miles to be really competitive, I think. I’m not sure that’s even possible!

I had the pleasure of traveling down and racing with John, a friend of mine from previous work experience. It’s a ton more fun doing an event with friends than going it alone. You get to tell all the race stories to someone who cares!

Workout Plan in Google Spreadsheet

Monday, April 21st, 2008

That’s a summary of my triathlon training plan for 2008 published as a Google gadget. I built a Google spreadsheet to plan my year, based largely on Joe Friel’s methodology.

I estimate my weekly hours, marking the events I want to race. Then breakdown the weekly estimates into real workouts. Then track the actual workouts.

If you want to build your own plan, I’ve published a copy of it here. Take it and make it your own!

Update: Here’s an XLS download as well.