Michael's profileMike's BLOGPhotosBlogListsMore ![]() | Help |
|
|
14 August Witches Cup 2009My camera wasn't fast enough to freeze the action in the dimming light ....but these are the photos I got. Fun night ....
13 August Monitoring web service endpoints with Soap-UI, Maven, and TeamCityOne of the differences between testing commercial-off-the-shelf software (COTS)and a hosted service is the time dimension. With COTS, you are answering the question: Does the software work as expected? With a hosted service you are answering that same question, but also additionally answering the question: Does the software continue to work as expected? Which brings me to one of my favorite topics — monitoring. Monitoring is the activity that needs to be performed to ensure that quality of hosted services is achieved every day. I prototyped a web service monitoring approach that I thought I’d share. It uses Soap-UI, Maven, and TeamCity. Engineers that develop or test web services are usually familiar with a nifty tool called Soap-UI. The tool is really useful with ad-hoc exercising of web services. The tool helps form Soap requests that can be sent to a web service, can send the requests, visually display the responses, develop test cases, assert Soap responses, etc….
Building on this, there is a Maven plug-in for Soap-UI. Maven, the Ant-like tool for building Java projects, has a plug-in which can run the Soap-UI tests. To do this, you have to write a pom.xml …which is very simple. The pom will download all dependencies, including the Soap-UI tool itself, and run the tests that you defined through your interactive use of Soap-UI. The pom looks like this ….
Once you have a Maven pom, you can then run your tests consistently from the command line …. with a simple Maven command:
When you execute this command, your tests run automatically.
But you don’t want to be responsible for running the tests all the time. This is where TeamCity comes in. You add your project to TeamCity, and with cron-like precision, your tests will run…every hour, every day, monitoring your web service endpoints over time to make sure they behave as expected.
And not only does TeamCity run your tests, it has all the email notification of test passing and failing built-in.
So if the web service endpoint misbehaves, you can proactively address the issue. Monitoring ….quality over the time dimension. 09 August Tokeneke Classic 2009New England road cycling championships. I didn't win ...but had a darn good ride! Went all out redline on the first giant climb, but didn't make the first selection....was in the 2nd selection...a group of about 10. We chased and chased...but never caught them...but never lost sight of them either. I descended well....relaxed, all out, and hands off the brakes at speeds over 45 mph. Final climb .... spin, spin, spin....my group of 10 was whittled down to 3. With 150 meters to go I attacked them .... and had a nice sprint at the line ..Harpoon Brewery-to-Brewery Ride, 2009 147 miles in 1 day!!! From the Harpoon Brewery in Boston, MA ....to the Harpoon Brewery in Windsor, VT. If you get lost ...just go west until you hit the Connecticut River ...then turn right and go north for 50 miles! 05 June The 8 Fallacies of Distrubuted SystemsOne of the things that keeps me awake at night is the 8 Fallacies of Distributed Computing. As computers and software were transitioning from standalone entities to networked and distributed entities, all sorts of new unexpected issues and problems arose. In 1994, Peter Deutsch recognized these issues as …in the general sense…failed assumptions of the new computing landscape. Then in 1997 James Gosling of Sun added another failed assumption …and together these failed assumptions became what is known as “The 8 Fallacies of Distributed Computing.” Says Peter Deutsch….
In a nutshell, I think it all sort of boils down to you can’t rely on the network or internet that connect the various tiers of a distributed system. Stuff happens. And most importantly, stuff you never thought of before…. will happen. Your connection to a backend database may break. The browser’s connection to the internet may become very slow, or fail. Hostnames may not be resolved. Your RMI connection to a back-end process may be broken. Things that you assumed would be true as you developed the application …well, they may not be true when the application is deployed. So as a QE Engineer, I am recognizing that …in addition to all the usual functional, performance, and usability aspects to software quality ….there are also the quality issues related to these 8 fallacies when testing distributed systems. All sorts of new possibilities for test cases appear. What happens when I yank the network cable out of my computer (or gently disconnect it) while using a distributed application? And then what happens when I plug the network cable back in? What happens when I the internet becomes very slow? Is the application just slow? Or unusable? The list of failure scenarios for distributed systems can be much greater than when testing a closed system that is installed on a single standalone computer. I found in myself there is a mental shift that needs to occur when considering testing distributed systems. Whereas in testing a closed system, a broken network connection may be thought of as an invalid test scenario or a problem in the test environment…with a distributed system these sorts of issues can be considered valid. At first, it doesn’t seem right to log a bug that says (metaphorically) … “When I pulled the network cable out of my computer…and then put it back in …my distributed application no longer worked.” Well initially you think …ummm….don’t do that and you won’t have any more issues like that. Yes, but the application needs to be robust and handle that situation…which is may be a real situation. So there are testing tools available to help find these sorts of issues. One such tool is NetLimiter … which is used to introduce network latency into a test environment. With such a tool you can find and flush out issues that traditional testing may not find. Another approach I was thinking of …rather than a “post-development 8 fallacy testing phase” …are testing approaches that “inject” the fallacies (such as latency) right into the developer sandbox and build and test system. For example, right now I am in a Maven build environment ….and the system-under-test is started with a command like this:
This is simplifying a bit, but that is it in a nutshell…it starts a J2EE application server hosting the system-under-test. This J2EE application server communicates with a MATLAB Distributed Compute application. Now the concept is just this….introduce latency into the test environment by passing a property on the command line:
And ….by instrumenting the code in the right place …. well….I am then simulating latency on the RMI communication between the application server (Jetty) and the MATLAB Distributed Compute Engine.
Now …Thread.sleep() …that’s not rocket science. But, simple as this is …by simulating latency, I am seeing all sorts of new behaviors in the Flex UI that I didn’t notice before. Latency issues that may have gone unnoticed ..may now be flushed out….and that is what is important. 23 May Stafford Springs Criterium 2009 Stafford Springs Criterium ....25th! I had a good ride. I felt great ...and could move up when I wanted. But didn't have the skills and nerve to hold my position through the chicane ... so was generally at the back. At the back, in the draft ... but never really under threat of being dropped. GPS data http://trail.motionbased.com/trail/activity/8285084 Looking at the data .... 19 miles, average speed of 22.1 mph. Overall my avg heart rate was 153 ... which is at least 10 bpm less than what I can do for this amount of time. So I had more to give...and wasn't under major duress. HR graph shows no fatigue ...but does show some incomplete recovery the last few laps as the pace quickened. I gave all in the sprint ...hitting 100% of my max heartrate and a top speed of 34 mph. But poor positioning didn't get me much. Photos http://www.facebook.com/album.php?aid=97586&id=571342190&l=5eee72122c Video http://www.facebook.com/v/90665487190 http://www.facebook.com/v/90664552190 09 May Minuteman Classic 2009![]()
I had a fantastic race for myself! Fun! And I think I finished in the
2nd quartile ....will see on the results. And a zillion thanks Gina,
Bill, and Pete ....and Lorraine too! ...for coming to the race! First time up the big climb ...poorly positioned. But stayed attaached. Very strong headwind on route 12 .... but about 1/2 mile before the center of Sterling ... I attacked the peloton! Yes ...this is the very first time I have ever been detached from the peloton ...on the front! I felt great ...but probably not the smartest thing. I was off the front for maybe 2 minutes .... then I let them catch me. Recovered some ...but stayed in the top 10 positions ...and took the 2nd climb very well-positioned. Yeah! I asked this guy Jim who I met ...(who eventually got 3rd) ...what was going on at the front of the group when I attacked. He told me they were like 'WTF? Who is this guy?' etc... and they really had to work some to catch me. In hindsight ...probably not the smartest thing to do ...I should have used just enough energy to position myself well at the front. Actually, it was probably lunacy ...but I don't care. It was damn fun! So by the 3rd climb I was dangling ....and then detached. Argh. Working with a group of about 8 all the way around ...and on the headwind on route 12. But I felt good ...and same spot ...as where I attacked before...I attacked again. Dropped them all but one ... had about 400 feet on them. I can see from the video and photos they were catching up .....but no one passed me on the climb. Ultimately ...2nd quartile. Still got dropped. But did execute some overt aggressive cycling tactics ... had big fun. Rode pretty well for myself ... 05 May JUnitTestMaker ....Looking at a test tool called JUnittestmaker ….
It’s an open-source project circa 2001 by a company called WebMind …. apparently no longer in business. The purpose of the test tool is to create JUnit test skeletons for entire packages of untested code. The thought being …. if you have the skeletons …then you are over the initial hurdle of writing a unit test. You point the tool at a package …and voila …. 1 test skeleton for every class. The skeleton is JUnit 3 style …and you get an empty test method for every public method in the class under test. I just tried it …voila …126 test skeletons on a particular package. Initially there is a “wow” factor as you think …”wow, instant unit tests!! unit test generation en masse!!” But then there is a bit of a letdown after the initial wow. The tests are empty and don’t do anything. As I think about the challenge of unit testing …yes, there is some initial inertia sometimes in getting started, stubbing about the test classes, etc…. And this tool certainly does grease the skids on this initial part of the test writing lifecycle. But the real challenge of unit testing still remains. Meaningful tests that reflect the developer intention. Meaningful tests that reflect the RFAIN. Meaningful tests that prove the class is working as intended. Meaningful tests that enable developers to refactor a class or package with confidence. Mocking. JUnittestmaker …. a bit of a misnomer. It’s really JUnitTestSkeletonMaker. Worthwhile? 26 April Quabbin Road Race 2009 Fun day! Good exercise. And no crashes. I came in 39th out of 68 in the cat 4/5 35+. Mid-pack. Fat part of the bellcurve. Yeah ...I'm "normal" ...statistically speaking...I've always wanted to be normal! Got dropped on route 202 ... but had a good chase. Says a friend and chase group companion about my riding .... Mike, You drove that chase group and got it all organized. I told you you had a lot more in you than you let on! Great day. Jose. The rollers in Ware really hurt. And the final climb to the Quabbin tower was a total suffer festival! 24 April Notes on listening to Martin Fowler talk on "Evolutionary Software Design" These are just my notes on listening to Martin Fowler present his thoughts on "Evolutionary Software Design" ....
15 April #AmazonFailA recent software failure known as #AmazonFail has lit up the Twitterati these past few days. And as with all bugs, I find it fascinating.... To start with the basics of #AmazonFail ....
The short version is that on Easter Sunday, a critical mass of people noticed that many, many books that Amazon sells had their Amazon sales rank stripped, and that these books stopped coming up in searches on Amazon that were not searches on the book titles (or, presumably, authors).
Those impacted ... de-ranked authors ... began tweeting. And tweeting. And tweeting. And with Twitter, with all the immediacy it brings to communication and issues ...the issue escalated into a Severerity 1 bug yanking Amazon employees away from Sunday dinner. And the issue seems on a trajectory to enter the category of web folklore and uber-bugs that are known by all who test software. There are so many fascinating aspects to this bug and its aftermath. But here's a few things that fascinate me...
05 April Michael Schott Circuit Race 2009 GPS/speed/heartrate data from 2009 Michael Schott Circuit Race in Marblehead, MA... http://trail.motionbased.com/trail/episode/view.do?episodePk.pkValue=7936284 video... 27 March Using JUnit 4.x with JUnitPerfOne of the JUnit add-ons I like is JUnitPerf. For very little effort, you can decorate your JUnit tests into performance tests — timed regression tests, and multi-user multi-iteration load tests. Hey, the approach is not the end-all of performance testing, but I do think there is big value (and for little cost) to the approach. But I had been recently stymied with the approach since switching to JUnit 4.x. It just didn’t work. So months later…on the exciting MATLAB Server EDU project ….I am once again wanting to use JUnitPerf to get some performance and load testing value built into the automated continuous integration and test environment. But as we are using JUnit 4.x …argh…stymied. And I am loathe to change the dependency in the pom.xml to JUnit 3.x and refactor the tests. But ….I found a neat little tip on the web for using JUnitPerf with JUnit 4.x, and here it is: 1) Create a JUnit factory:
23 March Charge Pond Race Well...I did my first race...Charge Pond 3/21.
I don't know my exact placing, results aren't posted yet. But I wasn't dropped. I was in the front group the whole way, but the last lap things splintered and I was a few splinters behind the leaders...who knows ...maybe 20 or 30 seconds back. What I do know: 22 mph avg speed 161 bpm avg hr...that is close to my 1 hour max effort GPS, speed, and HR data: http://trail.motionbased.com/trail/activity/7848024 Some video I made (my son was snapping pics, as well as doing the lap cards for the race official): http://www.youtube.com/watch?v=A8X2ApH_800 Full race report... Two minutes before my first bicycle race of the season begins, I know I am not ready to race. I wheel my bicycle away from the start line. I get off my bicycle and sit down on the grass. I pull a wrinkled piece of paper from my back pocket. The paper has handwriting on it, and this is what it says; When I close my eyes I will hear violins, and I will be at the center of the sun. I cannot be hurt by any crash in this race. I cannot be dropped because I will never give up. I will ride like Jorgie. And most importantly, when I close my eyes I will hear violins, and I will be at the center of the sun. The center of the sun. I recognize the handwriting, it's my own. I wrote this cryptic gobbledy-gook self-talk. Gibberish I know, but it is absolutely essential to be in the right frame of mind for the next hour. So it's self-talk, a final pre-race message from myself to myself, and push everything else out of my mind. I read it one more time to try and convince myself of the validity of this message. No, not convince myself.....I know this isn't valid. I just need trick myself into accepting it for 1 hour....and say the final sentence out loud -- "When I close my eyes, I will be at the center of the sun". I take a deep breath, and get back on my bicycle and roll up to the start line. I am ready now. The race begins, and we begin orbiting Charge Pond, at 22 mph. It's a 1 mile loop, some rollers, and then a steep downhill into a tight 120 degree turn and a sprint up a hill. The hill is not that long or steep...maybe 75 feet vertical at 7% gradient; but I know that by the 20th lap, if not sooner, this corner and the subsequent climb will be the decisive point in the race. My heart rate triples to almost 3 beats per second -- bup, bup, bup (say that bup bup bup to yourself quickly, three times in a second, put your own hand on your heart and imagine your heart beating that fast. How hard you would have to be working to be racing?). The peloton forms like a pack of hungry wolves there is jockeying for position. And though I am alone in the pack I already know what Jorgie would be telling me to do: he would have his right hand off the handlebars like he is dribbling an imaginary basketball saying "Calm down, calm down" -- if indeed that is possible while racing -- and I heed this imaginary advice and only focus on staying in the slipstream of the racer in front of me keeping my front wheel 6 inches behind his rear wheel conserving energy in the draft. Calm. Conserving. And gasping for air at 160 beats per minute. After a few laps my metabolism begins to slow boil. Sugar and caffeine and adrenaline ...and then I feel endorphins releasing in my brain over my cerebral cortex. Things begin to boil inside like a tea kettle about to whistle .... my eyes are beginning to tear, drool out of my mouth. I can feel the tendons in my knees under duress. Thighs starting to burn. And the peloton is beginning to string out like a hungry snake looking for prey as it coils Charge Pond . I hear profanities and the sound of metal on metal -- a crash -- just ahead me. A racer bumps into me slightly. And then another racer bumps into me on the other side. It's intense. I try to veer around the crash, not become part of it, but I can't. And then my right hand reaches for the brake lever to slow down. But before I squeeze the brake I recall my pre-race message to myself -- I cannot be hurt. So I let go of the brake and veer hard left. I immediately know what Jorgie would do -- he would have his hand out, palm up, signalling "Come with me". I bear down on the pedals even harder and begin to move up on the outside of the pack, leaving the crash behind. At the front of a group of racers it is safer, as the liklihood that if a crash occurs increases that it will be behind you and not affect you. Also at the front you tend to not get caught behind gaps that may form. Heck, it's a race ...being near the front is good. Near the front is good, yes; but not at the front. For at the front, you are bearing the brunt of the wind and everyone else is in your draft. No need to tow the peloton or a group around letting them benefit from your draft. And when I suddenly find myself at the front I immediately know what Jorgie would do ... soft peddle and get off the front ... and when I do I imagine I see Jorgie smiling and sort of clapping his hands as if to say "Good job Mike to get off the front". An hour at this pace and the peloton is begins to break up. Sorted. Wheat separated from the chaff. A gap opens before me and suddenly I am out of the draft. I try to close the gap but can't, I not only have to accelerate to close the gap, but I am additionally now out of the slipstream bearing the brunt of the wind. I am falling out of the front group. But then I remember my note, my self-talk. I cannot be dropped, and I never give up. And I bear down and turn the pedals over applying smooth and relentless pressure over the entire circle of my pedal stroke in a massive gear. It seems an eternity, but eventually I catch on the wheel of the rider in front of me again. Reattached. I cannot be dropped. At the top of the hill I see the lap card ...1 lap to go. I don't even know what is going on really...I am sucking wheel (drafting), pulling in a paceline, holding the wheel in front of me, closing gaps when they open, responding to attacks. The peloton has splintered and I am in a splinter group. There really is no tactics, I am just going all out as fast as I can go. There is no chance I can bridge to another splinter group, I am too tired. I am just hanging on is all I can do. What would Jorgie do? I have no idea. I see the downhill and the tight corner, finally for the last time, I am so tired I really don't even care who wins at this point I just want this race over. Get across the line and lie down on the grass and recover. And out of fatigue, my forms slumps, and, exhausted, I begin to let a gap open to the wheel in front, and I close my eyes. But as soon as I close my eyes, I remember my note to myself, my gobbledy-gook self-talk. When I close my eyes I will hear violins, I will be at the center of the sun. No, I will not just ride in, exhausted. I will be at the center of the sun! I really need to dig deep now. I am already at my limit and in massive oxygen debt and my legs are screaming. But I jump out of the saddle, hands still in the drops, and close my eyes, and repeat out loud the words I wrote on the note: "I am at the center of the sun". And with that, I begin the final sprint, total combustion, red hot, feel the burn, crush it. It is just furious smash with one foot so hard trying to drive the pedal right off the spindle and into the pavement, and yank with the other, up the sprinters hill to the finish line. The center of the sun. I open my eyes, and I see the wheels spinning around me and I know one thing: I need my front wheel to surge in front of theirs. But it is so hard. So hard. And then the white finish line flashes beneath me and it is over. By the numbers...14th place, 30 seconds behind the winner. 22 mph avg. That was a good ride for me. But then I remember....hmmmm....I never heard the violins, I need to work on that. 12 March Race report: Minuteman Classic Today was the Sterling Classic, a 28 mile road race hosted by the
Minuteman Bicycle Club. Sterling, as you may or may not know, lays
claim to be the town of Mary and her lamb of the famous nursery rhyme
"Mary Had A Little Lamb". In the song's lyrics, Mary takes the lamb to
school one day, and the kids ask the teacher: "Why does the lamb love
Mary so?" Well, the reason the lamb loves Mary is.........the answer is
in the song in the next line of lyrics. Can you remember? Well, I am
digressing....I will tell you in a bit why the lamb loves Mary, if you
choose to read on. First, I want to describe this bicycle race! As the race is about to begin my mind goes back to Phil Liggett interviewing one of my favorite bicycle racers Alexander Vinokourov who says "The race today will be difficult. I will attack." These 9 words sum up bicycle racing so concisely, so universally. Vino's words -- true for any Belgian spring classic, true for any stage of the Tour de France, and true today in Sterling. The bicycle race today, like any race, will be difficult because it is a race. Crashes will occur. Injuries will occur. Courage will be tested on the descents. Strength tested on the climbs. Cooperation and competition. But there are 2 specific reasons today's race will be extra difficult: one, the race organizers have combined the category 4 racers with the category 5 racers, two, there is an absolute beast of a climb through Sterling center. As for the attacking Vino mentions, my current challenge is to stay with the peloton. There are dues to be paid and a ladder to be climbed. The rungs seem to go something like this: getting dropped, staying with the pack, getting in a breakaway, getting in the breakaway, getting on the podium. I am on the first rung of this ladder in this my 3rd year of riding, 1st year of racing, and only in my 3rd bicycle race. I know I will get dropped. There is a neutral start for several miles, which means no racing, and the official pace car leads the pack through the town of Sterling at about 15 mph. I am chatting up a few Team Bicycle Alley riders and Team Polar Beverage riders I have ridden with in the past. The pace car pulls aside dropping us off at the foot of the beast of a climb. No need to check my watch; I know what time it is -- it's pain time! Another nursery rhyme jumps into my head "Jack and Jill went up the hill to fetch a pail of water." When climbing it is important to find your rhythm, your groove, an aggressive yet sustainable pace. When I hit my climbing groove my bike talks to me. It says "Sh. Sh. Sh. Sh." The noise comes from...I don't know where it comes from... (Maybe in my head, maybe I'm going insane!) ...the tires on the road? Who knows. But my bike is not talking to me so this is a miserable climb. Hills are the great sorting mechanism of a bicycle race. And after the first beast of a climb, is there respite? A descent to catch your breath? Heck no! After the first climb is ....a second climb! I find myself in a group of 3 and we are working pretty well together, rotating in a paceline. And we are making some good speed working together. But is an odd partnership: we are the grimpeur, the roeleur, and the puncheur. The grimpeur is French for climber, someone with a good power-to-weight ratio which is what is required to climb well. I am the roeluer, good on the flats with plenty of power, but a smidgen to much weight in the denominator in the power-to-weight fraction. Then there is the puncheur, strong, stocky, mesomorph. a sprinter. We have mismatched riding profiles that put our little ad-hoc cooperative group under duress over rolling terrain. I take a nice strong turn at the front of the paceline, and when I pull over I notice the puncheur is gone. Drats, I didn't mean to drop him. The grimpeur says "Nice pull". But unfortunately I gave a little too much to the group in my turn, and couldn't hang on his wheel on the subsequent climb. So then I am dropped. Double drats. So I am riding by myself for a bit. The road race has turned into a time trial. Time trialing requires the ability to ride very hard without the dynamic of competition or cooperation of a bicycle race. I look at my heart rate monitor and manage my exertion to keep my average heart rate at 160 bpm. A rider catches me from behind, and this puzzles me. Not that I have delusions of my riding strength, but I have been hammering. The great sort out of the pack has already occurred. So I was not expecting to be caught from behind by anyone. When he goes past me he says "Do you want the wheel?" meaning, do you want to draft behind me? The expectation then being that we would then cooperate, taking turns on the front breaking the wind. I nod and nestle 6 inches behind him. He is strong and relentless, what was he doing behind me? And his bike is making noise, wouldn't he have oiled his chain before race day? Puzzling. As we rotate, 30 seconds on the front, 30 seconds in back to rest...and oh that slight rest feels good....we exchange some conversation. His name is Jim. Cat 4. Flatted in the first lap. I get it now, he got a spare wheel from the neutral support vehicle which doesn't quite mesh with his derailleur properly which explains the noise. And it explains why he was behind me...he lost 1 minute or so swapping his wheel out. This is a good partnership for me...we are flying and working well together. But I also recognize it is an unequal partnership. I am getting more out of this cooperation than he is. Therefore it is a fragile and tenuous alliance and may not last. Jim puts his hand out and stops pedaling. There are police cruisers in the road and a rider lying motionless on the road. The racer in the road is not moving at all. He may be unconscious. There is the sound of the ambulance. He is hurt pretty bad. Gulp. "Jack fell down and broke his crown." Jim and I continue to make good speed, but up comes the beast of a climb. This climb will put test our partnership. One, I need to not get dropped. Two, I need to climb so strong so that Jim sees no weakness; he needs to see me as a strong partner for our alliance to continue. We crest the climb together, and Jim says "Nice climb. We'll see how you do on the next climb." I continue to ride hard, but I am way over my threshold at this point. My heart is beating at 184 bpm, I can't sustain this tempo. I need to recover a smidgen to get back down to the 170 bpm range. Jim sees the weakness...and says a few parting words of encourgement to me and waves goodbye. That's the way racing works: opportunistic cooperation, no charity. Back to my time trialing, metering out self-inflicted suffering and punishment to maintain a 160 bpm heart rate. I see a rider ahead of me and I set my mind to catch him. I try and try and can't close the gap. I am the donkey and he is the carrot on the end of a stick, I will never catch him. I start to get discouraged but then I see I am in fact narrowing the gap! So I am digging and digging and eventually I catch him. I think about working with him cooperatively, but he is fatiguing. Not a good relationship for me. I drop him easily. I see two more riders ahead and think "Bogeys, 12:00 high". I work and work and catch them. I fly past them, I thought one of them was Jim and I wanted to declare "I'm back! Let's go!" But neither one was Jim and I realize I am an idiot for flying past them like that. I slow a smidgen and point to my rear wheel. They line up and I take a nice pull, make a nice contribution of pacemaking to the group, an ante, an offering of teamwork. That seals the bond and we 3 work together to the finish. The finish line is at the crest of the beast of the climb. This gives the crowds a chance to witness some good suffering. When a bicycle race gets slowest, such as on a hill, it sometimes gets most exciting. The riders don't go by so fast, you can see their faces grimacing, and the final sort out of suffering occurs. I am climbing strong even though I am 24 miles past fresh, and then I hear it. "Sh". Did I hear what I thought I heard? "Sh. Sh. Sh." Oh my bike is talking to me, finally, and I stomp out the cadence out of the saddle. "Sh. Sh. Sh. Sh." Oh, talk to me baby! "Mary. Had. A. Lit. tle. Lamb." There's crowds and cheering. People yelling encourgement. Loud music playing. I hear someone shout my name. Fans. Team Bike Alley members who finished an earlier race. Or Seven Hills Wheelmen members on a ride-to-the-race. I can’t turn my head to look, I am in my own world of pain and suffering right now. I finish strong, but am glad the race is over. I have the whole ride recorded on my Garmin. Speed was 19.8 mph avg. Not fast enough apparently to stay with the pack. I think I need a smidgen more...maybe just 1 more mph to get up near 21 mph. I spent the entire winter training working on my climbing; I am stronger, but I need to climb a little stronger still. But still, I am pleased with that speed of 19.8 mph avg considering the first few miles were 15 mph with the neutral start and there was an overall elevation gain of over 100 feet. Ascending...avg 15 mph. Flats...avg 21 mph. Descending...25.4. Heart rate...overall a zone 4.3 .....with 54 minutes in zone 4, and 7 minutes in zone 5...I was working very hard. My average heart rate was 161 ...which is almost exactly what I was targetting. Max heart rate was 184....that is less than I thought...my max is 193 and I thought I was full out on that big climb. Maybe I was improperly geared? The big climb....112 feet elevation gain with average slope of 10%, max slope of 12%....that is a beast. What makes it difficult is that when that climb is over there is almost immediately another 150 foot climb. I actually liked that the finish was at that top of the big climb, that must make for great viewing by the spectators. Oh....and back to the nursery rhyme that originated in Sterling, Mary Had A Little Lamb: Mary had a little lamb its fleece was white as snow; And everywhere that Mary went, the lamb was sure to go. It followed her to school one day, which was against the rule; It made the children laugh and play, to see a lamb at school. And so the teacher turned it out, but still it lingered near, And waited patiently about till Mary did appear. "Why does the lamb love Mary so?" the eager children cry; "Why, Mary loves the lamb, you know" the teacher did reply. Now, the answer to the question at the beginning of the race report: "Why does the lamb love Mary so?" the eager children cry. The answer is: the lamb loves Mary because "Mary loves the lamb". Aw shucks....the hopeful adage of love reciprocated. The love you get is from the love you give. What a happy thought for Mother's Day! 06 March Bikes, Bagels, and Bad Breath Bikes, bagels, and bad breath -- the minivan is chock full in the
pre-dawn darkness. This morning I'm hanging with the wild bunch, the
cool kids, the hardcore racing cyclists. There are decades of race
experience packed in this van; but, also something rather child-like.
When the sliding door of the minivan shuts sealing out the outside
world with us inside it is suddenly quiet. We look at each other,
smile, and exchange high-fives: "Let's go race our bicycles!" As we drive through small towns in southern New Hampshire I am mulling something I recently read from a continent away, an ancient African proverb: If you want to go far, go together; if you want to go fast, go alone. In today's contest -- the Lake Sunapee Road Race -- I will need to do both, go both far and fast; race together, and race alone. Racing together cooperatively with others, I will need to share the brunt of the wind resistance with cycling tactics of pack riding and pacelining to complete the 46 miles of this course as fast as possible. And racing alone, I will need to employ the tactics of attacking, bridging, and sprinting. My outcome and final placing will be the result of my fitness, but also largely how well I manage the yin and yang, the cooperate and compete, the together and alone para dox that occurs in every bicycle race. Exactly when the hostilities began, I don't even know. For almost half the race I am nestled in the peloton. We are zipping along at over 20 mph, and I am under no duress. I could smoke a cigarette, read a book, hold a conversation, check my email on a wireless PDA, go all day at this level of exertion and complete a century. But all of a sudden, the peloton just seemed to explode and there were racers strewn up and down the road. Whether the racers at the front took a secret vote and decided to turn their pedals in anger, or if it was the vicious gusting 20 mph crosswinds coming across Lake Sunapee, or if riders' metabolisms suddenly overheated ... I truly have no idea.... in any event, the peloton began to break up. Whole contingents of racers are yo-yo'ing on the ascents, chasing on the descents, ripping through corners trying to remain in contact with la tete en course, the head of the race. Whatever it was that suddenly hit the peloton though....I felt it for sure....but it didn't exactly hit me, not a direct hit anyways. It was a very near-miss, and although damaged, I survived. Still, I needed to take inventory of myself. "Status reports from all sub-systems! Check in now!" my inner voice issued the command. "Legs reporting in: heavy lactate in the thighs, but we'll be okay." "Cardio systems reporting in: under duress, but we'll recover in a moment." "Fighting spirit: totally undamaged!" That last status report was the most important, what I needed to hear from myself. Around me I see a variety of other racers and I quickly scan in all the subtle body language cues: some slumped shoulders, some poor cadence, some poor form. And then I see what I am looking for: strong steady cadence, strong form, someone unscathed from whatever hit the peloton. I bridge, with difficultly, to get on his wheel, and my first impressions are confirmed -- he is strong. I'm struggling to stay on his wheel, and he is probably working 30% harder than me blocking the wind. This guy is a racehorse with the bit still clenched firmly between his teeth. I pull up next to him and make a circular motion with my index finger that would be interpreted by a non-cyclists as the motion for "crazy." Maybe I am crazy, maybe he is crazy, but that is not what I am indicating. He knows I am asking "We work together, rotating in a paceline, yes?" because instantly he bellows: "Let's do it!" This ad hoc alliance was the creation of a train that served us both well. Working together with another racer saves the person behind maybe 15 bpm of heartrate, a little recovery, just enough to keep driving a hard pace. Fifteen or twenty seconds on the front, then pull a little to the side, and a slight flick of the elbow as if to say "your turn," and then drift to the back for a bit of rest. The headwinds and crosswinds blowing in across the lake were fierce and solo riders, riding without the benefit of drafting, we either passed, or they latched on to contribute to, and benefit from, this paceline. On the final 10 miles we raced through wreckage of the head of the field. One racer was on the side of the road, leaning over his bike gasping and crying. Some looked stuck in molasses. Some got on the train, but some we just went around without showing any sympathy for their struggling carcasses. Roadkill. With a few miles to go, someone in the paceline said something like "We can do this hard way, or we can do this the easy way." Translation: "Let's just ride in together, without attacking. A peace treaty?" Really, this was an incredibly sane and attractive offer. The top 10 placings are out of reach for all of us. Our metabolisms pushed to the brink of complete meltdown, practically desperate with fatigue all of us. Why not just finish this race the easy way? But then my mind travels back to the minivan, and I remember why I am came here -- to race my bike -- and I remember the African proverb: if you want to go far, go together; if you want to go fast, go alone. I have gone far racing together with the others. Much of the excitement of the race, much of my overall speed, I owe to the peloton, to the paceline, and in particular, to that racehorse with the bit between his teeth that helped power me through the course and through the carnage after the peloton broke up. All that was good. Very good actually. But that was then, and this is now. I decide: now it is almost time for me to go alone, if i can, to go as fast as I can. We circle the rotary to begin the final 1/2 mile which is uphill 5% gradient. I hear a voice which I instantly recognize from the minivan which brings a smile to my face, my Columbian friend now improbably and suddenly yelling in French, "Allez!, A llez!, Mike Foley!" as if this were the slopes of Alpe d'Huez in the Tour de France, not a meaningless sprint for mid-pack placings in the cat 5 35+ division of a regional race. Here comes my answer to the question, "Hard way or easy way? Peace treaty?" Out-of-the-saddle, I make an exertion, a decidedly uncooperative exertion, and leave much of my paceline behind. We will finish this the hard way, racing to the end. One last hill. I hear another voice from the minivan 'Go Mike Foley!" and that triggers the final sprint, all out, I hold nothing back. After I cross the line I am totally spent and I head for the grassy median and I just uncleat one foot and tip the bike over and fall on the grass gasping, staring straight up at the puffy white cumulous clouds billowing against a beautiful blue sky, just letting my heart rate come down a bit. After a minute or so I stand up and look around. I see who I am looking for, the co-captain of the paceline, the racehorse that rescued me from the breakup of the peloton. "Dude, you're an animal!" I say, and we shake hands. He says, "That was good racing!" Indeed. By the numbers: 44.36 miles 20 mph 157 avg HR ....which is a strong effort for me...my 1 hr max effort is about 162 bpm....and this was a 2 hour race 10 minutes zone 5 64 minutes zone 4 31 minutes zone 3 aerobic 24 minutes zone 2, century pace 32nd out of 44 9 minutes behind the leader |
|
|