Charlotte area vintage car restoration shop

Posted in Uncategorized on June 5, 2013 by webzealot

Just wanted to throw out a link to a little restoration shop down in Fort Mill that is doing some terrific restoration work these days… Really stunning stuff!


Check them out online at to see some of their work!


The Better Music

Posted in Health/Fitness on February 28, 2010 by webzealot

They call it “Carolina Blue” because of days like today.  Brilliant sunshine, cool dry air, and that impossibly blue sky that looks as though you could swim in it.  In a word, breathtaking.  And after this bleaker than usual cold winter, today seemed to be for the birds… Literally.  They are coming back, those little harbingers of springs promise.  Their songs filled the air as I ran down my usual running trail.  It was just one of those special mornings that seems to be the occasional interest payment I get after slogging through a few months of cold, dank, and dreary weather.

The trail, not surprisingly, was packed.  People see that sunshine, and they get the same idea I do.  Go.  Get moving.  Enjoy it.  And so it was I found myself sailing by, in, and around a wide spectrum of fellow runners… Young and old, big and small, men and women.  But as I got farther into the run, I began to see a common theme, and it was one that really bothered me, this day in particular.  Headphones.

Those of you who have known me long enough know where I stand on the iPod thing.  It’s not for me.  But over the past year or so I have softened my stance a bit as far as other people wearing them.  Hey, if that’s what gets you out there and on the road, then that’s cool.  I’m down with that.  But today the air was filled with its own music, and it dawned on me that most people were missing it.  Halfway down the trail, I decided to start counting.  I passed 33 runners.  Of the 33 I counted, exactly SEVEN were sans headphones.  Even more surprising to me were the people who were running in groups, yet one or all were wearing headphones.  I saw that three times.  I mean, what’s the point of running with somebody if you are just going to wall yourself off anyway?

Hey, maybe it’s just a generational thing.  When I started running the Sony Walkman was still just a drawing on a sheet of paper.  But to me, running has always been a good time to just step out and clear my head.  I get that hour or so to just get my thoughts together, enjoy the day, and ponder.  Or if I’m running with friends, it’s a great time to catch up.  But, it seems as though I am clearly and increasingly in the minority, and that does kind of bum me out.  A lot.

So hey, it’s 2010, and I made a resolution to not be so judgmental this year.  If that iPod filled with Jay-Z or Led Zeppelin or Mariah Carey gets you through the run, then more power to you.  But maybe once, just every now and again, try going without.  You might be surprised what you’ve been missing.

Running Down Thunder Road

Posted in Health/Fitness with tags , , , on January 8, 2009 by webzealot

I’ve had a few folks ask me to sum up my recent marathon.  I realized I had a disparate collection of emails and oral retellings, but needed to get everything down in one concise spot before I started forgetting things.

Some of you have read my negative split posting from last year.  Of course, the problem with writing such things is that I have to practice what I preach.  So it was as I lined up on a chilly December morning on the starting line of the 2008 Thunder Road Marathon in Charlotte.  Lots of thoughts swirling through my head… Pacing… Strategy… Weather… Training… Was it enough?  Was it too much?  What would I be thinking in three hours?

Thunder Road is a fairly new marathon, filling the void left by the old Charlotte Observer Marathon.  I had decided to run it after a buddy of  mine convinced me we needed to run Boston at some point in our forties.  I had run Boston in 2002, at the fresh-faced age of 36.  My buddy’s idea seemed a little nutty at first.  Marathon training, done right, takes time.  Lots of time.  In my older years, I have been grounded by a fair number of injuries.  I had made a similar attempt a couple years earlier, only to be derailed by dead legs and lots of worrisome pains that were not healing.  So when the suggestion of a Boston qualifier first came up, I was a bit leery of it.  But, all I need to get into the big race is a 3:20. (Disclaimer: I know  a lot of folks can only dream of a 3:20, so I don’t mean to come across as pompous when I say “only a 3:20…”  A marathon, any marathon, no matter how slow, is a major accomplishment.  But, a 3:20 is generally something within my range.  I am lucky to be able to say that.)  So we would take a pretty conservative training approach.  No crazy hard speed workouts.  Long runs, but only a minimum number, and only the minimum length we would need.  Lots of easy runs.  No big deal.

The crowd moves away

The crowd moves away

I agreed.  Let’s do it.

I had been pretty fortunate to that point of 2008.  I had only raced twice (a spring half-marathon, and a little 5K) and had managed to stay injury free.  Additionally, I was managing to log 45-55 miles per week, week after week, with really very little effort.  I was maybe taking only one or two days off per month, so I figured as long as I stayed healthy, why not.  So our early speed workouts were lots of 400, 800, and mile workouts, maybe twice per week.  Part of the plan also included two tune-up races.  The first was a 15K in October, the other a half-marathon in November. And we slowly started layering in some long runs.

August turned into September, and everything was going well, and the workouts seemed easy… Maybe too easy.  The 3:20 goal looked like a no-brainer.  The weather yielded to the cooler fall temperatures, and the long runs ramped up… Sixteen… Eighteen…

As October rolled in, I had to think about that 15K, and what to shoot for.  This particular race is one of my favorite every year.  It’s a challenging course, but very pretty, and usually the crisp fall weather makes the humid summer struggles fade into memory.  So it was I came to think that maybe, just maybe, I could shoot for 6:05 pace.  That would be almost my PR pace.

PRs.  Oh they are such tricky things.  They are a great benchmark to judge yourself.  But as I get older, I have to do the same mental magic tricks everyone else does… Dialing back expectations as an older body faces the truth… The truth that the PRs I logged when I was 35 were probably no longer realistic as I plowed into my 40s.  So, this 15K would be the first litmus test, and I needed to set reasonable expectations.  The Thursday prior I decided to run a good hard 7 mile tempo run… Maybe, just maybe, that would let me know whether 6:05 to 6:10 was realistic.  If I could do seven miles, in training flats, and be near 6:10, then that probably means I can do the same on race day in racing flats.  Imagine my surprise when I stopped my watch and it told me I had averaged 6:02!  That was a lot faster than I thought I could roll.  So I waited for race day…

…And was not disappointed!  My finish time was 54:56… An average of 5.54!  And, it was a PR… At a time when I thought all my PRs were behind me… And it wasn’t like I had squeaked in under the wire… I broke my old PR by about half a minute.

My half-marathon in November was a similar story.  My old 1:20 PR fell by over two minutes.  At this point, my training buddy was telling me I needed to come up with another plan as targeting a 3:20 marathon was a waste of effort.  I was thinking he might be right.

So after talking with a few sages, I came up with 2:50 for my marathon target.  Two hours and fifty minutes.  Man.  Just the thought of that made my heart race.  I had done 2:59 twice (including that Boston run) and I thought that was as good as it would ever get.  The thought of taking off another nine minutes seemed like crazy talk.

Okay… That’s the set-up… Now for race day…

I know I want to negative split.  I’ve done it before, I think it’s the smartest way to marathon, and dang it if I haven’t BLOGGED about it.  To do anything else is crazy.  But for 2:50, I need to average better than 6:30 per mile… For 26 miles! Can I really click off 6:30 (or faster) in the waning miles of a marathon?  Man, I don’t know!  To say my mind was filled with doubt is a massive understatement.  But I commit to it… I’m going to follow my own advice.

On race day it’s cold, but otherwise perfect weather.  With a starting temperature around 30, but plenty of sunshine and nary a breeze through the leaves, I opt for nothing more than gloves to protect me from the cold.  I’m carrying a Gu in each glove, and there will be Gu at 16 and 20.  So with four Gu shots, and PowerAde, I should be able to stay away from the dreaded bonk.  A fitness magazine is sponsoring pace groups to help guide runners to various goals.  The fastest pace group is the three hour group, and I decide their 6:50-something pace will probably be near where I want to start out at.  I’m figuring if I can hit the 10 mile split and be within shouting distance of 6:30 pace, then I’ll be setting up for a decent second half.

The gun fires, and I feel relief more than anything.  I’m really not a huge fan of running marathons.  They are something of a necessary evil in my opinion.  As a runner, people tend to judge you by your marathons… How many, how fast, etc.  I’m probably off the hook on the “how many?” question since I have a pretty good answer for “how fast?”   The training is lengthy, and it’s pretty much a one shot deal.  If I have a bad day, it’s not like I can turn around in a few weeks and try again.  Months of training and hours on the road have boiled down to this, and now it’s on.

The first mile is downhill, and I fall in with the three-flat pacers.  Everyone is pretty jazzed and hyped up, which is dangerous.  In a race that is all about conservation and survival, many people will ruin their day right here.  We go through the split in 6:48… A bit faster than I wanted (I was thinking something more like a 7-flat) but it was down hill.  The second mile settled down and we logged a 6:56… Much better!  That would turn out to be my slowest mile of the race.  I drafted the pace setters and let them do the work through three and four.  The one thing I did notice was the number of people in the group that seemed like they were breathing awfully hard.  Too hard I thought.  Somewhere between the fourth and fifth mile, a small pack of us broke away.  Not quickly or suddenly mind you, but just a bit quicker.  We were still clipping off 6:48s more or less, while the pace group was trying to stay just on the slow side of 6:50.

Approaching the six mile split, I turned to the guy next to me and asked him what he was shooting to run.  His response was something like “Uh, *gasp* I’d like *gasp* to get in *cough* close to three…”  I didn’t have the heart to tell him he was in over his head.  I don’t know where he finished, if at all, but I’m fairly certain it wasn’t close to three.

The 10K split was 42:10.  Perfect.  Nice and easy.

At this point I started to really relax and take it all in.  The miles had been effortless, and we were going through some really pretty parts of the city.  At around 8 miles, I heard a conversation amongst my pack mates that went something like this:

“How you feelin’?”

“Eh, not bad… A little tired.”

“Yeah, me too…”

Gents, if you’re eight miles into a marathon, and you feel a little tired, it’s going to be a long day.  What I came to realize was there were a lot of people around me who were already in over their heads.  I’m guessing they didn’t read my blog.

The miles continued to drift by as we cruised into Myers Park, a very pretty tree-filled neighborhood.  I pull away from my small pack and am pretty much running solo.  It would turn out to be pretty much just me from there on.  Hit the ten mile post at just a hair over 1:07.  Not bad at all!  That certainly was where my pre-race planning had me.  But then I looked at my split for that tenth mile… 6:10!  Uh-oh… Way WAY too fast.  The gears started turning and I had to convince myself that was okay.  It was a downhill mile, but still.

The course turns into Dilworth and we approached the halfway mark.  I’m picking off other runners slowly but surely.  Passed a couple near the 11 mile mark… A couple more just past 12.  I turn the corner and look down a long stretch and can see the mats laying across the road at the half marathon mark… I cross in 1:27:10 surrounded by screaming spectators and the thumping beats of a live band.  As I turn the corner and head into the second half of my race, it seems like it gets very quiet.  There’s nobody in front of me that I can see, and nobody behind me that I can hear.  I start trying to do the math on my half split to see if I can figure out the pace… I can’t do it.  But, I know it’s probably not far from where I want to be.  So now it’s time to get serious and see if I really can do this negative split nonsense.

Mile 14 comes and goes.  My watch says 6:20 for the split.  Mile 15 drops to 6:08!  A spectator calls out that I’m in fifteenth place.  I back out of the rich pace a bit, but manage to get by a handful of people.  At this point I notice I am closing and passing people VERY quickly.  At the 15 mark I saw my buddy Aaron probably 150 meters in front of me.  By fifteen and a half he is within spitting distance.  As the 16 marker comes up, he is behind me somewhere, but I can no longer hear him and am now focusing on the next two guys in front of me.  I found out later that he dropped out at the 22 mile mark.

The 16 mile mark is the first snafu of the race.  There is supposed to be Gu there.  I’ve been taking PowerAde at all the water stops, and I’ve already snarfed down both my Gu packs (chocolate in case you were wondering).  There is supposed to be Gu at 16.  I’m counting on it.  Well, I think what happened was that I forgot what mile marker I was at.  I thought I was at 15, when I was really at 16.  Anyway, I totally forgot to look for the people handing out Gu, and was oblivious to them screaming “GU!!!!” at the top of their lungs.  The marathon brain drain had set in.  I was getting dumber by the mile.  I did look for Gu later, but that was the 17 mile mark.  In my stupor over looking for Gu, I managed to forget to grab any PowerAde.  It was the first water station I had skipped.  Meanwhile the past two miles had clicked off in 6:15 and 6:11 respectively.  At this point I was committed to the pace, and it was going well.  I had a rhythm going and I felt pretty good.  Just beyond the water station I passed another guy and up in the far distance (maybe 300 meters) I could see two more guys running side by side.

Mile 18 was 6:03.

Mile 19 was 6:04.

As I approached 20, I was in the wake of those two guys.  One of them turns around and does a double-take.

“Where the hell did you come from?”

I wasn’t expecting a conversation at that point and didn’t really know what to say.  I just mumbled something unremarkable.  At 20, I saw the volunteers holding Gu.  I washed it down with a couple gulps of PowerAde.  Mile 20 was a 6:09, 2:09:36 total.

About 800 meters down the road I had the first feelings of a possible pre-bonk.  Legs were really feeling heavy, I was tired, I couldn’t think straight.  I was real happy with the pace at this point (I was right around 6:29 pace) but I also knew I was getting into the danger zone.  Additionally, I was all alone with nobody to run with, and this is a part of town I’m not very familiar with.   I felt disoriented, not really sure where this street was going, which street was next, and how any of these would take me to the end.  It was a strange sensation.  I felt like I had been out there a long long time, and felt like I still had a long way to go.  But then, almost as quickly as the feeling descended on me, it left me.  The 20-mile Gu was working it’s magic.  Mile 21 was a 6:22.

I decided I needed to relax a little.  I kept the same pace and went through mile 22 with a 6:21.  I came up to the next aid station.  I’m right handed, but the aid station was on the left.  Ordinarily not a big deal.  But my IQ, corrected for 22 miles of marathon racing, was now hovering somewhere around 65.  I approached, stretched out my hand toward the last volunteer, grabbed the PowerAde cup, and promptly dropped it.  I knew I needed the calories, but at the same time I couldn’t decide whether I should turn around, or stop, or what.  I just kept going, hoping for the best.  Then, I heard footsteps closing behind me, fast.  I thought it was one of the guys I passed back at 20.  I looked over my shoulder and saw one of the water station volunteers chasing me down, cup in hand.  He had seen the botched hand off and quickly grabbed a cup and came after me.  I learned weeks later the guy’s name is John Wimbish, and I mention him by name because he may very well have saved my race.  I don’t know what would have happened without those few precious calories, but I’m glad I didn’t have to find out.  He is also a marathoner, and knew that ever cup is precious, especially at that stage of the race.

Mile 23 was 6:09.

Somewhere between 23 and 24, I passed the last runner I would pass.  Don’t know who he was, but he scared me.  He had clearly hit the wall and was in full all-out bonk survival mode.  He was shuffling at maybe nine minute pace or slower.  I wondered if I was next.

Mile 24 was a 6:18.

Mile 25 I was just trying to hang on.  6:29.  Uh-oh.

Shutting it down as I crossed the finish line.

Shutting it down as I crossed the finish line.

Lots of stuff goes through your mind in the last mile.  Well, sort of.  I was trying to compute the pace, but couldn’t.  I was trying to figure out what I would run if I totally crashed and burned with a 10 minute mile.  Couldn’t figure that out either.  I was trying to figure out what street I was on, and how could it possibly get to the finish.  The last mile was tough.  It’s uphill.  Even if it was downhill it would have seemed uphill.  I just wanted to hang on and keep one foot in front of the other.  I turned the last corner and could see the finish in the distance.  The split at 26 was a 6:22.

At that point, I knew the bonk wasn’t happening… I could survive another two-tenths of a mile, although I swear it seemed closer to a half mile… But I managed to find a little bit more lift in my legs (I wouldn’t call it a kick… It wasn’t).  As I approached the finish, I could see 2:48 rolling over to 2:49 on the clock and realized I really had pulled it off.  Until that moment I wasn’t really certain.  I scooted across the line where my wife and kids awaited, in fifth place overall.  The official time was 2:49:09.  I managed to hit every split on my watch except that one!

As far as the negative split, I got that too.  My second half split was 1:22, five minutes faster than the first half.

And yes, another PR!  Almost exactly ten minutes better than my previous best, and at a time in my running life when I assumed I had set all the PRs I would ever set.

So now, that behind me, I can think about NOT training for anything for a while.  With a Boston Qualifier in my pocket, I will look at going in 2010.  I’ll give my body a good chance to rest and recover, and a summer of slogging easy miles to make sure I can tackle another training program. Social Networking for Endurance Athletes

Posted in Health/Fitness, Social Networking with tags , , , on October 7, 2008 by webzealot

Social networking websites are all the rage these days, so it makes sense that we would eventually start seeing sites directly at specific sectors of users. is one such site, with a focus on the triathlon sports: running, swimming, and cycling.

I joined up a couple weeks ago and have had some time to go through it and live with it on a daily basis, and so far I am pretty impressed… But first the background… DailyMile is run by its two founders Ben Weiner and Kelly Kroevec, two fitness buffs who had the foresight to see there might be a future in combining their love of fitness into a combination workout log and social site.  And so progress began in May of 2008.

DailyMile is visually intuitive, and has all the “gee-whiz” web 2.0 feel that folks are used to on sites like FaceBook and Twitter.  They are still in invitation-only mode, although it looks like most anyone who asks will get an invite (hey, they accepted me, right?).  For a site that’s only been up for a few months, I have yet to encounter my first script or server error.

The site functions like a light weight workout log.  There are any number of online logs out there, and some are better than others.  DailyMile keeps it pretty simple… Enter your workout, how far you went and for how long… No need to wax eloquent about weather conditions, heart rate, diet, etc etc.  Just KISS… Keep It Simple Stupid.  I like that.  It’s really not a log for stat geeks, and endurance athletes tend to be big stat geeks.

You can add friends and follow their workouts as well, and they can follow yours.  You can comment on workouts posted by others…  There is the possibility to get some good advice and training critiques, and watch others make mistakes.

I will say at this point the total number of folks using the site seems low… Seems like I am seeing the same two or three dozen folks all through the site, but I guess that’s to be expected.  For the most part I would say the user base leans toward the novice side of things.  Lots of first time marathoners and triathletes, but overall probably a pretty good cross section of the general endurance athlete population.

The site does lack a couple things that some other networking sites have.  First, there doesn’t appear to be a phone interface.  Log into the site on your Blackberry and the site is virtually unusable.  Also, there is no means for posting messages to the site via SMS or email, or to get SMS alerts delivered to your phone.  Minor complaints, but that sort of functionality is becoming the norm these days rather than the exception.

One issue I’ve noticed with the site is the inability to edit ALL of the information for previous workouts.  I posted a run to the site, but made a mistake and posted it for the wrong date.  Well, there doesn’t seem to be a way to go back and fix it now.  Another oddity is the “points system” the site uses.  People who post events, or answer questions in the forums are awarded points.  However, there does not look to be a way to figure out how many points a person has earned.  And not that it matters as there doesn’t seem to be much solid information on the site even explaining what the points are for anyway.  I suspect this may be a beta feature that has only been partially developed.

But all-in-all seems very complete, polished, and functions very well, and I for one certainly plan on continuing to use it!

The Art of the Negative Split

Posted in Health/Fitness with tags , , on September 18, 2008 by webzealot

Ah, it’s getting to be that time of year again… Marathon season!  I just finished reading a marathon race report on another blog. It was like the twenty previous marathoning blogs I’ve read, and there will likely be twenty more tomorrow if I look hard enough…

“I was really excited and felt great, so I took it out a little bit faster than I planned…”

“…through the middle I was a little tired, but was looking forward to a strong finish…”

“…by mile 22 I had lost the will to live and was praying for a meteor to fall on me…”

Okay, I exaggerate. But only a little. For every marathoner that has ever run, there seems to be at least three marathon horror stories. I am constantly astounded by the number of people who run multiple marathons over the years, yet run them the same way… Fast out of the gate only to race into a road running version of the Bhutan Death March. And I know of what I speak as I have one such story myself. What I think is overlooked by novice and experienced runners alike is the importance of the negative split.

If you are running a marathon (or half marathon, 10K, or whatever) and you are doing it to impress folks on the cocktail circuit, or because Oprah did it, or because you are having a mid-life crisis, you can stop reading. That’s cool. Good luck and have fun with your running. A negative split is for people who who want to get from start to finish quickly.

Just so we are on the same page here, a negative split is the concept whereby you run the second half of your race faster than the first half. Simple concept, but not always simple to accomplish. Once thought to be the domain of only the elite runner, the negative split strategy is something I am CONVINCED has the potential to make every runner better, if they can pull it off.

I don’t think the negative split plays as big a roll in the shorter races. In my experience, 5K and 8K distances tend to be “gut it out” distances. You can go out and blow up in the first mile or mile and a half, and pretty much anyone can gut out the balance of the distance from there. It might not be fun, and it certainly isn’t easy. But it can be done. The negative split strategy comes into play starting at about the 10K distance, and becomes increasingly important the longer the race. (I will say as a disclaimer that I am not addressing ultra-marathoning here. The concept may extend to the world of the ultra, by I have no expertise there, and frankly I plan to keep it that way. Those guys are… eh, I’ll save that for another blog posting…) Races from the 10K and up tend to be as much about strategy and mental attitude as they are about strength and conditioning. Pacing, particularly SMART pacing, are what start to separate the good runners from the also rans.

So why is the negative split so hard? And why do so few runners manage to pull it off? I consistently find that there are two shortcomings that will undo most marathoners: 1) Putting too much emphasis on the long distance workouts, while simultaneously lessening the focus on speed and pace workouts and 2) mental errors.

Let’s tackle the easy one first…

If you’re like me, you circle a race date on the calendar, and you come up with a training plan. Depending on how fit you are when you start, this could range anywhere from as few as 14 weeks to as many as 22. I am betting if you are like me, after you have printed off that plan and you are looking at it all laid out in front of you, your eyes are instantly drawn to the “big number” runs… Those long but slow paced 14, 16, 18, 20 or more mile slogs. They can be tough, pounding grinds, but can leave you with an immense feeling of satisfaction. Those are the runs that on the surface seem most like the marathon you are preparing for. What many runners tend to look past are the equally important shorter but fast paced runs. Stuff like mile repeats, or ten mile tempo runs at faster than race pace, or hard fartleks. For whatever reason, many runners just aren’t grabbed by a speed workout that may only be eight miles in total. It may seem so inconsequential in fact as to be mistaken for just a regular run.  Inevitably it seems like the inexperienced runners will more likely skip the shorter and faster workouts when work and family commitments inevitably compromise the workout schedule.

In my own personal horror story (also known as the 1996 Grandmas Marathon), I can say without question this is where I started to go wrong. I was primarily doing all my training solo and was intoxicated by the mileage. I circled those long runs on my mental calendar months in advance. But in between were these other runs. Tempo here. Ladder there. Some long intervals sprinkled in for good measure.

“C’mon,” I would think to myself. “That only totals six miles. I’m training for a marathon damn it!”

So wouldn’t I be better off just going out and slogging ten miles, or maybe 12? After all, a marathon is more about strength than speed, right? And wouldn’t that 12 look better in my log book anyway? That rationale made sense at the time, but when I lined up at the starting line I was three and a half hours away from realizing how bad a judgment I had made.

What I had traded off in my high mileage lust was the muscle memory need to run a sustained and controlled fast pace. I could run the fast pace, but it was neither sustainable nor controllable. It was more akin to flailing. Combine this fundamental lack of conditioning with preparation shortcoming #2, and you’ve got a deadly combination.

So what about that second problem… Mental errors?  it seems like a simple thing to fix, but time and time again very fit, conditioned, and seemingly smart marathoners get tripped up by stuff that happens above the neck.  I can relate a personal story from Boston:

A number of years ago I was discussing race strategy for the Boston Marathon with an acquaintance.  “Matt”  had done all the training I had, and we weren’t far away from race day.  We were both shooting for something in the low 3 hour range, but we had a fundamental difference in how we were going to do it.  Matt had looked at the course map, and knew that the first six or so miles were largely downhill.  His plan was to take it out at a good pace and “bank” some time.  He figured he might tire toward the end, but his banked time would allow him to back off the pace toward the end and still finish strong.

My plan was almost a mirror image.  Take it out very slow, use the first five miles to more or less warm up, then just take it easy until the 16 to 18 mile mark.

Race day came, and for anyone who has been at the starting line of a marathon, you know the excitement… And Boston just magnifies that.  The starting gun fired, and yes, Matt started banking his time… LOTS OF IT.  All I know is passed him on Heartbreak Hill and he was barely moving.  He still had an okay race, but struggled to a 3.10 after walking huge chunks of the closing miles.  I finished in 2.59 with my fastest mile being the 24th.

What Matt learned that day was that banking time doesn’t work… The interest payment will kill you!

So why is the negative split so mentally hard to pull off?

A big part of it is the huge investment of time and training, combined with the excitement and adrenalin of race day.  After all those weeks, all those miles, all that commitment, and here you stand, waiting for the gun to go off… And I’m telling you to go SLOOOOOW?!?!?  Yeh, right!  Well, that’s what i’m telling you.  Sure, it can be very disconcerting.

One of the problems is you have to commit to your goal time right off the bat.  If you are shooting for 3.10, that means you need to average around 7.15 per mile… So if I’m telling you to hit in the low eight minute range for your first three or four miles, chances are you won’t hit that magical 2.59 you are SECRETLY hoping for.  Hey, I can dig that, but you’ve got to be honest with yourself.  If you tear out at 6.50 pace through the first ten miles, chances are really good you won’t even see your 3.10 mark either.

For me, it makes sense to break the marathon into two sections… The first 16, and the last ten.  The first section should be like a nice comfortably paced training run.  Hook up with somebody to run with.  Take turns drafting.  Chit chat.  Whatever.  Just kick back and go easy.  If you hit 16 and you’re starting to feel tired, you’re probably in trouble.  You need to hit 16 feeling confident, and like you easily have another ten miles left in the tank.

Then ease into the last ten, confident that you are on target.  No need to hammer down right away, but start pressing a little harder.  By the time you are at eighteen or nineteen, you should be cruising.  Personally I get a charge as I blast past all the people who are crashing and burning, and there are always lots of them!

So, what does it take to negative split?…

  1. Don’t skip the short and fast stuff. You will need it.  If you drop the hammer with eight miles to go, you are going to need that quick leg turnover.  Without it you may find yourself in trouble.
  2. Don’t get sucked up in the hype. Keep your head and stay cool on race day.  Sure, it’s exciting, but stay focused.
  3. Be realistic. You have a better idea of what you are capable of running than anyone else.  Don’t let your buddies talk you into a pace that’s too rich.
  4. Commit before the gun goes off. Know what time you are shooting for, and be committed to it.  Don’t decide five miles in that you feel good and should shoot for a PR.  I recommend being a minute or more SLOWER than your target average through at least the first three or four miles, and still keep it on the slow side through the halfway mark.  If you hit the half marathon post at near your target average, you’re probably heading for trouble.
  5. Eat, drink, and be merry. Train with the gels and drinks you plan on using on race day, then be sure to keep the calories flowing in.  If you need to stop and walk in order to get that cup of Gatorade down, do it!  Those calories are worth their weight in gold in the closing miles.

Most importantly, have fun!  Nobody likes to crash and burn, so kick back, relax, and let the race just come to you.  Have faith in the course you have plotted for yourself, and stick with it!  If you go out slow, you’ll have the late race legs to make back that time… But it just simply does not work the other way around.

So with a new marathon season on the horizon, now is the time to commit to racing smarter, not just faster!

PHP Script for parsing inbound email and saving attachments to a web host

Posted in Social Networking, Web Programming with tags , , , , , , on July 18, 2008 by webzealot

Ever wondered how BrightKite, TwitPic, and some of these other Web 2.0 websites have managed to reverse engineer email?  It used to be that websites would send YOU email, but that’s not all that exciting anymore.  Newsletters, notices, and alerts generated by web scripts are pretty common in even the most mundane of websites.

The trend recently has been to flip email on it’s head.  Now people can email (or send SMS text) to a specific address, and the contents of that message can be instantly parsed and posted on a website.  Particularly intriguing to me was the ability of a site like BrightKite or Flikr to save an attached image, more or less instantly, and have it post to the web.

That got me to wondering… How are they doing that?

As a long time ASP coder, I could see lots of trouble ahead.  In the world of Windows hosting, there are some very wide chasms between web services, and email services.  I asked around, looked high and low, and tinkered.  To make a long story short, I don’t think there is any way, or at least any good way, this functionality can be implemented through ASP.  I could be wrong about that, but I sure couldn’t find even a hint of a way to do it.  If I’m wrong, I would love if somebody could please respond and set the record straight.

What I did find is that this is NOT the case in the world of Unix and PHP!  In fact, PHP has many very nice tools to bridge the gap between email and web hosting… Many of these nifty toys can be found at the website.  So, I dove in and started playing!

What I came up with was the following script.  To give proper credit, the main function (called “parsepart”) was originally written by some fellow in the UK named John… That’s all I know about him, and his script is posted on the site along with others.  I did modify his script in a few spots, specifically in decoding the file name of any attachments.  But this script is a foundation for doing what TwitPic, Flikr, FaceBook, and others are doing.  I looked and played long and hard to come up with this… I hope somebody else can benefit from it as well…  Also, this doesn’t handle SMS, just email.  SMS is a task for another day!

//script will fetch an email identified by $msgid, and parse its parts into an
//array $partsarray
//structure of array:
//$partsarray[<name of part>][<attachment/text>]
//if attachment- subarray is [filename][binary data]
//if text- subarray is [type of text(HTML/PLAIN)][text string]

//$partsarray[1][attachment][filename]=filename of attachment in part 3.1
//$partsarray[1][attachment][binary]=binary data of attachment in part 3.1
//$partsarray[2][text][type]=type of text in part 2
//$partsarray[2][text][string]=decoded text string in part 2
//$partsarray[not multipart][text][string]=decoded text string in message that isn’t multipart

function parsepart($p,$i){
global $mbox,$msgid,$partsarray;
//where to write file attachments to:
$filestore = ‘[full/path/to/attachment/store/(chmod777)]’;

//fetch part
//if type is not text
if ($p->type!=0){
//decode if base64
if ($p->encoding==3)$part=base64_decode($part);
//decode if quoted printable
if ($p->encoding==4)$part=quoted_printable_decode($part);
//no need to decode binary or 8bit!

//get filename of attachment if present
// if there are any dparameters present in this part
if (count($p->dparameters)>0){
foreach ($p->dparameters as $dparam){
if ((strtoupper($dparam->attribute)==’NAME’) ||(strtoupper($dparam->attribute)==’FILENAME’)) $filename=$dparam->value;
//if no filename found
if ($filename==”){
// if there are any parameters present in this part
if (count($p->parameters)>0){
foreach ($p->parameters as $param){
if ((strtoupper($param->attribute)==’NAME’) ||(strtoupper($param->attribute)==’FILENAME’)) $filename=$param->value;
//write to disk and set partsarray variable
if ($filename!=”){
$tempfilename = imap_mime_header_decode($filename);

$partsarray[$i][attachment] = array(‘filename’=>$filename,’binary’=>$part);
//end if type!=0

//if part is text
else if($p->type==0){
//decode text
if ($p->encoding==4) $part=quoted_printable_decode($part);
//if base 64
if ($p->encoding==3) $part=base64_decode($part);

//OPTIONAL PROCESSING e.g. nl2br for plain text
//if plain text

if (strtoupper($p->subtype)==’PLAIN’)1;
//if HTML
else if (strtoupper($p->subtype)==’HTML’)1;
$partsarray[$i][text] = array(‘type’=>$p->subtype,’string’=>$part);

//if subparts… recurse into function and parse them too!
if (count($p->parts)>0){
foreach ($p->parts as $pno=>$parr){

//Open the connection to IMAP server
$mbox = imap_open(“{}”, “”, “password”)
or die(“can’t connect: ” . imap_last_error());

$status = @imap_status($mbox, “{}INBOX”, SA_ALL);

//$message_to_read = imap_uid($mbox, $status->uidnext – 1);
$msgid = $status->messages;

if ($msgid == 0) {
die(“No messages in inbox.”);

//fetch structure of message

//see if there are any parts
if (count($s->parts)>0){
foreach ($s->parts as $partno=>$partarr){
//parse parts of email

//for not multipart messages
//get body of message
//decode if quoted-printable
if ($s->encoding==4) $text=quoted_printable_decode($text);
if (strtoupper($s->subtype)==’PLAIN’) $text=$text;
if (strtoupper($s->subtype)==’HTML’) $text=$text;

$partsarray[‘not multipart’][text]=array(‘type’=>$s->subtype,’string’=>$text);

$header = imap_fetchheader($mbox,$msgid);
$obj = imap_rfc822_parse_headers($header);

//And heres the header info… Store it in a database, display it, whatever you like…

echo “Subject: ” . $obj->subject . “<br>”;
echo “From: ” . $obj->reply_toaddress . “<br>”;
echo “Plain Text: ” . $partsarray[‘not multipart’][‘text’][‘string’] . “<br>”;
echo “Text: ” . $partsarray[1][‘text’][‘string’] . “<br>”;
echo “Attachment file name: ” . $partsarray[1][‘attachment’][‘filename’] . “<br>”;

//here you can respond back with a confirmation email to the sender…
$headers = “From:”;
imap_mail ($obj->reply_toaddress,”Thanks for posting!”,”Your message was received!”,$headers);

//here we delete the message once parsed, clean out the mailbox, and close it all up…
imap_delete($mbox, $msgid);

I’ll be the first to admit I’m a bit of a PHP hack, and there may be better ways of doing this… But this script, in fewer than 150 lines, seems to do the trick!

A Nifty ASP Function to Convert a Regular URL into a TinyURL

Posted in Technology, Web Programming with tags , , , on May 14, 2008 by webzealot

I was pretty intrigued when I noticed Twitter will automatically convert a “long” URL into a “TinyURL” (see if you’re not familiar with this) so I assumed must have some sort of open API for automatically converting a URL.

Well, there might be an open API, but I sure couldn’t find it!

However, I figured there had to be a way to query against and get the desired result. So, I wrote my own little script to do exactly that! This uses classic ASP and the XMLHTTP object:

function GetTiny(URL)
if instr(URL, “”) = 0 then
preText = “<input type=hidden name=tinyurl value=”””
postText = “x = document.all.tinyurl.createTextRange();”

strFrom = “; & URL

Set xml = Server.CreateObject(“Microsoft.XMLHTTP”)
xml.Open “GET”, strFrom, False
sHTML = xml.responseText

strFirst = InStr(sHTML, preText ) ‘ Start of data
strLast = InStr(sHTML, postText) -20 ‘ End of Data
TinyURL = Mid(sHTML, strFirst + len(preText), strLast-strFirst-len(preText))

set xml = nothing

GetTiny = TinyURL
GetTiny = URL
end if

end function

To invoke it:

call GetTiny("")

Just that simple! Hope somebody finds this useful! Please let me know if you see any ways this can be improved!

UPDATE: I did discover there is an API for TinyURL… However, I have found it to be problematic. For instance, only “www.” domains seem to work, and adding “http://&#8221; onto the URL will generate an incorrect TinyURL. My script seems to work regardless.