Nelson Minar documents the political outrages of the COVID-19 era:
it's all too much. The situation is
appalling.
I hear and read business people talking about the opportunities at this time
and I think of all the people getting screwed and opportunists like Mitch
McConnell who are screwing us all over and I get sick to the stomach.
Saturday of week eleven, alone, I ran farther and got more D+ than this. And
then went almost as far with more than twice as much climbing on the next day.
I ran 3 times in week twelve, went for a half-hour bike ride, practiced yoga
once, and had two solid strength and conditioning workouts in my backyard. We
hung our TRX straps up under the deck and I'm doing rows and split squats with
my rear leg suspended. I did resistance band walks and step ups with dumbells
on a 24" retaining wall. I did enough traveling pushups on a ball to get pretty
sore.
I worked a little harder and longer at my job this past week, ran a few more
errands, helped my oldest daughter paint her room. I made some nice meals for
my family and did hours of yardwork. Monday, my running training ramps up
again: two hill interval workouts and 60+ miles of running are coming up.
The Never Summer 100k race hasn't been cancelled or postponed yet, but Quad
Rock has been postponed. Originally on May 9, it's been moved to August 15.
That's 3 weeks after Never Summer (7/25-26). I suppose Never Summer could be
moved to September, still a nice time of year to be in alpine country, but
shorter days and colder weather might complicate further postponement. We'll
see. I'm beginning to think about what kind of self-supported or
family-supported adventure I might do as a replacement.
Week eleven required resilience and toughness. Cold and wet weather got
in the way and I had some aches and pains, but in the end I met my goals for
the week.
11 hours 39 minutes
56.6 miles
7946 feet D+
Maxwell, Pineridge, and Reservoir Ridge were muddy and closed early in the
week, so I did my shorter easy runs on the street. I began to get concerned
that I wasn't going to hit my climbing goal.
I'd planned to do an early morning hill interval workout on the Towers trail at Horsetooth Open Space on
Wednesday, but when I woke up my left knee was feeling very sore. Not certain
that I'd be able to finish the workout, or even start it, I drove to the
Soderberg trailhead and jogged extra slowly for 20 minutes on the flat trails
below the hill. The sky was blue, the muddy trails were still frozen, good
running conditions, and my knee eventually loosened up.
I went to the Towers trail instead of Stadium Hill because I had topped out during
my last hill workout. Stadium Hill and the South Centennial Dr climb are just
450 feet high. The Towers trail climb is 1350 feet high. The bottom half has a mean
grade of 12% and it levels off a bit in the top half with a mean grade of 11%.
It's a dirt road providing access to the radio towers on the top of the first
high ridge west of Fort Collins and has good footing and only a few wickedly
steep pitches.
My workout: run/hike uphill at the fastest pace I could maintain for 5 minutes,
then hike for 1 minute to recover, repeated 5 times. That's not a lot of
recovery time, only enough for my heart rate to get from 165 b.p.m. down to
145, but the break helps me maintain a solid effort for 5 minutes with no
slacking off at the end. In 29 minutes I made it almost to the top and hiked
the rest of the way up as part of my cool-down. I'm definitely getting stronger
and faster and felt good about this workout all the rest of the day, until
I started to fall asleep at my desk around 5 p.m.
Thursday it snowed, a full foot of heavy spring snow, and I skied around
the neighborhood instead of running. Temperatures stayed cool and the snow was
still covering everything on Saturday, so I went for 20-mile run on the
shoulder of the Horsetooth Reservoir road, out and back. There are some hills
on that route, but only adding up to 2000 feet of climbing. Car traffic on the
road was very heavy, clearly a lot of folks are taking scenic drives for their
mental health. Everyone gave me plenty of room, and I'm grateful for that, but
it was still a little bit nerve-wracking.
Sunday the weather was clear and warm and I went for a long and impractical
slog in the snow in Lory State Park. I had to break trail for miles at a time
and my feet have never been wetter, but I did complete the three climbs I set
out to do. The going was so slow that I resorted to playing music on my phone,
which I never do. The unbroken snow on top of the ridge was lovely. I appreciated the work
done to clear dead and fallen trees up there more than ever.
I used to do these status updates when Ruth was traveling and I felt like
I needed to announce reduced availability for open source work. My family is
home, and safe, I'm very happy to say, and I can work from home, but I'm not
able to carve out any significant time to work on my open source projects
except where they block my projects at work. If you email me or my project
lists for help, it might be days before I can respond. Same for GitHub issues.
Since Fort Collins schools will remain closed through the end of the school
year, this situation will probably continue into the summer.
Stay home and stay safe if you can. To those of you who can't because of
essential duties: thank you!
I ran 5 days, once less than last week, but my long runs were longer. Like last
week, all of my runs had some hills. The Never Summer 100k course averages more
than 200 feet D+ (this is the French abbreviation for dénivelé cumulé positif,
the cumulative elevation gain) per mile. My runs this week were relatively
flat, averaging 150 feet D+ per mile.
On the 8th I went back to Stadium Hill for a pyramid workout: 10-8-6-3-2-1
minutes going up with half time recovery intervals going down. I think I'm
beginning to appreciate hill workouts on pavement. The grade is more regular
and there's nothing to trip over or dodge. I can focus on my breath and effort
level as I go up and I can work on spinning my legs while going down. I'm
certainly putting in enough trail miles on other days. If Stadium Hill has
a fault, it's lack of height. I did run out of steep hill in the last two
intervals of my workout. From the top there are some iconic views of the
reservoir, Horsetooth Mountain, and Longs Peak. It's worth the trip.
Saturday I went for a proper hilly run on the 5th and 6th climbs of the Quad
Rock course. I avoided descending all the way to the Horsetooth Rock trailhead
in the middle of the route and added some D+ by taking a sidetrip to the
Horsetooth Rock summit and going all the way up to the radio towers twice.
Just under 16 miles and just over 3500 feet D+.
The weather was perfect. Dry and warm but not too warm. 45 °F when I left the
Arthur's Rock trailhead at 7:30 a.m. and 60 °F when I returned at 11:15. I saw
some friends near Horsetooth Rock, a flock of red crossbills on Spring Creek
trail, and some ball cactus I'd never noticed before near the radio towers.
Twenty-four hours later I went back out in completely different conditions, a
snowstorm and 15 °F instead of 15 °C. The Pineridge and Maxwell Natural Areas
were empty. It was just me and the deer.
Outside of running, I practiced yoga once during week ten and went for an hour
long bike ride with Beatrice. She turned 11 in December and this spring
graduated to an adult size bike, 21 speeds and 26" wheels. Next week, I intend
to practice yoga at least twice and resume weight training, somehow, while also
running one more day, and supervising my kids' remote learning, and making the
geo-doughnuts at work.
In week nine I moved my speed workouts from the gravel track behind the CSU
Performing Arts Center to Stadium Hill on Larimer County Road 42C. This is the
road that climbs the ridge south of Dixon Canyon Dam and connects to Centennial
Drive, the route along the east edge of Horsetooth Reservoir. Stadium Hill
starts with a grade of 4% and increases to more than 10% near the top. Tuesday
I did a 2-4-6-4-2 pyramid. 2 minutes hard running up, 2 minutes easy jog down.
Then 4. Then 6. Then back down the pyramid through 4 and 2-minute intervals.
By the first 4 minute interval, I had rounded the corner into the steep part of
the hill. At the end of the 6 minute interval, I had reached the intersection
with Centennial Drive. At the end of the second
4 minute interval I was well into the Centennial Drive climb. I racked up over
1000 feet of climbing in 18 minutes of uphill running. This is much faster than
I have run in a trail race. At the last Black Squirrel, for example, I went up the
first, 1129 foot, climb (Quad Rock Climb #4 on Strava, 6% average grade) in 42:24.
Friday I did a little more hard running on the A Trail at Maxwell. I've had
a goal since last year to complete the Pole to Road Strava segment (0.9 mile,
353 feet, 7% average grade) in less than 10 minutes. Friday I did it in 9:25.
Local elite runners have PRs of about 7:30 and the record is 6:42. I think
under 9 will be a good new goal for me. I'm quite excited about my
fitness so far this season.
I practiced yoga twice at home, doing an approximation of the Vinyasa "flow"
class that I used to attend on Friday mornings. Practice consists of closing my
bedroom door, unrolling my mat on the floor, putting some cool jazz on our
sound system, and following my memories of a basic flow. So far, I've practiced
for 30 minutes at a time. If I can continue to stay focused for 30, I'll try
extending it a bit. Being in charge of the yoga music is nice. No more weird
hippie stuff chosen by other people, just weird hippie stuff chosen by me, like
Up on the Sun and Saxophone Colossus.
Yesterday I got up early to beat the crowds and drove to Bobcat Ridge Natural
Area for a long run. There had been snow and freezing fog Friday morning, and
the ice was still hanging on in shady places and on top. Towards the end of
my run, things had warmed and the ice was starting to come loose and fall from
the trees, making a weird and wild crackling and clattering sound from every
direction.
Edward Abbey's statement that "Wilderness is not a luxury but a necessity for
the human spirit" feels more true to me now than ever. I think I'd have a hard
time getting up to make the geospatial doughnuts every morning if I couldn't
get outdoors locally and ethically
almost every day. I'm lucky to have access to places like Green Ridge and
Horsetooth Mountain while helping limit the spread of COVID-19 in Fort Collins.
This morning I did a shorter loop in Lory State Park and, for the first time,
at the insistence of Colorado Governor Jared Polis, brought a Buff (the tubular
scarf) along to use as a face covering when passing other folks on the trail.
Some people looked a little worried, which shows how we're not yet
making masks a normal thing here.
In the past few weeks I've seen multiple stumbles related to a subtlety of
pytest. I'm going to explain how to recognize the issue and what to do about
it.
Exceptions are an aspect of a Python package's API, just like the names of the
functions, their parameters, and their return types. They also require testing.
Pytest provides a handy context manager for this: pytest.raises.
defaccept_numbers_lt_3(num):ifnotnum<3:raiseValueError("Number is not less than 3")deftest_unaccepted_error():withpytest.raises(ValueError):accept_numbers_lt_3(3)
That test will pass. The function does raise a ValueError when called with the
argument 3.
To make assertions about details of the exception you might try the following.
deftest_unaccepted_error_msg():withpytest.raises(ValueError)asexcinfo:accept_numbers_lt_3(3)assertstr(excinfo.value)=="Number is not less than three"
This test passes too. But wait, we mistyped the expected string. We're
asserting that the message ends with "three" and that can't be true, can it?
How did this test pass?
Here's the important thing: pytest "magically" changes the interpretation of
assert statements, but it doesn't change the behavior of Python's "with"
statements. That final assert statement in test_unaccepted_error_msg is never
reached. Execution exits from the block when the ValueError (or any other
exception) is raised.
The excinfo object has recorded the captured exception so that we can
inspect it. We only need to move that assert statement to after the with block.
deftest_unaccepted_error_msg():withpytest.raises(ValueError)asexcinfo:accept_numbers_lt_3(3)assertstr(excinfo.value)=="Number is not less than three"
Now this test will fail, properly. And we can change "three" to "3" and have
a passing test of an exception message.
This issue is documented in a note in the pytest.raises docs, but is easy to
overlook.
The second recovery week of my spring season is done.
5 hours, 44 minutes
33.1 miles
2146 feet D+
I ran on 5 days, but did no speed workouts, no run taking more than 90 minutes.
We've added dumbells and a BOSU ball to our home gym's equipment and I used
those in two workout sessions during the week. Did you know that "humpbacked",
in French, is "bossu"? A humpback whale is a "baleine à bosse".
I plan to keep running outdoors, but this week I made changes to where and when
that I will stick to until the pandemic is over. It's not too hard for walkers
to maintain six feet of distance, they're only passing people going in the
other direction. A runner, on the other hand, is passing people in both
directions, and more often. So, I'm avoiding the city's popular recreational
trails, including my favorite Spring Creek trail, and when in town will be
running on the nearly empty feeder streets. I need hills in my diet and don't
want to avoid the nearby single track, but I'm going to go out earlier than
I would otherwise like to avoid other users as much as possible. I feel good
about this plan and so does my family.
I feel less good about not yet replacing the missing yoga in my schedule.
Although I've been practicing regularly for years, even while I was living in
France, I've been doing it in groups led by an instructor and have never
cultivated a self-guided practice. I've heard people say that they have a hard
time working at home. This is my experience with yoga. I'm finding it hard to
get started.
Massage is another aspect of my training and recovery that I will be without.
A foam roller and tennis ball aren't quite the same, but will have to
suffice for a while.
The story about spurious prescriptions for hydroxychloroquine
hits close to home: this drug is my one prescription medication and the U.S.
Bozo-in-Chief is causing a run on it. I got a 90-day refill on the 15th and am
glad I didn't procrastinate. Let me make two things clear: 1) I'd be thrilled
if hydroxychloroquine turned out to be an effective treatment for COVID-19
infection, and 2) Trump should seriously STFU.
There's more about this in the New York Times business section today.