Category Archives: Running

Friday Fixes

It’s Friday, and time again for some Friday Fixes: selected problems I encountered during the week and their solutions.

Today’s post will be the last of the Friday Fixes series.  I’ve received some great feedback on Friday Fixes content, but they’re a bit of a mixed bag and therefore often too much at once. So we’ll return to our irregularly unscheduled posts, with problems and solutions by topic, as they arrive.  Or, as I get time to blog about them.  Whichever comes last.

More Servlet Filtering

On prior Fridays, I described the hows and whys of tucking away security protections into a servlet filter. By protecting against XSS, CSRF, and similar threats at this lowest level, you ensure nothing gets through while shielding your core application from this burden.  Based on feedback, I thought I’d share a couple more servlet filter security tricks I’ve coded.  If either detects trouble, you can redirect to an error page with an appropriate message, and even kill the session if you want more punishment.

Validate IP Address (Stolen session protection)

At login, grab the remote IP address: session.setAttribute(“REMOTE_IP_ADDR”, request.getRemoteAddr()). Then, in the servlet filter, check against it for each request, like so:

private boolean isStolenSession(HttpServletRequest request) {    
    String uri = request.getRequestURI();
    if (isProtectedURI(uri)) {
        HttpSession session = request.getSession(false);
        String requestIpAddress = request.getRemoteAddr();            
        if (session != null && requestIpAddress != null) {
            String sessionIpAddress = (String) session.getAttribute("REMOTE_IP_ADDR");
            if (sessionIpAddress != null)
                return !requestIpAddress.equals(sessionIpAddress);
    return false;

Reject Unsupported Browsers

There may be certain browsers you want to ban entirely, for security or other reasons.  IE 6 (“MSIE 6”) immediately comes to mind.  Here’s a quick test you can use to stop unsupported browsers cold.

private boolean isUnsupportedBrowser(HttpServletRequest request) {
    String uri = request.getRequestURI();
    if (isProtectedURI(uri)) {
        String userAgent = request.getHeader("User-Agent");
        for (String id : this.unsupportedBrowserIds) {
            if (userAgent.contains(id)) {
                return true;
    return false;

Community Pools

In my last Friday Fixes post, I described how to use Apache DBCP to tackle DisconnectException timeouts.  But as I mentioned then, if your servlet container is a recent version, it will likely provide its own database connection pools, and you can do without DBCP.

When switching from DBCP (with validationQuery on) to a built-in pool, you’ll want to enable connection validation.  It’s turned off by default and the configuration settings are tucked away, so here’s a quick guide:

Servlet Container Configuration Steps
Tomcat 7 (jdbc-pool) Add the following to Tomcat’s conf/server.xml, in the Resource section containing your jdbc JNDI entry:

  • factory=”org.apache.tomcat.jdbc.pool.DataSourceFactory”
  • testOnBorrow=”true”
  • validationQuery=”select 1 from sysibm.sysdummy1″
WebSphere Set the following in Admin Console:

Resources – JDBC – Data sources > (select data source) > WebSphere Application Server data source properties:

  • Check “Validate new connections”, set “Number of retries” to 5 and set “Retry interval” to 3.
  • Check “Validate existing pooled connections”, and set “Retry interval” to 3.
  • Set “Validation options – Query” to “select 1 from sysibm.sysdummy1”.
WebLogic Set the following in the Administration Console:

JDBC – Data Sources – (select data source) – Connection Pool – Advanced:

  • Check “Test Connections on Reserve”
  • Set “Test Table Name” to “SQL SELECT 1 FROM SYSIBM.SYSDUMMY1”
  • Set “Seconds to Trust an Idle Pool Connection” to 300.

Adjust intervals as needed for your environment.  Also, these validation SQLs are for DB2; use equivalent SQLs for other databases.

Auto Logoff

JavaScript-based auto-logoff timers are a good complement to server-side session limits.  Such are especially nice when coupled with periodic keep-alive messages while the user is still working.  The basic techniques for doing this are now classic, but new styles show up almost daily.  I happen to like Mint‘s approach of adding a red banner and seconds countdown one minute before logging off.

Fortunately, Eric Hynds created a nice jQuery-based Mint-like timer that we non-Intuit folks can use.  It uses Paul Irish’s idleTimer underneath.

Dropping it in is easy; just include the two JS files and add the idletimeout div into your common layout.  I tucked the boilerplate JavaScript into a simple common JSPF, like so:

<%@ taglib uri="" prefix="c"%>
<script src="<c:url value="/script/jquery.idletimer.js"/>"></script>
<script src="<c:url value="/script/jquery.idletimeout.js"/>"></script>
var idleTimeout = <%= SettingsBean.getIdleTimeout() %>;
if (idleTimeout > 0) {
  $.idleTimeout('#idletimeout', '#idletimeout a', {
	idleAfter: idleTimeout,
	pollingInterval: 30,
	keepAliveURL: '<c:url value="/keepalive" />',
	serverResponseEquals: 'OK',
	onTimeout: function(){
		window.location = '<c:url value="/logout" />';
	onIdle: function(){
		$(this).slideDown(); // show the warning bar
	onCountdown: function( counter ){
		$(this).find("span").html( counter ); // update the counter
	onResume: function(){
		$(this).slideUp(); // hide the warning bar

Inanimate IE

Among Internet Explorer’s quirks is that certain page actions (clicking a button, submitting, etc.) will freeze animated GIFs.  Fortunately, gratuitous live GIFs went out with grunge bands, but they are handy for the occasional “loading” image.

I found myself having to work around this IE death today to keep my spinner moving.  The fix is simple: just set the HTML to the image again, like so:

// IE stops GIF animation after submit, so set the image again:
 '<img src="<c:url value="/images/loading.gif"/>" border=0 alt="Loading..." />');

IE will then wake up and remember it has a GIF to attend to.


The trouble with keeping your data in the cloud is that clouds can dissipate.  Such was the case this week with the Nike+ API.

Nike finally unveiled the long-awaited replacement for their fragile Flash-based Nike+ site, but at the same time broke the public API that many of us depend on.  As a result, I had to turn off my Nike+ Stats code and sidebar widget from this blog.  Sites that depend on Nike+ data (dailymileEagerFeet, Nike+PHP, etc.) are also left in a holding pattern.  At this point, it’s not even clear if Nike will let us access our own data; hopefully they won’t attempt a Runner+-like shakedown.

This type of thing is all too common lately, and the broader lesson here is that this cloud world we’re rushing into can cause some big data access and ownership problems.  If and when Nike lets me access my own data, I’ll reinstate my Nike+ stats (either directly, or through a plugin like dailymile’s).  Until then, I’ll be watching for a break in the clouds.

Broken Tiles

I encountered intermittent problems where Apache Tiles 2.2.2 where concurrency issues cause it to throw a NoSuchDefinitionException and render a blank page.  There have been various JIRAs with fixes, but these are in the not-yet-released version 2.2.3.  To get these fixes, update your Maven pom.xml, specify the  2.2.3-SNAPSHOT version for all Tiles components, and add the Apache snapshot repository:

    <name>Apache Maven Snapshot Repository</name>

Hopefully 2.2.3 will be released soon.

Toolbox Linkapalooza

A few favorite tools I used this week:

  • WebScarab – Nice Ethical Hacking tool.  Among many features, it exposes hidden form fields for editing.
  • Burp Suite – Similar to WebScarab; its proxy and intruder features make packet capture, modification, and replay a snap.
  • Runner’s World Shoe Advisor.

Summer Running

“Heat, hills, and humidity.  Welcome to Atlanta.”

Run Atlanta slogan

While summer adds heat to the challenge of running, it also brings time in the schedule for racing.  My daughter Lydia and I ran several races over the past couple of months; here are a few of them.

Celebrate America 10K

For Memorial Day, we ran the Celebrate America race at Alpharetta’s Northpoint Mall.  This 16th annual event was well organized and equipped, making for a smooth race of nearly 900 runners.  The course was pleasant – a loop on tree-lined streets around the mall area, with a few rolling hills.  The 10K was a double loop, which provided an extra benefit for me: I was able to watch Lydia cross the 5K finish line as I started my second time around.  Lydia won her age group in the 5K at 25:00; my 10K time was 53:02.

There were several Memorial Day races in the area, and I’m pleased that we chose this one.  We’ll watch for it again next year.

ATC Fathers Day 4 Miler

The Atlanta Track Club (ATC) held its annual Fathers Day 4-Miler on Saturday, June 18, the day after Tina and I returned from our 25th anniversary trip.  It had the benefits of being free for ATC members and ending inside Turner Field: the Braves home plate area makes a great place for the finish line.

The course was well-planned, through the historic neighborhoods of downtown Atlanta, past Grant Park and the Atlanta Zoo.  There were some challenging uphills, but good downhills to recover.  I enjoyed running alongside Lydia the entire time and crossing the finish line together.  I was proud of her for doing well on the 4 mile distance and hilly course.  Our team finished 22nd overall at 36:47.

Peachtree Road Race

No other race matches the excitement of the world’s largest 10K.  And with 60,000 runners, the 42nd annual Peachtree Road Race was the largest yet.   On July 4, Stephen and Lydia ran the Woodstock Freedom Run, while I headed downtown for the Peachtree.  Getting there is the hardest part: waking in the darkness of 4:00 am and driving to the nearest Marta rail station before the parking lots fill up.

The new time groups make the crowds manageable: it becomes more like 22 serial races of about 3,000 runners each than a mob of 60K.   I was in corral C which, fortunately, is one of the four start waves with access to the starting line area.  This provided more space to relax and explore and enjoy the pre-race activity and wheelchair division start.

Another first this year was a flyover by three F-16s to close the national anthem – a flyover at a 10K – how cool is that?  That added to the excitement of the start, which continued throughout the race.  The entire course is lined with bands, giveaways, spectators (over 100,000), TV and radio stations, costumes, and some unique Independence Day celebrations.  As my college “stomping grounds”, the route also brought back many memories.  All this carried me along so that it felt more like a celebration than a race.  I hardly noticed the heat and “cardiac hill.”

There’s quite a bit of “sideways running” to weave around crowds and dodge fire hoses, so the Peachtree isn’t a race for PRs.  I kept an even pace and finished at 54:01, par for the Wave C course.

This race just gets better every year, and the current ATC leadership is doing a great job of implementing smart improvements.  Taking the AJC’s post-race poll revealed a lot of popular suggestions: tweak the start waves for groups, switch to a technical T-shirt, start earlier.  But, even if nothing changes, I’ll be back next year: me and 60,000 fellow runners.

Etowah River Run

The annual Etowah Swelter River Run balances the benefit of a fast course with the challenge of late July heat.  This year, like last, was certainly no exception: race time weather was at 77 degrees with 91% humidity, but that was offset by the signature opening downhill run and flat-as-a-pancake route.  This was the third year running it for Lydia and me; she finished first in her age group at 25:06, while I came in at 24:23.

The race held many familiar positives: fast course, helpful volunteers, good local turnout (about 500 runners, including a few cross country teams), nice T-shirt design (a repeat of last year’s popular art), valuable and plentiful door prices, and close proximity to home.   This year’s introduction of D-tag chip timing was a nice improvement.  I’d like to see the race start earlier to beat some of the heat, and a technical (rather than cotton) T-shirt would be nice.  As in years past, a few runners complained that the course was a little long (from 3.18 to 3.22 miles), but that narrow discrepancy is really only a concern to folks looking for new PRs.  We’ll be back again next year, pushing the pace against the heat.

Run at the Mill

Racing today was an easy decision, with a rare Saturday off from coaching (compliments of spring break), a race just 4 miles from my dad’s house, and cool half marathon medals with Hebrews 12:1 on the back.  And the first annual Run at the Mill (part of the Run for God series) was a winner!

Lydia and I rode up together the night before and spent the evening at my dad’s home.  We made a Pizza Hut stop on the way: “carb loading,” we said, but any excuse would do.  After arriving, we enjoyed a nice evening just chatting and hanging out.

My half marathon start time was 90 minutes before Lydia’s 5K start, so Dad was gracious enough to shuttle Lydia over, dropping her off just before her race, and even bringing over my dropped race bib earlier.  Did I mention how nice it was to be only 4 miles away?  It was so humid I had to use the car wipers while driving, but at least the temps were in the low 60s.  Pollen counts were off the scale, but that’s a small price to pay for a very beautiful wooded setting.

Combination race, ministry, and country fair

Prater’s Mill is out of the way, but I can hardly imagine a better place to hold a half marathon.  The course was scenic, along country roads past pastures, homesteads, and rocky streams.  Since this is a mountainous area (north of Dalton and very near the Tennessee line), I expected many steep climbs, but it was actually quite flat: mostly gently rolling hills with just a couple of long uphills.  This run in the country was so pleasant that I spent the first several miles with the MP3 player off, listening to singing birds and other morning sounds.

At 9:46, the first mile was my slowest, as I navigated through running traffic.  I kept thinking I should have started closer to the front, but at least it forced me to start at a measured pace.  In the end, I definitely negative-split this thing.

T-shirt, 1/2 marathon medal, and bib

Miles 1-3 took us up some of the longer climbs and past the aptly-named Strain Road.  Around mile 4, the fog began lifting, leaving very low clouds with sunlight streaming through, painting the countryside in bright gold.  If only Tina could have been there with her camera!  Shortly afterward, we were chased by some yap dogs, but they were all bark and no bite, succeeding only in adding humor and speed motivation.

After about the 10K mark, we were treated to some nice downhills, and then mostly level territory until about mile 11.  Mile 8 was a turnaround: not my favorite, but it offered the chance to see where I stood against other runners.

I had recently recalibrated my Nike+ on a flat course, which left it confused on these hills.  On average, it reported nearly 10% too much distance, since it did not account for my shorter uphill strides.  But the course’s consistent, well-marked milestones helped me adjust.

Lydia finished first in her age group

After mile 11, we hit another uphill stretch, which troubled my left knee.  So once I cleared mile 12, I checked my time and, seeing I was in great shape to finish at my sub-2 goal, dropped my pace significantly, perhaps a little too much.  As I approached the final tenth, I could see the race clock and hear a volunteer shout, “hurry and you’ll beat 2 hours!”  So I kicked into a final dash (a sub-6:00 pace) and finished at 1:59:50.  Lydia had just finished her 5K and met me at the finish line.

Looking around, I could see the post-race activities in full swing.  The grounds around the river and historic buildings were filled with bounce houses, booths, concessions, and a talented praise band playing in the pavilion.  Joining the racers were many families and other visitors, giving the place the feel of a combination race, ministry, and country fair.

Cornbread: another reason to recycle

Lydia was excited about her strong running, so we checked and found she ran the 5K in 25:57, finishing first in her age group!  She received a very nice award for that.

Lydia takes on the 5K

Overall, this race had a lot going for it: scenic course, nice venue, valuable ministry, abundant post-race activities, small town hospitality, plenty of helpful volunteers, top-notch timing system, and great execution.

For all the promotion and activities, this was still a small race: just over 600 runners.  I would like to see it grow, and I have a feeling that once the word gets out, it will.  There was a registration cap for this first annual race; I hope they can expand and accommodate a larger group next year.

Berry Half Mary

I was so impressed with last year’s Berry race (I ran the 10K then), that I decided then to return this year and run the half marathon this time.  I registered in December to get the discount and guarantee a spot but, of course, had no way of knowing then what conditions would be like.

I woke repeatedly through the night from a virus and, around 3 am, checked the latest forecast and weather conditions.  45 degrees, 100% chance of rain (about an inch over the duration of the race), 10-15 MPH winds, and stomach funk.  This was not going to be easy, so  I began adjusting expectations.  My goal was sub-2 hrs and, since I’d done 1:51 through 1:53 in training (and even 1:46 for 13.1 on a treadmill), sub-2 was well within reach.  But not under these conditions.  I talked myself into 2:10 and tried to get some sleep.

Rain and winds accompanied me throughout the dark drive to Rome, but the weather calmed as I approached.  I took the shuttle to packet pickup inside the Ford Dining Hall and then made my way to the starting line.  The rain began diminishing until, finally, a few minutes after the start of the race, it stopped entirely and didn’t return until well after the race!  Awesome!

Although this year’s races were full/sold out, participation didn’t look near the 2,000 runners there last year.  I’m not good at estimating crowds, but I suspect some folks stayed home expecting pouring rain.

The things that make this race great were well in place: beautiful college campus (the world’s largest) with stone buildings and tree-lined roads, plenty of volunteers to keep things flowing smoothly, off-site parking and shuttle buses that ran like clockwork, students and volunteers along the course to offer encouragement and humor, and top-notch equipment.  The motivational signs were back and well-placed.  For example, just before mile 10 was this gem: “There’s no such thing as bad weather, only soft people,” and mile 11 had: “Remember, running is fun!”

There were some rough spots in the half marathon course, like large rocks embedded in the gravel roads that made for bad footing.  Hopefully, they can re-route to avoid these places when WinShape construction is complete next year.

At last, I made it to the end and got the nice finisher’s medal.  I came in at 2:05:56, well within my adjusted goal, but leaving plenty of room for some future sub-2s.  It was nice to see some familiar faces cross the line, including Ray Rhodes who ran a couple miles beyond the finish to meet his marathon training schedule.

I didn’t see Jeff Galloway (to be starting the race and handing out awards) nor the deer.  Perhaps both were too fast for me or had sense enough to stay out of the rain.  Unfortunately, I couldn’t stick around for the awards ceremony to hear Jeff at that time.  If he returns next year, I’ll try to make the pre-race dinner to hear him speak.

Early March can be a dicey time for racing (“in like a lion, out like a lamb”), but this Berry race is a must-do event.  Count me in for 2012, and I’ll watch for the early registration late this year.

Rewire, then Plugin

I thought it would be nice to add a Nike+ widget to this blog, so I did a bit of searching.  It didn’t take long to find the cool Nike+ WordPress Plugin by Mark Rickert.  However, upon installing and configuring it, I found it failed during the curl authentication calls with:

Can not retrieve data from
Error: there is no user information in the request

No worries, my Nike+ data is publicly accessible, so this type of authentication is really unnecessary and only slows the retrieval time. So I edited the plugin code (nikePlus.php) to change from using up-front authentication to passing my ID on each call.

While I was in there, I also did a bit of customization and cleanup: removed unimportant details, tweaked heading levels, trimmed some things to improve performance, etc.  But I deliberately kept it simple.  That’s the beauty of these plug-ins: they’re easy to customize and tune.  Scroll down to the “Nike+ Stats” and “Recent Runs” in the right-hand column and you’ll see it.

Hats off to Mark for a handy plugin which not only was a nice add to this site, but sparked my interest in possible further Nike+ coding.

Cherokee Fall Classic

For the third straight year, the Cherokee Fall Classic had near-perfect weather and good turnout, with a broad spectrum of runners.  This is one of those “must do” events for our family: worth squeezing into our overbooked Saturday schedule.

The annual event features a 10K, 5K, and 1 mile fun run.  The 10K and 5K courses are now USATF-certified – good for qualifying times and accurate comparisons.  Each race offers its own appeal: the 10K route is very scenic, particularly for an “out and back,” and the 5K route is flat.  The race coincides with the adjacent and popular Cherokee Pignic for those who worked up an appetite for barbecue.

As always, the race was very well organized and well promoted locally.  Having full access to the YMCA facility on a chilly morning is a huge plus.  The volunteers were knowledgeable, helpful, and friendly.

Due to time constraints, both Stephen and I ran the 5K.  Lydia was disappointed that she couldn’t run it, but she had to stay fresh for a competitive soccer game that followed.  Stephen had a good run in his usual style: striking up conversations with adjacent runners while maintaining a strong, steady pace.  I had several clues that I took it too easy: I had too much energy at the end, my first mile was the slowest by far, and I got nowhere near a record time despite the flat course.  But it was good enough for a second place age group finish, since some of the faster runners were in the 10K.  Besides, for nice races and great family events like this, “a good time” measures fun more than speed.

I wish I could report on the post-race activities because they’re always excellent, but we had to leave immediately after Stephen crossed the finish line to make it to an early morning soccer game.  But I heard it was enjoyable from folks I talked with later in the day.

I expect the folks at the Canton YMCA will do a jam-up job with this race again next year, so count me in!

Racing for Grace

I had a Saturday morning free and had not run a 10K race in awhile, so I headed over to Tucker for Racing for Grace.  This event was sponsored by St. Andrews Presbyterian Church, benefiting their youth mission work and building program.

The advance work on this race was excellent.  It was well promoted (a Run Georgia Premier Event), the event web site was professional and informative, the T-shirt logo (with Isaiah 40:31b quote) was well done, and the 10K course was USATF certified.  There was a huge number of race-day volunteers (all wearing recognizable white event shirts), and good facilities.  It was a combination 5K and 10K, and the 10K was far from crowded.

And it was a nice run: the weather was beautiful and the tree-lined roads were pleasant.  The course meandered through nearby neighborhoods, with rolling hills and many turns.  Many cones and volunteers directed the way, but unfortunately not quite enough.  There were two confusing points along the way: one where several runners and I did a loop we probably shouldn’t have and another where we took a wrong turn.  So I’m not sure exactly how far I ran.  My Nike+ reported 6.53 miles, but no matter how much I calibrate, it’s never completely accurate on hills.  My time (55 mins, 25 secs) was in the ballpark for a 10K, albeit slower than usual, even with the hills.

For a “first annual” event, it had a lot going for it.  Several runners provided feedback about the route problems, so I’m sure there will be course corrections and more participation next year.  It’ll be a race to look forward to.

Labor Day “Triathlon”

My original Labor Day plan was to run the U.S. 10K Classic (a great race, I’ve heard), but that would have stood in the way of the family canoeing/kayaking trip (something of a family Labor Day tradition now).  But then the late-breaking forecast called for mid-50s in the morning: perfect for running, but not good for little ones in a river.  So we delayed hitting the river for a few hours, which gave me time to head over to nearby Hickory Flat and run the Hickory Flat Out 5K.

I was glad I did.  The 5K was sponsored by Mt. Zion Baptist Church, and benefited their children’s camp ministry.  The race was run on the roads in front of the church, and ended on trails behind it.  It was a beautiful setting for an early morning race, participation was good, the event was well organized, and the volunteers were very friendly and helpful.  The technical shirt for the race was nice, although I didn’t get one: that’s what I get for registering only minutes before the race started.  However, the volunteer at the shirt table told me they would mail shirts to those who didn’t get one.  That’s a very nice gesture; with many races, the policy is, “you snooze, you lose.”  I’m a bit out of training, so I certainly didn’t set any personal records (my time was around 25:30).  But I enjoyed it, and it was much better than morning loops around my usual running spots.

Afterward, we loaded up the two kayaks, one canoe, and 5/7 of the family and headed out to run the 13 mile stretch of the Etowah River from East Cherokee to 140.  Last year’s floods changed this section a bit, but it was still very nice, with blue herons escorting us, interesting aquatic life, and the native American fish weirs still intact (Tina posted some nice shots in her Picasa Gallery).  Water levels had receded, but it was very runnable.  Rapids never get above Class II in this segment (if that), so it took awhile: 6 hours for us (with stops), and it made for a good paddling workout.  My only complaint is that put-in and take-out remains a real challenge; we look forward to the planned launches to improve that situation.

Following that we rushed home just in time for me to grill “dad burgers.”  There: we squeezed as much into one day as is humanly possible.  Can we do it again tomorrow?

Run, canoe, grill: pretty much a perfect Labor Day “triathlon,” if you ask me.

Etowah River Run

Today’s Etowah River Run was a hot and humid affair.  I chuckled as I read the weather report on my Droid near race time.  80 degrees and 87% humidity seemed right, but it was the NWS Heat Advisory that caught my attention: “stay in an air-conditioned room and stay out of direct sunshine.” Seemed as good a time as any to run a 5K!

We got a quick perspective check, though, as backpack-clad 24-hour racers from the nearby Gold Rush 24 Adventure came running by just before the start of the 5K.  We 5K’ers cheered them on heartily: cheers of encouragement, and of celebration that we would be done 50 times sooner.

Yet the course was flat and fast, the race is for a good cause, and it has become quite a tradition around Canton.  Turnout was good in spite of the heat, as this is race gets good participation from local cross-country teams (it falls in the training season, just before Saturday meets begin).  This was the second year that Lydia and I ran it, so we knew what to expect.

The one twist to this course is that the first mile is the fast one, with a long downhill.  This means it takes longer to “thin out” the crowds, and runners don’t fall into position until after mile 1.  A lot of folks let that pull them into too fast a pace and end up paying for it in the last half.  I reminded Lydia beforehand not to do that; she managed her pace well, and was strong at the finish.  And what an exciting finish!

After I was done, I stayed near the finish line and watched for Lydia.  As the timer cleared 27 minutes, I walked over and checked the card baskets.  There was nothing yet in the under 10 girls basket, so I knew if Lydia finished at her usual pace, she could grab a first place age group award.  I soon saw her running in, looking great, in first place!  About 20 yards behind her was a girl about her age gaining on her.  She overtook Lydia, and Lydia kicked into a faster sprint and passed her again.  It went back and forth until they passed the finish line side by side, shoulder to shoulder.  It was a dead tie as far as I can tell.  But, while in the chute, the girl grabbed a place card first, which put her in first and Lydia in second.  Lydia was a bit disappointed, but it was the most exciting finish in the race (yes, I’m a bit biased).

Officially, Lydia placed second at around 29:20.  I ran it in 24:35, and was happy enough to run a sub-8 5K while under a heat advisory.

After Lydia collected her award, we prepared to leave, but she then asked to stay for more door prizes.  Great suggestion!  I had forgotten how good and plentiful the prizes were at this race. Lydia won a $25 Walmart card, and I won a $50 Phidippides card.  And the race T-shirt is a good one.  It’s cotton, not technical, but it’s a nice design and an improvement over previous years.

Overall, it was a great morning, and we’ll run it again next year.  Surely, it will be cooler.

Woodstock Freedom Run

The annual Woodstock Freedom Run is perhaps my favorite 5K, mainly because it benefits The Hope Center.  It certainly helps to have Woodstock charm, a flat course, and gracious weather for July (around 70 degrees at race time).  And it’s always a nice surprise to chat with so many folks that I don’t see often.  It feels like a family reunion.

Lydia won a second-place age group award at 28:09.  Stephen ran very well at 30:06 and was all smiles as he crossed the line, but he’s in the 11-14 group now, competing with 18-minute finishers.  At 25:32, I was certainly no threat to 15-minute defending champ Sammy Nyamongo, but enjoyed the race all the same.

It should return to July 4 next year, so if you’re not running the Peachtree, come out for this one.

A Berry of a Race and More

This morning’s Berry College 10K race (also with 5K, 1 mile, and 1/2 Marathon) could not have been better.  The venue was both ideal and idyllic, and as the world’s largest college campus there was plenty of room to lay out some scenic routes.  The tree-lined roads and trails carried us by pastures with deer, beautiful stone college buildings, and even a bit of snow still around in places as icing on the cake.  It was very well organized and staffed, making the handling of about 2,000 runners flow like clockwork.  By running the 10K, I dropped into my comfortable pace (a 54:14 finish), rather than too-fast paces I often try for 5Ks.  Overall, it was a top-notch event, the way all races should be.

Afterward, we enjoyed warming temps and exciting soccer. Lydia had a great game in our season opener with three goals, some excellent crosses and setups, and a “textbook” corner kick: she lifted it and it dropped right in front of the goal for her friend to finish.  Luke’s first regular season NASA game was a competitive one, ending in a tie.  Overall, a great Saturday!

Spring sports, winter weather

“No winter lasts forever; no spring skips its turn.”
Hal Borland

It’s that time of year when my family’s calendar gets ahead the climate. Luke has been at sub-freezing soccer for weeks now with NASA and Crown, but his first “spring” tournament (the RYSA Spring Kickoff Classic, a blustery affair) made it all the more real.  Lydia and I joined the soccer fray with our first team practice last night.  And I continued my new tradition of frigid races today by running the Guns & Hoses 5K: a benefit sponsored by the Cherokee Recreation & Parks Agency, the Cherokee County Fire Department (hoses) and the Cherokee County Sheriff’s Office (guns).  The 27 degree temps and 17 degree wind chill slowed me below my goal pace, but I did end up with a second place age group finish.  It was a well-organized race with about 400 runners (more than expected), and one that I’ll look for again next year.

I’ll settle down for some more Winter Olympics viewing, to warm up after the soccer games and remind myself that it is still winter.  And I’ll patiently accept that bout of snow and freezing rain predicted for early next week.  But it’s getting time: out with the cold, in with the new!


There are plenty of good GPS running tools for the Android; my favorites are SportyPal and the new Google MyTracks.  Both measure pace, distance, and route, and display results on Google Maps.  With them, I get the benefits of a GPS running watch, but with more features and no extra cost.

But I’ve had mixed results with GPS tracking.  Sometimes I can’t get reliable signals, even in open areas with no overhead obstructions (MyTracks can revert to determining location by cell and Wifi signals, but that’s a very weak approximation).  Sometimes inaccurate map data and other things can throw distance off; that’s most noticeable when I run places where I know the exact distance of the course.  And sometimes, the truly weird happens, like the run shown at right.  The red (for “fastest”) lines depict how I left the course for a half mile sprint through fences, houses, and rough terrain at 27.3 miles per hour (then quicky returning to the track, of course).  MyTracks reported a recent 5 mile street run as 785.16 miles in just over 39 minutes (I was ready to give up at the 784 mile mark).  And tight loops on small tracks are almost never right with GPS tracking.  Obviously, such failures get in the way in trying to maintain a good read on my pace.

So I decided to go with the Nike+ Sportband.  Its accelerometer technology is not dependent on GPS signals for measurement: it’s nice and simple.  That’s helpful because I don’t always like to carry my phone with me, nor fiddle with it while running.  But I do miss the automatic mapping, especially when exploring new areas.  So when running new routes, I carry both: Nike+ for accurate pace tracking, and my GPS Droid for route tracking.  Call it Nike++.

Once the new wears off, I’ll probably settle into a “just one at a time” mode: Nike+ for running and Droid GPS for walking, hiking, and kayaking.  But, for now, it’s belt and suspenders, and that allows for some often interesting comparisons.

Alpharetta Eagle Run 5K

This morning’s 2nd Annual Eagle Run 5K was an overcast, windy one, and the headwinds and moderate hills kept it interesting.  At 25:52, I was more than two minutes slower than my goal and training runs, but I’ll keep at it.  It benefited Milton High School boy’s lacrosse.  It seemed most of the team ran it, along with about 300 others.

Cool Runnings

The weather was better than I expected (above freezing), but the hills were worse.  This morning’s Etowah Soccer 5K was a hilly run, slowing me down to below my normal 10K pace.  I enjoyed the challenge, but didn’t like ending with my record worst time.  Oh well, chalk it up as a training run.  The entertainment value was good, though: the comedy of hearing so many of the Etowah High students cross the finish shouting “those hills were killer!”

It was close to home and for a great cause, so I’ll consider it a challenge for next year.

Treadmill Weather

I vaguely remember rolling over to check the weather on my Droid this morning around 6:00 a.m., contemplating running the Frost Bite 5K over in Acworth.  But with a racetime forceast of 16 degrees with a 4 degree wind chill, along with snow and ice covered roads, I quickly got over it.  “Frost bite,” indeed.  I applaud the few dozen who ran it; I’m sure there were some PRs set – for the coldest race.

Conditions were fine later that afternoon indoors on the treadmill at the Y: 70 degrees and calm.  And, of course, watching the televised Jackets victory over #5 Duke made it all the better.   Lawal’s game alone pushed me to run 6 miles at my 5K pace.  Maybe one day someone will host a January race indoors – with treadmills and Cardio Theatre.  Sign me up for that one!