I haven't run or hiked at all this week. Not a single step.

My strained calf is feeling much better after four days of rest and I'm looking forward to getting back out on the trail for an hour this weekend. My plan is to resume running around 25-30 miles a week, starting next week, and then start building up for races in September and October.

Rasterio 1.0.23

I've been busy with a new product at work the past few weeks, writing Javascript and HTML, and hiring new teammates, but found some space this week to knock out some Rasterio bugs and release version 1.0.23. Here's the relevant section of the change log:

I added some control over rio-calc's memory usage yesterday and had fun doing it. In 1.0.22, rio-calc read all your sources into memory, preventing calculations on very large datasets. There are a number of ways to chunk the calculations and output of the results. GDAL's script divides the job into chunks that match the storage of the input files. I rewrote rio-calc to chunk the work more like GDAL's warper does: you specify a maximum amount of memory to be used by the program and rio-calc divides the job into chunks that need approximately less than this amount. You, the user, are free to trade memory for speed.

The rio-calc command uses Lisp-like expressions. Some people like them, some people don't. Evaluation of the expressions is done with snuggs. The expression evaluator in uses Python's eval(). Snuggs does not use eval() and uses a whitelist of names and keywords. It is much safer. For example, you can't trick snuggs into importing modules that give filesystem access. You could use snuggs on your server to evaluate expressions written by untrusted people on the internet. You would be asking for trouble if you did this with This is not to say that Snuggs is perfect and has no bugs. We found some this week and fixed them. If you're a rio-calc user, make sure you upgrade snuggs to 1.4.6 to get the latest and greatest version.

Thank you for using Rasterio and thank you for the ever-excellent bug reports. Clear writing and examples of failing code make it much easier for a busy programmer to switch context and dispatch bugs efficiently.

Training week twenty-four and Quad Rock recap

This final week's numbers:

  • 15 hours, 8 minutes running and hiking (2nd of 24)
  • 62.8 miles (6th)
  • 11,270 feet D+ (2nd)

Add to that one Quad Rock 50 finish in 13:13:50. My first ultramarathon.

Ruth says I looked fresher at the finish than I did in 2015 when I finished my first road marathon. It's partly because this race was more fun and partly because of my training. I'm sore today, but not wrecked.

David Bitner ran the first half of this with me and is a 25 mile finisher. He's building toward the Superior 100 in September and this was an early season training run. All the photos below are from his phone.

Heading up South Ridge Trail, the second of six climbs

On Westridge Trail, the top of the third climb

At the finish, just before I went up for another 25 miles

I had so much fun hanging out with Bitner before, during, and after the race. I'm looking forward to the next chance.

Despite the snow that fell 2 days before, the trails were in great shape. The sky was blue for the first half, which made staying in a good mood easy; and cloudy in the second half, so I was never at risk of overheating. For once, it seemed like all factors were in my favor.

Not that there wasn't adversity. At the bottom of the fifth climb I had reached my longest single-day distance ever and I was going into uncharted territory. I had strained my left calf, high up behind my knee, and it hindered me for the rest of the run. My body had reached its VFuel and almond butter & honey sandwich consumption limit. I compensated by hiking more slowly uphill and letting go of the brakes on the downhills, flipping my tactics. I switched to boiled potatoes, Haribo Sour Cubes, and gingerale. I was beginning to suffer a little chaffing as I approached the 40-mile aid station, but had had the foresight to stash my favorite shorts from last year, semi-retired, in a drop bag there. Those old shorts saved my butt.

Too make a long story short: I had a great adventure and am super pleased with myself for finishing. Congratulations to all you other finishers. You who didn't finish have my sympathy. Big thanks to Nick, Brad, Gnar Runners, and all the volunteers who planned and operated a fine event!

T minus fifteen hours

It's a little over 15 hours until the Quad Rock 50 mile race starts. David Bitner is going to be showing up here soon. I can't wait to see his reaction when he sees that there is snow on the course. The weather dried out today but it hasn't been very warm. There may still be some snow on the trail tomorrow morning.

The Quad Rock course goes to the top of the foothills on the right, multiple times.

GDAL 3.0.0

GDAL 3.0.0, the final fruit of the GDAL Coordinate System Barn Raising project, is out today. Mapbox, my employer, was a financial supporter of the work and I was the shepherd of that support. I'm very pleased at the results and grateful to Howard, Paul, Kristian, and Even for taking the risk. The value Mapbox gets for a small investment is enormous. Are you an engineer at a company that should be supporting GDAL like this and don't know where to start? I'm happy to share my experience.

Here is Even Rouault's release announcement: Please take note: 3.0.0 has some big and breaking changes. It is not supported by the latest stable releases of Fiona and Rasterio. If you have installed either of those libraries from source distributions, not wheels, and you upgrade your system GDAL to 3.0.0, your Python programs could be broken. If you've installed Fiona and Rasterio wheels, which include their own copy of GDAL 2.x, you're safe.

It's still snowing

Our first snow of the 2018-2019 season came on October 10, 2018. It's still snowing seven months later. Snow in May isn't unusual in Fort Collins, at 40.56 degrees north of the equator and 5000 feet above sea level. Still, our current snow season has been long. It started 8 days earlier and has gone 12 days later than the average.

Snow number 18

Tomorrow is forecast to be dry, which will let the Quad Rock trails drain, I hope. I expect Saturday, race day, to be sunny and mild with a small chance of showers at the end of the day.

Training week twenty-three recap

One week of tapering down and one more to go. I did 3 short runs, including a small interval workout, and one 10 mile run at the crack of dawn on Saturday with another Quad Rock runner.

  • 3 hours and 53 minutes running
  • 24 miles
  • 1713 feet D+

The race starts in 4.5 days. The weather forecast for Saturday is pretty good: cool and wet weather this week is giving way to sun on the weekend. I'm completely ready. I've run 1016 miles in 23 weeks. My legs are ready, my heart and lungs are ready, my brain is ready. My emotions are ready. It's been challenging and fun to get to this state of being ready. I'm happy with what I've done, no matter what happens on Saturday.

Training week twenty-two recap

The numbers:

  • 7 hours and 16 minutes running time
  • 40.3 miles
  • 5367 feet D+

Week twenty-two isn't quite over, but my training is. I'm not running tomorrow. I'm going to try to avoid thinking about running. Instead I'll do chores and shopping and gardening.

I did my last long run today at Bobcat Ridge: up the D.R. Trail – which was so pleasant that I ripped up my planned route – down Powerline Trail, up D.R. again, then up and out of Mahoney Park and down the Ginny Trail. The summit above Mahoney Park, at 7000' elevation, was covered with pasque flowers. Truly covered, a cluster of flowers every square meter.

Pulsatilla patens, the prairie crocus, or pasque flower.

I did my last speed workout on Tuesday and ran a particular segment (Strava segment, that is) of the Timber Trail at Pineridge in under 8 minutes (7:53) for the first time. I'm not faster, but now I can run mildy fast for longer intervals. I also had a very satisfying steady run on the hills at Coyote Ridge at lunch on Friday, new PRs on every stretch of the route, and didn't have any rattlesnake conflicts, always a plus.

Two weeks from now, to the minute, if everything goes well, I'll be 12 hours into the Quad Rock race and just a mile or two from the finish. Until then, I'm tapering: easy runs, banking sleep, avoiding germs.

The foothills are getting greener by the minute.

Training week twenty-one recap

Week twenty-one was a solid week of running.

  • 12:53 hours on my feet (#4 of 21 weeks)
  • 65.9 miles (#5 overall)
  • 9882 feet D+ (#2)

I ran my last 25 miler and my last back-to-back long runs before Quad Rock. Saturday I ran the second half of the course, climbs 4-6, with two runners who are a little faster than me. We completed the loop in 5:47, 33 minutes faster than I ran the Quad Rock 25 in 2018. I felt more soreness than usual this morning, but the feeling went away quickly on my out and back run on the single track east of Horsetooth Reservoir. I saw one rattlesnake and missed another that I was warned of by another runner. Not having to watch for snakes was one of the upsides of winter running.

Next week I'm going to run 20 fewer miles, with only one long run. I'm looking forward to a Sunday of sleeping in and gardening.

Longs Peak (14,269') from Horsetooth Open Space's Stout Trail