Myers Park Summer Track, final week
Last night was the final night of CTTC Myers Park Summer Track Series, featuring championship races for the top qualifiers from the month, and a 5000 meter race instead of the 2 mile. This was only my second visit, but I’ll definitely be at more of them next year.
I did reasonably well with a 5:24 mile and an 18:52 5K, slight improvements over my previous week efforts. I haven’t done speed work on a track since before I got hurt last year, so I have a lot to learn about pacing on a track. My current intention is to be able to break a 5 minute mile and to run the 5K comfortably in the 17s this time next year, so I have plenty of work cut out for me.
Very nice to see plenty of Crazy Leggers show up. Congrats to Dan “Duracell” Hochberg, who placed third in the master’s championship mile with a smoking 5:16. Very nice seeing Mike, Tino, and the entire Koos family all running events, and also having Julia and the Stewarts there to cheer us on.
Myers Park Summer Track
I’m late to the party, but Summer Track Series is every Tuesday evening in June at Charlotte’s Myers Park High School. Lots of fun, tons of events for both kids and adults, 50m all the way up to 2 miles.
I haven’t run on a track since late last summer, and was happy to run a poorly-paced 5:26 mile at the 6/23 event. (Honestly, I was a little surprised to run under 5:40). Looking forward to sane pacing and getting closer to 5:20 next week.
I was spent after the mile, but I ran the two-miler for kicks. Total dead legs, but ran a negative split, with first mile at 6 flat.
Funny note: The runner I was trying to hang with for most of the two-miler was a tiny TrySports girl apparently named “Mo”, so every lap there were lots of “Go Mo” calls from their team, followed immediately by the occasional “Go Bo”. I would have been laughing if I wasn’t desperately trying to keep from passing out. And, yeah, she kicked my ass.
Great to see lots of familiar faces out, and to have met some friendly new ones. See you next week!
China Grove Main Street Challenge 5K
On the reliable recommendations of a few past participants, I made the trek up to China Grove last Friday for the Main Street Challenge 5K. Plenty of local support (around 400 runners), and the late 9PM start time is novel. I convinced a couple of Hochbergs to join me, and the afternoon drive up I85 in their convertible was a nice start to the evening.
The course is an out-and-back burner from the small China Grove downtown. It starts on a long, gradual downhill for about half a mile, and there is a long, gradual uphill for the half mile at the turnaround. It was nice to warm-up jog the course along with some friendly folks before the sun dropped, though the flying bugs along the graveyard road were not an ideal pre-race snack (also didn’t appreciate the one that got stuck in my eye).
The course is fast, and I was hoping to stay well under 19; unfortunately, my legs didn’t have any speed in them come race time. I struggled the entire race and salvaged a 19:07. Friday night runs are awesome fun, but my body just can’t seem to get into gear for them. I shouldn’t complain much, as I was happy the time was good enough for third-place age group award.
Post-race snacks were quite good (I enjoyed a huge chunk of watermelon, a cookie, and a free energy drink, and people tell me the chocolate dip-and-sprinkle Krispy Kreme stand was a winner), and the tech tee event shirt will definitely fit nicely into my post-run shirt stack. The after dark, small town atmosphere was very friendly, and regardless of my time I’m already looking forward to the race next year.
Shout-outs to the friendly people I warmed up with: Dan was right behind me and good for a third in his age; Stan, Jinnie, and Bill from TrySports went home with hardware, as did Bobby. I also ran into Théoden, who set a nice PR and has a great account of the race on his blog. I suspect his daughter will be passing all of us in no time!
Newton Gravity shoe review
Quick summary: An efficient, neutral-gaited runner’s dream trainer. The upper is perfect (very breathable; you can see toes through the mesh), and the midfoot cushioning suits me perfectly. Most comfortable shoe I’ve ever run a marathon in. Cons? Too expensive ($175), but I’ll make sacrifices.
2009 Gravity: I’m a fan of the redCurrent Shoes
I often have mixed feelings regarding the running shoe industry. On one hand, I love running shoes (gear nerd), and encourage new runners to get properly fitted at a local specialty running store rather than picking the most expensive pair at a big-box sporting goods store. Without training or supervision, inefficient running strides can quickly result in injury, and beginner injuries usually result in people dropping the sport. However, I tend to believe that shoe companies often over-engineer their shoes, producing something akin to a cushioned foot brace. I’ve actually been hurt by over-supportive shoes. I currently train mostly in the Asics Gel-Landreth 4, and I race in the Asics Gel-Speedstar 3. These are both neutral, cushioned shoes, with the Landreth being my trainer of choice ever since the Landreth 2.
Landreth 4, 2009 Gravity, Speedstar 3I have very healthy foot arches, and I naturally have an efficient gait. I am, however, a relatively tall and heavy guy, and I have always focused on my foot strike to minimize impact. The soles of my shoes naturally wear mostly just behind the ball of my foot, particularly on the shoes I use for races and speedwork. The faster I run, the more I land on my forefoot. You may often hear faster runners complain about how sore they are after a slow run. It’s true, because they often modify their stride to more of a heel strike when they slow. Stay a little faster and landing mid-foot, and the foot’s natural shock absorption can do its job.
Speedstars: Note the midfoot wearNewton Running
Newton Running builds shoes specifically for midfoot running, the mechanics of which are similar to barefoot running. However, these are not part-time shoes like the Nike Free. Newtons have rubber lugs under the balls of the feet, and the heels are relatively low. Because of this design, midfoot running is trivial as there is no massive heel to drag. The lugs are designed to act as a cushion on strike, and then as a lever as the body leans forward into the next stride. In theory, perfect for me.
First Impression
At this year’s Boston expo I stopped by the Newton booth and tried the neutral trainers (”Gravity”). I loved the breathable uppers, but was especially impressed with the cushioning. I expected the shoes to feel like racing flats with wedges in the forefoot, but they felt more like super-soft racing trainers. After a quick jog around the corner I was sold, despite them feeling a bit narrow on my right foot. (The booth folks were very cool, by the way, throwing in a promotional pair of socks and a visor to soften the price shock a little.)
Fast forward a few weeks. Newton Running has never claimed that its shoes will “fix” your gait; indeed, they caution that you will likely need to adapt to the shoes, not the other way around. I fully expected calf soreness and perhaps some ankle weakness after my first runs in the shoes, but I noticed very little soreness at all. My gait requires little modification to suit the shoes, though I did notice the shoes encouraging me to focus on my stride throughout the run, particularly as I tired toward the end of longer runs. A slower heel-striker with massive pronation issues would likely have a completely different experience, but the adoption phase for me was nonexistent.
As you can see, there is a little wear on the lugs, and a tiny bit of wear on the edge of the heel.
Newtons: Note wear at front of the lugs (as expected)Results
I’ve worn the shoes on training runs from 6 to 20 miles, a few 5K’s, and now in a marathon. For short races like a 5K I still prefer the grip of my Asics Speedstars. I blackened two toenails at Boston while running a 3:17 in Asics Landreths, but a few weeks later my feet felt superb after pounding 2:56 downhill in the Pocono Mountains Marathon. Indeed, my feet have not felt better in any of my 14 marathons. The midfoot cushioning of the lugs is perfect for long races, and the breathability of the uppers is incredible. I will be trying the neutral racers soon.
Do I recommend the shoes? Absolutely. If you are a runner wanting an aid to improve the efficiency of your gait, and want possibly the world’s most comfortable midfoot running shoe, you will not be disappointed. Unfortunately, I find that the price makes them a very hard sell to friends, despite the wonderful return policy. I wish Newton could price their shoes closer to the upper end of the larger manufacturers’ price ranges, but personally I’ll just try buying half as many shoes as I was before.
For more information, I recommend checking out the Newton Running website. They have a number of useful videos linked, including:
- What is forefoot running?
- Stop! Look! Listen! Running tutorial
- Barefoot running, landing on balls of feet and lifting with hamstrings
Pocono Mountains Run for the Red Marathon
It is not accurate to call the Pocono Mountains Run for the Red Marathon an easy marathon. It is a very fast marathon, but the descents are as quad-trashingly brutal as you will encounter. I can usually jog a day or so after a marathon, and I comfortably run a week afterward. After Pocono, I was having difficulty walking almost a week later.
So, what was my opinion of the race? I absolutely loved it.
Such a thing as an accidental personal best?I’ve run a lot of organized marathons recently (five in the past six months), but most have been paced like long runs rather than all-out races. Each has been faster than the previous one; since I’ve been slowly recovering from some nagging injuries, this strategy has been good for me both physically and mentally. I’ve managed to stay focused with my recovery without piling on massive weekly mileage totals, and the events are fun motivation. It works for me, at least.
My splits and more photos behind the link
Mac OS X: 2D Dock in 10.5
I don’t mind the 3D look of the OS X 10.5 dock, but I often prefer the 2D look of the old dock. Plus, I prefer the more-obvious running app indicators from the 2D dock; I find these hard to see in the 3D version. Also, sometimes I just prefer the same look for my dock whether it’s right- or bottom-oriented. Also, hidden apps (⌘H will hide, not minimize, an app’s windows) can be configured to show as transparent icons.
From a terminal:
defaults write com.apple.dock no-glass -boolean YES defaults write com.apple.dock showhidden -boolean YES killall Dock
Credit should be given to macosxhints.com for this.
Moving graphics with trigonometry
Notice: This is intended to involve only very basic concepts.
No matter the scope, most “game” programming these days involves moving pictures around on a computer screen, and performing this task can be very easy with a little basic math (specifically, trigonometry). Small two-dimensional graphics in games are usually called “sprites”, and in this exercise we’ll simply move a sprite.
We will be plotting a trajectory of a sprite across our screen, and to do this we keep track of
- the sprite’s position (a single point containing its X and Y coordinates),
- a velocity,
- and an angle at which to plot the distance the sprite travels.
Our game will draw the sprite to the screen as fast as it can, and we will know how much time has elapsed since the last time we drew the sprite. So, we will be provided the final number we need to plot our new sprite position: elapsed time.
We are calculating a distance vector, which is basically a line from one point to another. If our sprite’s velocity is five pixels per second, and one second elapses, it will travel a distance of five pixels. However, what is the new X,Y position of that point? It depends on the angle!
To calculate the amount along the X and Y axes our sprite has traveled, perform two simple calculations:
distanceX = velocity * elapsedTime * cos(angle); distanceY = velocity * elapsedTime * sin(angle);
Add these values to the previous X,Y position of the sprite and you’ll have the new position of the sprite. The diagram assumes a starting position of (1,1), and shows two distance vectors: The red is with an angle of π/4 radians (or 45º from vertical), while the green is an angle of π/2 radians (or 90º from vertical). Both have the same velocity magnitude.
To add a little simple rebound off the sides of the screen, make sure that the X and Y coordinates of the sprite are not beyond the edges. For a screen 800×600 pixels, where directly up is an angle of 0, simple reverse the angle when the sprite goes off the left or right of the screen, and subtract the angle from PI when it goes off the top or bottom.
if (xPosition > 800) { xPosition = 800; angle = -angle; } if (xPosition < 0) { xPosition = 0; angle = -angle; } if (yPosition > 600) { yPosition = 600; angle = PI - angle; } if (yPosition < 0) { yPosition = 0; angle = PI - angle; }
To slow the sprite down at a certain rate of deceleration, simply subtract from the velocity an amount that is multiplied by the elapsed time:
velocity = velocity - (deceleration * elapsedTime);
This isn’t the most accurate of physics demonstrations, but surprisingly advanced games can be built around calculations as simple as these.
Next we’ll discuss how to derive a distance from two points, and soon go over some handy linear interpolation.
Get Windows key on an old keyboard
I have a particular love of IBM keyboards, both the clicky Model M (compact) as well as scissor-key ThinkPad keyboards. Neither of these, however, has a Windows key. This key is good for much more than popping up the Start menu, so I’d like to get it back. Also, I never use Caps Lock, and have always preferred having Control in that location. So, I remapped Left Control to the Caps Lock key, and then reassigned Left Control to work as Left Windows. Works like a charm.
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] "Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,1d,00,3a,00,5b,e0,1d,00,\ 00,00,00,00
Explanation of the code to put into the registry can be found here, or you can just use KeyTweak to reassign.
Back to speed, even if slowly
Some months ago, I tweaked a hip flexor during an impromptu trail race. I didn’t give the injury proper respect, instead drawing out my recovery much longer than it should have taken. Furthermore, adjustments in my stride resulted in development of a very annoying plantar fascia cyst.
Now, as I’m training my way back into shape, I’m experiencing some extreme tendonitis in my right ankle area. Initial icing and mild anti-inflammatories were doing the trick, but it got worse over the weekend. Just as I was ramping up to 50-mile weeks. So depressing!
So what have I learned from the past year? First, I should give injuries proper respect. Part of what makes endurance athletes special is their constructive tolerance of pain. I pride myself in this, but I need to get better in distinguishing constructive and destructive pain tolerance. I need to listen. So, I’m taking at least most of a week off, even though I have a marathon date bearing down on me.
Second, I’ve really let my core conditioning go. I hate lifting weights when it’s not part of a routine, so I must find a new routine that includes core. Skimping on core strength is so common for runners, and has to be one of the most counterproductive things a runner can do.
I’m signed up for Birmingham, Albany, and Boston. The coming weeks will tell when my next attempt at a personal best should happen. It doesn’t have to be soon.
Sync two iTunes libraries
I have two Macs, and I use iTunes on both of them. My music library is managed on my MacBook, but I want access to all of the music on my Mac Pro at home without having to stream it. What’s the easiest way to keep these synchronized? We’re dealing with a Unix, so rsync comes to the rescue:
- Please back up your music, in case you get the hosts swapped or something. Tar it up or something:
tar -zcvf myMusic.tar.gz Music - Make sure one computer is available to the other via SSH by enabling “Remote Login” under System Preferences/Sharing. Grab a terminal and test this:
ssh userid@hostNameOrIPAddress - Also in the terminal, in your home directory, try a test run of rsync. I am transferring files from my laptop to my desktop, from a terminal on the desktop, so the command is:
1 2 3
rsync --archive --verbose --rsh=ssh --progress --log-file=anyNameYouLike.log --dry-run my-macbook.local:Music/iTunes .
- Add additional -v flags to get more verbose output. Run until you feel comfortable. Take off the
--dry-runand sit back. - Lastly, go select “File/Add to Library…” in iTunes and select your Music/iTunes directory. It’ll churn through the files and update its local database.
Update:
Turns out, these days I hardly ever rsync between two Macs; I buy music and rip CDs into my laptop, and I have a Sonos system that accesses tunes via a shared drive attached to my network. I easily mount this drive share to my laptop, so it regularly shows up in /Volumes on my laptop. So, the rsync command line looks like I’m synchronizing two directories local to my laptop:
cd Music/iTunes rsync --archive --verbose --stats "iTunes Music/" "/Volumes/NAS/iTunes Music/"
C# tip: Touching brain with reflection
In the interest of speed, I’ll start with a list of truths I won’t be discussing at length:
- Some day you will need to address a problem in someone else’s libraries without the luxury of patching and recompiling their code.
- Most people know .NET reflection allows you to interact with types you didn’t have access to at compile time. It also allows you to interact with types you don’t have permission to directly address in code (internal classes, private members, etc.).
- .NET Reflector is an essential tool for any C# developer who uses someone else’s API. Which is everybody.
Using reflection to read members and invoke methods is easy:
- Get an instance of System.Type from your object. All objects have a GetType() method.
- Call Type.InvokeMember(), passing in the instance you’re wanting to manipulate as well as the name of the member and access flags.
Real-world
The XNA framework is a delightful graphics and games programming API by Microsoft, which is free (as in beer) but not open-sourced, and is officially unsupported. I play a bit with XNA and recently came across a serious performance killer in XNA 2.0 (which I’ve been assured is fixed in 3.0 final; forum post here and bug report here). Basically, there is a leaky dictionary embedded two internal classes deep that never gets cleaned up, framerate goes poop in a little while if you’re loading and unloading content like crazy.
So, inside the public GraphicsDevice class, there is an instance of an internal DeviceResourceManager, and inside this is the collection of internal ResourceData structs which never gets cleaned up. Once the content that’s being tracked has been disposed, its ResourceData instance can go away, so we’re going to periodically poke into this collection and flush items that are slowing down access to the collection.
In our code, we have easy access to the public GraphicsDevice. So, let’s get access to an instance of the internal DeviceResourceManager inside of it, which is a private instance named “pResourceManager”:
1 2 3 4 5 6 7 8 | Type graphicsDeviceType = this.GraphicsDevice.GetType(); object deviceResourceMgrInst = graphicsDeviceType.InvokeMember("pResourceManager", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance, null, this.GraphicsDevice, // the instance we're manipulating null); |
So, we have access to a private instance of DeviceResourceManager. Now, we go inside it in the same way to get the private collection:
1 2 3 4 5 6 7 8 | Type deviceResourceMgrType = deviceResourceMgrInst.GetType(); System.Collections.IDictionary resourceDataDictionaryInst = deviceResourceMgrType.InvokeMember("pResourceData", BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance, null, deviceResourceMgrInst, null) as System.Collections.IDictionary; |
Inside the class there is a sync object for locking as we address the dictionary, but now we know how to get access to that and use it. Then, we can iterate over the objects in our dictionary and remove the ones that are no longer in use.
That’s all the magic. Use this sparingly, as the performance of addressing objects via reflection is horrendous, and it’s always dangerous to subvert API access declarations. However, it might be just the thing that saves you in a pinch.
For the curious, the continued code for the XNA 2.0 leak work-around:
Read the rest of this post »
Davidson Half-marathon
All out at the Davidson half-marathon finish(thanks to Jeri for picture)
Fun race last weekend in Davidson. Most of Crazy Legs showed up and we even got a few age group awards. I was 13th overall with a 1:25:35, good for an age-group second in my first race in the 35-39 group (congrats to fellow CL Paul Gonzalez for getting first about a minute ahead; I was no match for him in on the hills).
C# tip: Dependency Injection on the cheap
I want to keep this post short, so I won’t go into why you should design your code around interfaces, or why injecting dependencies at runtime is such a good idea. Rather, if you’re using .NET and want to quickly use Dependency Injection in your design, but are hesitant to adopt yet another framework (like Spring.NET, which I heartily recommend) for whatever reason, look to System.Activator.
In the way I usually use Activator, you need:
- The path to the assembly containing your implementation. The magic here is that you don’t need this referenced anywhere in the original application (you know, Dependency Injection and all).
- The name of the implementation class you want to load. I’m actually going to traverse all of the types in the injected assembly, which isn’t necessarily the most secure or efficient way to do things, but it is convenient and works well.
Namespaces used:
- System.Activator, to create the instance from a loaded assembly
- System.IO.FileInfo, to conveniently get the full path to the assembly you want to load
- System.Reflection.Assembly, to load your assembly (inject the dependency) into the current app domain
Some code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | IPluggableDependency pluggableInstance = null; // Load the injected assembly with its absolute path FileInfo assemblyFile = new FileInfo("PluggableStuff.dll"); Assembly assembly = Assembly.LoadFile(assemblyFile.FullName); // Find the matching Type you're wanting to instantiate foreach (Type type in assembly.GetTypes()) { if (type.FullName == "PluggableStuff.ClassName") { // Create an instance of your implementation, // cast as an interface pluggableInstance = Activator.CreateInstance(type) as IPluggableDependency; } } |
Now, as I said before, look into using a lean, established, flexible, robust DI framework like Spring. However, if that’s not an option for whatever reason, you can still build your apps around a nice DI pattern. Future migration to Spring will be a snap.
Blue Ridge Relay 2008
Last weekend was the Blue Ridge Relay, which is 209 miles and 24+ hours of sick quad- and hamstring-bashing. Our Crazy Legs team showed up with a full twelve-person roster, and pulled out an impressive seventh-place (out of 75+ teams) in 26:45.
The view from “Goat Hill”, somewhere in the Blue Ridge MountainsI ran position eight, with a first leg of 4.5 miles (moderately hilly), which I tried to run at my 5k pace. My overnight leg was 8 miles (nightmare dark mountain up, up, up, then screaming down), during which I experienced repeated heartburn worse than any college beer and wings episode. A sunburn and a general lack of sleep during the preceding week almost got the better of me before the night run, but passing a bunch of people delivered enough oh-so-lovely adrenaline to keep the feet turning over.
Mike “Goat” Smith cranking Goat HillAt the top of Goat Hill, I got the hand-off for my last leg, which was 9.4 miles downhill with over 2000 feet of descent. I cranked it as best I could, averaging sub-6s. My quads were destroyed for a week.
Prior to downhill bash (thanks Cheryl for the pic)
Coach Tino rounding the corner for the finishThe finish was in downtown Asheville. Luckily, the downtown Y allowed participants to shower afterward, so everyone was able to survive the ride back to Charlotte.
Two vans’ worth of Crazy LegsI’d go on about how fun the team was, but it would mostly be “you had to be there” stuff. Which, of course, is what makes these sorts of things worthwhile. I fully expect to run this event again, probably with much the same crew, and preferably as an ultra team (running more, but avoiding all the waiting around). Also, I’ll get more than three hours of sleep the night before the race next time.
I have a bunch more pictures at this link, and Mike’s Flickr archive is at this link.
McMullen tempo, speedwork, shoes
Started out the new running week (running weeks start in Saturday) with McMullen Creek from 51 all the way to Rea (including the steeplechase construction portion at Johnston). PM was up for a 6:30am start, which was a good thing since the lot was already starting to get busy. DJ showed up and seems ready to resume his Boston quest this year, and PM’s friend R joined us for the first time, and according to PM was there specifically to “kick my ass”; good thing I brought my heart rate monitor for the first time in over a year!
First six out were mild 8:15-ish miles, and I stuck a solid 120bpm all the way out. R and I took off on the way back, intending to run about a five-minute negative split, but we ended up running mid-to-low 6’s (I think) for 4.5 miles; all I’m sure of is that I was at 140bpm for the first two tempo miles, 150 for the third, and then popped 160 over the last mile. He seemed to have plenty of speed left, but I was pushing all out. Awesome getting to chase, which is exactly what I need to get some speed for the Fall. Nobody human runs 2:50 marathons at a 120 heart rate, after all.
Plus, R is on our Blue Ridge Relay team, which means I won’t be the fastest on the team. Sweet! I’ll still happily take spot 2, which is going to bring a new meaning to the name “Crazy Legs”.
In other running news, speedwork on the track has gone well for the past two weeks, though I might finally puke the next time we do 10×400m in 100F temp. Asics finally released the new rev for my favorite racing shoe, the Gel-Speedstar 3, and I have a pair on order. I’ve been doing my speedwork in some new two-models-old DS Trainers I pulled out of the closet and might try the new ones if I don’t love the Speedstar 3 like I did the 2.
Leica M8 review by a real photojournalist
Michael Kamber is a war photojournalist and Leica fan currently operating in Iraq, and in this article he discusses his real-world experiences with the Leica M8. The article is scathing, to put it bluntly. Most interesting to me were not the photographic problems with the camera (absolutely wild fluxuations in color balance, for example) but some very basic usability flaws that rendered the camera unusable for Kamber. In a statement that sounds so familiar to me, he questions whether Leica performed any real-world testing of the camera before shipping. And this guy’s not just being picky.
Originally linked from Luminous Landscape.
Kate Portrait
I love this portrait my sister is doing of my niece. She says it’s a work-in-progress, though I’m in favor of her keeping it in its current state.

I can’t wait to see the companion portrait of my nephew. She paints from photographs, so I’m hoping I can provide a similar portrait of him.
Boston 2008
I’m not sure exactly why I’ve waited a month to write about Boston. Perhaps it was my almost complete lack of photo-taking. More likely, it’s the feeling that I had finally completed a major undertaking, which leaves me exhausted and satisfied for about a week, then the elation turns into nervousness as I realize that I need another goal. New goals are scary, especially considering I had five years to get comfortable with this one.
To put it simply, the Boston Marathon is the best marathon in the entire world, in practically every way. It lives up to every expectation, from the talent level of the field, the difficulty of the rolling course, to the crazy pre-race expo and festivities, to the absolutely mind-blowing crowd support.
The course is every bit as hard as people say, with a quad-crushing downhill trend for the first half, and then crushing uphills for about six miles until 22. I was a bit out of shape for a fast attempt, but I still went out a little fast, loving the opportunity to flow along with huge packs of runners my speed or faster. I honestly got a tiny bit discouraged around half-way, as I’m not accustomed to being continuously passed by entire packs of people, and this trend didn’t let up for the entire race. But even that was incredible, running in a crowd for an entire marathon.
Uncomfortably rounding one of the last cornersI’ve never seen crowd support anything like this. Honestly I wonder why so many people turn out, as they are out in decent numbers for the entire course, and in huge crowds through the towns. Children were hanging out of trees, people were barbequeing, college kids were insane. I had heard the stories of the Wellesley girls, but nothing could have prepared me for what sounded like a Beatles concert a half-mile away. I’d go back just for that.
Unfortunately I didn’t quite have the legs I had in Portland or Myrtle, and the weather turned out to be a bit hot and sunny for me, so the hills and sun took their toll on me. No mushroom clould, but running sub-3 was definitely out of the question, so I managed to hold on for a Boston-qualifying 3:13 (Note: I’ll be 35 next year, so I get five minutes, and yes, I was already qualified for ‘09). Unless my dad qualifies for ‘09 (he will definitely be there for ‘10; more on that later), I’m going to try to kill this course next year. Revenge on those hills will be sweet.
Possibly the perfect restaurant? Must try it in ‘09For the entire weekend there are runners everywhere, and you can tell they’re serious runners. Everyone wears bragging gear from previous races, or they’re already wearing a wind jacket for the current race. Thousands and thousands of people, all excited to be there. If you are a runner, really a runner, you must do Boston at least once. It’s not just the reputation, it’s a religious experience. And if you aren’t a runner, I don’t know how you could experience the Boston weekend and not be one by the end of it. Just ask Jeri, Susi, or either of the Pauls.
Happy sandboxes and svn switch
I encourage everyone I work with to keep all of their development code in a source repository, even one-off dead-end prototype code they’re not going to check back into a main development tree. If you know you’re going to do destabilizing work, of course you’ll create a sandbox branch from the development branch and then do your work; we all know this. So, what happens if you inadvertently end up with a dead-end prototype in your working source checkout, and you didn’t have the foresight to start with a branch? It’s easy to make it as if you had.
Disclaimer: Of course, if this all fails you could lose a lot of work, so you might want to generate a quick diff or backup just in case. Just be careful.
- Create a development branch in our repository on the server. We are using Windows and TortoiseSVN, and our working code is from the branch at svn://svnserver/MyProject/Trunk at revision 1942. So, we use the Repo-browser in TortoiseSVN to find Trunk, select revision 1942 from the upper right-hand corner of the dialog, and then select “Copy to…” with a new location at svn://svnserver/MyProject/Sandboxes/bojordan/DeadEndPrototype. We now have a new branch, but our working code still belongs to Trunk.
- Right-click on my top-level checkout directory, select “Switch” from the TortoiseSVN options, and select the new branch in the “To URL:”. We know HEAD is fine, as we just created the new branch.
- Now, the next time we commit our code, we’ll check it back into the new branch. Glee!
Just remember: No more stale development tree archives on your development machines means cleaner, uncluttered living, and might get you one step closer to a 16 minute 5k. Or, maybe not, but you’ll still be happier.
Scraping together Boston training
I have my first Boston Marathon on April 21, and I’m not even remotely ready. I take some comfort in knowing Boston is more a reward than another proving ground, but I still want to give it a tough effort and I’m simply not ready. I ran my marathon PR almost completely solo at Myrtle Beach, and there are thousands of runners my speed or faster at Boston to push me. However, considering my low recent mileage, lack of speedwork, and an inconvenient extra five or so pounds, I should be very happy with a 3:10 (over ten minutes slower).
Honestly, I wish my Boston time didn’t matter to me, but I know myself better than to think I can completely coast it. I can only hope I have enough training base to survive the adrenaline rush I’m going to feel for the first 18 miles. Here’s to going until the wheels fall off! Watch for the mushroom cloud!
