Blog

Creating an Animated Javascript Heat Map with Polymap

Creating a Javascript Animated Heat Map With Polymap


WhereShouldISki.com Powder Rating Visualization

As you may or may not know, I run a website WhereShouldISki.com – weather data-driven recommendations for skiing and snowboarding. One of the items on my to-do list was to create a season-long visualization that shows where the storms occurred in North America.

Attending conferences last year, like Strata NY, there would often be some very beautiful visuals that tell excellent stories. For work I had manually created some rough animated heat maps using HeatMap Lib and iMovie, but surely there has to be a better way to do this within a web browser, right?

After a few hours of research, no obvious answer came up – or I just missed it. There are a number of libraries that will render maps, render points on a map, etc. D3JS, Polymap, Leaflet, and others all fit the bill on this, but what about animation? Not many examples (at least that were obvious). After some experimentation with Polymap, I figured out a way to dynamically generate a “layer” of coordinates. Well – what happens if I have an array of my data points, and iterate through dynamically creating new layers of coordinates and deleting old ones? Bingo.

Below is the strategy and some walkthrough of how I used the Polymap framework to create the animation at http://whereshouldiski.com/viz/2012-2013-viz.php

Strategy

Overall, it’s not that complicated. The strategy is comprised of the four steps

1. Have the ability to create your map with a single date of data loaded dynamically

2. Set up the data as an array of single dates of data

3. Utilize the Javascript timer function to iterate through the array of data, destroying the old data and dynamically loading the new data

4. Add user controls to identify and/or change the date of the data displayed

Step 1 – Collect and Parse Data

WhereShouldISki has a rating system of 1-5 for powder, bluebird, and freezing level, stored as one JSON document per resort per day, for example:

These documents are accessed via ElasticSearch. Polymap uses the GeoJSON format, so after writing a Python script to parse through my relevant dates and data, I have a JSON object that looks something like:

{
type: "FeatureCollection",
features: [
{
  geometry: {
    type: "Point",
  coordinates: [
   -114.36,
  48.02
]
},
 type: "Feature",
id: "blacktailmountain_2012-12-20",
properties: {
count: 2
}
},

Within the array of each FeatureCollection, there is one entry for each coordinate and the weight (count in this case). So let’s build up a pretty large JSON structure to store this – an array of FeatureCollections, one per date.

Step 2 – Set up Polymap

Download Polymap and set up on your web server, whether locally or on the internet/cloud. I have had decent success with using MAMP and updating the Apache web server to my development directory.

I use the tiles at cloudmade, make sure you sign up for your own key. I thought the blue map was rather dramatic, so first let’s set up a blank map centered on the US.

var po = org.polymaps;
var map = po.map()
.container(document.getElementById("map").appendChild(po.svg("svg"))) .add(po.interact())
.add(po.hash())
.center({lat: 46.14, lon: -101.26})
.zoom(4);
map.add(po.image()
.url(po.url("http://{S}tile.cloudmade.com"
 + "YOUR KEY HERE" // http://cloudmade.com/register
 + "/999/256/{Z}/{X}/{Y}.png")
.hosts(["a.", "b.", "c.", ""])));
map.add(po.compass().pan("none"));

With this code, you should have a blank map centered on the US.

Step 3 - Add the Data

Since I am storing the data as a large JSON file, we can use JQuery’s ajax call to retrieve the data while letting the user know the data is loading.

var allDatesData = (function () {
   var allDatesData = null;
   $.ajax({
      'async': false,
      'global': false,
      'url': "allDatesData.json",
      'dataType': "json",
      'success': function (data) {
         allDatesData = data;
      }
   });
   return allDatesData;
})();

Now we have all of the JSON data stored in a variable. In order to add the points for a date onto the map, follow the example code to look something like:

jsonData = po.geoJson()
   .features(allDatesData[i]['features'])
   .on("load", load)
   .clip(false);
map.add(jsonData);

Since allDatesData is an array above, I have to specify which date to populate. Cool, so now we can populate a single date. But how do we animate?

Step 4 – Animate

Since we know Polymap deals with layers, and we have an array of all of our data, seems we just need a way to delete the old layer and add a new layer of the new date’s data. Then, we can make use of the Javascript timer to iterate through the array of data.

var dayIndex = 0;
function startAnimation() {
   myVar=setInterval(function(){refreshData(dayIndex++)},500);
}
function refreshData(i) {
   if (i < allDatesData.length) {
      if (jsonData) {
         map.remove(jsonData);
         unhighlightDate(i-1);
      }

      jsonData = po.geoJson()
         .features(allDatesData[i]['features'])
         .on("load", load)
         .clip(false);
      map.add(jsonData);

      $('#date' + i).addClass('selected');
   } else {
         stopTimer();
   }
}

For some added flair, I added an on-display calendar with a few divs and and then some Javascript to make these clickable:


//set up click actions
for (i=0; i<allDatesData.length; i++) {
   $('#date' + i).click(selectDate);
   $('#date' + i).addClass('clickable');

Now we just need some HTML elements to Start and Stop the animation:

 

 

 

 

 

 

<div id="start" onclick="startAnimation();"> START</div></p> <p><div id="stop" onclick="stopAnimation();">STOP</div></pre> <p> </p>"</p>"</p> <p>(Apologies for the weird formatting on the blog).  In theory, you'll have an animated heatmap!  Of course, many details have been left out because so much is particular to the specific dataset, which is likely where one will spend most of their time - formatting the GeoJSON object.  But if you follow the principles and after much debugging it might turn out nicely!</p>"</p>"</p>"</p>"</p>" Add a comment

Lake Stevens Ironman 70.3 Race Recap

This past Sunday I competed in the Lake Stevens Ironman 70.3 triathlon (also known as a half-ironman) - a 1.2 mile swim, 56 mile bike, then 13.1 mile run.  The race was held in Lake Stevens, WA - a little bit north of Seattle.  This would be by far the longest (and largest) triathlon for me so far, with about 1200 athletes competing.  I was also still nursing and injured foot from a few weeks ago, which I think is a pinched nerve or some sort of inflammation.  It is getting better but definitely not 100%. I have been doing most of my running in the pool as of late.  Going into this race, I was hoping to finish in under six hours.  I figured I would finish the swim, bike, and transitions in four hours and give myself two hours to run a half marathon.  Normally this wouldn't be much of a problem for me, but I've never swam + biked before running a half marathon and my foot is still a wildcard.  

Alicia and I drove up on Saturday for packet pickup, bike drop off, and do a quick swim in the lake to check out the course.  Water temperature was 69 degrees - which is just about ideal for me, but potentially a little warm once at race speed.  


Untitled
Saturday - lots of bikes!

The morning of the race we arrive at transition and I start pumping up my bike tires and notice that my front tube starts to hiss once I reach 100psi.  Uh oh.  This is a new lightweight tube I bought specifically for racing.  Maybe the colder temperatures overnight (mid 50s) did something to this?  I take it over to the bike tech and he says it might be a loose valve stem, so he tightens with some pliers and the hissing sound is gone.  OK, problem solved, right?  

Untitled
Setting up transition.

Exit transition and head towards the swim.

Swim

Open water swimming has gone substantially better since the Olympic triathlon back in early June.  I've been able to swim faster, longer, and more relaxed - which had me feeling rather prepared for this 1.2 mile swim, which is kind shaped like a rectangle - you go out, 90 degree turn left, then shortly afterwards is another 90 degree turn left.  This event used a wave start, every three minutes a new wave would start.  The waves were by age group, so I started with all of the other 30-34 year old males.  Each person was required to get in the water from a dock and tread water until the gun goes off.  I position myself towards the back but near the middle...

And we're off!

First three minutes goes pretty well - a lot of bodies around and not too terrible, but then I start feeling crowded and out of breath.  I start breaststroking and sidestroking to look around.  I fear getting swam over by the waves behind me so I move over to the side and try to get back into my freestyle - still not working great.  Once the faster swimmers in the wave behind me pass me I start to relax a bit and do more freestyle.  Soon I get to the first turn, I make it and then the next turn comes up, make it and then things start to go better.  I end up swimming freestyle the entire second half of the course.  After each buoy I pass, I read the number on it - knowing that buoy 8 is the end.  Soon enough I'm at the end and I think to myself - well, that wasn't terrible, I think the worst part of my day is over.  My parents were there to see me come out and give me some cheers which was also uplifting.

Time: 43:57 (80% rank of all swimmers, that is - 80% of people swam faster than me)
I was actually hoping for around 40 minutes, but given I stuck to the outside I probably swam a little extra distance.  Plus - I'm still not that fast of a swimmer! 

0424_08584
Finished with the swim, heading into T1

Bike

Fairly smooth transition, though it was still cold out - still in the 50's so I decide to put on my arm warmers which is a real pain when wet!  Roll out of transition and see my parents again and away we go!

IMG_5287
Coming out of T1

0424_16330
There should be bonus points for style.

I found the bike course really fun.  There were many rolling hills and scenic terrain - it would be hard to get bored!  Things are going pretty well on the bike, but then around mile 25 I look down and see a wide bulge of my front tire: "Shit, that tube leaked, I need to replace this".  After a short climb around mile 26 I pull off to the side and start taking out my patch kit.  Rider after rider passes me, but one says to me: "It'll be OK bro".  And you know what, he is right!  I take out the old tube and put the new one in and get my CO2 cartridge ready.  Well, I suppose now is as good of a time as any to try it the first time.  Worked great, and I'm off!  After checking my GPS afterwards it took five minutes for this change.

Pick up some water at the aid station, take my second gel at the bike, refill the Profile HC system, then toss my gel and the water bottle in the trash at the end.  Feeling invigorated now!  The second half of the bike course was much hillier than the first, including one somewhat steep hill mentioned in the pre-race briefing - Ingraham.  I didn't find it THAT steep, I think triathletes just generally suck at hills.  I passed probably 25 people in about 2 minutes on this hill (weighing only 126lbs has its advantages at times) and roll on till the finish of the bike.  

0424_02112
Rolling along

Time: 3:06.29, 18.02mph average (50.7% of all bike times, right in the middle)
I had a long-term goal of completing a half-iron bike ride in three hours, and if you subtract 5 minutes for my flat from this I would be pretty close!  So I'm pretty happy with this time. 

Entering transition I see my parents again and put on my socks and running shoes then head off.  

Run

Well, let's see how the foot is.  I start running and feel the standard discomfort, but it doesn't really get any worse.  Interesting.  Either it's been warmed up from the bike, it's actually healthier, or the rest of my body is so tired the foot discomfort isn't as distracting as it normally is ... but I'm able to have a pretty good run.  My plan is to start off slow and run faster the second half of the run vs the first - the problem is I can't run slow enough!  I was trying to start off around 8:20-8:25 minutes per mile, but I'm running 7:35-7:40 minutes per mile, and I have to REALLY scale it back to get above 8 min per mile.  Also, I have to pee really badly, fortunately there are (limited) facilities at every rest station.  

The first four miles were really really fun - I passed a number of people, the course directed us back into downtown where there were a number of spectators, lots of kids putting their hands out to give high fives - people reading the name on my bib saying "Great job Eric" ... all of this at a very relaxed pace.  Well, around mile 4 the course starts to head uphill and that relaxed feeling starts heading away.  

The run course is a two-loop course, so as I near the end of the first loop there is a very disheartening sign - right for the finish line, left for the second loop.  UGH - I'm starting to feel fatigue and I have to do the exact same run again. Plus my stomach is now feeling empty.  I take my second gel on the run (with caffeine boost) and after about five minutes I'm feeling better.  I then look at the overall time and realize if I can run six miles in about 65 minutes I should break six hours on the day - shouldn't be a problem even if I need to walk a little bit - super uplifting.

0424_06454
Around mile 8 of the run

After a few more minutes I look at my watch and I'm working decently hard to hold that 8:20 pace.  I mentally prepare for that last big hill coming up and focus on short-term goals - OK run to this orange cone, now this one, now this one, don't look up at the hill.  Before I know it, I'm at mile 12, with just over a mile left of the day.  Even though that last mile was probably my fastest, it sure seemed the longest.  I take the right turn to enter the finishing shoot, and with a big smile I've completed my first half Ironman.

0424_10887
Entering the finishing chute

Run time: 1:49:47, 8:22 min/mile average (34.6% of all run times, or faster than 65% of others)

Total time: 5:46:25 - 543rd out of 1166 finishers - well under six hours :)

0424_20567
Complete! (My wave started 14 minutes after the clock started)

IMG_5311
Finished!

Lessons Learned

So what did I learn from this?  In no particular order:

  • If you have a hunch there is a bike mechanical problem, get it fixed before the race.  After I got home and inspected the tube there was a separate VERY small hole in the tube - this is probably what was leaking the whole time.
  • Changing a flat is not the end of the world.  I lost only five minutes
  • I can survive a big(-ish) swim.  I also stayed fairly calm even when things weren't going 100% to plan
  • I should have refilled my water bottle at the 3rd bike aid station - I was nearly out of fluids with 8 miles to go on the bike
  • I rock at the climbs during the races (at least compared to everyone around me).  This is good because Ironman Canada will have a few nasty climbs.
  • Calf compression sleeves worked great, first time I've worn them for more than about 30 minutes and I'll likely continue to do so for long runs
  • Pacing on the run - really need to pay attention to this right out of the gate so at to not overdo it.
  • None of the three events went perfect, and the race was still a pretty big success.  If I expect the unexpected, dealing with it mid-race won't be as stressful.
  • Nutrition was just about enough, but maybe I'd want a little more on the bike: 
    • Swim: 1 Clif shot gel 5 minutes before
    • Bike: 3 Clif shot gels + 1 bottle of 325 calories mixed with Carbo Pro, Herbalife, and 2 Nuun tablets
    • Run: 3 Clif shot gels at miles 4 (was supposed to be 3 but forgot because I was having fun!), 6, and 9
  • 70.3s are fun!  Looking forward to doing another one!

Untitled
Alicia and I with our finisher medals

IMG_5322
With my parents

Add a comment

Righteous Richland Sprint Tri Race Recap

AKA - the Triathlon that Became a Duathlon

Saturday, June 29 - while sleeping the night before the race, I wake up to some thunder and lightning around 3am, and I am thinking - "Hm, that could be problems for the swim".

The Righteous Richland Sprint Triathlon is a half mile swim in the Columbia River (with current), 12 mile mountain bike, and 3 mile run.  Going into this race, I had two goals:

  1. Have a strong swim
  2. Have a strong run, PR on my 5k pace for the run (faster than 6:55 min/mile)
Well, goal number 2 had a bit of a setback this week.  Last Saturday (six days after the marathon) I was going on an 8 mile run and experienced some top of foot pain.  Well, it turns out I probably developed a minor inflammation in my foot, and was actually fairly painful to walk and especially run on.  Most likely some fatigue effects of the marathon.  After a week of babying it before this race, I would say it was around 60%.  Also, it seems like I picked up a cold on Thursday, so I was feeling maybe 85% overall aside from the foot.  So, let's modify the second goal to "Have good run form, not injure myself, and not worry about specific pace".
 

Untitled
Setting up transition

IMG_7013
Getting prepped for the swim

A few friends are undertaking their first triathlon, and we're all pretty pumped!  We get in the water, there is about one minute until the start of the race and then of course...
 
::LIGHTNING CRACK::   ... BOOM!
 
Ah, shit.  The race director has everyone get out of the water.  After about 5 minutes it turns out the storm isn't projected to blow over so the triathlon is now a duathlon.  So much for goal number 1.  I was mentally preparing for this swim - it was going to be a super achievable 8 minute (or less) swim to get my confidence back up.  Oh well, it's an outdoor sport, adapt to the weather and move on.

The Bike

The plan is to start on mountain bikes in transition, running two bikes at a time every 10 seconds.  We were asked to self-seed ourselves - the faster mountain bikers going first and the slower mountain bikers going last.  After the last mountain bike duathlon, I considered myself a "weak" mountain biker I started probably about 3/5 of the way through.  It turns out this was a mistake, I should have started sooner, much sooner.

I start next to an 18 year old kid, and after a few games of leap frog with him, he passes me for good - I let him go.  It turns out mountain biking is actually kind of fun!  This couse is a little funny in that it's a four mile ride along paved roads, four miles in off-road singletrack, four miles back along the same paved roads.  I pass around 10-15 people on the first four miles, and then we get into the singletrack - where it's not very wide and passing isn't very feasible.  We get to a wide section and I pass two people, then a few minutes later I fall into a line of about five bikers going relatively slow.  Hm, this is a bit slower than I had planned, but let's just go for a ride - it ended up being a relatively relaxed couple of miles and was actually pretty fun.  Once we break out of the single track I pass a few more people and I wonder how much time I lost being slowed down, I was only going about 60% effort.  A relatively uneventful paved four miles back, I take an energy gel, down my water bottle, and I finish right behind that same 18 year old I started with!  

Time: 45:36, 15.8mph
63rd fastest bike

T2-Righteous
Coming in hot into transition

The Run

IMG_7029
Taking a sip coming out of transition

After a relatively smooth T2 (or is it T1?), it is definitely humid out.  I am feeling the foot pain, but I don't need to limp, and it's not terrible, so I press on.  Check my pace - 7:45 - hm, this could be a slow-ish run.  After about a half mile, check my pace - 6:55 - hm, that's better.  It usually takes me about a half mile or so off the bike to get back into run mode so this could be promising.  Pass by the first aid station, grab some water, a quick sip and then dump on my head - whoo that's cold, but it feels great.

Get to the halfway point, check my pace - 6:50 - hm, maybe I can get sub 7:00 min miles for this run?  On the way back I see my friends Nicole, Jenn, and Matt running and give them some high-fives.  Wow it's hot and humid out!  With about one mile to go, the foot pain starts getting worse and becomes distracting.  Normally I'd be picking up the pace at this point but it just hurts too much to go faster.  I maintain pace, focus on form, and just ride it out to the finish.

IMG_7040
Coming in hot to the finish line

Time: 21:12, 7:04 min/mi
17th fastest run overall, fastest run in my age group!

Wow, I am really happy with that run result.  ESPECIALLY on a hurt foot (and a cold)?  Oh what could have been if I was healthy!?

Final time: 1:07:43
41st out of 144 finishers
5th out of 13 in my age group 

Considering my reduced physical capacity and the poor self-seeding, this went about as well as I could have hoped.  Too bad about the swim.  It sprinkled a bit while biking but I finished before any real storms came through (which they did in force about 20 minutes after finish).

postrace
Post-race with friends

Next up is the Half-Ironman in Lake Stevens on July 21.  Special thanks to Cory and Jenn for some pics!

Add a comment

First Marathon Race Recap

An Ironman triathlon concludes with a 26.2 mi run (a marathon).  As part of training, it would make sense to complete this distance on it's own, so ... low and behold the Vancouver USA Marathon this past Sunday.  I had heard the course was pretty flat which is always a nice thing for running.

Vancouver, WA is about a 3.5 hour drive from the Tri Cities, so we went up on Saturday and stayed at a hotel across from the starting line how convenient is that?!

IMG_2177
The calm before the storm

Pre Race

IMG_2180
Getting prepped

The race started at 7am, so I set my alarm just before 5am - enjoyed a coffe while eating a bagel with peanut butter, some carbo-pro with a nuun tablet, and started "lubing up" - many people report getting very bad chafing while running marathons, so I used generous amount of Body Glide all over (feet, toes, arm pits, thighs, etc) to try to prevent this.  I start warming up around 6:30am, and my friend Nicole came to the starting area to take some things from me - my long sleeve, phone, water bottle.

Untitled
About to head to the starting line

After speaking with my coach and reading numerous articles about marathon strategy, the overwhelming advice is to go slower than your target time for the first portion of the race and negative split.  My target goal was between a 3:30 - 3:40 finish time, so my plan was this:

 

  • First 8 miles: 8:15 min/mile pace
  • Next 8 miles: 8:00 min/mile pace
  • Last 10: below 8:00 min/mile pace, ideally 7:45 min/mile
IMG_2187
Writing down the mile markers for when to consume my four gels

Race

There were three starting waves based on projected pace - under 8:00 minutes per mile, 8:01 - 10:00 minutes per mile, and above 10:00 per mile.  Since I am trying to go conservative - let's go in wave 2, which started one minute after wave 1.  Weather was great, high 50s at 7am, warming up to the low 60s.  The sun never came out during the race which meant no overheating.

The First Eight Miles

The starting line was electric!  They played the Final Countdown, which as an Arrested Development fan, I was a huge fan of and I was so amped!  Wave 1 goes, then wave 2 goes - the start of a great morning!  After a few blocks in downtown Vancouver with good crowd support it goes really, really quiet.  Check my pace - sub 8:00, uh oh, let's back it off.  Some people start passing me, I resist temptation to pass them back, I am thinking to myself - "I will see you again".  I relax, and it feels like a great endurance-paced run.  After about mile 1, I need to pee already.  Really?!  I peed four times this morning!  There was a porta-pottie available at the aid station in mile marker 2, so I decide to stop.  After what seemed like forever (maybe 15 seconds) I get out and get on my way.  My calves start to feel a little tight as well as my right IT band.  This gives me a little bit of concern so early on, but this isn't uncommon for me, and they loosen up after about mile 5.

I take my first gel just before the aid station at mile 5.7.  This was a really enjoyable eight miles, the atmosphere and the energy of the other runners was fantastic and I think this was perhaps the easiest and most enjoyable eight miles I have ever run.

111269-006-016hAnd we're off!

 

111269-091-029h
Staying relaxed through mile 5

Average Pace: 8:07 min / mile - maybe a little fast but it felt great.
Average HR: 141 BPM (Mid Zone 3)

The Next Eight Miles

I'm feeling great, I let my pace increase slightly and pass about ten people in a group in front of me... but wait - I have to pee again!  Seriously?!?  I see an open porta-potty around mile 10, so I stop and go again.  What seemed like another impossibly long 15 seconds, I step out to have that same group catch up to me!  GRRR!!  Well, the aid station was 200 feet down the road and I take some water at full speed and pass that group back without any extra effort, ha!  I take my next gel prior to the aid station at mile 12.

I pass mile 13 and look at my watch, I'm right around 1:45 and I am thinking - "Hm, I just set a new half marathon PR, sweet!"  I am now thinking - this is the longest I have ever run before ... and now I just need to do it again.  Hm, that's not helpful thinking.  How about - "imagine this is a half-ironman, I've just completed the swim and bike, and now I only have a half marathon run remaining to do - let's see how many people I end up passing?"  OK that kinda sounds like fun!  Miles 14 and 15 go back through Vancouver downtown with some crowds and it's awesome!  I'm feeling great and start counting.  I think I got around to around 15 people by the end of mile 16 and aside from some blisters starting to form on my feet I am feeling great!

Average Pace: 7:55 - Looking good
Average HR: 146 BPM - Top of Zone 3

The Last Ten Miles 

Shortly after mile 16, I see the 3:30 pace runner!  Hey, I could break 3:30!  I push myself a little bit and catch up to the pace runner around mile 17 (my fastest mile of the day - 7:24), and I'm feeling good so I pass it.  This is great!  However, I started getting some foreshadowing of what is to come ... after an aid station around mile 17 there is a turn in the road and my legs are acting like they have a mind of their own and are not as responsive.  Hm, weird ... 

Halfway through mile 18, we go down a hill and all of a sudden my left IT band starts hurting, badly.  I go up a hill and it's no better and I have no choice but to stop and stretch it during mile 19.  It helps a little bit, and my feet really hurt and my legs are feeling the distance, it's a struggle to maintain pace.  Many people say that they hit a wall somewhere on the marathon.  Mine occurred just after mile 19.  Then, something happened - the 3:30 pacer catches back up to me and I decide that I will NOT fall behind them.  This is just the distraction I needed.  After about a mile running with the pacer - suddenly my IT band doesn't hurt and my feet don't feel as bad.  I move on past the pacer around mile 22, and then the struggle comes back - feet hurt, IT band hurts, all I want to do is walk.  The pacer catches back up, I stay with her.  I talk to her a little bit and it's a great distraction.  It's also great to just run and not look at my watch, not check my pace or my heart rate.  

111269-059-025h
Spent a lot of time with the 3:30 pacer down the stretch

Miles 23-25 are really, really tough.  I spend most of my time alternating running beside the pacer to 10 feet in front of the pacer, and everything hurts.  Thinking about form and stride rate helps the pain but my legs are so tired it's difficult to do so.  

The light at the end of the tunnel comes when I check my watch and I'm at 25.3 miles complete, 0.9 to go, and I'm even with the pacer.  I KNOW that I'm going to finish my first marathon at the top end of my goal pace - I am going to be at or under 3:30.  I pick up my speed, distancing myself from the pacer, wow my legs have nothing left.  I get into Vancouver downtown, there are more people around, more cheering, I hear the rock music blaring from the finish, I see the final turn, pick up the pace even more.  Final turn - there it is, round the turn, I hear "YEAH ERIC", check the crowd - I see Jenn!, there is the finish, give it everything, they announce my name, and raise a fist as I cross.  

111269-233-036h
Rounding the final turn

111269-054-005h
Crossing the finish!

(Last 10.2 miles):
Average Pace: 8:01 - wished for a little faster but was doing what I could to survive!
Average HR: 151.5 BPM - low Zone 4 

 

Final time: 3:30:10

Good for 81st out of 631.  The pacer was about 15 seconds off, but no big deal - I can still say I am a 3:30 marathoner!

Post Race

A young child hands me my medal, someone gives me some water, I can barely walk.  Holy shit.  My left leg wants to lock up, but I can walk, very very slowly.  Jenn and Nicole come by to see me and I walked by to say hi.  I head to the athlete finish area, make some jokes about "I feel like I just ran a marathon", stop and stretch my IT bands, pick up a bunch of drinks and food and regroup.

Untitled
Finisher

Alicia and Matt did the half marathon, which started two hours after the marathon, so I showered up and very slowly went back to the finish to watch them come through.

IMG_2186
Alicia and Matt finishing the half marathon

Overall, a really great day - I did about as well as I thought that I could have, had good support from friends and had some fun checking out some neighborhoods/restaurants in nearby Portland, OR.  I will say this was by far the hardest physical challenge I've ever had.  Towards the end it was a combination of my fatigue plus pure physical body pain that made it so, so, difficult, but I can finally say I am a marathon finisher - and it was worth it.

Would I do another marathon?  Well, not right now :)  I've never been so sore following the race.  I would probably up for doing a major marathon in the future, with 10,000+ participants with lots of crowd support.  I do also think running in Boston some time would be awesome, but I'd need to drop 25 minutes off my 3:30 time.  Might be a bit of a stretch - maybe reconsider in the next months or years, no hurry :)

Add a comment