Monday, October 5, 2015

Levi's Grand Fondo: neutralize technical descents

A rider died in this past Satuday's Levi's Grand Fondo when he missed a corner on the Hauser Bridge descent and went off the road. Here's the story in the Santa Rosa Press Democrat.

Michael Muhney, 40, said the rider was just ahead of him and was “just barreling” down the hill despite numerous course marshals cautioning riders to be careful on the descent. “He was hauling,” he said.

The Fondo is a "timed ride" and not "a race" according to the story. Here's how Oxford English Dictionary defines race:

race (noun) 1A competition between runners, horses, vehicles, boats, etc., to see which is the fastest in covering a set course.

I don't know -- seems to apply here.

So the problem is you have a race over a technical, dangerous course and that means people are going to take risks, and when people take risks by definition sometimes things go wrong and people get hurt or die. Fine -- if you want zero risk of death stay in bed in the morning but then your house may burn down and you'll die anyway. So we need to accept risk. But the key here is that the obvious hotspots for risks are these technical Sonoma descents.

One option is to do what we do with Low-Key Hillclimbs GPS-timed multi-climb routes: neutralize the worst descents (actually in Low-Key we neutralize everything but the climbs). These rides are likely using chip timing anyway. So put a mat at the top of the descent, another at the bottom, set a "reasonable safe and conservative speed" for the descent, and if the rider is faster than this then add time to his overall time equal to the difference between how long it would have taken at the conservative speed and his actual speed. Want to go further? Set an unsafe speed threshold and if he's going faster than this than penalize him the time difference between his speed and the unsafe speed.

Don't want to use timing mats? Then use GPS. When riders are paying in excess of $100 entry fees, it's really not much to require posting data to Strava. We do that in the Low-Key Hillclimbs.

This sort of solution would do little to change the nature of the competition. That's about pushing your body over a challenging course. It's not about railing dangerous descents where 50+ year old eyes can't adapt to the difference between shade and sun quite like they used to and riders go flying off the road. Descending skill is a wonderful asset and should be honored but we don't want to encourage riders to risk their lives in an event like this, essentially an unsanctioned race. Restrict the crazy descending to USAC races with their upgrade system and their field limits.

Wednesday, September 30, 2015

Low-Key Hillclimbs 2015

It's time once again for the Low-Key Hillclimbs, and this will be the 20th anniversary of the first edition, when Kevin Winterfield and I brashly organized a series of 12 consecutive weekly climbs extending from October through almost Christmas. And the amazing thing is we pulled it off. I'm less brash now but I don't need to be: I have fantastic support in putting the series on and so far we've had minimal interference. It's really been a wonderful thing.

I've got some decent fitness this year after having ridden SuperTour, organized by Sid and Linda Fuhrer, then raced the Mt. Tam Hill Climb and the Fremont Peak Hill Climb. For the first time in years I've actually been focusing on training instead of riding, and it's helped, starting with the fantastic dose of base I got from SuperTour. My time at Fremont Peak wasn't what I wanted, although I rode fairly well at Mt. Tam the week before. It was particularly hot at Fremont Peak so that took its toll.

But for Low-Keys, I'm coordinating week 1 so I don't get to see how I'm doing there until week 2, Page Mill Road. I really look forward to that one -- it's a classic time and makes for a great competition with its variable grade and fantastic views. Then week 3 is Alba Road, a climb we've done only once before in 2009. Then Mill Creek for week 4, a road I've never ridden but a short and intense climb which will be done as a time trial. Week 5 is a GPS-timed climb up Purisima Creek trail, a really fantastic off-road climb which is accessible to all bike types. Then week 6: Bohlman, but without On Orbit. The only year we tried that before was 1998 when it got canceled due to weather. Week 7 is OLH (wink, wink) which is the climb for which times matter. Week 8: Mountain Charlie, another Low-Key first. Then Mt. Hamilton and it's another Low-Key wrap.

The forecast has been for a wet fall so hopefully Low-Key luck with the weather and we squeeze them all in.

Saturday, July 4, 2015

Cannondale 2016 Evo: Damon Rinard leads switch to Stack-Reach design

Previously I blew it by posting that Cannondale had retained the old geometry for the new 2016 Evo. This had shocked me since I knew they'd hired Damon Rinard, formerly of Cervélo, the pioneer in stack-reach design, something the old Cannondale clearly did not follow with weird kinks and jogs in its stack-reach progression due to odd jumps in seat tube angle as sizes increased. I'd gotten the geometry chart by clicking links on the Cannondale website, but somehow I'd clicked a link for the 2015 geometry starting from the 2016 Evo page. So I'd been too hasty.

Well, I was finally pointed to the correct geometry chart. Here's a comparison of old Evo and new Evo:

2015 Evo:


And, finally, the 2016 Evo:


Here's the stack-reach progression:


Plotting stack versus reach shows the design has switched to a stack-reach focus, with continuous small increments in seat tube angle rather than descrete jumps, with a design transitioning from closer to the Trek H2 in small sizes to closer to the Trek H1 in larget sizes, but always between the two.

Bottom brackets are 2 mm lower in every size except the 52. Previously there was a jump from 52 to 54, and now there's a jump from 50 to 52. The jump at 58 remains. This is consistent with the trend to fatter tires.

Trails are slighly increased relative to the older Evo, and are significantly larger than on the CAAD-10 curiously, in the small sizes, mostly because the CAAD-10 uses a 5 cm (as opposed to 4.5 cm) rake fork in the smaller sizes. Here's CAAD10 geometry, which other than the trail is similar to the older Evo:


Sunday, June 28, 2015

2016 Cannondale Evo

[b]Comment:[/b] The following post is in error. The geometry chart on the Cannondale site is still the 2015 bikes. Bikerumor had an article where they described geometry changes for 2016, including adjustments to stack-reach in small and large sizes, and a general drop in bottom brackets consistent with the trend to wider, deeper tires. I'll post a follow-up post when I get the geometry chart for 2016.

Cannondale just announced it's 2016 Evo.

There's been a flurry of really attractive new bikes announced this year, including the new Madone 9 from Trek, the incredible Venge ViAS from Specialized, and the new Scott F02 update to the Foil. A common feature of all of these is increased focus on aerodynamics and comfort. Aerodynamics isn't new, with bikes going back to the Kestrel Talon and Cervelo Soloist Carbon examples of carbon frames designed for aerodynamic efficiency. However, the bikes have never been as popular as was predicted because in the end riders like feeing good on the bike, and a combination of drivetrain efficiency and vertical compliance provides a palpable advantage while the advantage of aerodynamic improvements needs to be carefully measured and is thus less obvious. But perhaps starting with the latest Felt AR a few years ago, aero bikes have received an increasing comfort focus, and it's hard to see them not finally becoming the main design used in the pro peloton.

BikeRadar photo

Cannondale's new Evo isn't an "aero" bike, but is more in the style of the Cervélo R5 which is a lightweight bike designed to be aerodynamic. The previous Evo made a nod to aerodynamics, but in a more subdued way by reducing tube diameters. This is important, but tube shape remained unchanged. That's been fixed here, with the new Evo adapting the now common "Kamm tail" approach of a truncated airfoil shape.

For "comfort", they've taken lessons learned in the Synapse. It's nothing as overt as Trek's adoption of the Isospeed linkage used in the "endurance" class (and tall-stack) Domane to the Madone 9. For example, one change Cannondale made was to reduce the seat tube diameter from the common 27.2 mm to the less common but more traditional 25.4 mm. There was a trend for a few years to make seat tubes ever fatter (my Fuji SL1 uses a mountain-bike-style 31.8 mm) but that makes little sense: propulsive torque isn't applied to the seat tube so a bendy seat tube, within reason, makes for a more comfortable ride. But additionally they've flattened the chain stays, like the Synapse, to provide more vertical compliance.

The fork as gotten an overhaul with a very light fork providing a large portion of the claimed 65 gram system mass reduction (the rest, I think, is from the seatpost). Tour magazine in Germany has been rating bikes on comfort using a combination of deflection at the seat tube and deflection at the head tube, the latter being a "fork comfort" rating which is averaged with the seat tube number. Many bikes have been engineered to score well at the seat tube deflection test but on the fork deflection test it's been common that bikes lose a lot of potential points. Jan Heine likes to emphasize the importance of fork deflection, advocating for the traditional high-rake flared out design which was common on steel bikes through the middle of the 20th century. Apparently Tour magazine agrees it's an important issue and the light, more compliant fork is a welcome modification.

One thing they did not change was geometry. I had thought with the addition of Damon Rinard, formerly of Cervélo, to the Cannondale design team that the stack-reach design philosophy would be adopted, but perhaps Rinard joined too recently for such a drastic change. Here's the Cannondale stack-reach chart compared to Trek's stack-reach-based design. Trek uses two curves, the "H1" and the "H2", for its Emonda and Madone. The special race-geometry Domane now uses the Emonda H1 curve. The Madone had a more aggresssive H1 curve but perhaps that will change with the Madone 9.

Cannondale and Trek geometry comparison

The two Evo curves are fully coincident and thus you can't see the 2015 curve, which is occluded. So the old and new Evo are the same.

Cannondale's approach includes some weirdness. For example, going from 52 to 54, the two points which are of similar reach but different stack 3rd and 4th from the left, they increase the top tube length but decrease the seat tube angle and the result is the reach stays virtually the same, the change in geometry almost all coming in the stack. Additionally the bottom bracket increases. Trail between the two is the same. I'd rather have the 3 mm lower bottom bracket so even though I could use a 14 cm head tube to avoid spacers I'd go with the smaller frame to get the same position with a lower bottom bracket and live with some spacers up front. It's just as well since the smaller frame will be lighter.

The importance of a clean stack-reach schedule can easily be overstated: either a bike fits or it doesn't and if a particular size in the Cannondale fits that's all that matters; I don't care what how the other sizes are designed. Still, I suspect this will be changed next iteration.

So this is a really cool bike. I really think 2016 is bringing a tangible advance in bike design from the big companies and my 2008 Fuji SL/1 seems more than another year older. It's more than good enough for me, however.... alas.

Wednesday, June 24, 2015

Garmin Edge 25: simpler, lighter, smaller equals better

SCRainmaker has a "hands-on" (as opposed to an "in-depth" review; still way more in-depth than any other reviews on the web) of the new Garmin Edge 20 and 25. These are, finally, Garmin addressing the simpler/lighter-is-better market for GPS.

On bikes, a huge amount of attention and money is directed towards minimizing weight. The best way to minimize weight of a GPS unit is to ride without a GPS unit. But the prominence of social networking website Strava has increased the value of GPS data. So for many, GPS has become a virtual requirement. What's the point of riding if you can't get kudos?

Yet despite big push for lighter bikes, and with real estate on the handlebars and stem so limited, Garmin has seemingly ignored the value of lighter-and-simpler-and-smaller by producing a series of increasingly complex, heavy, and bulky GPS units. The Edge 500 came out more than a half-decade ago, and yet it has remained the lightest and most compact unit provided by the company until these new units. And the Edge 500, while still a "current" product, has been abandoned for firmware upgrades, the firmware remaining buggy and now not supporting the Vector pedal dynamics metrics which were made available on larger/heavier Edge 510, a unit with a poor reputation for reliability. Indeed, it's remarkably the company ever produced the 500 in the first place: it's simply too elegant, compact, and functional. It must have been an anomaly.

So I was surprised when I saw these new units, which come it at half the weight of the already light (57 gram) Edge 500. There had to be a catch....

And there is. First, the Edge 25: that has ANT+ Sport support and also low-energy Bluetooth. But these are supported only for heartrate straps and for communications with phones. Obviously if you can trade data packets with a heartrate strap you can do the same with a power meter. But the unit refuses to communicate with power meters. Was this an engineering decision or a marketing one? On the engineering side, you might argue that communicating with a power meter would be too large a drain on the battery, which is rated at only 8 hours. After a hundred or so charge-discharge cycles surely that will come down, making the unit barely able to survive a fast century ride. Road races are shorter, so for racers the battery might be sufficient, but add in the extra drain of power meter support and that's pushed a bit further. But they are willing to communicate with a heartrate strap.

So I think this is likely marketing. If they put too much power in the 25, they believe, that will take away sales of more expensive, complex units. But this is monopolistic thinking. In a competitive market, suppliers are compelled to make all of their products as good as possible, otherwise competitors will do so and outsell them. In a monopoly, you're competing mostly against your self or against "none-of-the-above", in which case you can afford to play games like this. I think the GPS market is competitive, so these market-slicing games are a mistake which will in the end cost Garmin marketshare. After all, power meter support will differentiate the units from what might be the #1 competitor to low-end GPS units, which are smart phones and, increasingly, watches.

Another missing feature is a barometric altimeter. Barometric altimetry, as opposed to GPS altimetry, is much more reliable especially in situations where the GPS signal is compromised, for example wooded hillsides or canyons. Barometric altimetry is susceptible to errors from weather fronts, but in conjunction with GPS, those errors can be minimized. The two together are better than either by itself. And good altitude data is really useful for estimating power on climbs when power meter data is unavailable.

A subtle feature of the new units is they are listed by DCRainmaker as being "smart recording" only. Smart recording can result in gaps between data of up to 8 seconds, which is terrible for Strava segment timing and possibly even segment matching. This seems silly because it's a software-only issue. The motivation for having provided 1-second recording on the Edge 500 was analysis of power data. Initially 1-second data recording was available only when power meter data was being recorded. But they eventually allowed 1-second recording as a general option, most likely because of Strava. But this unit has taken a step backwards by being smart recording only. For Strava fans, this alone should be a deal-breaker.

So give me a compact unit with a barometric altimeter and at least minimal power meter support with one-second recording and I'm all over it. I don't need fancy displays. I don't need access to a huge number of data fields at once. I want to see distance and power and I want to record everything else. These are the key things.

On the plus side they did include the same level of navigation support provided by the Edge 500. And while that's flawed and error-prone, it is nevertheless extremely useful when the GPS signal is strong. I used it extensively when riding out of Switzerland last year. So perhaps real-time navigation isn't part of my claimed support for "simpler" but I'll use it if it's there. It can always be ignored.

It's perhaps ironic that the low battery life, good enough for road races but not good enough for century riding, combined with the exceptionally light weight could well have made this an excellent "race day" GPS unit. But then they crippled it with a lack of power meter support and lack of 1-second recording, neither of which would require additional hardware. So instead you have a unit which isn't particularly good at anything. It's unfortunate.

So while this is a good start, but Garmin needs to go further. The smaller-lighter-simpler = better philosophy has been long neglected at Garmin, and it would be great to see it get attention again.

Wednesday, June 10, 2015

Golden State Warriors down 2-1

The Golden State Warriors lost to the Cleveland Cavaliers in basketball last night. They're now down 2-1 in the series. The first team to win 4 is the champion.

I don't care about basketball but there's one thing I like about the game and that's that scores generally increase relatively at random (I hope -- I hope the near miraculous comeback yesterday from a 17-point deficit after three quarters wasn't programmed), and that games are won to some degree seemingly at random. I like random.

As an aside, I do find it remarkable in basketball how often a team with a big deficit claws its way back only to lose in the end by a small margin. I'd like to see a statistical analysis of this. A huge amount of money is at stake for games not being a total blow-out. I do wonder at this. Basketball has long seemed to me to be more about the show and less about a fair contest. And that makes it very difficult for me to care about the result. But this is an aside.

Assuming games are fair, what's the chance of Golden State winning the series?

Assume each team has an equal chance to win games. You can weight results under different assumptions but this is simplest.

Then the key to solving this problem is to recognize that while the series is terminated when the first team reaches 4 wins, this is irrelevant to the odds of who wins. It's easier to calculate the odds of winning if you assume the series always goes 7 games. If you assume that, it becomes a simpler probability problem.

Then all sequences of win-loss are equally probably. Each has a chance 2-n, where n is the number of remaining aims. And since 3 games have been played, 4 remain (I'm assuming we always play the full 7). So I need to count how many of those possible 4-game sequences result in the Warriors winning.

There's one sequence where the warriors win all 4. They win the series then, 5-2.

There's four sequences where the warriors win 3. Then Cleveland wins 1. That win can occur in either game 4, 5, 6, or 7.

The rest of the possible sequences the Warriors fail to win at least three games. So they win the series in 5 of the 16 options. Since each is equally likely to occur, they win in 31.25% of the possible results. That's their chance to win the overall, assuming games are completely random.

To calculate it assumingt he series ends as soon as one team gets to 4 is more complicated. You'd need to start with the odds the warriors win the next 3 games. Then consider the odds they win exactly 2 of the next 3 but then win the 4th. Then add these together.

I can do this: the odds of winning 3 in a row is 1/8 = 2/16. The odds of winning exactly 2/3 is 3/8 (there's 3 ways to lose one game of 3, and there's 8 ways total the 3 games could end up, so that's 3/8). Then I need to divide by 2 because they then need to win the 7th game, which has 50% chances. So that's net 3/16. So the total chances of winning are 2/16 + 3/16 = 5/16. This is the same answer as I got before but is more convoluted.

The principle that cutting the series short can have no effect on the winner, assuming results are random with a fixed chance for each team to win, has more implications than just simplicity in calculating the odds. It also means the sequence of home versus away games doesn't matter. There's been a lot of debate in various sports whether a 2-3-2 sequence of teams A and B being home, which generally has an advantage, is more balanced than a sequence 2-2-2-1. After all, 2-3-2 could result in team B having 3 home games to team A's 2 home games if the series ends after 5. However, if I view it as the series always goes 7 games then it seems the sequence should not matter. And since going to a full 7 never changes the result I therefore conclude the sequence doesn't matter. You can just as well go 3-4. The home field advantage for the series is alwsys with the team with 4.

Friday, June 5, 2015

2016 Trek Madone 9

First I saw it on the UCI list of approved frames for June, then I saw a teaser video posted to the Trek website, and then this uncredited photo was posted to the Weight Weenies forum:

My that looks fast. Maybe it's the color, but it reminds me of the Canyon Aerooad. The Canyon has done rather well in the tunnel, not in the class of the Cervélo S5, but fairly good. See for example Tour magazine data here. So I expect the Trek will be at least this good.

But then there's weight. The Madone 7 was quite light with the vapor coat -- under 800 grams. But then the Emonda came out, pushing that lower, but there's only so far you can go below that. So the Madone was a bike of compromise. Now they want you to buy two bikes: the lightweight Emonda and the "aero" Madone. So the pressure's off on weight. But I wonder how they did. Nothing on this one looks particularly heavy.

From what I see I really like it. The days of bad-riding aero frames are over: bike design has gotten good enough that even the aero mass start frames have what are considered excellent ride feel. I certainly enjoyed my test ride of the Parlee ESX last year.

Anyway, I won't be buying one as I'm happy with the bikes I have, but if I were looking for a bike to road race on, this looks like a winner. In contrast I've never been a fan of the Emonda because it looks so terribly unaerodynamic. That simply makes no sense to me for racing.

Also on that UCI approved frame list is the Scott F02. I look forward to seeing that. The F02 is presumably the successor to the F01 which was the pre-release name of the Foil. It was a clever number-letter conversion play, there, so I wonder what they'll call this one when it's released.

Also on that list is the Specialized Venge "RIM". I'd initially overlooked this, thinking it was a wheel, but the wheels are listed on a separate list, so this is in fact a new version of the Specialized Venge aero-road bike, the rim-brake version as opposed to the disc-brake version. The Specialized Venge design wasn't as aero as many of the current aero road bikes, or any of the Cervélo aero road designs, and so it's due for an upgrade. I'm not particularly happy about the move to disc brakes, however. But that's another matter.

Wednesday, May 27, 2015

Effect of variability in rolling resistance coefficient on cycling power

I looked at how grade variability affected average power when climbing a hill. Honestly I thought the result was going to be larger, but the reality was it was a relatively minor effect. When the hill is very gradual, for example 1%, variations in grade of a certain fraction have little effect on speed. When the hill is very steep variations in grade are more significant, but since they increase power only via wind resistance, and wind resistance is relatively unimportant (assuming still air), again variations in grade have little effect. It's only important in the middle ground where speeds are high enough that wind resistance is relatively important but where grade variations have a relatively large influence on speed.

A virtually equivalent logic applies to rolling resistance variation. A variation in rolling resistance about an average value (averaged over distance) will have the same effect as a variation in grade by the same absolute amount.

So the effect of variability in the coefficient of rolling resistance, by a given fractional amount, can be written almost by inspection by swapping rolling resistance and grade in the previous formula:

ΔP/P = 3 (σCRR / CRR)2 × αwCRR (1 - αw) / (1 + 2 αw) ]2

This will generally be less than the effect of fractional variations in grade, assuming grade is generally larger than CRR.

The definitions are the same as last time:

fmacceleration(grade + CRR)×gravitymass (and speed)-proportional power
fwmass/distance1/2 ρCDA2speed-cubed-proportional power
CRR1coefficient of rolling resistance (for example 0.4%)
CD1coefficient of wind resistance (for example 80%)
ρmass/volumemass-density of air (for example 1.1 kg/m3)
Aareaeffective cross-sectional area of bike + rider (for example 0.4 meters2)
αRR1CRR/(CRR + grade)fraction of mass-proportional power due to rolling resistance
αw11 / (1 + fmm / fws2)fraction of power due to wind resistance
αm11 / (1 + fws2 / fmm)fraction of power due to mass-proportional power

Monday, May 25, 2015

Grade variability and climbing power

I've looked at this matter before, but one factor which I've seen continually neglected in all of the climbing power analysis estimates is the effect of grade variability. Road grade on climbs is almost never constant: it varies about a mean in some fashion. Yet the estimates are almost always done assuming constant speed, constant power.

Now these estimates end up remarkably accurate anyway. Why? Because the grade variability effect is negligible? Well, no. It's because you're canceling one mistake with another. For example, you neglect grade variability, which always increases power, but you also neglect drafting, which always decreases power.

How does grade variability increase power? It's because grade variability typically results in speed variability and speed variability yields variability results in variability in wind resistance and wind resistance, by virtue of being superlinear, is increased more by increases in speed than it is decreased by decreases in speed. So if instead of maintaining a constant speed v, if instead I am v + Δv for half the climbing time, then v - Δv for the 2nd half of the climbing time, the average wind resistance power is increased, assuming still air and no drafting:

[ (v + Δv)3 + (v - Δv)3 ] / 2 - v3 =
[ v3 + 3 v2Δv + 3 v (Δv)2 + (Δv)3 - 3 v2Δv + 3 v (Δv)2 - Δv3 ] / 2 - v3 =
3 v (Δv)2

So the fractional increase in wind resistance power from grade variability, for a given average speed, is:

ΔPw/Pw = 3 (Δv)2 / v2

Note this is just the aerodynamic portion of the power.

This is very simple, but it's in terms of speed, not grade. You can ride a variable grade at a constant speed, and in this case the average power will be calculated using the average grade as is typically done. However, this would result in a variable power, and according to Coggan's normalized power approach this would result in a lower power than could be attained by riding at a constant power, going faster on the flatter portions and slower on the steeper portions. Indeed, I think it's clear that this is almost always done. Essentially nobody rides climbs at constant speed.

So I need a relationship between grade and speed. The key here is that I neglect inertia, which tends to make speed more constant than otherwise. But inertia is only sustained over short distances, so I'm assuming grade variations to a resolution of no better than 10 meters distance or so.

Speed versus grade is a nonlinear problem: a cubic equation. So to estimate this effect you use linear analysis: linearize the nonlinear function.

Back in 2009 I analyzed the effect of grade on VAM, and a part of that calculation was the effect of grade on speed. This calculation begins with the following approximation for power, which is fairly standard in still air:

P = fm m s + fw s3

where fw is the coefficient of power on speed-cubed, fm is the coefficient of power on mass (gravity times rolling resistance coefficient plus grade), m is mass, and s is speed. It's not hard to go from this equation to the following using the chain rule:

∂s / ∂grade = ‒ m s g / (fm m + 3 fw s²)

where fm = ( grade + CRR ) × g, where grade is the road grade, CRR is the coefficient of rolling resistance, and g is the acceleration of gravity (not to be confused with road grade).

The result of this is if there is a variation in grade σ2grade, there will be a corresponding variation in speed σ2s:

σ2s = σ2grade × [m s g / (fm m + 3 fw s²) ]2

So the result is, recognizing that the average value of (Δv)2 ≡ σ2s:

ΔPw/Pw = 3 σ2grade × [m g / (fm m + 3 fw s2) ]2

This equation has too many constants and it's hard to get a grasp for what it means. However, if I define mass-proportional and wind-resistance unitless fractions of retarding force (and of power) αm (mass-proportional) and αw (wind resistance proportional), then I can write this as follows:

ΔPw/Pw = 3 σ2grade × [m g s / (αm + 3 αw) P ]2

But αm + αw = 1, so this can be slightly simplified:

ΔPw/Pw = 3 σ2grade × [m g s / (1 + 2 αw) P ]2

given that ΔP = ΔPw, since climbing power depends only on the average VAM (and is insensitive to speed fluctuations while rolling resistance power depends only on the average speed.

Then if I define αCRR is the fraction of the mass (or weight)-proportional power which is due to rolling resistance, I can multiply and divide by grade, then observe the numerator is a power due to grade, and I can simplify it further:

ΔPw/Pw = 3 (σgrade / grade)2 × [ (1 - αCRR) (1 - αw) / (1 + 2 αw) ]2

This is all in unitless quantities and so is easier to grasp. It works for everything except zero or small average grade (for which you should use one of the previous forms).

The nice thing about unitless quantities is they tend to be more universal without requiring specific estimates for a given rider. For example, suppose we're dealing with a grade which varies 20% about the mean (for example, σgrade is 1.4% with a mean grade of 7%), and 15% of the power goes into wind resistance, and rolling resistance coefficient is around 0.4% (so responsible for around 0.4% / (7.0% + 0.4%) ≈ 5% of the mass-proportional power), then I get a 1.5% increase of aerodynamic power relative to the assumption of constant speed.

If I want to convert this to fraction increase in total power, I need to multiply by the fraction of total power which is aerodynamic power:

ΔP/P = ( ΔPw/Pw ) ( Pw / P ) = ( ΔPw/Pw ) αw

I then get:

ΔP/P = 3 (σgrade / grade)2 × αw [ (1 - αCRR) (1 - αw) / (1 + 2 αw) ]2

So going from that 1.5% I need to multiply by my assumed 15% total power from wind resistance and that brings me to 0.23%, so a small fraction of the total.

I think this is a typical example which implies a persistent underestimation of climbing power in time trial like efforts of 0.7% just considering the effect of grade variability. Of course there's other sources of variability which will have similar effect, for example variations in speed due to non-uniform efforts, such as in mass-start races where tactics come into play (going more conservatively at the base of a climb, attacking toward the finish, etc). But the result ends up being fairly minor assuming I didn't make any errors.

An interesting aspect of this formula is that variations in a grade of a given fraction have zero influence in limits both where grade is zero (because fractional variations of near-zero are near-zero) and also in the limit of no wind resistance (because for climbing power variations in speed average out). It's only in the middle range: climbing hills fast enough that wind resistance is still a factor, that the grade variations are significant.

In summary, here's a description of the parameters I used in this analysis:

fmacceleration(grade + CRR)×gravitymass (and speed)-proportional power
fwmass/distance1/2 ρCDA2speed-cubed-proportional power
CRR1coefficient of rolling resistance (for example 0.4%)
CD1coefficient of wind resistance (for example 80%)
ρmass/volumemass-density of air (for example 1.1 kg/m3)
Aareaeffective cross-sectional area of bike + rider (for example 0.4 meters2)
αRR1CRR/(CRR + grade)fraction of mass-proportional power due to rolling resistance
αw11 / (1 + fmm / fws2)fraction of power due to wind resistance
αm11 / (1 + fws2 / fmm)fraction of power due to mass-proportional power

Sunday, May 24, 2015

Team bio passport for pro cycling?

Watching the Astana supremacy in the final kilometers of today's stage at the Giro gave me an idea...

The biopassport is based on the assertion that there is a statistical uncertainty in testing values. But the more data you have, the tighter the bounds which can be set under a given threshold of certainty. If you're examining data from 8 riders in a batch, while any one of them may exhibit variations consistent with normal variation, if they exhibit correlated variations then that becomes less consistent with random chance.

So does it make sense to apply testing protocols to teams as a whole in addition to individual riders? If the team fails analysis while each individual on a team passes, do you eliminate the whole team from the race?

It seems a promising idea. No two-year bans, of course:, that would be unfair to individual riders, but disqualification from a race, at least.

The key is you're introducing an additional source of variation in addition to temporal variation for a given rider: you're adding interpersonal variation. So you can't just average everyone's statistics together. But you can, perhaps, analyze trends in each individual's numbers, and to analyze these variations in a batch.

Maybe I'm being unfair but I'm having difficulty being really interested in this Giro.

Inside Trail Reservoir Dogs 35k report

I had my misgivings about the Ohlone 50k on Sunday, for which I'd registered. I wasn't sure how I was going to get there. I'd tried going down the entry list for other runners who live in San Francisco, checking for them on Strava to see if they lived close, and none did. So I tried to send messages to those I could find on facebook to see if we could coordinate somehow a ride out. But I got only one response, in the negative. He was staying in Pleasanton the night before, relatively close to the "finish" in Del Valle where we were to meet for a shuttle ride to the start of the point-to-point run. Maybe I should try to get a hotel as well, I thought. Then I could ride to the finish on my bike. Or, more fun, I could try camping out in Del Valle. But that involved carrying a tent and sleeping bag and making reservations which probably weren't available still.

It all became irrelvant when I checked the event website to see that the run had in fact been canceled. My first reaction, I have to admit, was relief. It freed me from working out the start line logistics.

But even though I'd been feeling less than excellent from allergies and the after-effects of a steep ramp up in my cycling, I knew I wanted to follow through and do a race during the weeked. The first place I checked, Inside Trail Racing, was hosting the Reservoir Dogs 35k on Saturday. Saturday was a day sooner than I'd planned to run, but the race was 15 km shorter (actually 17 km), and one less day recovery since my hilly ride on Thursday would be compensated by the shorter distance. I'd be okay.

I was by now very comfortable with this distance since I'd done rather well at the Woodside Crossover 35k five weeks prior, and presumably my fitness was a bit higher now. I just needed to treat the race with respect. And that meant eating and drinking far more than I do on training runs, which is none (for eating) and little (for water). I just needed to run a steady, sustainable pace and I should get to the finish.

Logistics were simple: BART to Orinda than an 8 km ride to the boat launch area where registration was held. If anything, it was a suitable warmup for the run. I got there nice and early, right near the opening of registration, and I had no problem getting in.

It was damp, overcast, and cool but these are fine conditions for running. They'd take some of the pressure off hydration and electrolyte consumption. Of course the heat affects everyone and I like to think I take it better than a lot of other runners for a given amount of acclimation but in San Francisco that acclimation is very limited. It's been colder in May than it was any month of the so-called winter.

This was going to be fun. The trails around Briones Reservoir are apparently restricted access so there wouldn't be much opportunity to run these otherwise. And given how nice the bike ride is around the nearby "three bears loop" I expected it to be scenic. And in an understated way this turned out to be accurate.

Being early gave me plenty of time to check out the approach to the finish. There was a gravelly fire road leading to a right turn, then a short steep drop to a very short flat run to the finishing arch. No problems. But I was glad to have seen the turn because under the pressure of a race finish it can be easy to miss something which may be by any reasonable standard completely obvious.

Scenic view from Reservoir Dogs (Lets Wander photography)

A key today was going to be to know what I wanted going into rest stops, get what I wanted, and leave with minimal delay. But this would generally include drinking from cups, getting a few salt pills, and eating something like some fruit or some chews. With the rushed plans I didn't have anything on my own. In fact despite including it on my pre-race checklist I recently posted to this blog I'd forgotten to bring Enduralytes, which are a good idea since finding them at the aid station tables can be a time sink. So the focus was on these three things: 1. if I am out of water, hand my water bottle to a volunteer, 2. drink cups of sports drink, 3. get a gel or some chews, maybe with a piece of fruit, 4. take 2 salt pills, 5. get back my water bottle, 6. get out of there.

I was amazed by how few people were there: there had been around 60 for the 35k on the reg list. But in the minutes before the start people showed up. And soon enough it was the usual Inside Trail Racing scene by the start arch.

After a nice speech warning us about a potential cattle drive but saying nothing about bees, it was time to move forward to the start line. I positioned myself in my favorite spot: around 3rd row. This turned out to be good placing. The lead guys shot out quickly, people behind seemed to stay behind, and I was fine running my own pace.

When things had sorted themselves out, my race became a race of 3. First I overtook Madison McCarthy, who, it turned out, was the lead woman, visiting family here from her home in Ashland Oregon. She said she was here with her boyfriend Brett Hornig, who works at Hal Koerner's famous running store there. Brett had signed up for the Ohlone 50k, as had I, and like me had signed up day-of for this race instead. Madison told me they both hoped to win. That was a bit bold, I thought, as I thought perhaps she was slightly underestimating the local runners. But they succeeded: Madison by a comfortable margin, Brett by only 19 seconds.

I followed her for awhile, as her pace was good, but on a climb I felt I could go faster and so went past. I thought maybe that would be the end of it but then I reached the first rest stop.

I like to do quick stops and I felt I succeeded here, but even a quick stop is slower than none, and Madison trotted on by as if the stop weren't there. That was a game I wasn't going to play. So she was gone.

Leaving the first stop, which was the 10 km turn-around, the course did a loop around Briones Reservoir. The half-marathoners would turn around at rest stop 2, but the "35k" runners would circumnavigate the reservoir with a little out-and-back to reach stop 3. So here I was, just running along, trying to not dig myself into any sort of hole, but of course not letting myself slack off enough to get caught from behind,

But after not too long I heard footsteps approaching from behind. Damn. But as the runner passed we started to chat. It was Ron Poggi, who'd just recently run the Boston Marathon. I have a thing for the Boston Marathon and so we talked about that race, about CIM which I've run, and about trail running. This was great because it kept my mind off the distance. It was fun just running and chatting, something I rarely do.

We finally overtook Madison again, and then reached the second stop, the half-marathon turnaround.

Now one thing I didn't mention about this leg was anything about bees. I never saw any bees, never heard any bees, and wasn't stung by any bees. However, the half-marathoners, starting a half hour later, were not so lucky: a hive located right on the trail attacked a substantial number of runners, causing at least one to choose an alternate route back to the start/finish. I later apologized to a finisher from that race for angering the bees.

Reaching the half stop, I again made a decently quick stop, but once again Madison skipped it. Ron was faster than I was, having stopped but only very briefly, but I was able to recatch him. Together we once again reached Madison.

"Are you going to skip all the stops?" I asked?

She confirmed that in fact that was her plan, that she does unsupported 3 hour runs at home, and that she hoped to do the same in this race.

"How much water are you carrying?" I asked. She had a hydration vest, but it didn't look very full.

"24 ounces," she said. 24 ounces? I contemplated the water bottle at my belt. That was probably 18 ounces. But I was supplementing that with cups of Tailwind I drank at the stops -- typically 2-3 per stop, and that bottle was close to empty. I'd refill it at stop 3, then finish that as well.

As I noted, I'm a fan of training on less water than I race. If nothing else it teaches me I can get by without water so when in a race I run out I don't suffer a mental melt-down. The same with food. I know I don't need calories to run 3 hours, but if I do have the calories, that's bonus. So I want to be consuming more in a race than I do in training. And given that, if I'm able to carry enough to last me 3 hours, then I'm carrying too much weight.

Slight digression here. Consider that running is around 1 kcal per kg of total mass. The more the total mass, the more the energy cost of running. But it's not really that simple. Weight affects running's energy cost in multiple ways (see blog post here for analysis). One is the center of mass bouncing up and down, which is affected by the full body weight and all the weight carried on the body (although technically if you carry it in your hand you can isolate it from up-and-down motion). Another source of energy cost is the cost of accelerating your legs and feet each footfall. Weight which is on the feet, for example shoes, is more relevant here. The total energy cost has to be proportional to weight assuming all weight is increased proportionally. But if you increase weight on the upper back, for example, where water is stored, that's going to affect the center of mass motion, but that weight is not being accelerated as the feet are. It will have a reduced effect relative to the average of all mass, which includes the feet. So a 1% increase in mass, if that mass increase is in a relatively inert position, then it will slow less than 1%. I did some calculations on this matter and I concluded that the faster the running cadence, the greater the fraction of energy going into leg accelerations, the lower the fraction going into center-of-mass bouncings. The lowest energy cost came where these were equal. So I'm going to assume a 1% increase in weight is going to slow you 0.5% if it's on the upper back.

She was carrying 24 ounces of water plus a pack which probably had a mass around 200 grams. That's a total of 900 grams. An alternate is a smaller belt pack with half the water but to stop at a rest stop along the way. I'll assume that's 450 grams saved peak. But when running on average the water will be half-full. Instead of 900 grams her pack on average has a mass of 550 grams. So the savings is 275 grams. I'll further assume her mass was around 55 kg. Then the time cost of that extra mass over 3 hours is 27 seconds.

27 seconds is plenty of time to refill a bottle at a rest stop. It might be cutting it close, though. But a key consideration is that there is recovery during this rest. It's what I call "the elasticity of rest". If I hold you up 27 seconds you'll be able to run the rest of the race faster than if you'd not rested for those 27 seconds. But physiologically, at least, it seems unlikely that 27 second stop will result in gaining more than 27 seconds on the rest of the run. You get only a fraction of it back. But you definitely do get a significant fraction because I find I always regain some of the distance I lost in stopping when I leave an aid station relative to runners who run on through. So I suspect you could spend significantly longer, for example up to 45 seconds, at that stop and still do better than running through and carrying the extra water.

But there's an additional effect: which is fatigue. Carrying extra mass causes added fatigue on muscles, both to the legs which need to work harder, and to the shoulders which must support the weight isometrically.

So the end result is: carrying the added weight is worth at least 27 seconds total. When you consider the benefits of the rest gained at the stop and the lower muscular effort associated with running less encumbered, I view the aid station stop a big win. But even more, if I stop at the aid station I'll probably consume more than if I try to do it all while running. That's probably good, too.

So back to the race...

I managed to recatch both Madison and Ron approaching the third stop, which came around kilometer 20. I was first to this stop but then things went terribly wrong. After handing my bottle to the volunteer for refilling, I wanted salt. I looked at various plates with items laid out and didn't see the salt pills. "They're right there!" the volunteer said. I looked and still didn't see them. "There -- in the bottle!" Sure enough the bottle was there, the lid closed off. Okay -- I opened the lid and tried to pour some into my hand. A bunch spilled into my open palm. I put them into my pocket, withdrew my hand, and closed the bottle.

Next I got a slice of watermelon which is always a good option. But I needed to drink.

"Water!" I said to the volunteer, then found the water cups. I grabbed a Tailwind cup, then another, then a third, drinking all of them. The volunteer seemed concerned I was drinking Tailwind rather than water. I'd changed my mind, so assured him Tailwind was fine.

Off I went, Madison and Ron long gone, and to make things work at first I tried to exit in the wrong place, and lost a few more seconds going out through the proper gate. I need to check my data for how long all this took, and in truth it was probably only 2 minutes max, but given I just did an analysis justifying 27 second water stops, 2 minutes is an eternity.

But I was done, and as I ran I decided to try some of those salt pills. But then I noticed my pocket was inverted and the salt pills were nowhere to be seen. My hand had inverted the pocket when I'd withdrawn it. I should have put the pills in the pouch attached to my water belt instead. That's more secure.

Anyway, all I could do was run at my pace, and I hoped to recatch Ron at least, since I suspected Madison was the stronger runner.

On the plus side I was feeling fairly good and could see Ron up ahead when the sight lines were sufficient. At one point I estimated he was 40 seconds ahead and if we were running approximately 300 second kilometers than that put him 130 meters ahead of me. If there were 13 km remaining then I had to go 1% faster, 3 seconds per km, to catch him. I could do that, right?

But rather than close the gap grew. We came to one sweeping open section with long line of sight and ahead I saw a few runners on the trail. I wasn't sure if one was Ron. But I was sure that was a lot more than 130 meters.

On I went, passing close to a cow (fortunately he was a friendly cow). Then reaching a gate which I tried for a few seconds to open, only to realize I was supposed to go around the gate, not through it. If this and the turn-around aid station snafu were the worst navigational issues I had all race, it was navigationally a very successful race.

I knew the last rest stop was the 10 km turn-around, which means 5 km from the finish. So I expected to see it at 30 km on my TomTom watch. But approaching the intersection I approached a runner coming the opposite direction. "A quarter mile to the stop!" he said. Wait... this was less than 28 km.

I ran on. Approaching the stop, I saw first Madison ("go, Dan!") and Ron ("go, Dan!") returning on a trail which paralleled the dirt road I was on. They had a big lead. I wasn't going to catch them.

But that didn't mean I could slack off. I approached the aid station with two things in mind: 1. drink coke, 2. get 2 salt pills. And there I was.

It didn't go as smoothly as I wanted as there was some congestion with a slower half-marathon runner and a volunteer helping him, but I managed to get out there relatively quickly having accomplished my two goals. My water bottle was empty, so I briefly contemplated putting some water in it, but dismissed that due to the congestion. It was only 5 km, and I was well hydrated. Further I didn't drink any Tailwind here. I've learned the hard way sports drink + Coke makes a frothy mix which doesn't sit well.

The Coke kicked in and I was in end game. I passed several slower half marathoners along the way here. The distance passed a lot faster here than it had on the outward leg, when we covered the same trail in the reverse direction. I figured the finish was around 33 km on my watch based on hitting the aid station at around 28, but just in case I was wrong, I held a little back. I looked for the "mile to go" chalk mark I'd seen on the outward leg to be sure.

I never saw that chalk mark, but I reached what I recognized as a grassy trail I'd run on the way out. And then I saw him. It was Ron, up ahead, going slowly.

He heard me coming and picked up the pace. Okay, so this was going to come down to the finish. It's at this point in the race I try to detach myself from my body, to ignore pain. The resolution to pain is to finish sooner, not run slower. So I kept the intensity up.

Then Ron slowed to a walk. I quickly reached him, and as I passed, I shouted "Go, Ron! You're almost there!!!" He mumbled something and I didn't slow down to ask more.

I was on the gravel road now: the finish wasn't far. Then there it was, the right to the short steep descent to the finish. I came upon the rear of a fit-looking guy at the top of the little descent, but he slightly gapped me there. I followed him soon over the line.

Then, all the goodness I was feeling in the end game, all the Coke-and-adrenaline induced rush, left me and I was a quivering mess. But that feeling passes soon enough. I sat down, I ate a few salty-nutty-bars, I ate a few more salty-nutty-bars. Gradually I regained my humanity.

I got a chance to talk to Ron and he said he'd had stomach problems. I smiled a bit at this, not because I like to see other rivals have difficulty, but instead because it justified my approach at stopping at all the aid stations to make sure I had what I needed. The gap to Madison was several minutes, the gap to the runner behind me was 12 minutes. Both of these gaps were significantly larger than even the time I squandered at aid station 3. But in the end it paid off that I never experienced weakness the whole race. And my result was good: 10th out of 60, 1st in age group. Ron was in the next age group up, winning that.

One thing, though, is I probably took too much salt. Enduralytes are low on sodium chloride, but the salt pills they use here are high. This caused me to bloat up a bit in the day after the race. It was cool and I probably didn't need the salt at all, especially since Tailwind has electrolytes. Next time I'll bring Enduralytes to avoid any issues.

Next race: I'm not sure. Maybe the Rodeo Beach Inside Trail racing four weeks after this one. That borders on racing too often but my recovery from this one is going a lot better than from my preceding two races.

Saturday, May 23, 2015

professional cycling doping rumors

I saw this on a favorite cycling forum, where I "redacted" some of the key details.

Spoke to a friend and reliable source, employee of a large pro team. His sentiments about the tweet is that basically everyone agrees with it and openly think that has organized doping going on to some extent and/or still has back channels to Schumi. Also, the common belief is aligned with what Voigt and TSP said in that if the UCI didn't give the license they would have their pants sued off by entities with very deep pockets so they had little choice. A final rumor is that some riders are using new peptides similar to those that were recently banned like GW-501516, a new type of growth hormone and IGF that aren't tested for yet, and various banned anabolics in suspension form during training camps so that the ultra short half-life times won't show up on test results. If the rider were to take the substance right after a ride the glow time would only be around 6-8hrs for a normal dose and thus out of the system by the morning when testers typically show up.

Okay, so this is all just someone's rumor, so take it for what it's worth.

Thursday, May 21, 2015

New Cannondale EVO, CAAD-12, and stack-reach geometry

I heard at the Tour of California that the new Cannondale Evo is basically done, and I further read there's a new version of the CAAD10 which will be called the ... drumroll.... CAAD12. So what about the CAAD11? The answer is they're skipping the CAAD11 to make room for that to be used for the lower-level version of the new bike. If it's like the Evo and CAAD10 the two bikes will be very similar except for that the Evo bike is carbon and the CAAD is aluminum.

I've ridden very few bikes (I always say I want to test bikes but it's surprisingly hard to make time to do this). The Evo is the 2nd to last bike I've test ridden (the latest was the Parlee ESX, the name supposedly short for "Essex". Yeah. Right). Anyway, Evo was a [i]very[/i] nice bike: the handling was spot-on, it felt good, there seemed to be no penalty for its stiffness, and it went against the fatty tube syndrome which had been in full fashion at the time it came out. Fatty tube is alive and well in the Trek Emonda, but I don't like it: it seems overkill for any but the most powerful riders and flaunts wind resistance. Just going to narrower tubes helps there, as well as looking better to my aesthetic.

So what changes do I expect for the new Cannondale?

One obvious potential change is some tube shaping in the style of the Cervelo RCA/R5. Scott did something similar with their Addict, following the Foil which was more overtly aerodynamically tuned. But the Addict took the approach of "we're going to focus on weight, stiffness, comfort, and (new for the Addict) tire clearance but if we can make it more aero we can". Even with this approach, not compromising too much in the other areas, you can make a big difference. The same was true earlier with Cervelo. They have the S-series for aero weenies but that doesn't mean you ignore aerodynamics in the R series.

Another Cervelo thing is stack-reach geometry. Stack-reach design means you start with a stack-reach chart, typically a smooth line or curve, and design bike dimensions to fit on the curve. The traditional approach is to focus on top tube length, then do ad hoc adjustments to head tube length, head tube angle, and seat tube angle to make the top tube length work. But since these changes are typically done un-smoothly, the result can be a rather strange looking stack-reach progression. Here's how Cannondale "stacks up" against some other designs:


You can see all the other bikes here, including of course Cervelo, follow relatively smooth stack-reach curves, while the Cannondale curve is a mess.

So who cares? Indeed, if a given size happens to fit, you care only about that stack-reach. Nobody forces anyone except a sponsored rider to choose a given bike line. Suppose a shoe company sold a shoe and the size 42 tended to run wide but the size 44 ran narrow. Well, you go into the shoe store and try on your size and if it doesn't fit, you try someone else's shoe. Would it be better if both 42 and 44 ran narrow? It would make things simpler, but you happen to have size 42 wide feet that wouldn't do you any favors. But stack-reach design does make sense and I wouldn't be surprised to see Cervelo go there.

Then there's disc brake design Yadda yadda. Call me carmudgeon. Discs are more expensive, heavier, more complicated, and require a stiffer and heavier fork and a heavier front wheel. So I don't care about disc brake designs. My brakes work well enough to send me flying over the bars and I can't brake harder than that.

So these two factors: semi-aero design, and stack-reach geometry, would both show a lot of Cervelo influence. And Cannondale recently hired Damon Rinard from Cervelo. Damon was formerly at Trek around the time they came out with the latest Madone, another stack-reach design with aero emphasis. So if Damon Rinard has any influence I expect Cannondale to follow this path, unless they're too tied to their traditional sizes.

Wednesday, May 20, 2015

sprinter speeds crossing the finish at the final stage of the 2015 Amgen Tour of California

Here's a finish line photo of the final stage of the 2015 Amgen Tour of California:

ATOC photo finish

I love photo finish images because the "x-axis" which is usually position in most photographs, is time instead. There's only one spatial dimension. The camera records a slit image of what is crossing the finish line at a given time. So if you measure the "width" of a bike crossing the line, that's how much time it takes for the bike to cross the line. If I assume all bikes are the same length, then speed is inversely proportional to the amount of time taken to cross the finish.

Here's a typical bike geometry chart, in this case for Trek's racing bikes, which have "H1" and "H2" geometry. Note the wheelbases vary from 97.4 to 101.8 mm, a range of 4.5%.

In contrast the Specialized Tarmac goes from 970 mm to 1013 mm, a very similar range.

Cannondale: 962 mm to 1012 mm.

In all, wheelbases seem to vary by around 5% among bikes across the full size range. To get total bike length you need to add on a wheel diameter, and those are very similar (basically all the pro riders @ ATOC were on similar 25 mm tires. I saw only one team on 23 mm). But the sizes vary less between manufacturers than they do between sizes. So generally larger bikes will have longer wheelbase than smaller bikes.

I counted the number of pixels on the full-resolution image of each rider from the front of his front wheel to the back of his rear wheel. Stage results are here. Here's the pixel counts:

place  rider           team              pixels
1      Mark Cavendish  Etixx-Quickstep   262
2      Wouter Wippert  Drapec            265
3      Peter Sagan     Tinkof-Saxo       251
4      Tyler Farrar    MTN-Quibeka       255
5      Tom Van Asbroek Lotto-Jumbo       266

The interesting thing here is that Mark Cavendish was pretty fast, not the fastest but still pretty fast, despite crossing the line in a very unaerodynamic position: a full victory salute. He'd obviously lost some speed by this point.

But there is the issue of the 5% variation in wheelbase, which is around 13 pixels. That's a big source of uncertainty, although I could correct for it by looking up the specific wheelbase of each rider's model and size of bike. But I can also measure just the front wheel length crossing the finish line. Front tires, as I said, should all be essentially the same size with the standardization to 25 mm tires:

place  rider           team              pixels
1      Mark Cavendish  Etixx-Quickstep   107
2      Wouter Wippert  Drapec            107
3      Peter Sagan     Tinkof-Saxo       102
4      Tyler Farrar    MTN-Quibeka       105
5      Tom Van Asbroek Lotto-Jumbo       ???

The result is similar. Sagan was fastest, Farrar next, and Cavendish and Wippert slower but not as slower as you might expect from the parachute-like victory salute. If he's that fast in the salute, how fast was he going before that?

Here's a video of that sprint from Wouter Wippert's bike cam:

That's simply amazing.

hummingbird feeder physics

I couldn't figure out how the hummingbird feeder worked. Why didn't it overflow?

Forces need to balance, of course. Neglecting surface tension, there liquid level is higher in the inner reservoir than in the feeding chamber, so there must be a corresponding pressure difference. Suppose the pressure in the inner chamber were zero. Then the column height difference would need to be atmospheric pressure / (density of liquid × gravity). But this is over 9 meters! Obviously the height difference is only approximately 1% of this. So the pressure difference inside versus outside is only approximately 1%. The inside is only slightly below atmosphere.

So air is getting in. How? Does it diffuse through the liquid? If this were the dominant mechanism, it wouldn't take long for the pressure inside to go from 99% to 99.3%, for example, which should be plenty to push the column of liquid down in the inside chamber and thus push liquid out through the holes. It would overflow.

I tried to move the feeder to clean it (which I soon decided would be too messy a proposition without losing a large fraction of the contents) and saw the answer. When I moved it a bubble went up through the inner chamber, increasing the volume of air there. Correspondingly, the liquid level in the feeding chamber must have risen to make room for the air in the inner chamber. Ah! So that's how air got up there.

The answer was then easy. The liquid level outside is regulated not by the pressure difference directly, but rather when the liquid level drops outside too low, it provides a channel for a bubble to flow up into the chamber, which then decreases the pressure difference versus outside, and the liquid level inside then drops, pushing liquid up in the feeding chamber, and the path for any further bubbles is closed off. Eventually birds drink the liquid, or else it evaporates, and the level drops again, then another bubble flows, then the level outside increases again. It's a tight feedback loop. The key to the design is that the air channel is shut off sufficiently before the level reaches the top of the feeding chamber.

How far is sufficiently? During the day the volume of air in the inner chamber changes, as approximated by the ideal gas law: P V = N kB T, where T is the absolute temperature, kB is Boltzmann's constant, P is the pressure, and V is the volume. In this case I can divide both sides by the cross-sectional area A, yielding V/A = H, the height of the air in the chamber. N/A is assumed constant (gas doesn't enter or leave), so P = [ (N/A) / H ] kB T. As the temperature increases, the height of liquid in the chamber drops, and that increases the height of liquid in the feeding chamber. Daily variations in temperature in San Francisco right now are very small, on order 1%, but even 5% variations wouldn't be unusual elsewhere. This corresponds to a few mm shift in the liquid level outside (it's a bit complicated since as the liquid shifts in response to the pressure difference the pressure difference is canceled). But it's clear there's more buffer than that.

Anyway, the key to the problem was the bubbles. These are similar to the bubbles which flow up through water coolers when the liquid is drained. If such a channel wasn't available, you'd get a little water out, then no more. In the case of the feeder you'd barely be able to drain much liquid at all before the flow was suppressed.

Tuesday, May 19, 2015

using a modified Fiets formula to tune climb detection

Last time I described that the recursive algorithm I proposed for finding climbs in a profile was:

  1. identify all non-overlapping rateable climbs in a profile:
    1. If there's no rateable climbs of some minimum climb rating, then we're done.
    2. identify the highest-rated climb in a profile.
    3. identify all rateable climbs preceding this climb (recursive)
    4. identify all rateable climbs following this climb (recursive)

I implemented this in Perl, which went a lot faster than it had taken to implement my previous, unsuccessful iterative approach. I tested this on randomly generated "profiles". I put "profiles" in quotes because they're not very realistic.

I had to define a "minimal" climb, so this I decided was 5 meters gained in 0.1 km. This is a 5% (approximate) grade for only 100 meters. So to be identified as a "climb" the simulated road would need to be steeper and/or gain more altitude.

Initially I used the conventional Fiets formula which is : altitude squared / distance. Note a variation on this is average gradient times altitude gained. These are essentially equivalent. Here'a a typical result, where the total profile is red and identified climbs follow. Identified climbs occlude the red profile curve where they are present, so the red curve, if you see it, only exists where no qualifying climb exists.

n = 2 (Fiets)

Note that in many cases regions of contiguous altitude gain are broken up into pieces. This is because a steeper subset of the total region of altitude gain has a higher rating by virtue of a higher average grade despite the penalty of less altitude gained. This highlights the importance of considering profile subsets in apply a Fiets-like formula to climb data.

However, one can generalize thd Fiets-type formula as follows:

rating = |altitude gained|n / distance

where n is a power (2 for Fiets). This is virtually equivalent to using |grade| multiplied by |altitude difference| raised to the n-1 power, where the "||" denote absolute value. The higher n, the more importance placed on altitude. If n = 1, then altitude gained doesn't matter, just grade. That's silly because the climb of maximal rating would be the segment of maximal grade, and that segment can be arbitrarily short. On the other extreme, if n is large, altitude difference dominates, and grade becomes relatively insignificant.

Here's an example of using n = 4:

n = 4

With this it's less prone to breaking up continous climbs.

And here's an example using n=8:

n = 8

Now it tends to take points of altitude extremes, even if there's extended descents between the two.

n = 16

I could do this with real profile data, for example the Terrible Two which has a very nice mix of climbs, but unfortunately right now this code is confined to the random profile generation code.

Monday, May 18, 2015

identifying non-overlapping "climbs" in a profile: a recursive approach

Recently I became interested in Jobst Brandt's climbing-descending algorithm for the Avocet 50. Jobst died recently, and I think it's safe to say the man was absolutely brilliant. Among his many contributions to cycling is the Avocet 50 altimeter climbing-descending algorithm, which has been the "gold standard" for determining total climbing on routes. For many years it was the most reliable determination of what a cyclist would consider "climbing", filtering out small altitude fluctuations which could easily be due to "measurement noise". But to compare Jobst's algorithm to mine I needed hill profiles.

So I wrote a little code to make random hill profiles. But it gave unrealistic results: rounded profiles, where the hills were more like sine waves than jagged peaks. This wasn't too surprising because the algorithm I used was simple: generate random-normal distributed altitude points then convolve the resulting profile with a well-behaved smoothing function (I used cosine-squared as a good finite-domain alternative to a Gaussian). Functions like this attenuate high frequency components, and what's left tends to be sinusoid in nature.

I modified the profile with an exponentially-based analytic truncation function to avoid negative altitudes, but still, the profiles were clearly unrealistic.

What was the problem? The problem was that roads are designed, they don't just happen. Engineers decided they need to get from point A to point B at different altitude, then based on the terrain, the anticipated traffic characteristics, and the relative cost of roadway length, they pick one or more design grades for the road. It won't be perfect: the nature of the terrain imposes local modifications to the design grade considerations. But realistic roads tend to behave differently than the random functions I was using. So I figured if I could identify the "climbs" in my random profiles I could generate more realistic profiles by making the grade more uniform between the bottom and the top.

So I needed to determine what a "climb" was. Well, I'd already given that plenty of thought, in particular in response to John Summerson's determination that Mount Hamilton Road was 3 climbs, not one. John Summerson, in his excellent "Guide to Climbing by Bike" series, rates climbs using a formula which I attribute to Fiets magazine but which no doubt pre-dates that: net altitude gained squared divided by distance.

Given this rating, then, a "climb" is simply a segment of road which maximizes this rating. If I add relatively flat road to the end of a steep road, I'll increase the denominator faster than the numerator. If I add steep road, however, the numerator will increase more rapidly. It doesn't need to be as steep as what precedes it, since the altitude in the numerator is squared, but it needs to be steep enough. And if I add a short descent followed by an additional climbing portion, the net altitude will need to increase sufficiently, overcoming the loss from the intermediate descent but including the distance from the descent, to increase the rating relative to if the descent-climb sequence was omitted and the climb terminated earlier. In the case of Mount Hamilton it turns out the 3 climbs combined with the 2 descents rates higher than any other option (for example just a climb, or a climb-descent-climb).

Long ago I implemented this definition in a code I wrote to determine the "climb rating" for climbs in the Low-Key Hillclimbs. To rate the climb, I wanted to apply the Fiets formula, but rather than doing it automatically to the full profile, I applied it to the portion of the full profile which would maximize the rating. The point here is every climb is at least as hard as its hardest subset. In the Low-Key Hillclimbs I use a different rating than the simple Fiets formula but it has similar behavior.

But here I was interested in identifying multiple climbs. What is the best way to do that?

The obvious approach is to evaluate the climb rating for possible combinations of start and end points on a route. But that's really silly -- the hardest climb might be a 10.00 km segment, then the "2nd hardest" climb would be a 9.99 segment excluding either 10 meters at the start or finish, etc. Climbs which sufficiently overlap shouldn't be counted separately. I wanted to set of individual climbs within a longer route profile which were relatively non-overlapping. This is related to an issue Strava has been dealing with lately, which is how to filter through the enormous surplus of largely redundent user-defined segments. Separate segments on the same portion of road which substantially overlap don't typically represent different climbs, and including both in a ride report with a default verbosity level may be overkill.

So I developed an iterative algotithm to identify multiple climbs within a longer ride, eliminating those on-the-fly which essentially overlapped. I was feeling good about this but to my surprise it didn't work. The reason was subtle and unanticipated: It would find climb A, then it would find climb B which was higher rated than A and substantially overlapped it. So it deleted A. Then it found climb C which substantially overlapped B and out-rated it. So it deleted B. But C didn't overlap A. So bringing an "obvious" climb A was unmarked, not part of any of the surviving climbs.

I then kicked myself because this wasn't a problem that is best solved iteratively. It's really much simpler represented recursively.

So here's the approach:

  1. identify all non-overlapping rateable climbs in a profile:
    1. If there's no rateable climbs of some minimum climb rating, then we're done.
    2. identify the highest-rated climb in a profile.
    3. identify all rateable climbs preceding this climb (recursive)
    4. identify all rateable climbs following this climb (recursive)

The only subtlety is how to define "preceding" and "following". Does this mean includes no common points? Maybe. But maybe instead it allows for some degree of overlap. Or maybe it requires some minimum degree of underlap. I'm thinking now that overlap is not desirable. So the rule would be adjacent segments can share at most one point.

Consider the following example, where I list distance and altitude for each point in normalized units:

0 0
1 1
2 2
3 5
4 8

First I find the highest rated climb. From 3-4 is a rating of 9. From 2-4 is a rating of 36/2 = 18 which is higher. From 1-4 is a rating of 49/3 which is smaller. 2-4 is the highest rated climb: rating = 18.

So then I want to find the 2nd-highest-rated climb. To do this I find the highest rated climb of points preceding, and the highest rated climb of points following the identified segment. The latter is easy: the climb goes to the end of the profile; there are no points following. So that leaves preceding.

I will allow re-use of the start point but that's it: my remaining profile is:

0 0
1 1
2 2

The highest rated climb is 0-2, which is all the points, so I'm done. There's two climbs in this profile: a gradual one, then a steeper one, with no descents in between. The full profile is by any reasonable definition a "climb", but the steeper portion is a better climb, so the full profile gets suppressed. If I were to allow some segment overlap, however, this would have resulted in an artificial first "climb", ending at some point within the steep portion.

Note the Fiets formula as I wrote it: the square of altitude gained divided by distance, rates climbs with the same number in each direction. So if I have a road which climbs, then descends to the original altitude, this should be marked as two "climbs". It's really a climb and a descent but I don't care. A small modification would be a signed rating: one which is positive for altitude gained, negative for altitude lost.

Sunday, May 10, 2015

Tour of California picks

The Tour of California men's race is underway and so it's time for me to post my picks.

So without any excess discussion, here's my picks:

  1. Andrew Talansky, Garmin-Cannondale
  2. Phil Gaimon, Optum
  3. Joe Dumbrowski, Garmin-Cannondale

Darkhorse picks for the top 10 are the Morton brothers on Team Jelly Belly.

Talansky is an established stage racer, and his teammate Dumbrowski did a breakthrough race here in 2012 (story on Dumbrowski here). Phil Gaimon honed his form with Garmin in the World Tour last year, and is focused on this race. He won the Redlands Classic fairly conclusively and knows what it takes to do well in California. A lot of the pack is here just for training or stage wins. So the battle for GC is fairly limited. So these are my top 3.

Really funny with Gaimon: Diamondback had a special cookie-themed bike built for him for the race but they did it in the wrong size. That's perhaps the difference between the pro tour and pro-continental.

I'm really glad to see the race do a women's stage race this year and that seems to have gone very well. It was more the "Tour of Tahoe" than the "Tour of California" but that's better than it has been. The first two stages were exciting and ended in climbs and the result was a tough GC battle which ends today on day 3 with a crit. Hopefully the race can build on this next year, extending the women's race by maybe two days to yield something more worthy of a top women's field. I wish I could have seen some of it: a trip out to Tahoe isn't a terrible idea in any case. It would have been possible to combine the race with a nice ride into the mountains. But other stuff has gotten in the way, in particular a cat which required major medical attention. But maybe next year.

added: Well, Talansky didn't work out so well... I relate since allergies have been really bad this year.

Monday, May 4, 2015

numerically integrating a function over triangular elements

I had to do this problem for some C++ code I'm writing for work and so decided to put the result here.

I have a scalar function defined over an irregular 2-dimensional mesh of triangular elements and I need to integrate the function over the surface, for example to find the average value. All I have are the coordinates of the elements.

triangular mesh
triangular mesh example, from University of Vermont

Consider an element with points p0, p1, and p2. I can define side vectors r0 ≡ p1 - p0, and r1 = p2 - p1. Then I can determine the area of the triangle a = | r0 × r1|.

The integral of the function over the area is the multiplication of the average value of the function times the area. I have the area so I need the average value.

This is of course ill-defined because I don't know how the function varies between the three points. But I can guess that it varies linearly. A linear function in two dimensions is defined by three degrees of freedom, for example an intercept and two slopes, one for each dimension. So I need three constraints to determine a linearization of the function in two dimensions. As long as the three points are not colinear (if they are it doesn't matter because the area of my element is zero anyway) then the three points fully determine this linearization. If it was a 4-sided element there'd be a bit of a problem because then I'd be potentially overconstraining the linearization. But for triangular elements with three points the problem is well defined.

So I should be able to solve this analytically.

Consider two cases: one is where the triangle is equilateral. In this case each point is equidistant from the other two and the average is trivially the average of the three values. Nothing differentiates one point from the others so they must be counted equally.

Here's another case: suppose two points are much closer together than the other, "virtually touching". In this case the average value is an average of the third point (the one further away) and the additional average of the two near points. So it is the weighted sum of 25% of the close points and 50% of the further point.

I can capture these two special cases as follows:

  1. Calculate the centroid of the triangle. This is the average of the three positions.
  2. Weight the value of each point proportional to the distance from this centroid

This is a bit counter-intuitive and indeed I got it wrong at first because I assumed that the points closer to the center would have more influence over the average value. But this is backwards. The center is drawn to where points are more closely clumped and so I need to de-weight the points in the clump to avoid that portion of the scalar field not be over-represented.

So the result for the average of the function f, with values at points p0, p1, and p2 of f0, p1, and p2, is:

<favg> =
   [ f0 |p0 - pavg| + f1 |p1 - pavg| + f2 |p2 - pavg| ] /
   [ |p0 - pavg| + |p1 - pavg| + |p2 - pavg| ]

Is this the most elegant representation Almost certainly it isn't. But it seems to me it's correct, and computers are good at calculating this sort of thing, so I'll let them do their work.

For a 4-sided element, I can divide it into triangles (for example, points 0, 1, and 2, then points 0, 2, and 3), and take the integral of each and sum. Note I may need to be careful here with how I treat my areas, because sub-triangles may have negative area, and to treat them with an absolute value will overestimate the net integral or net area.

Sunday, May 3, 2015

Wine Country 200 km report

Yesterday was the Wine Country Century, or more completely, the Wine Country 35 mile, 100 km, 100 mile, and 200 km rides. I was excited to go because Cara had wanted to do the metric century, and even though I thought with a bit of preparation she could do the 100 miler, I was glad she was ready to do events again, after a series of injuries.

The official start time window for the 200 km course ended at 7:30 am, and at 7:20 am I saw Jeffrey at the start. "You're starting late!" he said. "No -- it shouldn't take much more than 8 hours to finish," I responded, my feelings slightly hurt. But I immediately realized I had no basis to make this claim. I'd hardly been riding at all. My "training" for the event consisted primarily of an easy ride with Cara the weekend before. and part of the SF2G First Friday Friendly Frolic on Friday, the day before the ride. That FFFF had been encouraging, though, as I managed to tie my PR up Cortland Road in Bernal Heights, a Strava segment I've written about here before. But that was partially because most of the rides I've done up the climb have been commuting with a back-pack and climbing with negligible warm-up. This time I climbed it toward the end of the ride, returning home, riding my Fuji SL/1 (with aluminum clinchers and heavier saddle)

I rolled out not too long after. There's a lot of traffic lights along the first part of the route, so I found myself in a nice little group, including an SF2G jersey towards the front. I moved up and saw it was Alexis, a former SF2G commuter who's since switched to a job in the city. We talked about the downside of losing the peninsula commute, a commute which is almost universally hated due to the congestion on the roads and the inadequate capacity of the train, that being that when an SF2G'er loses the commute riding miles almost always drop. Still, given the state of Caltrain, with exponentially increasing ridership and only negligible increase in service, overall I don't miss it at all.

Alexis was adept at staying near the front of the group, while I allowed myself to fall too far back, and on a long "ride single file" section I got stuck behind a gap when a traffic light turned red. Finally we started again, fortunately the lights in Sonoma not nearly as long as those in the Peninsula where it's wider "expressway"-style roads require longer light cycles, and it wasn't out of the question to bridge back up.

But did it make sense? Don't be silly, I thought. My start time had been thoroughly arbitrary. This group was fine, or we'd be overtaken by faster riders soon enough. But when I heard the riders next to me chatting, one of them discussing his plans to cut "extraneous climbs" from the route (what? The whole ride is "extraneous" since it ends back where it started), I decided I didn't want to be riding here. I glanced back, didn't see anyone catching up to us, and decided to chase.

So off I went, and with the help of some hills along the way I was able to catch the group that had gotten the green. It was a bit fragmented, though, so moved up from sub-group to sub-group.

I had managed to recatch Alexis' group around the time we reached the separation between the 100 mile and 200 km courses, at mile 18.7. There had been a climb to this point, up Graton Road to its peak, and it was natural to think this was the top, but after the left turn onto Facendini Road the climbing began again, steeply. I found I was looking for something more than my 36/26, but that gear was fine. I just had to drop my cadence a bit lower than was my recent habit.

I got ahead of the Alexis group here. Then came a short jaunt on Occidental Road to Bohemian Highway then onto Coleman Valley Road. I think of this as the "backside" of Coleman Valley. It's the easier side to climb. The other side I've ridden several times in the Mt Tam Double, part of the Marin Century event, but this side I'd ridden only once before, in Murphy Mack's Spring Classic #2 in 2012.

The climb was fairly easy from this side, but toward the top it attains the remoteness that makes the western slope so special. It's truly barren up there, with cattle guards, ranch land, and ocean views. The views were rarer today, since it was all fogged in, and the ocean wind provided a chill that resulted in me leaving my Voler jacket on. The jacket is nice because it's so compact, it fits even in one of the Voler undersized pockets, but the downside it was designed for someone with a particularly spherical aspect, and it has to increase wind resistance substantially. Perhaps, since the team affiliation motivation which got in the way of me replacing it are now gone, I can try to find a more suitable jacket.

Along the way, though, came the first rest stop. At the entrance a kid was aggressively waving a flag, like in the Indy 500 waving one lap to go. I thought it would be amusing to get taken out by a kid waving a flag. It's nice to see enthusiastic volunteers!

I try to keep my stops brief, and on this ride that was my approach, but since it's untimed I lacked any of the urgency I feel at double centuries, for example. I certainly had no compulsion to skip stops, as I might do at a double. Each stop I'd fill my bottle with the electrolyte drink they were using (which was good -- EFS First Endurance), eat a fig bar and maybe an orange slice and/or banana piece, maybe use the porta-potty, then move on. But it always took longer than I'd expect it to, in part because we had to park our bikes near the entrance to the rest stop then walk in. But that was fine: it's a huge ride and bikes create congestion.

At that stop I saw Jenny Oh Hatfield, "Plattyjo", who has an excellent blog. I knew she was doing PBP this year and I asked her about it. She told me she was also doing another 1200k in Florida which is "flat, so not so crazy". I told her I thought crazy was implicit in 1200k. It's funny how when you hang around with people who consider that distance normal ones perspective can change. Also here were Peter and Chris, both regular SF2G'ers.

Anyway, I left the first stop alone, getting back onto Coleman Valley Road for the rollers at the "top" and then the descent to the coast. I was chilled, even with the jacket, on the rolling bit but then during the decent I warmed, and even had some nice views of the ocean (I'm tainted -- they're actually quite spectacular views) as I approached the coast.

The ride along the coast was nice. I tried to take some attention away from the riding bit to appreciate the coastal views. This portion was reverse direction of what we'd ridden in SFR 300 km route: that time we'd gone to the coast on River Road, then south. Here I was riding north on the coast to River Road. So I tried to rewind my memories from that brevet, as dulled as they were from the cloud of fatigue I was under at the time.

Eventually I hit River Road, immediately after a bridge crossing the Russian River, and headed inland from there until we reached Moscow Road, providing relief from River Road's surprisingly large traffic volume. I remembered this but from Murphy Mack's Spring Classic. At that ride this was approaching the finish, having started in San Francisco and ridden north.

Moscow took us to Monte Rio, the 2nd rest stop. Then from there back on busy River Road to Guernville, then welcome relief via Mays Canyon Road, Green Valley Road, essentially closing the coastal loop, then finally onto Vine Hill Road to begin our northward trek towards lunch.

We were now merged with the 100-milers and this changed the dynamic considerably, since slower 100-mile riders were on the road the same time as faster 200k'ers.

This portion I characterized as the "cross-traffic does not stop century", since there were a series of several intersections where we either crossed or merged with streets where high-speed traffic had right-of-way. These intersections can be dangerous, and in century-type events they are often staffed by volunteers, and indeed the last of them, crossing River Road, was, by my friend John. A group of riders was bunched at the intersection, and when there was a gap in traffic some of the riders ahead of me hesitated, and the opportunity to cross was lost. John indeed stopped them from proceeding. "You volunteers!" I said in an annoyed voice, and I don't think he realized it was me until he looked at me, then realized I was kidding.

Rest stop #3 was Wohler Bridge. I was now past half-way, around 108 km. This was mentally important, as I was a bit tired but overall not too bad. Riding an extra 100 km didn't seem like too large a hurdle at this point.

I left the rest stop and was cruising along fairly aimlessly when I was passed by a group of four Liberty Cycling riders. Naturally I hopped on the train. The lead rider, wearing a Firefighter's cycling team jersey (turns out he's not a firefighter but did some sort of team event with the firefighters) was incredible. He just pulled along, tirelessly, and indeed he pulled so well that he dropped first two of his teammates, while the remaining teammate was letting gaps open on the short climbs approaching lunch. I just sat on until the gap got too large, then I tried to pace him back, but he was clearly done. So I bridged the gap to the leader and we finished the remaining mile or so to lunch. We chatted a bit there, but I was interested in getting out of lunch fairly quickly, and told him if I saw the paceline pass me on the way back I'd try to join them again. But honestly I was pretty fried from the motor pacing session.

At the Lake Sonoma lunch stop I didn't feel like eating a sandwich, feeling a bit guilty about it because volunteers were generously devoting their days to making them for us, but instead I treated this stop as mostly just another rest stop, eating figs and fruit and two small potatoes. But additionally I drank a full bottle of lemonade which was quite good, then refilled the bottle with more. I also took advantage of the shuttle service, removing my long-sleeve wool undershirt from my body, and my jacket which was now wrapped around my seatpost. I kept my light knee warmers since my knees felt fine and it would provide sun protection to keep them there. But for the rest of me I sprayed myself down with sun screen. It wasn't the shortest stop I've done, but it was a lot faster than those who were having picnics on the grass. Nothing wrong with picnics, of course, but I was excited to continue riding.

As I was rolling out I saw Cordelia, Hyan, and Alex (Alex male, not Alexis female) ride in. I'd passed them on the road earlier, as Corelia and Hyan were waiting for Alex to catch up. I figured that was probably the last I'd see of them before the finish.

Lunch was at mile 88, so it was end game. With so many riders here it wasn't hard to find another paceline, so I hopped on to some riders as we backtracked the route to the lunch stop. We rode along Dry Creek Road when one of the riders said he'd expected to "turn left at that last turn". They's been changing the course in recent years, he said. "That turn was only for 200k riders" was then mentioned. "200k??" I said, alarmed. "Are you on the 200k?" I was asked, but the answer was already clear from my inflection. "Then you've got to turn around and take that turn." It was around 1.5 miles back, he said. This turned out to be a remarkably good estimate.

So back I went. I didn't see any marks on the road into Dutcher Creek Road, the turn, but a woman there next to her car, uninvolved in the event, said cyclists had been riding that way. There might have been marks painted on the road, heading in the direction from lunch, but I'd have never noticed them since I was following wheels at that point, having assumed from having looked at the route map poster that the routes were concurrent at this point. Indeed, the map posters listed this as a "bonus loop", and it was marked only in faded red, perhaps left over from a previous year when this wasn't part of the standard route. Of course, the whole thing is "optional" -- nobody is monitoring course compliance. But I like to be "official", so wanted to make sure I completed the full thing. But an extra 5 km was unplanned for.

Dutcher Creek Road was sort of nice, but then we passed under 101 onto Asti Road, a road which would have been very nice in a Wine Country fashion had it not been immediately adjacent to 101. It's a canonical return route from from riding The Geysers. This felt abandoned: there were few riders here, and I saw only one woman from the event. I had the feeling a lot of riders missed the turn and had followed the century loop, which was shorter, via Canyon Road.

Vineyards along the route, Cara Coburn photo

With the extra distance and with the warming temperatures, despite my extra hydration at the lunch stop, I managed to finish not only my main bottle but what remained of my backup bottle, which had plain water. Even though the final rest stop came only 15 miles from the finish I looked forward to it, and skipping it wasn't an option.

After I passed Canyon Road I was rejoined with the 100-miler (and 100k) routes, and so was around more riders again. I was passed by a short paceline with two guys, one older and one younger, and two women. The older guy was pulling, showing really poor straight-arm posture on the bike which he rocked back and forth in a most inefficient manner. The women, in contrast, looked comfortable, and were drafting fairly efficiently, getting gapped a bit during surges but then slowly but determinedly closing the gap again. The younger guy, strangely, pulled out of the line and launched an attack. But then he slowed and waited for the others to catch up. Together we joined another rider who'd passed me earlier. It was all fairly dysfunctional. Finally the pace slowed and I went to the front to take a pull, but managed only to pull away. I arrived at the Alexander Valley Rest stop alone.

I was rather surprised to see Cordelia's group already here. They'd obviously missed the turn onto Dutcher Creek, as I had initially. I heard them chatting about a "left" and realized this is in fact what had occurred. Although I had to make excellent time to get my 8 hour target, I was really feeling the effects of the distance, not only in my legs, which were surprisingly good, but additionally in my feet, which hurt (need to reshape my Bont shoes), my hands (which were periodically going numb), and my butt. Basically all my contact points were suffering from a gross lack of time on the bike. My legs were fairly strong from running up and down hills, even if I was relatively slow. So I chatted with them a bit, said I was ready to leave, and was pleased when they agreed to leave at the same time.

Alex had been complaining he wasn't feeling well, and was contemplating SAGging back, but I said "You can't sag! It's only 15 miles to the finish". He seemed encouraged by this, and rolled out with us, but when Cordelia and Hyan went to the front and set a rather solid pace on the opening climbs, Alex was gone.

After a climb, I took over and tried to set a good pace on the flats and descents. The other two stayed glued to my wheel. Cordelia would then take over and do strong pulls. I tried to watch to make sure Hyan was hanging on, and she for the most part was. But then once she drifted back a bit, and I dropped back to drag her back, which worked.

Finally, though, Hyan also faded, so it was just Cordelia and me riding to the finish. She was very strong, remarkably so, and only at the end did she say she was feeling tired.

At the finish, I immediately went to find Cara. She was there, having done very well on her 100 km ride, which wasn't a surprise since she's very strong and despite her lack of any rides approaching the 100 km distance I knew she'd be fine. I had some of the delicious food at the finish, the vegan options somewhat depleted by earlier finishers, but was still very good. While we rested on the grass Bonnie came by to chat. She'd ridden up from San Francisco the day before. Bonnie left to find her ride back, then we packed the car and headed back to San Francisco.

Taking a photo of a group for them. Cara Coburn photo.

In retrospect, despite woefully inadequate preparation, I felt stronger here than I had at the SFR 200k Pierce Point brevet. Why? I have to think it's because of the rest stops. I didn't consume much, but a regular intake of carbohydrate solution and a bit of food stopped me from ever going really into the red. It's harder on an unsupported event, but since I'd done that ride with a handlebar bag, there wasn't much excuse. In a way I was overconfident at that one, while for this one I knew I wasn't prepared and was thus compelling to pay more attention to these things, and in the end that worked out better. My finish times were very close.

Overall the event was great. The volunteer support was simply amazing. So many volunteers, all of them seemingly happy to be there. The only small hiccup was the relative lack of marking for the left at Dutcher Creek, a turn which is easily missed and which perhaps deserved something more than road paint, although perhaps there was more and I just missed it. Also the roads here aren't as nice as those in Terrible Two, which takes the high road above the traffic. But Wine Country tries to avoid being too difficult, so that's unavoidable. That's just the way Sonoma County is. People there spent a lot of time in their cars, many of them large. But overall it was a really fun event and I'm glad I went, and very glad I was able to go with Cara.