Browsing posts in: Uncategorized

Fade–an ESP32 animation System

If you want to see the demo first, here’s the video:

If you just want the details, I’ve created a tutorial and language reference.

I’ve been building animated holiday decoration for over 20 years (playlist of videos here), and written a lot of animation code. As a (now former) software developer, I came up with a couple of different methods of expressing the animation.

None of them were very good.

I used a table-based approach – where the code just encoded every state change along with how long to pause between them. It was simple, easy to author, but didn’t handle dimming very well and wasn’t well suited for multicolor decorations.

I wrote a lot of custom code. That of course had a lot of expressiveness – you can write whatever you want – but it’s pretty clunky. Write the code, compile it, download it to your system, run it, take notes about how it’s working. Repeat until you get tired.

In either case, once it gets deployed out in the yard it’s more painful to make changes. Open the enclosure, take out the controller board, go back inside to the office, download new code, take it back outside, etc.

Then I started using ESP8266 microcontrollers. They’re pretty capable and they can host a web server. I wrote a system where the animation was custom code and it could also be driven over the network by a desktop or laptop. That worked pretty well, but I still had to bring the hardware inside to reprogram it.

Then I started using the ESP32, which is cheap, has great features for animations (16 channels of PWM, all done in hardware, plus addressable LED support, plus a ton of other things), is dual core, runs fast, and has a lot of memory. It *is* possible to update code over the WiFi link, so you can do it remotely. But that still left me writing in C++ and dealing with a slow development cycle.

So, I decided to build a language that ultimately ended up being called “Fade”. I actually built it twice; the first version worked but the parsing approach was decidedly inelegant. It now features a nice recursive-descent parser.

The current system hosts a very simple web-based IDE that displays the current code on the microcontroller. Make changes, hit send, and the new code is shipped over to the ESP32 which reboots and starts executing. It’s much, much faster and I did a nice 16-channel skiing penguins display with it. I could tweak the code using my laptop in the garage, download it, and just walk outside and see how it was working.


But… there was still a problem. The web-based IDE wasn’t great, and I didn’t have a great way to get the code saved and into version control. If the microcontroller died I’d have to rewrite it.

That got me thinking, and I wrote WinFade, a Fade authoring environment that runs on Windows. It has a nicer editor with primitive intellisense and can save the code away in files for version control and later use. Write your code, download it to the ESP32.


The cooler part is that WinFace hosts the same animation code that runs on the microcontroller, so that you can test the animations that you write in the IDE before you ship it down to the microcontroller. And that’s both faster and easier.


It supports strips, rings, matrices, and custom arrangements of LEDs, so you can get the physical layout that you actually use in your project.

It even supports custom LED arrangements, so you can use it for projects like my RGB Snowflakes:


User Interaction

Fade supports some user input. The ESP32 has built-in support for touch buttons, and those can be used from the Fade Language. It also supports traditional touch buttons. The buttons can also be controlled remotely by hitting a specific URL on the microcontroller; this allows for both local and remote support.

Observational Studies and causation

There’s a problem with observational studies.

Let’s say you tell people to do something – eat less red meat, for example – you are hoping to change their behavior. You end up with some people who totally avoid red meat, some people who reduce the amount of red meat they eat, and some people who just ignore you.

Then you come back 10 or 20 years later and do an observational study and look at how much red meat people eat and how healthy they are, and – lo and behold – you find out that those people who eat less red meat are healthier.

So, you publish your study and a bunch of other people publish their studies.

Unfortunately, there’s a problem; the act of telling people what to do is messing with your results. The people who listened to your advice to give up red meat are fundamentally more interested in their health than those that didn’t listen in a myriad of ways. Those differences are known as “confounders”, and studies use statistical techniques to reduce the impact of confounders on the results, but they can never get rid of all the confounders. Which leaves us with a problem: we don’t know big the residual confounders are in comparison with any real effect we might be seeing.

Residual confounding is why those studies can never show causality; if you look at the studies themselves, they will say there is an association with red meat consumption and increased mortality.

But in the press releases from the research groups or universities, causality is often assumed.

The endurance athlete’s guide to fueling and weight loss part 3: Carbohydrate and Fat use in actual athletes…

Please read the introduction and earlier posts if you haven’t…

After two posts of biochemistry, we will *finally* get into some real-world stuff in this post. Thank you for your patience; this is where it gets interesting…

My goal in this post is to talk about what carbohydrate and fat usage looks like in real athletes. How do we do that? Well, luckily the chemistry that is in play when burning glucose (glycolosis) and burning fat (beta oxidation) is different, and it turns out that the amount of carbon dioxide produced for a given amount of oxygen differs between the two. That is expressed as a number known as the “respiratory quotient”.

This is pretty cool. It means we can take an athlete and hook her up to a machine that analyzes the gases that she exhales, and it can tell us how much of her energy is coming from burning fat and how much is coming from burning glucose.

And, if she is on an exercise bike, we can also figure out how much power she is producing, so we can correlate that to the fat and glucose percentages. The setup looks like this, and is commonly done as part of a VO2Max test.

Image result for vo2 max analyzer

Fat and Carbohydrate burn versus intensity

What we would like is a chart that shows the percentage of energy that comes from fat and the percentage that comes from carbohydrate at various intensities. If you’ve ever taken an exercise physiology class or looked into fat burning, you probably came across a chart like this:

Image result for fat versus carbs intensity

This chart says that we burn mostly fat at low intensities, and as the intensity goes up, the percentage of energy from fat goes down and carbohydrate (CHO) goes up. I’ve seen this chart in countless places. And I’ve seen passionate arguments about where you should set your intensity to get the best fat burn; does lower fat burn percentage at a higher intensity burn more fat? etc. etc.

The problem is that this graph is… well, I was going to say it was an idealized model, but I think the term “absolute fabrication” is more correct.  I spent some time tracking down where it came from once, and I think it might have come from a misunderstanding around this article, but it does not reflect reality for pretty much anybody. So any conclusions we might draw from a graph like this will not be worth much.

You might remember in the introduction I talked about being confused by the fact that some endurance athletes carry a lot of extra fat? It was confusion partly driven by this graph; if the graph were true, long bicycle rides at, say, 50% intensity would be great at fat burning for everybody, and we’d expect cycling would make it *easy* for people to lose weight. Right?

So, what do we really see, with actual athletes?

Let’s look at some real data (note 1) from an athlete doing a VO2Max test after an 8 hour fast. Measurements after an 8 hour fast will show an athlete at his or her fat-burning best.


The respiratory quotient is calculated at different points during the test, and then the percentage of power from fat and glucose (labelled “CHO” for carbohydrate) is calculated for each point. The amount of power produced is converted to a watts / kg measure using the rider’s weight.

What can we tell from this graph? Well, even in the best conditions for burning fat – after a fast – this athlete doesn’t get more than 25% of his power from the beta oxidation of fat. Even at low intensities, he is getting 75% of his energy from the glycolysis of glucose. I call this pattern “Carb optimized”; great at burning carbs, poor at burning fat.

What causes this pattern? Well, I’ll get more into that later, but as a hint, the source noted that this athlete had a “sweet tooth” and regularly consumed high amounts of refined sugary foods.


What impact does the heavy reliance on carbohydrates for energy have on this athlete?

I don’t know the rider weights in this data, but let’s just assume the rider is on a long ride at a moderate intensity – say 150 watts. Remembering that 100 watts is roughly 360 calories per hour (note 2), that means at 150 watts, the rider is burning 360 * 1.5 = 520 calories per hour. Of these calories, 390 (75%) come from carbs and only 130 (25%) from fat. And let’s say this rider starts with full muscle glycogen stores of 400 grams = 1600 calories of energy. How long will this rider be able to ride before running out of stored glycogen?

Time until running out of glycogen = 1600 / 390 = 4 (ish) hours

Even at a very moderate intensity, this rider is going to run out of stored glycogen in only about 4 hours (note 3). And then bonk. Having bonked as a high-carb athlete, I can tell you that it is no fun; you lose the majority of your power. Which is no surprise at all looking at the graph; this athlete really needs carbs to put out power.

The glycogen depletion will happen faster at higher intensities; not only is the rider burning more calories per hour, he is also burning a higher percentage of glycogen to get those calories. At 250 watts, it’s 675 calories from carbs per hour, which gives a time to depletion of a little over two hours.

It’s pretty clear that this athlete needs carbohydrate supplementation to continue to exercise so that he won’t totally deplete his glycogen. And if you go here, you will find numerous studies that tell you how great carbohydrate supplementation is for athletes and how much it improves their performance and endurance.

Hmm. Those studies are all linked from – and many are funded by – a company who’s business model is selling flavored sugar water in many and varied forms. The same business model used by most companies that make sports nutrition products. So you’ll forgive me if perhaps I venture to mention that maybe – just maybe – things are a bit more complicated than that.

Keep that thought in the back of your head.

If you do long events, you may have found out that carbohydrate supplementation can cause issues:

  1. If you eat before a ride or try to carb load, you will put yourself into a high-glucose state which will turn off fat metabolism and increase your carb burn percentage.
  2. You are limited in how much food you can digest during exercise because of limitations of blood flow – the blood that is going to your muscles to power them is blood that isn’t available to send to your stomach. This gets worse as the intensity goes up, and can easily make you feel sick.
  3. If your sport involves impact – like running – the mechanics of impact can make it harder to digest food and make it more likely you will have what are politely known as “gastrointestinal issues”.
  4. Trying to balance the need for energy with the digestive issues can be difficult. Too much food and you feel sick. Too little food and you run out of energy.

I’ll use myself as an example. I used to be a low-fat diet carbs before/during/after cyclist, and I followed that advice religiously; even my short 25 mile rides had carbs during and after. Let’s have some fun with some of my data from that period…

(Author’s note: it turns out I used RAMROD data that did not include power data, so the calorie values are likely inflated by about 25%. I will correct it with better data when I get a chance; I do not think it changes the overall message of this section)

Back in 2013 I did a ride named RAMROD, which has about 9300’ of climbing over 150 miles. I have power meter data that ride, and it shows that I burned 5220 calories on the ride and it took me 9.9 hours on the bike to complete the ride, and 12.25 hours elapsed.

What can we do with this data? I charted my actual energy use by minute based on the recorded data, and it’s straight enough that a linear plot works fine, so I’m just going to say that I burned 5220 / 9.9 = 527 calories per hour (I’m using kj but when you factor in conversion and efficiency factors they are pretty much equal to calories).


That’s just what I burned moving the bike.  Looking a basal metabolic calculator, it says I burn about 1800 calories per day just sitting on my butt, or a further 75 calories per hour, for a total of 600 calories per hour, give or take.

If we look at both liver and muscle glycogen, I had something like 2000 calories in glycogen reserves. I’m a relatively tall guy with more than average muscle mass for a cyclist, so maybe it’s a bit more, but something in that range. If we assume that I’m getting 75% of my calories from carbs – that I look like athlete #1 – that would mean I’m burning 450 calories of glycogen per hour.

Which would mean I could expect to be able to ride 2000/450 = 4.4 hours before I totally ran out of glycogen.

This is a bit too optimistic… Muscle glycogen is allocated to individual muscles rather than sharable, so any glycogen in my arms, chest, or any other under-utilized muscles doesn’t keep my quads and calves from running out of glycogen. I don’t carry a lot of non-cycling muscle, so I’m going to make a guess that 25% of my muscle glycogen is in muscles that I’m not really using for the ride – or if I am using them, it’s not actually going to physically moving the bike forward. That would drop me down to 1600 calories in my glycogen stores, and 1600 / 450 = 3.6 hours.

I normally targeted 200-300 calories per hour while riding.

With all that in mind, what do my glycogen reserves look like during the ride?


The blue line shows what happens if I start with full glycogen reserves and eat 200 cal/hour of carbs, the orange if I eat 300 calories per hour. At 200 cal/hour, I will run out of carbs just before 7 hours, while at 300 cal/hour, it will be just before 11 hours.

This chart is by no means perfect, but it basically says that if I can eat 300 calories per hour I’m probably going to be okay until right near the end, but if I can only get in 200 calories per hour, I’m doomed to be really unhappy at around 7 hours in.

Hmm. It turns out that in RAMROD I would feel fine on the first 3000’ climb, but when I got to the second climb – at 92 miles and roughly 7 hours in – I was pretty sure to be a) feeling weak and b) feeling a bit sick to my stomach. Not really what you want when you have 3250’ of climbing in front of you, often in the summer sun and heat. And after being off the bike for an hour at the deli stop at 120 miles after that climb and getting a lot more food in me, I generally felt quite a bit better.

My assumption was always that I wasn’t well enough trained for a ride this long or hot – both of which are probably true – but from a fueling perspective, if I wasn’t eating enough I was going to be very unhappy. Compounding this is that it’s hard to fuel on a ride with big climbs; I can only eat a little on the climbs or you get sick, and trying to eat is contraindicated on mountain descents at 35 MPH.

What does all this mean?

If you get most of your energy from carbohydrates, you are going to have a deficit between what you burn and what you can replace, and you will eventually run out of stored glycogen. Remember when I talked about the asymmetry between the two systems? The limited supply of stored glycogen is a big issue on long events if you burn a high proportion of carbohydrates.

Another athlete

Back to the data. Here’s a second athlete:


Note that this athlete manages to get 40-50% of his power from fats up to about 3 watts/kg. What factor or factors do you think accounts for the difference in fat burning between these two athletes? Write down what you think is the cause, and I’ll continue in the next post.

Post 4: Better fat burning in actual athletes


  1. All of the graphed data is from this excellent article from CyclingTips, though I have regraphed it.
  2. 100 watts is 100 joules per second, and there are 3600 seconds in an hour, so that would be 100 * 3600 = 360,000 joules per hour, or 360 kj per hour. Now we need to convert that to calories. One kJ is about 0.24 calories of energy, so that would mean 360 kj/hour is 90 calories/hour. However humans are 20-25% efficient in turning food energy into mechanical movement, so it takes about 4 * 90 calories/hour of food to get 90 calories/hour of work out. This is really just a very convenient coincidence, and because of it pretty much everybody just acts as if the kj/hour is the same as the calories/hour value. It’s close enough.
  3. It is actually worse than this. One of the interesting features of muscles is that while they can absorb glucose and store it as glycogen, they lack the biochemistry that would allow them to take that same glucose and release it back into the bloodstream. What that means is that the muscle glycogen in your biceps cannot be shifted to your legs.

Review: MITx: 16.885x–Engineering the Space Shuttle

This fall I decided to spend some of my free time doing something different, so I signed up for an Edx/MITx online course on the Space Shuttle.

It was fascinating. If you have any interest in the details of how the Space Shuttle from an engineering standpoint, you will love this course. The course is run/hosted by former astronaut and MIT professor of aeronautics and astronautics Jeff Hoffman, and wherever possible the actual lectures are done by ex-shuttle engineers or managers. Main engines? Lecture by J.R. Thompson, manager of the Main Engine Projects office at Marshall. Flight control system? Phil Hattis, one of the leads on the system. Mission control? Wayne Hale, flight director for 41 missions. Saturn and shuttle? Chris Kraft.

A brief overview:

Section 1: How the Space Shuttle was Originally Designed and Approved

  • Lecture 1: Origins of the Space Shuttle – Dale Myers
  • Lecture 2: Development of the Space Shuttle – Aaron Cohen
  • Lecture 3: Early History of the Shuttle and NASA’s Relationship with the Military – Bob Seamans
  • Lecture 4: Political History of the Space Shuttle – John Logsdon
Section 2: Space Shuttle Sub-Systems
  • Lecture 5: Introduction to Space Shuttle Orbiter Subsystems – Aaron Cohen
  • Lecture 6: Orbiter Structures & Thermal Protection System – Tom Moser
  • Lecture 7: Space Shuttle Main Engines – J.R. Thompson
  • Lecture 8: Space Shuttle Aerodynamic Design – Bass Redd
  • Lecture 9: Aerothermodynamics – Bob Ried
  • Lecture 10: Space Shuttle OMS/RCS APU/Hydraulics – Henry Pohl
  • Lecture 11: Thermal Control and Life Support System – Walt Guy
  • Lecture 12: Mechanical Systems and RMS – Alan Louviere
  • Lecture 13: Shuttle Flight Control System – Phil Hattis
  • Lecture 14: Systems Engineering Review, Matrix Management, and Cost Estimation – Aaron Cohen

Section 3: Operating the Space Shuttle

  • Lecture 15: Space Shuttle Training and Mission Description – Jeff Hoffman
  • Lecture 16: Payload Operations and Systems Engineering – Tony
  • Lecture 17: Space Shuttle Launch Operations – Bob Sieck
  • Lecture 18: Space Shuttle Abort Modes, Payload Bay Doors, EVA – Jeff Hoffman
  • Lecture 19: Mission Control – Wayne Hale
  • Lecture 20: Test Flying the Space Shuttle – Gordon Fullerton
  • Lecture 21: Columbia Accident – Sheila Widnall
  • Lecture 22: Hubble Space Telescope and the Space Shuttle – Jeff Hoffman
  • Lecture 23: Apollo and the Space Shuttle – Chris Kraft
  • Lecture 24: Retrospective on the Space Shuttle – Jeff Hoffman/John Logsdon/Wayne Hale

The word for the day is “Thixotropic”

I had a small gluing project to do today; I needed to attach a small 3d printed pad eye to the back of my animated LED snowflakes (project info here). The pad eye looks like this:


The pad eye is printed out of PLA and is about 1.25” inches across. I needed to attach it to the back of a printed circuit board. Which would make my adhesive choice seem simple, but there are two complications:

  1. There are wires soldered onto the PC board and that part of the board is not flat.
  2. The boards are waterproofed in epoxy, and the coating is has some variation – perhaps 1/16”

That means that I need an adhesive that will bond well to the PLA and epoxy and fill the gap in between the two surfaces.

My first thought was to heat up the hot glue gun and use it. It works fine as a gap filler, but it’s not great in a thin layer between two big surfaces; it’s too easy to have the glue cool too fast and not really bond to the surfaces.

My next thought was to use epoxy. I have several epoxies in my workroom; they are the small hobby shop versions that come in small tubes or bottles. I really don’t like them very much; it’s hard to get the mixture ratio right and in this application they tend to be too runny. And they smell.

Out in the garage I have my serious epoxy:

That’s leftover from a custom subwoofer project I did a while back. It’s really easy to use; one pump of resin plus one pump of hardener and just mix it together. I have the 206 hardener, which is classified as a “slow” hardener; 20-25 minutes of pot life (useful life after you mix it before it starts to thicken up too much), 10-15 hour cure, 1-4 days to maximum strength. The nice part about serious epoxy is that it’s tunable; you can use the 205 fast hardener which cures in 6-8 hours or the 209 extra slow hardener with much longer pot life and a slower cure.

Anyway, I really like this epoxy, but it is really runny, so it won’t work for this application.

Or will it?

Welcome to the wonderful world of epoxy fillers. There are a lot of different fillers out there – here’s a nice article by System 3 (another epoxy company) that describes them and why you would use them – that can modify the properties of epoxy considerable. For this use, I am interested in fillers that modify the viscosity of the epoxy, and specifically interested in fillers that make it thixotropic.

A thixotropic fluid is one that flows when you apply stress to it and then stops flowing when that stress is used. The most common example used is catsup, but I think that peanut butter is a better example; you can make it flow around but when you are done, it sticks where you want it. And it’s sticky, like epoxy. That is a wonderful property for an adhesive; just stick it where you want and it will stay there until it cures; no drips or sags.

There are a few common thixotropic fillers; ground silica (known as cab-o-sil or aerosil), plastic minifibers, and – my personal favorite – wood flour.


This particular wood flour came from the little bag on my random-orbit sander, which is why I like wood flour; I generally have it sitting around. Note that it needs to be very fine; sawdust from cutting will probably be too coarse. The wood flour will make the epoxy wood colored; if you would prefer it to be closer to clear, the ground silica or plastic minifibers will work better.

Mixing it is pretty simple; mix up the epoxy, add a little wood flour, mix it up, and examine its physical properties. If it drips off of your mixing device, you need more wood flour. If it sticks like the aforementioned peanut butter, you are done.


I like to use small plastic cups for my epoxy mixing and plastic silverware; they are easy to find and disposable, and since I use the dispenser pumps to get the right amount, I don’t need to do any measuring in the cups.

All that is left to butter the epoxy onto the PLA pieces, gently press them in the proper position, and wait for the epoxy to cure.


Sufferin’ Summits 2018 – Smoky summits with rain on the side…



As some of you know, Sufferin’ Summits is a stupid idea I had 4 years ago that I’m still paying for 4 years later… It all started with a simple idea – could I create a ride like Ronde PDX – where “Ronde” means “A dance in which dancers move in a circle”, and PDX refers so a “Private Data Exchange”, a way of exchanging data without being burdened with all of the downsides of the public internet.

Where was I? Oh yeah, the ride. So, anyway, I came up with the outline for a ride, and it was pretty stupid. And then I went out and rode a bunch of hills and figured out a way to make it stupider. It is simply the hilliest ride that I could cram into 55 miles, something around 9000’ of up. And it turns out that it’s worse than Ronde PDX, though they do have a second day (okay, so, technically, there *is* a route for the second day of Sufferin’ Summits, but I am just not quite stupid enough to publish it, let alone ride it the day after).

For the first couple of years I did some light marketing of Sufferin’ Summits to the local community, but now I just kindof let it sit out there, the lesser-known, poorly behaved, and frankly less attractive cousin of Passport2Pain. I tell people that it’s because I want it to have that “underground” mystique, but the reality is that I’ve worked with people who organize big rides and I’m far too lazy to put in that much effort. So, it typically pulls in 20-30 people, and that’s just fine; I get to ride it with a few friends and look publicly stupid to the rest of the cycling population. Win win in my book. The ride is technically unsupported though my lovely wife has hosted a snax table at the halfway point the past two years.

I generally spend quite a bit of time in these hills on the Saturdays during the summer, and I felt pretty good about my fitness this year. But, there were two possible flies in the ointment, chinks in my armor, or bats in my belfry:

The first was that we had been treated to an extended run of “Wildfire Smoke”, and let me be clear that it was it was not the Tony-award-winning production that we had been promised. It was on hiatus Thursday night, but came back for an encore presentation the day of the ride. It was officially in the “unhealthy for sensitive groups” category, which – among other things – says that if you experience shortness of breath or unusual fatigue, you should contact your health provider.

I’m not quite sure how to apply that advice in practice, since “shortness of breath and unusual fatigue” bears an uncanny resemblance to the my written mission statement for the ride…

The secondary issue is that because of the crappy air quality, my training for the past few weeks has been a lot lighter than usual. I’m a fan of a nice taper in general, but two rides in two weeks is a bit extreme.

Anyway, that’s enough foreshadowing for now…

Friday night, we watched the Hawks extend their perfect preseason record, and then I headed to bed. That 5:30 AM alarm was going to come soon enough. And yet, it didn’t. Because I could not get to sleep, and 2 AM found me on the living room couch, reading (“Crash Test Girl” by Mythbusters alumnus Kari Byron is pretty good, and “Year of the Cow” (Stone) is a fun mix of history, science, and cookbook). So, anyway, I got off the couch at 5AM and then proceeded to not make my usual breakfast of bacon, eggs, and berries, because I typically do these rides (mostly) fasted. My food bag has one Honey Stinger “waffle” (mostly emergency carbs), a small bag of cheez-its, and a small bag of extra mixed nuts (that’s what you get if you take mixed nuts and add more nuts, right?). One water bottle has water, the second gets a serving of Biosteel hydration powder mixed into it, which I’ve been experimenting with for electrolytes recently. You know that it’s good because a) it has Calcareous Marine Algae and 2) the “mixed berry” flavor I have tastes remarkably like the cough syrup my parents gave me when I was a kid. On the way out I mix up two scoops of SuperStarch with half a scoop of endurox in a failed bid to make it more palatable; two scoops of highly educated cornstarch in a glass of water tastes exactly like what you think it does.

Oh, and I grab 12.5 macadamia nuts and eat them on the way out of the door because macadamia nuts.

The ride starts at a park in Issaquah, and I expect that the smoke is going to affect the turnout. We end up with 13 of us at the start, which is a few more than I expected. I ask how many people are doing the ride for the first time and then give a quick pre-ride briefing, which mostly consists of an assertion that while experience would lead one to expect that the first half of the ride is worse than the second half, experience would, in this case, be a poor guide.

Did I mention it was cold? Two years ago we started at 9 AM and it was 95 degrees when we finished, so the official (which only means “ride with Eric until you get tired of his slow pace”…) start is now 7AM, and it’s 54 degrees out right now. That is a great temperature for climbing but a crappy one for descending; you will still be sweaty at the top. I’m wearing a jersey (*not* my Sufferin’ Summits jersey) and shorts, plus arm warmers and a vest. We spin out of the starting point across Issaquah, to the first climb, Grand Ridge.

Rising Action

Grand Ridge is really a warmup, it’s mostly not that hard. On the first climb, the fast group rides ahead, and I expect not to see them for the rest of the day. We head through the “Little Red Riding Hood” forest path, where the part of the wolf is ably portrayed by two short but nasty 20% climbs near the top of the section. Eventually we top out, and are rewarded by a non-existent view. We’re up around 1000’ now, and on a decent day you can see Bellevue, Seattle, and the Olympics, but we can’t even really see our next climb. My descent karma fails and I get stuck behind a car driving 5 miles under the speed limit, but eventually we get on the main drag and descend down into Issaquah proper.

Squak Mountain is next. The bottom half has a series of rollers where the steep parts are 16% or so, then we turn onto the top section. I’m climbing okay, and looking at my stats, it took me 11:05 to climb the 940’ of the main climb. That’s only about a minute over my PR, so, pretty good. The data shows I climbed at 760 meters (2500’) per hour, also decent, though my legs are only feeling average. We top out there, avoid incidents on the sharp turns of the descent, and ride over to Telus.

We go up the Telus North climb, which hits about 18% immediately, eases a bit in the middle, flattens out in the neighborhoods, has a mercifully short 24% (!) section, and then finally tops out. It’s only about 450’ total, thankfully, but it gets my attention. We head to the other end of the development, pick up a few more feet of vertical, and then descend back down. This time it’s a Hyundai driving 18 MPH in a 25 zone.

Which brings us to hill #4, Zoo hill. In previous years the route has used a convoluted route to pick up a particularly nasty climb, but I’ve switched back to the classic climb. The very bottom part is newly repaved but the crappy middle part is still it’s crappy self, the rollers are still soul-sucking, and the climb to the water tank and radio towers is its usual cantankerous self. My legs really don’t feel very good on this part, but Strava says that I pulled a PR on it by 44 seconds on the lower 2/3 of the climb. I am skeptical, given that I’m only pushing 200 watts and my heart rate is about 20 beats below my max. I’m spending a little time tacking back and forth across the hill because my legs feel weak. There’s no reason to take pictures at the top because you cannot see a damn thing, and I get cold as soon as we stop. I do note that the smoke hasn’t really been that much of an issue; it seems that once we get above the first 200-300 feet, the air is a bit cleaner. We descend down, climb up Pinnacles, descend a bit more, climb up Belvedere, and then head down and up a short and easy hill to get to Lewis Creek Park. My lovely wife is waiting there with snax, I mix another bottle of blue steel and eat a few nuts.

Climax or Turning Point

Then it’s off to hill 5. Which is really a side hill that we will climb 3 times. We start on “The Widowmaker”, which is really nasty 494’ climb; it starts at 18%, flattens a bit, and then has a full 300’ of 20% or more. At the worst, I’m riding 3MPH and 44 RPM and pushing 275 watts. It’s the “Coffin Corner” of climbs; I can’t really slow down without falling over and if I push harder I’ll burn my legs worse and may run out of aerobic capacity (ref. “Falling over”). After 10 minutes and 28 seconds of enjoyment, I top out, meet the rest of the group waiting for me, and we descend. Only to repeat the pattern; we ride up the West Summit climb, descend, ride up a short unnamed hill, then finally up the Summit climb to the top. I’m in little danger of setting PRs on these, but I am climbing at over 800 meters per hour (10.9 fathoms/moment), which is okay. My legs are really tired; not hurting, but really tired. As we reach the top of the climb, we get a change in the weather; the smoke blows away and we can see the top of the smoke across the whole region. Glorious.

Not really, we still can’t see a damn thing. What really happens is it starts to rain. And I whine about my legs, though technically speaking I’ve been doing that for the last hour, so that’s not a new thing. I make some noise about maybe being done so that the other riders with me have an “out” to quit without losing face. I pull out my stuffable vest, put it on (you probably figured that part out on your own), and we start the descent. It’s a nice 500’ descent on a mostly straight road with mostly good pavement, but a fast cold descent with wet pavement is not my preference.

At the bottom the four of us discuss what we are going to do:

Protagonist (me): Guys, my legs are cooked and I’m too cold. I’m going to bail and ride back to the start before it gets any wetter.

Antagonist: My legs are cramping and I don’t have a jacket. I’ll ride back with you.

Non Sequitur: Guys, there’s a car behind us. We should move out of the way.

Antithesis: I’m going to head down and do at least one more hill.

Consonance: I’ll join you as long as it doesn’t get too wet.


So, we split into two groups, and Mike and I spend 10 minutes getting cold and getting back to the starting point.


The following questions probe the heart of what we are learning:

  • Are you an insider or and outsider to the culture of this ride report?
  • What did the author want me to get out of this ride report?
  • How would the ride report be perceived in its own time period?
  • What text – exact words, phrases, or passages – causes in you a strong emotional response?


  • 38.87 miles
  • 3:45:12
  • 2:24:50 climbing
  • 6,165’ of up
  • 10.4 mi/h average
  • 2,109 kJ
  • Strava activity


Eric uses: Specialized Roubaix expert, S-Works shoes, Pioneer power meter, Garmin 705 GPS, Pearl Izumi shorts, Giro helmet/gloves, and a random assortment of jerseys he’s picked up over the years.

Still Mad about You…

I recently came across a podcast where Paul Riser talked about “Mad About You”, and the obvious question popped into my head.

Would Mad About You hold up?

My beautiful bride and I enjoyed watching it considerably when we it was first on and we were in the first decade (roughly) of our marriage. But I’ve learned to approach things that I’ve liked in the past with care. Sometimes they hold up pretty well, but other times – for various reasons – they don’t hold up at all. Sometimes the memory is much better than the reality.

So, I dusted off the my search engine and found a few episodes to watch. Which gave me enough evidence to approach the wife, and we ended up watching all 7 seasons (on Starz through Amazon, which is the only place we could find it except for some really crappy quality episodes on Youtube).

And the result?

It holds up surprisingly well. Well enough that we were both sad when we finished the last season. Mad About You uniquely captures what it’s like to be in a couple; the way that the two of you are the sum of your strengths, the amount of work it takes to keep that kind of relationship going, and how things can get difficult despite both people trying their best.

And how your partner can simultaneous be somebody you can’t imagine living without and the most annoying person that you know.

There are some issues with the show; the other characters necessarily need to bring conflict in and sometimes are annoying and not all of the story lines are great – especially the cameos that feature notable actors. But they are mostly very good, and to this married-for-a-long-time guy, much of it rings true. And the humor is good.

*Highly* recommended.

Firepit rolling base

A quick little project that I knocked out in a couple of hours today…

My wife an I own a Solo Stove Bonfire. And yes, it does work every bit as well as they say.

The problem is the somewhat fickle Seattle weather; we might have a fire and then the firepit would sit outside and get rained on. It’s stainless so it’s supposed to not corrode, but there are a still a few issues. The obvious thing is to put it under cover when you are done, but it’s really really hot and I’m quite lazy.

A few days ago, I came up with a plan. I will start with the Solo Stove:


My original plan was to buy some angle iron to make a frame, but walking around I found an alternative material:

Four pinball legs that I got with the World Cup Soccer ‘94 that I bought last fall, since replaced with pretty new ones. These legs were just waiting to head to the dump.


and four leftover casters from my Glowforge table project. I didn’t take a picture of them.

Leg modifications

The legs need to be converted from their current form into something more like angle iron. The first step is to cut off the feet. Out comes the 4” angle grinder, on goes the accessory handle and a 4” metal cutting disk, and the feet are cut off.


The process is repeated at the other end to cut off the mounting holes. The length is based upon the diameter of the solo stove, which is 19.25”. After a few minutes of cutting and a lot of sparks, we end up with the following:


Next, I need mounting holes in the corner that the casters can go through. The fluted design of the legs made this a significant pain in the ass, even with a drill press. Here’s the first hole drilled with a 1/8” bit IIRC; I would enlarge it with a 2/8” bit on the way to a 3/8” bit. The drill press is a huge help in this sort of work.


Next it is time to do the layout so I can mark the holes where the metal pieces will overlap and connect:


This is really not precision work, though I will note that I realigned this corner because the two pieces should be symmetrical:


Then, it was back to drill 12 more holes (three pass x four pieces), and then it was time for assembly, in which our caters finally make an appearance:


Tighten up all of the nuts, and we have a frame:


I had toyed with the idea of painting a stainless steel color, but I’m cheap and lazy, so it’s like this for now.

Beauty shot of the Solo Stove sitting in its new frame:


Total cost was $2.09 for a new metal cutting blade and about $2.00 for 8 nuts, 4 flat washers, and 4 lockwashers.