Eric's Arcana and RiderX

Two blogs, one author, munged together.

Tricks you can play on yourself #23 - ski edition

clock February 19, 2014 08:10 by author ericgu

The school that I teach for has a Freeride team – they ski all over the mountain (including cliffs for some of them). The last lesson day of the season they have an informal competition, and, for the second year, I volunteered to take pictures of them. This lets me keep my sports photography skills up, and lets me work with a great group of kids. Oh, and it excuses me from helping out from helping out with the other “last day” activities, though I still found time to reprise my role of “Mr. Catsup” in the hot dog line.

The chosen location for the competition was 7th heaven, a double-black diamond section at the top of Stevens pass.

I am a decent off-piste (“ungroomed” for the non-skiers and/or less pretentious among you) skier. By “decent”, I mean that I can get down most slopes that don’t involve the words “drop” or “cliff”, and that I ski them with occasional flashes of competence. It’s a little harder to ski with a 5lb camera (Canon 7D + 70-200mm F2.8L 2.8 IS II lens) on my chest, but it’s not too bad.

After a warm up with the team on Big Chief (where there was some surprisingly nice powder (and no, I just can’t call it “Kehr’s Chair”…)), we headed over to Skyline, and then up the 7th Heaven Lift (yes, it is as steep as it looks), which is 4 years older than I am but luckily, far less cranky. The original plan was to head over to the side of Rock Garden (a bumped but not super-steep run), but there was a fair amount of skier traffic, so we headed down Cloud 9 and hooked back towards Meadows above the Skyline run, to a steeper and less bumpy run.

There was some very nice snow; the kids skied down to get the feel of the run, and I skied down to set up above a small clump of trees.

Shooting on a steep slope – this one looked to be around 45 degrees – takes a bit of preparation. Actually, just taking off your skis takes a bit of preparation, lest you sink in and slide down the hill, and I spend 5 minutes carefully down the snow to try to get a 12” wide platform I can stand on. Then, I take my skis of – carefully - and stuff one at each end of the ledge so people can see me, and then enlarge my ledge with my boots. I get the camera out, get it set up, get my shooting gloves on…

And then I wait. and wait some more. The kids need to ski down to the bottom, and then cycle up two lifts, then work their way back around to this slope. The time that it takes is directly proportional to how cold it is, and since it’s pretty darn cold, foggy, and lightly snowing, it takes a long time. Eventually they come back, and the shoot goes well; I shoot for 20 seconds, wait for the kid to ski the bottom half and be scored, and then shoot the next kid. I think I’m doing pretty well but I can’t really tell; the eyepiece has some snow in it and there is a lot of frozen snow on the camera and lens. My hands are pretty frozen even with gloves on them.  (editors note – they came out quite nice. See gallery here).

I finish shooting, check signals with the two coaches, and get ready to leave. The camera goes back on the chest carrier, coat closed, and gloves on. I pull my goggles down and find that they are totally ice-covered, but a minute of scraping with my fingernails fixes them up. Skis on, and I’m almost ready to ski out – after I demolish the ledge that I built, so that nobody gets tripped up by it. I climb up until I’m on top of it, scrape snow down into the ledge, and then compact it a bit.

To ski out requires a small traverse, then a short tight-ish section until the slope open ups. I start to slide forward to get into position, sideslip a bit, and am surprised to find that I have fallen over backwards. Falling down is not a great idea on this sort of slope, and it’s especially bad to fall over backwards.  I get up, slide forward again, make one turn, and at the bottom of the turn I lose balance and fall over backwards again. This freaks me out a tiny bit, which always inspires me to ski better. Ha ha – of course it doesn’t – it actually makes me much more tentative.

I think I know what is going on, but to fix it I will have to pull my skis off, and since I’m in the middle of a tight section without great visibility from above, it’s really not a great idea to stop. I muddle my way through one turn, do a huge (and unstable) traverse, and then stop and pull of my skis.

I find what I expected. The bases of my skis were facing uphill, and they got the same coat of ice on them that my goggles did – but the ice was only on the front of the skis because the back half was stuck in the snow. The meant that whenever I went to push them sideways, the front would stick and the back would slide downhill.  I scrape them off with a plastic piece on my gloves, and finish the slope.

So – Important Safety Tip – it’s not a great idea to leave your ski bases exposed when you stick them into the snow.

Eric’s Cycling Summary 2013

clock January 2, 2014 05:40 by author ericgu

As many of you know, it is difficult – some would say impossible – for me to say briefly what can be said at length. This will not be an exception.

After a casual year of cycling with no real goals in 2012, I decided to shake things up a bit for 2013. I started by looking at my constraints:

  • I ski most weekends from December through March, and therefore have little weekend time to train on my bike.
  • During the winter, the Tuesday/Thursday rides I lead (“Eastside Tours”) are often constrained by weather, so we only go on about half of the rides.
  • Cycling is not the only thing I want to spend time on; the evening rides plus a ride of reasonable length (less than 4 hours unless it’s an event) on one day of the weekend is the amount of time I’m willing to devote.

I then looked at my goals:

  • Have more fun
  • Do some different events
  • Finish RAMROD without hating it

It was clear that to reach my goals, I needed to be more efficient in my training, so I bought a copy of Carmichael’s “Time-Crunched Cyclist”, and dug in. I started with the “Experienced Century Rider” program, and then adapted it to my schedule. Fitting into the constraints of a group ride was a bit challenging at times; I needed to pick routes that worked for the group and then fit the assigned workout into it, so sometimes I would do 3 intervals on one hill, 3 intervals on the next, and then the final 2 on a third hill. I put all-out intervals on the weekends because they didn’t really fit in. All of the workouts were based on power, and the specific power levels were based on a field test I did. This was my first experience training using power, and being able to quantify the expected effort level makes things so much easier and more effective.

The training was quite successful; I ended up being leg constrained (ie my legs hurt from the lactic acid) on my climbs rather than being aerobically constrained, and that was a very nice outcome.

RAMROD was pretty good; I was much faster up Paradise than previously, but Cayuse turned into the usual suffer-fest, with me stopping multiple times. I think that the problems I had on Cayuse are related to me not eating enough; my later performances where I ate more were much better. So, chow down seems to be the order of the day.

Our California trip was very nice; I had great energy pretty much the whole time, and managed to do two mountain climbs (Figueroa and Diablo) at a high consistent power output and feeling reasonably good while doing it (I lucked out and had great weather on Diablo, but Figueroa was hot hot and that reduced my speed and increased my pain a bit).

And finally, I felt strong all the way through the Passport 2 Pain, staying ahead of the usually-faster riders from my group. I’m a little worried about attempting it a second time, as a look comparing my RAMROD performance to my P2P performance would make you think it was two different riders, and P2P may have just been one of those days when you have great legs.

In summary, a pretty good year.


2013 2012
Rides 106 90
Distance (Miles) 3000 miles 2356 miles
Total time 210:39:10 162:54:52
Average speed 14.2 MPH 14.46 MPH
Total Elevation 215,052 feet 150,804
Longest ride 149 miles 107
Feet/mile 72 64

A 40% increase in elevation this year; some of that comes from about 25% more miles, but the remainder comes from a 12% increase in the number of feet climbed per mile, which is a pretty significant increase. The decrease in average pace is because of that; I have actually be faster on the flats this year than in the past but have been trying to stay within our 17 MPH goal pace for the Eastside Tours rides.

Microcontroller RGB LED Animation Software

clock December 30, 2013 02:43 by author ericgu

I’m building a project using non-addressable RGB strip, where all of the LEDs in the strip are connected in parallel and are therefore the same color. I thought it might be a bit useful to talk about the techniques that I’m using in the software, and some of the options & tradeoffs that exist.

The hardware and code are from the Arduino world, but they apply equally well in other ecosystems.

Hardware choices

The LED strip is composed of RGB LEDs, which are in turn made up of separate Red, Green, and Blue LEDs. Simplistically, I can get 8 colors out of the combinations of these colors:

  1. Red
  2. Green
  3. Blue
  4. Yellow (Red + Green)
  5. Purple (Red + Blue)
  6. Cyan (Blue + Green)
  7. White (Red + Green + Blue)
  8. Black

To get more colors, I need to be able to do something more than just turn a color on or off – I need to control the intensity of each color independently. While it is possible to control LED brightness directly by controlling the current through it, that is fairly complicated, so in most cases we take a shortcut. If we want half the light output, we flash the LED so that it is only on for 50% of the time. This would seem to produce a flashing LED, but because of the way our vision works, if the flashing is quick enough, we see not a flashing LED but a dim one. This technique is known as “Pulse Width Modulation”, or PWM. Doing it 60 times per second (ie 60 Hertz, or Hz) is a minimum bar, but I like to shoot for 100Hz. A lot of cheap holiday LED lights flicker at 60 Hz and if you move you head you can see it.

The number of colors we can get depends on how many levels of intensity we support. 64 levels gives us 64 * 64 * 64 = 262144 different colors, while 256 levels gives us about 16 million. We want enough to give us smooth fades between colors, and I think 64 levels is probably significant.

PWM is also used for controlling the speed of some motors and for driving servos.

PWM Implementation

PWM is such a useful technique that it is implemented in hardware on many microcontrollers. Using the hardware PWM has a lot of advantages:

  1. You don’t have to write/debug/maintain the PWM implementation.
  2. You don’t have to deal with interrupt-driven code, which is more complex and a bit mind-bending at first.
  3. The hardware PWM does not consume any execution resources, so your software has 100% of the microcontroller to use.
  4. It’s very simple

So, hardware PWM is great. However, it has some disadvantages, the biggest being a limited number of PWM channels per microcontroller. The Atmel ATMega386 in the Arduino supports 6 individual channels. I’m using a Trinket, which is built around the ATTiny85 microcontroller, and therefore supports only 3 channels. Hardware PWM is also limited to a specific number of discrete levels. If you need a lot of outputs and/or more discrete levels, there are boards that you can connect to your microcontroller that can do more channels at with more levels, such as this 16-channel one.

If the hardware PWM support is not enough, PWM can be implemented in software. We configure the microcontroller to call a bit of code at a specified interval, and in that code, we decide whether the output should be on or off.

This gives us a bunch of flexibility; we can, at least in theory, do PWM on every single output on a microcontroller. However, the code that is running is taking up system resources, and at some point we won’t have any resources to do any other work.

Animation storage

There are two ways of storing animation; we can express them in procedural code such as:

DoFade(redTarget, blueTarget, greenTarget, fadeTime)

and then create a program that has one DoFade() for each animation. Or, we can do a table-driven approach, where we express what we want in a table:

Red Target Blue Target Green Target Fade Time
255 0 0 15
255 255 255 45

And then write a very simple program to loop through the entries in the table sequentially.

The table-driven approach has simplicity going for it, and works well in most cases. It doesn’t work well in cases where there are repeated patterns; if we wanted to fade from red to green and back to red 50 times quickly, that would take 100 entries in the table, but would only require a short loop to write procedurally. There are ways to get around this by making the table more complex.

Architectural options

There are a few different architectural options. In rough order of complexity:

  1. Use hardware PWM and code in the main thread (ie “loop()” in the arduino world) to drive the animation.
  2. Use hardware PWM and a separate timer interrupt to handle the animation. The timer interrupt code is called a fixed number of times a second, and that code drives the animation.
  3. A timer interrupt to implement the PWM (software PWM) and to handle the animation.

There is also a fourth option – using a timer interrupt for PWM and splitting the animation between the timer interrupt and the main thread. I built one system that does that, but I think it ends up being more clever than necessary.

RGB Strips Construction

clock November 23, 2013 05:45 by author ericgu

With the electronics done on my RGB project, I moved on to the physical construction.

As a veteran of a number of these projects, I’ve learned that the electronics part is always the easy part; it’s all of the physical construction (wiring/cabling/support) that takes the time. I’ve also learned the new projects need to be quick to put up; it already takes too long for me to put up the current displays.

The LED strips that I’m using are quite flexible, so they need some support. I chose 1/2” EMT electrical conduit as my mounting method. I have 67’ to cover, so I bought 7 lengths of the tubing for about $3.50 each. The strip has an adhesive backing on it (it claims to be a 3M adhesive, but counterfeiting is rampant in China, so I’d be surprised if it is…), so it’s a simple matter of attaching the strip.

The first step is to mark a straight line along the conduit.

To do this, you need a way to hold the tubing so it won’t spin. I used a 8’ cutting guide that I have, and a sharpie to mark the edge. If you don’t have that, a baseboard in a room that has hard flooring would work just as well.

Next, slowly peel of the adhesive of the strip as you move along the tubing, and stick it down. The strip is made to be attached to a flat surface, so it won’t adhere perfectly. I used zip ties to give some extra security.

I needed a nice way to joining the pieces of conduit together. I originally just wanted to use conduit connectors, but they don’t really hold the joint very straight and they make the tubing wider, so I did some searching in my hardware store, and found some connectors for flexible pipe that worked just fine. One end is a tight fit, and I ground down the connector so the others just slide on. I'll note in passing that inside diameter of 1/2” EMT is 0.6 inches, and the outer diameter is around 0.7 inches. Here’s a picture of them.

This shows a tactical error I made; the strips can only be cut on the segments between them, so I let them run long, and made sure they overlapped correctly. It was a bit of a pain. On the second set, I got smart and trimmed the conduit to the length that I needed. Here’s what the completed sections look like:

There are connectors at both ends because I need to feed power from both ends to keep the voltage constant; they are Molex connectors that took a long time to put on; each one gets crimped and soldered.

I bought a 250’ spool of 12-gauge landscape wire, and then soldered on some more connectors. I used hot glue to insulate the connections and hold everything together.

After a lot of work, I got it done, and then surveyed the carnage:


and here are a couple of shots of the final result:

That intense red line is the RGB strip. Note that it’s really hard to take crisp pictures of lights, as they tend to bloom.


Here’s a closer picture; you can sort-of see the individual leds. At this distance – 20 feet or so – you can see the individual light sources pretty easily.

Trinket debugging…

clock November 23, 2013 02:08 by author ericgu

One of the nice things about debugging code on the Arduino is that you can send debugging information back out the serial port. The arduino can do this because it has a separate microcontroller to handle the USB communication duties.

The Trinket, however, does not have a separate microcontroller – the USB communication is handled by the same microcontroller your code runs on.

I needed to do some debugging, and decided to do something very old school. I wrote some code like this:

temp = valueIWantToView

digitalWrite(0, HIGH);
digitalWrite(0, LOW);

for (int I = 0; I < 8; i++)
    if (temp & 080)
        digitalWrite(0, HIGH);
        digitalWrite(0, LOW);
    temp <<= 1;

I ran this on a timer interrupt, hooked up my scope to pin 0, and I could then read the bits directly off the scope.

Trinket RGB shield lives

clock November 6, 2013 07:14 by author ericgu

Yesterday, the PC boards for my trinket RGB shield showed up from OSH Park. Also, the solder paste stencil that I ordered from OSH Stencils showed up as well. The stencil cost $5, so I’m out $8.70 for the stencil and three boards. Here’s the stencil:

My original intention was to try different techniques of soldering. I had some decent luck with solder paste on a soldering iron with my last board, but when I started pulling out the components, I found that there was a problem.

The diode that I had chosen was in a SOD523 package, which measures 0.8mm x 1.2mm. That’s really, really tiny. Like, small. I could pick it up with the tweezers, but I didn’t see how I could solder it without moving it around, so I decided to go straight to “plan b”, which is to reflow the board. I got out the stencil that I bought, figured out how to hold it in position over the board with one hand. Here’s what it looks like:

I squeeze out some solder paste onto a piece of paper, pick it up with the “solder paste applicator” from Osh Stencil (really just a credit card blank), and carefully scrape it over the holes in the stencil to evenly fill the holes in the stencil. The results are pretty good:

One of the cool things about pc boards is the solder mask that is printed over all the parts that aren’t meant to be exposed copper. The solder paste does not stick to the solder mask, so even if the paste isn’t perfect, it will clean things up. That looks just fine.

Now, onto component placement. I started with the diode because it’s going to be the hardest. I pull one out of the strip and drop it on the paper.

That tiny little black spec at the top of the picture is the diode. To place it, I need to figure out which end is the cathode, which is typically denoted by a band across that end. I look closely, but I can’t identify the band with my reading glasses. Nor can I identify it with my reading glasses plus my flip-down magnifier. A bit of thought, and I dig out the 8X Loupe that I use to proof slides on a light table, and then I can finally identify the end of it, and place it on the board. The resistors are next; in M0805 packages that are about 1.25mm x 2mm, they are a lot easier to place than the diode. They also aren’t polarized, so the direction doesn’t matter. The three 10K resistors go on well. Finally, there are three MOSFETs to go on in either SOT23 or SO8 packages (I had to do a custom part for this one). They are a bit more finicky, but I find that if I hold the tweezers steady and rotate the board underneath, I can get them mostly aligned correctly.

The next step is to reflow the board – to heat up the solder paste so that it melts and solders the components to the board. In production situations, this is done with an expensive reflow ovens. In the hacker world, some people use toaster ovens, some people use electric skillets, and some use their hot-air reflow station. I own none of these (well, I *do* own a toaster oven, but contaminating it with lead vapor is a bad idea), but I do have a wagner heat gun out in the garage, so I pulled it out and went searching for a decent platform on which to place the board. A recently replaced license plate from my truck was a great choice; metal, nice and thin, and the embossed letters raise it off of the surface.

I clean a space on my bench, put the board on the license plate, and turn the heat gun on low. There are very specific reflow heat profiles that are used in production ovens, but the simple goal is to get the board evenly warm, and then concentrate on specific areas until the solder melts, and then cool it off quickly so you don’t fry the components. I get the board kindof warm (it might have been a good idea to grab the IR thermometer before I started), and then concentrate on one of the MOSFET & resistor sections of the board, getting the heat gun close. It reflows fairly quickly, and I move on to all the other components. They reflow quickly as well. Here are the results:


It’s a bit hard to see in the picture, but a bit of examination with the loupe shows that I got good reflow on all of the components, and there are no solder bridges. The next step is to test the board; I hook it up to 12V, verify that the diode is in correctly, and then apply 12V to the pads where the trinket pins will connect. Success! Everything works the way that I expected.

I cut down an arduino header set with an abrasive wheel in my dremel to get two 1x5 headers, and solder them into the holes. Here’s a picture of the shield with the Trinket:

I made the shield stackable because I need two shields to drive the two separate circuits; the diode in the power line functions both as a polarity protection device and to keep the two power supplies from fighting with each other. The header on the left end of the shield is temporary; I’m using it to plug the shield into a breadboard so that I can easily connect to the shield for testing. It is *just* possible to plug the shield into the edge of the breadboard and stack the trinket underneath it.

I hook up a 5 meter strand of LEDs, plug in the power, and it starts animating through the colors.

A trinket for me

clock October 24, 2013 06:19 by author ericgu

I’m redoing my holiday roof outline lights that I’ve had for a long time. The current lights are made with four commercial strands of lights – red, green, blue, and white – wrapped into a single cable. They are driven by a custom (of course) 68HC11-based controller. Most of the effects are simply slowly changing from one color of light to another, though it does do a bit of chaser as well. They have held up quite well, but are showing their age. I’ve considered replacing them with addressable LEDs, but the cost of 25 meters of addressable LEDs is prohibitive (the Adafruit ones I like are $25/meter in quantity, which means $625 in strips). I also thought about it a bit; there are already a bunch of flashing lights going on in my display, so the addressable ones would be wasted.  I therefore decided to go with some non-addressable RGB strips, which means the whole strip will be the same color. By default, you get only the three primary colors + combinations of them, but it is possible to dim them with PWM and get a lot more colors. Through the magic of Ebay, I found these strips, which aren’t even close to the nice ones Adafruit carries, but they only cost $2.80/meter, so I get 25 meters of them for $70.

I’ve been playing with them a bit. They seem to be constructed okay, and come with connectors (though one of my reels has two male connectors, and another has two female connectors). One of the reasons they are so cheap is that they have economized on the amount of copper in the power lines; if I drive all three lines, the only way I can get the amount of current I expect is by driving the power lines from both end of the strip. If I do that, I can get 2 amps of current into each, and pretty good brightness. If, however, I plug a second strip into the first, the second strip pulls much less current (on the order of 1 amp), which means that I’ll have to feed every strip from both ends.

This happens because of how LEDs work. LEDs always drop a specific amount of voltage, depending on their particular chemistry. Lets say, for example, that we are driving LEDs that have a 2V forward voltage, and we want to push 25 mA through each of them. We are using 12V, so that means we need a resistor that will give us 25mA through 12V – 3 x 2V = 6V. That means 240 ohms. I cheated and used this website.  Which is great, if your supply voltage is really 12V, but if we lose a volt to losses, the current drops down to 20mA, which is a pretty noticeably difference in brightness.

Which comes to construction. I have two sections of house to light; one which is about 42’, and another which is about 25’. The strips are pretty flexible, so my plan is to use their self-adhesive strips to attach them to some lengths of 1/2” conduit. I’ll do jumper wires at the end of each piece of conduit, so that I can take them apart and bundle them for storage. This should also make them fairly easy to put up and take down, and for these projects, you always have to think about how much hassle you’re willing to put up with during decorating. I’ll split them into two strips; a 30’ section on the right, and then two sections that add up to 37’ on the left.

To drive it, I don’t need a whole lot of sophistication; I need to be able to drive 3 channels PWM and enough oomph to run some animation code. Even if I have to do the PWM in code, this is a really low bar. I want to try something different, so I settle on the Adafruit Trinket:

It has the mighty ATTiny85, and can be programmed with the arduino IDE. I could have done an 8-pin DIP in my STK500 programmer, but I’ve grown used to the Arduino IDE. The Trinket is very cheap at $7.95.

To drive the RGB strip, I decided to use three MOSFETS. Looking at the trinket, I had a thought – the holes are on 0.1” centers and there’s a bit of space around them, so why not add some headers, and build a shield for it? Seems like a plan.

The circuit is drop-dead simple; a MOSFET with the gate connected to the Trinket output pin, a resistor between the gate and the grounded source, and then the drain connected to the outlet. Assuming I’ve done it right, whenever I switch the MOSFET on it will ground the LED strip and light it up.

On a recent project, I did a breadboard arduino shield, which worked, but was a whole lot of trouble, so I decided that to do a PC board for the shield, especially since I have two 5V 5Amp power supplies, I need two shields.  Since I’m doing shields, the components can’t be too thick, so the TO220 MOSFETS that I was planning on are out. It’s time to head off to Digikey, and after a couple of tries, I settle on a MOSFET that comes in a SOIC package. It’s pretty tiny. I can’t find anything in Eagle that’s the right size, so I build the package for it, and start playing around. I reduce the size of the resistors (0805), and try a few different arrangements.

After playing around with the layout for a while, I find one that works well, and then find that I’ve reversed the source and drain, so I do another iteration. I upload it to OSHPark, and get back a preview of the front and back:


Because it’s such a small board, it only costs $3.70 for three copies of the board. It’s going to be a bit of a bear to solder (look at that really tiny diode on the left side), and I’m hoping that the traces are big enough to carry the current, but at that price I can afford a couple of iterations.

An aspiring writer

clock September 23, 2013 01:06 by author ericgu

One day, a man walked into the office of a literary agent. The agent glanced at him, closed the romantic comedy that he was reading, and look up. The man was an older gentlemen, dressed in clothing that lent him an air of elegance and sophistication without being ostentatious.

“May I help you?”

The man paused, started to speak, and then pointed at the chair in front of the agent’s desk. The agent gestured, and the man sat.

“I’m looking for an agent for a book that I have written. It’s about a man and his quest.”

The agent spun 62 degrees to the right in his Herman Miller chair, placed first his left foot and then his right onto the corner of this desk, and leaned back.

“Tell me about this book of yours".

The man – and at this point, he should properly be referred to as the author – the author leaned back slightly, and began to speak.

It is the story of a man, a simple man, the owner of a bakery in a small town. He had chosen his career because of his fond recollections of the summers he spent with his uncle, and after twenty years of hard work, had achieved considerable success, but he remained unfulfilled, as he had never been able to duplicate the bread his uncle had made. He had invested considerable time and effort in this pursuit, building a separate kitchen and having an oven shipped from his uncle’s town, but to no avail. He could not help feeling that, despite all his material belongings, he was destined to remain in the shadow of his uncle’s superior skills.

Sadly, his uncle died, and he travelled back to his uncle’s city. While visiting his aunt, she handed him a small, time-aged envelope with his name on it. Opening it, his eyes fell on his uncle’s handwriting, describing the recipe for the bread, the bread that he had been seeking to duplicate for so long. He was torn, torn between the pain of losing his uncle and the fulfillment of his quest. He returned home, and went on to nationwide acclaim.

The author stopped speaking, and looked at the agent. “That is my story. What do you think?”

The agent gazed thoughtfully at the book occupying the bookshelves throughout the room, evaluating what he had heard. Thirty seconds passed in silence, and he spoke.

"The ending is weak, but the basic story is good. It has a good chance of being a successful novel.”

The author preened at the praise.

The agent continued, “but, you said it was ‘your story’. Can you tell me, is this a true story?”

The author replied, “The story is based upon my experiences – that is, to say, I have built the story inside of the world in which I grew up – but it is not a true story.”

The agent sighed, and spoke.

“Then I’m sorry to have wasted your time; I’m afraid I can’t help you”.

The man shrunk back into his chair as all of the energy drained from his body. He signed, and spoke:

“Why not?”

The agent replied, “I don’t deal with all kinds of books. Specifically, I don’t deal in naan-fiction”.

Passport2Pain 2013

clock September 16, 2013 02:26 by author ericgu

(edit: in the original version, I stated that Marcel was wearing the KoM jersey. I was, in fact, mistaken. Those responsible have been sent to bed without any beer. )

In my continuing quest to do stupid things, I signed up for the 2013 Passport2Pain.

This ride is a fundraiser for the Vashon Island Rowing Club. Apparently, the club was sitting around one day and said, “let’s do a cycling ride to raise some money for the club”, and a plan was formed. They quickly agreed that the ride should be “hilly”, but were unable to agree which hills should be included. The impasse was finally broken when somebody suggested, “let’s just do all of them!”.

And the Passport2Pain was born.

I confess that I am engaging in a bit of hyperbole. It does not include all the hills on Vashon Island; a look at the course map shows that it skips at least two or three of them. To make the ride more accessible to those who are only slightly disturbed, they offer three different routes:

Route Distance Elevation Gain
Passport 30 miles 3,400’
2 50 miles 6,300’
Pain 80 miles 10,000’

Okay, those aren’t the real route names; I’ll explain the real route names as we go along.

I will note that the short ride appears to be roughly comparable to the very popular “7 hills of Kirkland” ride, though I have reason to believe that many of the hills are worse than those on 7 hills, and the longer routes are clearly much worse than the 7 hills metric and full century.

I thought I would try something different, and actually do some training for this ride, so I’ve been spending some time in the hills recently, including a trip up the ever-unpopular Montreaux-Zoo hybrid last weekend, and I also did a couple of hard 3500’ HC climbs on my recent vacation. Having said that, I’m not a natural climber, and I rode a little harder this week than I had planned, so – as usual – I’m not really in the form that I would like to be. Stava says that my fitness is near 60, which is pretty much my peak for the year, but it also says my fatigue is 60, so my form is a neutral 0.

The Ride

The ride starts at 8AM, and I want to start pretty close to that time, so I get up at 5AM. The start isn’t very far as the crow flies (why is the benchmark a crow? why not the pileated woodpecker?), but there’s a ferry ride in the middle and I want to make sure I catch the ferry I want. A quick breakfast, I get dressed, and then I grab my riding bag (a cloth shopping bag that holds my usual stuff; shoes/helmet/gloves/arm & leg warmers/thin coat/booties/etc.), my food bag (two baggies accelerade, tube of mixed Nuun flavors, cheese-its, garlic naan, shot blocks, two honey stingers, camera), and my water bottles (Camelbacks), and head out to the car. It’s 5:53, and there is a slight mist in the air.

The trip there is mostly uneventful. I chat with some friends while waiting for the ferry about what is coming. I catch the ferry I want to catch, and get to the start at about 7:30. I pull the bike out of the car, get it ready (GPS, phone, wallet, keys, water bottles all in the right places), and proceed to have a discussion with myself about what I’m going to wear. The ideal amount of clothing is such that you are just a tiny bit chilly when you start. If you wear too much, you get sweaty, and then you get colder. If you take it off, you are stuck trying to carry it around. I have a vest and coat that pack up very tiny, but I have pockets full of food, so I don’t want to take up the space. I finally settle on a pair of arm warmers, and ride over to the start area.

As I ride in, I pass a guy wearing the full Liquigas Polka dot jersey Kit, including the shorts. It looks something like this.

During the Tour de France, the different leaders wear distinctive jerseys. The overall time leader wears the yellow jersey, the points leader wears green, the best your rider wears white, and the rider who has performed best on the climbs is “King of the Mountains”, and wears the understated polka dot jersey.  The other big races of the year (the Giro d’Italia and the Vuelta de Espanaa) use their own color codes.

In the tour, possessing the jersey is an honor – some cyclists may go their whole career and ride many tours without ever wearing one of the jerseys. It is to be respected and not used frivolously. When somebody shows up in a polka-dot jersey at a hilly ride, it’s essentially stating “I’m all that”, and a rider that chooses to do it should be able to back it up.

Note that there is one exception to this guideline; if, for example, you are a guy who weights 250 pounds and has a visible beer gut, you are allowed to wear the polka dot jersey because it is clear that you are wearing it ironically.

I find out later that the rider wearing the kit was local rider and fellow Microsoftie Larry Beck. He finished in 5:18, with an average speed of 15.2 MPH. I think that classes him as “doing the jersey honor”.

Anyway, I lean my bike against a convenient trailer with rowing shells on it, wait in line to use the facilities, and then head to check in. To register for the ride costs $100 – which is a lot of money, even for a fundraiser – but the organizers have come up with an interesting way of making it accessible for those who have less free money. As we ride around, we will get our passports stamped, and at the end, you can get a $4 rebate on your registration fee. Hit all 18 checkpoints, and you can get $72 back, making the cost only $28. Or, you can choose not to ask for the rebate.

I have opted to go “all-in” (no rebate), and the organizers have kindly given me a separate registration line. I pick up my course map, my passport (in a ziploc because it’s going to live in a sweaty jersey pocket), and a single “P2P” sticker for the front of my helmet.

About this time, the ride director calls us over for a rider meeting. He tells us that the course has a slight detour, missing one hill because of construction, but we can double one if we’d like. He tells us about the roads (not wide), the pavement (poor in places), the descents (windy (as in “lots of turns”, not as in “lots of fast-moving air”)), and the residents (nice). He tells us how the start will work so we don’t put a huge group of riders on the road all together.

Another benefit of those who went “all-in” on their donation is that we get to start first. There are a lot of us, so they will send out 5 riders every minute (I think they could probably do it every 30 seconds and it would be fine). I have cleverly put my bike right near the front of the start group, so I roll out as the 10th rider on the road.

My plan for the day is simple. I’m going to ride the first section of the course, and then, when I get to the turnoff for the short course, I’m going to do a quick evaluation of how I feel, and then decide. If I keep riding, I’ll make the same decision at the medium course.

My *prediction* for the day is that I’ll do the short+medium sections and skip the last loop. But who knows – I might surprise myself.

We head out, off the little Island where the start is, and head up our first hill (all of 75’ of climbing). I’m spinning and trying to warm my legs up a bit. I worked out a little harder than I had planned the week before, but my legs feel okay. We end up on the main North/South road, and then turn off on our first descent, and at the bottom, find the first checkpoint. I get my passport stamped, and the little chinese character looks very lonely, one box filled on a page with 17 empty boxes left. We head up, and the pitch quickly increases to 13% or so. I’m running in my lowest gear (30/28), and looking at the others around me, most people have chosen some form of mountain gear. The few that haven’t are in for a long day – or perhaps a short one if they only do part of the ride.

The weather is misty up near the highway, and mistier when we’re down by the water. I’m a little wet because of it, and my sunglasses have beads of water on them. It’s a little chilly on the descents. I believe this is known as “typical Vashon weather”.

It’s back up to the highway, and a nice long fast descent. I’m thinking that this won’t be too hard to climb back up. A bunch of riders at the turnoff make sure I don’t miss it, and I turn onto a curvy road that descends a bit more. I’m looking to the left, searching for a checkpoint as the road bottoms. There is no checkpoint, but there is a nice steep hill in front of me. The garmin says 18% as I stand to attack it. On the other side, we keep climbing away from the water, and finally top out at the top of a small climb at checkpoint #2 (bicycle stamp). We retrace our path and head north on the island. This is what I call a double; the route to the checkpoint and back to the main route involves not one, but two separate climbs.

Rest assured, dear reader, that I am not going to recount in detail the remaining 16 checkpoints for the ride. I think I could, but I’m pretty sure we would both find it pretty boring. I will therefore just give you the highlights.

At this point I hear a familiar voice, and find that it’s Jeanne, who rides with our group. We ride together for a while and chat, and then, on the next hill, her natural riding talent leaves me behind. I ride on.

There is now a decision to make. One can continue on the ride, or one can call it a day, and head back to the start on the aptly-named “The Weenie” route. I’m feeling fine, so I ride on.

In the near future (the whole day has mushed together in my memory), I do a hill that has my Garmin reading 20% on the ascent. Soon afterwards, it gets scared and stops recording altitude all together; it does not show the incline, nor is it recording altitude gained. Everything else is find – speed, cadence, power.  I turn it off, turn it on again, and it starts working fine.

More hills, more checkpoints. The checkpoints are all staffed by volunteers; the stamping is typically done by young rowers (which is what the money raised is for), with a few adults. They are uniformly pleasant, each of them (the checkpoints, not the adults) feature something slightly different to eat, and when they (once again, the checkpoint) have cookies, they (this time it’s not the checkpoint, but the cookies) are generally homemade, and quite tasty. Because there are so many of them (checkpoints), I don’t really need two full water bottles, so I switch to just filling up one. I don’t need to carry an extra pound up these hills.

We are now riding a curvy road (well, it’s more of a glorified goat track) that winds through the woods between the trees, and we come to a small sign that says, “Here is where P2P turns ugly”. Most of the hills we’ve climbed feature sections from 13-15% in gradient, and I am pleasantly surprised when I’m only climbing a 9-10% grade. And we’ve already seen some grades right about 20%. I wonder what “ugly” is going to mean; I’ve heard people talk about the “Burma Road” section, and I’m hoping this is it so we can get it over with.

We turn the corner, and find out. I’ve heard several hills referred to as “the wall”:

  • A one mile, 350’, 7% climb in Puyallup on the STP route.
  • A one mile, 200’ climb on the RSVP route that has a section that’s around 13%
  • A short 1/5th mile climb up to the Sammamish plateau that averages 15% but tops out a bit higher (this is more properly known as “the gate”).

I start the climb. I am in my lowest gear, and I end up standing and tacking back and forth to keep going forward. I watch the gradient numbers on my garmin spool up, and as they hit the mid-20s, I think “okay, 25%, I could believe that”. Then they just keep going up, ending up at 39%. The hill is steep – super steep - but I think the tree cover was messing with the Garmin, so I’m going to say 25%, and be done with it. There is more than one person walking their bike up it.

This hill is followed by another that is just as bad. If any hill qualifies the “wall” designation, these qualify.

And, so it continues. At one point, I think we’re heading down towards the ferry dock, which makes me happy, because the climb up from the ferry dock is supposedly only 9-10%, but then we turn off to the West, and descend down another way. The way up features another honest 20%. And another hill, and then we ride back into town. I run into my friend Joe outside of the bakery. We talk briefly, but I’m not very social on long rides. I lead Tue/Thu nights, and when I’m riding on the weekends I’d generally prefer not to have to deal with people much.

There are two things I need. I need a bathroom – which I find behind the very busy farmer’s market – and I need some caffeine. I buy a diet coke (the fructose in real coke gives me stomach cramps) from the Thriftway and stand outside, chugging it down. While I am there, I am approached by a bee asking me if I know how to identify GMO foods. It is possible that it was a *person* dressed in a bee, but given my mental state at the point, I can’t make a definitive determination. I head out again, and the liquid and caffeine have helped me quite a bit, and I feel pretty good. My legs – which were hurting quite a bit after the Burma road section – have calmed down a bit, and the hills here seem to be content to limiting themselves to the 13% range or so.

We do one section here (or perhaps it’s before town, things are a bit hazy) where, at the checkpoint at the bottom of the hill (I almost said “steep hill”, but that would be redundant here), near the beach, there is a sign that says “no guilt option”. It is pinned to the cushion of a nice chaise lounge underneath an umbrella; there are fuzzy slippers, a few books, and a cooler of cold beer. You can be done; all you have to do is surrender your passport, park your bike, and relax. This is manipulative and mean. I love it.

We come to an intersection, climb up “evil twin #1” to a checkpoint, descend back down to the same intersection, and then climb “evil twin #2”. The past 3 checkpoints, I’ve been just ahead of a few guys from my group, and I keep expecting them to pass me, but we end up keeping the same gap.

A bit of flat(ish) road along the water, and we come to decision point #2. The choice is whether to head straight towards the remaining checkpoints on Maury Island (I think there are 5 left), or to turn right, ride the mostly-flat section back to the starting point, and get to the finish line food and beverages early, weaseling out on the rest of the ride. I’m as surprised as anybody that I don’t give “The Weasel” route any real consideration, and ride straight onto Maury island. Which means I’m on the long ride, the full-mean deal, the big chihuahua, known as “The Idiot”.

Checkpoints 14 and 15 (“Air Mail” and “? um. Rythmic gymnast?”) are dispatched reasonably quickly, and then the ride once again gets meaner. We are down near the water in the part of the island known as Docton. We do a long climb up the island, and then we have a very steep descent back down to the water. I refuel and rewater at the checkpoint, and start the climb out. It is stiff – an extended section in the 15-16% range. I have been tacking (riding back and forth across the road to make the climb less steep) on the steeper sections when practical and safe, and I continue it here. That pulls the effective gradient down to about 13%, and I slowly climb out at around 200 watts. I catch and pass a few people on the climbs (huh? I’m surprised to be catching people), and we descend down to Dockton – only to turn off and start climbing, up again, and then down to the water again. For the second double in a row. This one is a bit worse on the way out.

Near the top of this one, I ask a rider with me, “How do you feel about profanity?”. She replies, “I don’t have a problem with it on a ride”. I pause, and then say, “I have *had it* with these motherfucking hills on this motherfucking ride” (reference). She laughs.

There is only one checkpoint left. We start climbing, and it’s rolling, with a 10% base grade and short little uphills in the 14-15%. I see a sign to turn left, and as I get closer, I see a joyous sight; a car, and a group of riders standing around, which means this one is not going to be another double.

A minute or so after this, Kevin pulls in, and we get our pictures taken in front of a vintage TdF climb picture holding a crystal cup. I eat a brownie. Then it’s a nice fast descent, a bit of spinning, and we’re back at the finish, where I pick up my finisher’s packet, eat a burrito that I would rather forget, and drink a mexican coke (sugar, not HFCS).

And here’s the proof:


Here are the vital statistics:

Distance: 82.4 miles
Elevation: 9,996’ (I’ll just say “10,000”)
Time: 7:13:27
Average Speed: 11.4 MPH
Energy: 3,605 kJ
Strava: Link

And here is the elevation map.

It was nuts. Truly nuts. As you can see, it’s there is perhaps 5 miles of flat(ish) the whole ride. I count 22 major climbs, and virtually all of them have sections in the 13% range. If you have done 7 hills, think of the worst hills on that ride – Seminary and Winery – and now think of doing each of them 11 times, except that some of them are steeper than either of those climbs.

I felt pretty strong most of the way through – stronger than I’ve felt on a long ride the whole summer. Part of it was the weather; the cool definitely agrees with me. I also think that I ate more than I have in the past, and that helped out as well.

Organization and logistics

Overall, the logistics around the ride were excellent. The yellow signs were clear in most cases, and it was nice not having to look for Dan Henry’s on the road. The food was good at the checkpoints, and there was nice variety. The volunteers were all helpful. 9/10, would ride again.

A few suggestions for next time:

  1. The parking situation was a bit confusing.
  2. It would be nice to have something salty at the checkpoints and/or salt to put on the potatoes.
  3. The yellow P2P signs were very visible, but the arrows on them were hard to read until you got pretty close to them. I would prefer the arrows at the top of the sign, and either on the left, center, or right part of the sign, meaning left, straight, or right.
  4. 4PM is too early for the barbecue to end; I spent very little time in the checkpoints but still finished barely before 4PM.
  5. The burritos at the finish line were pretty underwhelming.
  6. It seems that the checkpoint locations weren’t well thought out – riders were often forced to ride a lot of extra distance and climb hills just to reach them.

The Devil’s Mountain

clock September 7, 2013 09:00 by author ericgu

After a 6-day guided tour along the coast in California, I found myself at my sisters house in Walnut Creek (east of Oakland) with my bicycle and riding gear, and remembered that she lives near a pretty major climb – Mount Diablo. I borrowed my wife’s laptop (I was deliberately laptop-free on the trip), did some research on some bike forums, mapped out a route in, downloaded it to my Garmin, and got ready. The next day, I got up early to avoid the usual heat, and found that it there were scattered clouds and it was in the low 60s. Perfect.

I rode into Walnut Creek, hooked back south, and rode towards the entrance.

The riding was nice, and I soon hit the North entrance:

There are two entrances to the park; a north one, and a south one. I chose the north one because it’s regarded as the harder way up (I’m not likely to have the opportunity to do it again in the near future), and because the road that I rode to get to it is a better choice early in the morning. The climb from this side is 11.1 miles and 3448’ of climbing, a nice HC segment and the second one I’ve done in four days. The weather is still cloudy, which makes the climb cool. There’s an easy 2-3% section at the start, and then the climb settles down in the 6-7% range. I climbed pretty fast a few days ago and I quickly settle at about 220 watts and a heartrate in the low 150s. I pass a guy that is much slower than me, get passed by a guy much slower than me, and wind back and forth up the switchbacks. There is no other traffic; I don’t see a single car for this whole section. It’s peaceful but the pace is fairly hard; mindful of the length of the climb I’m trying to keep up with my Nuun and eating some cheese-its now and then (they are my new cycling wonder food). Eventually, I hit the ranger station where the north and south road meet the summit road; I hop off for a quick break and, clued in by the internets, walk around the back of the building to refill my water bottles. I’m about halfway.

I head out, read and ignore the sign that says, “HEADPHONES IN BOTH EARS ILLEGAL”, and start up. It’s sunny now, but really not very hot. This section is about the same as the earlier section, and I settle back into a groove. It’s more crowded because of the people who come up the south side (which, in addition to being easier, is considered to be easier to get to from BART), and I pass one rider, and then a group of four. A guy slides up next to me, says “cool paint job” (my bike has is a Trek ProjectOne), I speed up a tiny bit to talk to him about it, but after about two minutes tell him that I need to slow down because I can’t hold his pace. He apologizes for making me ride too hard, and rides off.

I continue to climb at a nice pace. Eventually, the road tips up a bit, and the climb is in the 8% range, maybe a bit more. I pass a couple of more cyclists and get passed by one more, and finally start getting near the telecommunications towers on the summit. I round one, and then am at the finishing summit pitch. This is an host 17%, and while it isn’t that long, it’s long enough. I stand up and gut it out for the last little section, ride to the top of the parking lot, and then get off my bike and pause to catch my breath. There are seven or eight other cyclists here, and just one car. The observation tower is closed, so I have to settle for the views from the summit parking lot.

There are some more summit pictures here.

After taking pictures, I look around and see that a couple in a tandem is at the summit. I did not pass them along the way, and they showed up close behind me, which means they were either climbing as fast as me, or perhaps a bit faster. I walk over and tell that I admire their insanity for doing the climb on a tandem. I get back on the bike, and start rolling down.

The road is either 15 or 20 MPH on the way down. I hadn’t noticed it on the way up, but it’s a pretty curvy road; some sections are easy to do at 25, but you are going to be slowing down to the speed limit pretty frequently and you will be on your brakes for quite a while. One car waves me by on the way down (it’s easier to be fast here on a bike than in a car), and I descend down to the ranger station. I turn to the south this time, and descend down that section. I’m following the route on my GPS, when the path suddenly veers off, but the road keeps going straight. I stay on the road, and can tell it’s the right road by the trickle of cyclists heading towards me. I’m soon back in the neighborhoods, and I stop to figure out where I am. The route seems to be clipped off, heading straight back rather than following the route I designed. I think it’s probably a designed-in limitation in RideWithGps. I spent some time looking at the route this morning, and am sure quite that I can’t make all the turns I need to makme, but I also know that if I just head west, I’ll eventually run into bike trail, and I know how to get back from there. I turn in the direction I want to go and head off.

Eventually, I ride into Danville, and under the 680, and I pick up the trail and ride back. There’s a final 15% climb up into the neighborhood, and then a nice 20% driveway, and I’m done.

A very nice ride. I lucked out on the weather, the climb itself was the right level of challenge; the only thing I didn’t really enjoy was having to use my brakes a lot on the descents; I’m spoiled by the long fast descents around Mount Rainier.

My second HC ascent in four days, and my second Strava Extreme rating.  217 watts for 90 minutes. A great way to spend the morning.

Strava link.