Wednesday, March 31, 2010

running power: introduction

Kenyan RunnersKenyan runners, the paradigm of form

There is a well-established relationship between cycling power and speed. Power is proportional to retarding force multipled by speed, or equivalently, work done is proportional to retarding force multiplied by unit distance traveled. The retarding force consists of the following:
  1. a rolling resistance component, proportional to weight multiplied by a "rolling resistance coefficient", which depends primarily on the tires and their air pressure
  2. a wind resistance component, which is proportional to the square of the the relative wind speed, to the air mass density, to the cross-sectional area of the cyclist and bike, and to a drag coefficient which is affected by the aerodynamic efficiency of the rider and equipment
  3. inertial force, which is proportional to the rate of change of speed.
In addition to the power dissipated to the retarding forces, power is lost in the drivetrain. This is typically modeled as a fraction of total power lost. As I've discussed before, this is a very crude approximation, as at higher powers a smaller fraction is lost to the drivetrain.

Anyway, what's lost in the model is the power associated with moving body parts around. With a bike, the body is relatively still, and while the legs are moving up and down, they're coupled, so one leg moving down while the other moves up allows the weight of the dropping leg push up on the rising leg, so in principal no work must be done by the muscles to sustain this motion. This is in part while cycling is so efficient.

Running is a different story. The legs are no longer coupled, so when I lift my foot at the rear end of my stride,my muscles need to actively work to make that happen. Even if my opposite foot is falling at the same time, the coupling between the two is likely fairly weak, so lifting and dropping the legs is going to take a toll. Similarly, each stride a runner's center of mass is moving up and down, much more so than with seated cycling. While a bouncing ball can move up and down a substantial number of times without external energy, humans don't bounce so well. So keeping that center of mass moving requires power from the muscles.

I'll post some equations next time...

Tuesday, March 30, 2010

Speedplay X vs Zero and spindle wear

I've been riding Speedplays way longer than I care to admit, since they sponsored the Stanford Cycling club, of which I was a member. After one-too-many clumsy clip-ins into my Times, I switched to the double-sided Speedplays, and haven't looked back. I really like Speedplays, not least because they're quite rideable in street shoes, as well, so if I need to cruise across town in my street shoes, no fuss with attaching special platforms or anything.

When I got them, there was only the X-series (X-1 and X-2, with X-3 and the Light Action added later). Speedplay eventually released the "Zeros", short for "X-0", although really a separate design. According to someone I recently chatted with, Speedplay Zeros are considered by Speedplay to be "mechanically superior in every way" to the "legacy" X-series.

Well, "superior" except that they were more expensive and are heavier: 8 grams more for the cleats. Okay, 8 grams isn't much, but 8 here, 8 there, and eventually you're talking real mass, so I take it where I can get it. At my $3.50/gram threshold, 8 grams is like a $28 price increase on the pedal (people pay a lot more than $3.50 to save a gram when they get carbon bars, super-light brand-name bottle cages, or top end frames like the Trek Red-series). So there had better be an offsetting advantage to the added weight. And a quick check of list prices shows they're not more expensive any more.

The big selling point to the Zeros is the limit adjust. Speedplays were revolutionary among cleats in the amount of rotational float they offered (at the expense of no side-to-side float, and so you need to make sure the cleats are well adjusted). Some people don't like all that rotational float, for example sloppy sprinters who might accidently unclip, and so the Zeros address their concern. I love the rotational float, so have had no motivation to switch.

But the biggest weakness, by far, of Speedplays is the cleats. They wear easily, and when the X-series cleats wear, the retention spring can come into contact with the pedal spindle, and without much warning you end up with something like this (photo stolen from BikeTechReview forum):

The guy who posted this photo thought it was a warranty issue, an assertion I find completely absurd. It's a design weakness, sure, but the damage is strictly related to user error and to wear. But a common one. I've had this problem, I spoke to someone else today who had this problem, and obviously the guy posting the photo had the problem.

Today, having taken a close look at the Zero cleat, I realized the Zero may well be relatively immune from this problem... another stolen image, this one from Bike Sport Michigan:

That nasty spring on the side of the X-series cleat, the spring which contacts the spindle, is missing in Zero.

I really like my X-1's. But since Metrigear is only supporting the Zeros with their Vector force/power meter, I may find myself using Zeros soon. If they solve this wear issue, the switch may be worthwhile.

It's a good thing the Zero doesn't suffer this problem from the Vector perspective. Wearing a groove into the spindle, independent of safety concerns, is going to change the mechanical properties of the spindle, changing the relationship between bending moment and deflection, and cause an error in the Vector force determination. The solution would be recalibration (send the pedals back to Metrigear). But the point may be moot if they don't support X, even though the spindles are equivalent.

Monday, March 29, 2010

Sausalito Bicycle "Tax"

I have no idea how this would be implemented, but by now it's old news that Sausalito has considered charging $1 for rental bikes to offset the "costs" of the "swarm of locusts" riding through the city each weekend day.

Blazing Saddles in Sausalito
The plague of locusts leaves the city.

What costs, you ask? Good question.

First, there's the lost revenue from car parking. Bike racks are taking up valuable, revenue-generating space formerly occupied by a few car parking spots. "A typical parking space might generate about $3,500 a year in fees and fines." So the bike parking is depriving the city of that much revenue each year, right?

Well, maybe according to the pea-brained logic prevalent among the ruling class of Sausalito. But I recommend they review their first-year economics texts on the difference between marginal and average cost.... parking revenue is lost only if a potential parker can't find any parking and leaves, or finds finding parking so frustrating he fails to return. The cost of removing a single parking space isn't the cost of removing an average parking space, because in the vast majority of cases, there's an alternate parking space available, and the cost to the city is essentially zero. So that $3500/year needs to be multiplied by the fraction of time no other parking is proximately available. That's a relatively small percent of the time.

But forget about that for a minute. The size of a standard parking space is around 9 feet by 19 feet on average: 171 square feet. What's the month-to-month rental cost on 171 square feet on the Bridgeway in Sausalito? What if the sidewalk were extended out to cover that parking spot, and local merchants could use the added space for cafe tables or street-side displays? What's the commercial value of that? I think the answer is clear: that $3500/year doesn't even cover the value of that super-pricey strip of land. The subsidy on a bike spot, being maybe 1/6th the size, is less, even after accounting for the lack of meter revenue.

Okay, forget the parking costs. What about paying for road maintenance -- what about potholes? Well, potholes come from two sources: general weather-related wear & tear, and from use. The use component has been modeled as roughly proportional to the fourth power of axle weight. I'll assume this is actually a per-wheel weight, and that each wheel, as opposed to each axle, causes independent damage. A Toyota Prius is 1250 kg unloaded, so I'll assume 1400 kg loaded (fuel, cargo, passenger), distributed over 4 wheels. A bike is around 10 kg unloaded, around 90 kg loaded, distributed over two wheels. So the ratio of per-wheel weights is 7. Raise that to the fourth power and you get a ratio of per-distance pavement damage of 2300. So for every $1 you charge a bike for pavement repair by this standard, you should charge a car $2300. Let's not even discuss SUVs....

But then there's weather-related damage. The cost there is a "rental cost": proportional to the amount of space taken up. You can fit around 6 bikes in the space taken up by a car: to accommodate a certain amount of bikes on the road, you need around 1/6th the total pavement. So how much sense does it make to charge rental bikes $1, and not rental cars at least $6?

Okay, so then there's the arguments it's important to subsidize cars entering Sausalito: drivers spend money, after all. And the bikes don't? Why are people parking their bikes, anyway? A: to go in the shops, in the cafes.... even if a cyclist spends 1/6th as much as a driver, the bike takes up no more than 1/6th as much space, so the bike is as big a payoff as the car is.

And a lot of those rental bikes are taking the Ferry. More people taking the ferry means more, and therefore better, ferry service to San Francisco: better access to my fine city for Sausalito residents.

Well, bikes are a general nuisance, right? Well, compared to what? If the people on bikes instead drove "good old American cars and trucks" into town, would that be better? Between 1750 and 3500 extra cars and trucks per day, depending on if it's two or one person per car on average? That's one extra car trip every 4 to 8 seconds assuming an 8-hour peak traffic period and that the average tourist drives out and back only once.

So it's all silly, and I don't believe I've spent this much space analyzing this absurd fee proposal. We should be encouraging more people to bike or walk or take ferrys, fewer people to drive. If Sausalito officials engaged their brains at all, they'd realize this.

Monday, March 22, 2010

Powertap torque test: revisited

Prior to sending my Powertap back to Saris for calibration, I decided to do one more torque test (previous posts: my wheel, comparison with other wheels), this time bypassing the Powertap internal zeroing, and go directly to the raw torque numbers, which are available in torque mode on the Cervo head unit.

My procedure:
  1. weigh test load (a bucket of fresh kitty litter) with my Ultimate hanging scale = 14.63 kg
  2. go into test mode
  3. for each gear tested:
    1. shift into gear of interest: 36/12-13-14-15-17-19-21-23-26 on my wheel, 36/13-14-15-17-19-21-23-25-28 on C's wheel.
    2. record torque
    3. load pedal with mass
    4. find orientation which maximizes torque reading
    5. record torque
    6. remove mass
    7. record torque
    8. subtract avg of unloaded torque readings from loaded torque reading

I plot theoretical torque delivered to the hub on the x-axis, with the y-axis showing the measured value, for each hub.

Powertap torque test
It looks good for C's wheel, but as before, my wheel is off. Curiously, each hub reported a slightly larger number than trend when in the largest cog. I'm not sure if there's any significance there....

Anyway, a similar test was reported on the Wattage list by Doug. I plotted his data. His procedure differed, and his test mass was weighed with a Tomita body weight scale, which is much less accurate than the Ultimate hanging scale. Still, the comparison between wheels is telling, and the weight load is the same in each case.

Doug's torque test data
Black seems fine within the accuracy of his scale. Blue on the other hand seems substantially lower. Of course, I can't vouch for his procedure. It may be his results are a measurement artifact. But certainly these results should have you questioning whether your Powertap hub is reporting accurately.

Okay -- time to ship that wheel back to Saris...

Sunday, March 21, 2010

Pacific Coast Trail Runs Pirates Cove 30 km

After my disaster in the Coastal Trail Runs 18-mile Rodeo Beach run where I missed a key turn and cut the course short, I was excited to get it right this month on some of the same trails with the Pacific Coast Trail Runs Pirates Cove 30 km race. Running is starting to cut into my cycling season at this point, but I'm making progress, having a good time, and it's hard to put it aside just yet.

Of the route options for the day: 8 km, 20 km, 30 km, and 50 km, the 30 km was probably the best, capturing the best of the Headlands without duplicating any trail sections (the 50 km repeated a loop). To be extra sure I didn't repeat any navigational snafus, I studied the directions along with my National Park service trail map. Indeed, I'd hiked, biked, and/or run all of these trails before, it appeared. I was ready, even with my navigationally challenged brain.

I left home in Potrero Hill at 6:47 am and pedaled easily to the start, which I reached in a little over an hour. It was nice riding so early: I rarely do. I rode a bit with a guy leading an Aids Lifecycle training ride to China Camp. Cool. Once there, I rode right past a long line of cars waiting to be directed to parking. Very nice. Riding to trail runs is the way to go.

After a minor issue at 60 seconds left to start where I discovered I had some keys and a debit card in my belt pouch (no way I was going to run 3700 vertical feet with that extra weight) and had to dash back to my backpack to hide them away there, the race began. I'd been shivering at the start line, but warmed up within 60 seconds as we began climbing immediately. And my start was a good one: I was exactly where I wanted to be, ahead of the traffic jam but not overextending myself trying to follow the rabbits. But then to my shock runners ahead of me veered left to pass into Battery Townsley. Whoa! I didn't even realize that was a passable route. Yet there it is, on the route description: "Battery Townsley Trail" at km 1.3. So much for having studied the route. I followed the runners ahead.

But there was a gap, and as we began winding our way over rolling singletrack, I reached a fork in the trail with nobody visible ahead for guidance. Which way? I went right, stopped, looked back at what following runners did. Some were approaching, including the lead women. "Which way?" I asked. "It doesn't matter!" she replied. Nevertheless, I returned to the fork and followed them, soon passing them again. Sure enough, there was a trail marking pink ribbon which confirmed I was back on track. 20 seconds lost, I estimated, maybe a bit more. I'd hate it if that turned out to make a difference.

First rest stop at the intersection of the two loops, at the Tennessee Valley trail head: I drank some coke, relying on the bottle I carried on a hip belt for dilution. But this bottle was almost empty, and I should have refilled it. Mistake. I'd need to increase hydration after this 10.5 km loop.

Miwok trail at Marin Drive: I was with a strong group of 50 k'ers at this point, when we turned left at an unmarked intersection up a steep climb. Some were wondering if this was the way: possible lemming line. I assured them I'd mountain biked this trail, and remembered it was. The other way connected to a car road.

Pirates Cove (Marcia Inger, 2009)

Coastal Trail above Pirates Cove: this is the highlight of the race. Absolutely spectacular views of the rugged coast around well-named Pirates Cove. As the trail descended, however: rocky, twisting single-track, I lost a lot of ground. The tougher the descent, the slower I am relative to others, who seem to effortlessly glide down this stuff. My left leg was starting to hurt enough that were I on a training run I'd contemplate walking. I tried to focus on alignment: keep my knees in, my feet out, relative to my tendency. And don't worry too much about speed on the descents. Relax, relax, relax, but speed doesn't mean anything if I don't make it to the finish. The guy who passed me near the top of the descent was now a distance speck, and others had passed me since. I was doing okay on the uphills, though: passing people back.

Tennessee Valley trailhead: this time, I tried to catch up on hydration: drank one coke, one water, and filled my bottle, which I planned to drain by the next aid station in only 7.3 km. This worked, and I felt good on the long climb of Marincello fire road.

from SCA trail (Marcia Inger, 2009)

SCA trail: the chilliest part of the course, but I felt okay, making progress, babying my leg. I was good on the uphills, and the downhills were short enough I didn't do too much damage, or so I hoped. the big descent was to follow....

McCullough Road rest stop: I'd had enough coke, so drank two Clif carbohydrate solutions, then filled my bottle halfway with same. Only 6 km left. Not enough for a full bottle.

Coastal Trail descent: This was terrible. I began to dread every step, as my left leg did not like the impact. This was superposed on a state of general fatigue: I was ready for the finish! Finally I reached the bottom, and said a "Thank god!" to nobody in particular.

PCTR photo

So there I was: the final 2.7 km. I was passed by a guy wearing a marathon shirt, who greeted me, but I was too grim to respond. We crossed Bunker Road without incident (an oncoming car stopped), then over the bridge connecting to the Rodeo Valley Trail.

From here, I was surprised I was able to keep decent speed. I was shooting for 3 hours. It looked grim from my watch. I overtook the marathon shirt guy, feeling sort of guilty about not having been more sociable earlier. I was more shuffle-stepping than actually running, but my leg appreciated the final ground.

At the finish, a previous finisher was standing right at the line, chatting with volunteers. I wasn't going to slow down, so I ended up running into him, avoiding full impact with my hands. He noticed me then. "Good race!" he said.... "Thanks," I replied, "but that's a really bad place to stand." I've got to work on the trail run culture of perpetual cheer. Blame the surly culture of bike racing.

I looked at my watch. It turns out I missed my 3 hour goal by 41 seconds. But, I told myself in consolation, my goal had been based on an 18 mile distance, and 30 km was longer: 10 minute miles would have been 3:06, which I beat with plenty to spare. Not bad at all for my longest run, let alone longest race, ever.

And when results were posted, I was shocked with my placing: 11th overall, 2nd in my age group, which got me a shiny red ribbon. Considering my goal was to just make it to the finish intact, that was a very nice bonus. 3rd and 4th in the age group finished soon behind, so to the extent I managed to push through the discomfort, that paid off. Results on these races, however, really are just icing on the cake. Trail runs are more, to me, about experiencing the trail, the land, the views, and the comraderie of other runners. An for these, it can't possibly get much better than the Pirates Cove run. Maybe this is why I'm not so worried about the fact it was only 16 seconds to 10th place, so my little confusion on the Battery Townsley trail may have cost me top 10. 11th is fine: way beyond my expectations.

Next up: Skyline to the Sea in four weeks. Hopefully I recover from this one in enough time to not lose too much fitness.

Thursday, March 18, 2010

running form analysis @ Innersport

At the recommendation of my friend Nathan, I went to Innersport to get my running form analyzed. I felt my form was fairly good, but I'd been suffering pain around my left knee when I became fatigued. Maybe my self-perception of my form wasn't so good...

The results were really striking. Let's start with the side view. First, the model: Danny Dreyer, from Chi Running:

Chi Running form: aligned

Not obviously this is slightly artificial since the foot alignment changes during the stride, so the frame was chosen carefully. But in general you can see the body is aligned, as though standing, but tilted forward from the foot.

Now look at my position, taken at a somewhat arbitrary position in my stride. I captured the frame myself with Gimp, then did the annotation there (don't blame Dr. Jess for this):

side view of djconnel

I'm bent forward at the hip. Sure, a different frame might show a different angle, but it's clear this degree of bend isn't an artifact of phase. I'm taking my cycling position to running. Not good.

Here's a view of a real runner, with a random frame not chosen to promote a particular running style:
Haille Gebresellasse
Even here, the runner looks aligned: no indication of a bend at the waist.

But it gets even worse. Look at my front view:

front view of djconnel

Ouch! That hurts just looking at it. Can you say "maximal torque?" The left knee is too far out, and the foot crosses the center-line. When my right foot is on the ground it's a bit better, not crossing the center line but still not aligned. Here's how that real runner looks:

Haile Gebrselassie

Look at that: knee further in, tibia vertical.

I posted before on my running form. Here's an image from the Quimby Low-Key Hillclimb in 2008.

2008 Quimby Road

I'm on the right. Trail running legend Gary Gellin is on the left. At the time I was interested in foot strike (the green circles), but there's that knee problem staring me in the face. Look at that bend in my left knee! I don't know how I managed to run through February 2009 before suffering any issues that winter. Finally, at the Woodside Half, I began getting pain.

Anyway, it's clear what I need to do to improve my form. And it's easy enough to get photoed from the front and side to see if I've succeeded.

Tuesday, March 9, 2010

redesigning Low-Key pages

I've not been posting much here lately... all my train commute time and morning sipping tea time has gone towards updating the Low-Key Hillclimb pages. After using the same basic design 2006-2009 (and retroactively applied to 1998, which I regenerated), it was time for a rework.

My HTML skills are so behind the times. I'm trying to force myself to get away of such things as <font> tokens and move towards style specifications, preferably with classes. But it's always tempting to just "get it done".

The style approach is different: the old HTML approach was functionally based: you don't specify what font style or size you want, you just specify relative font sizes, and text was tagged with such functionally-inspired elements as <em> or <strong>. It was up to the user to set his browser to render these as he prefers. On different terminals, these preferences might differ.

But Microsoft basically went after this philosophy with a wrecking ball. Microsoft's preference was that everything look good on Explorer, and on everything else, the uglier the better. Microsoft wanted web designer to design to Explorer: let the competition struggle to keep up.

So now, there's more "policy" in web design. Specify particular fonts, particular point sizes. It's not just "mechanism" any more.

So I'm coming around. One thing I do like about the style/class approach is it's more hierarchical. No longer does one need to specify the specific characteristics of each element in a table, for example. That can be more generally handled by the class assigned to the table, rows, or elements. It makes the code for the table much cleaner.

For other things, it's a but puzzling, though. How is <span style="font-weight:bold">...</span> better than <b>...</b>? Help me here.

And I don't particularly like specific font specification. I wanted a "horror font" for the steep climbs. There's so many horror fonts on the web, but none are annointed as universal by Microsoft. What I really want is to be able to say "find a good horror font on the client's machine, and use that." But that doesn't seem to be possible.

So instead I had to convert the text elements I wanted rendered in a horror font into PNG files (deftly handled with ImageMagick with pngquant for color distritization). Here's my code for generating climb names:

#! /usr/bin/perl
use strict;
use data;

our %class;
our %climb;

my @weeks = grep { $class{$_} eq "steep" } keys %class;

for my $w ( @weeks ) {
warn("processing week $w : $climb{$w}\n");

# kluge: remove space surrounding puncturation
(my $climb = $climb{$w}) =~ s/\s+([\-:,])\s*/$1/g;

my $command =
"convert -size 800x128 XC:transparent ",
"-font /usr/local/share/fonts/truetype/" .
"ttf_zombieholocaust/Zombie_Holocaust.ttf ",
"-stroke '#00000099' -fill '#33000099' ",
"-pointsize 80 ",
"-gravity center ",
"-annotate +3+3 '" . $climb . "' ",
"-blur 8x0 ",
"-stroke '#000000' -fill '#dd0000' ",
"-pointsize 80 ",
"-gravity center ",
"-annotate +0+0 '" . $climb . "' ",
"-scale 50%x40% ",
"-trim ",
"png:- ",
"| pngquant 64 >",

The font used here is from Sinister Fonts.

Anyway, more work to do: nitty gritty details and I need to integrate how to include results. But I don't need to worry about that 'til much later. First climbs is Montebello on 2 Oct.

And I still need to do an "all-time records" page. More to keep me busy on future train rides.