New home for Rasterio

I've announced the move elsewhere, but have been late to mention it here. Rasterio has been transferred from to Today I transferred the affine project, which rasterio depends on, from my own personal repos to the same rasterio org.

Before I left Mapbox, about 45% of the project's commits were authored by folks outside the company. Now, that number is closer to 90%. Moving the project keeps the code open and accessible to its developers and makes it easier to maintain. Making the case for the move at work was pretty easy. Teams at Mapbox that use rasterio want bug fixes and new releases. The Platform team has one less oddball CI configuration to support. I'm grateful for the attention and help of Mapbox's Legal and IT teams during a busy, busy time. It was fun to work with these folks on one last project.

I'm planning to stay very involved in these projects. Go and try the new 1.3 pre-release and report back if you find any new bugs.

Shapely 1.8.0

From the 1.8.0 release notes:

Shapely 1.8.0 is a transitional version. There are a few bug fixes and new features, but it largely exists to warn about the upcoming changes in 2.0.0. See the new migration guide for more details on how to update your code from Shapely 1.8 to 2.0.

One of the upcoming changes: the geometry objects of 2.0 will be immutable, simplifying their implementation, and making it possible to hash them. Here's an example of the warning you'll see when you set a new attribute on a version 1.8 geometry object.

>>> from shapely.geometry import Point
>>> pt = Point(0, 0)
>>> = 1
<stdin>:1: ShapelyDeprecationWarning: Setting custom attributes on geometry objects is deprecated, and will raise an AttributeError in Shapely 2.0

So long, Mapbox

Last Friday was my final day at Mapbox. My tenure was almost exactly eight years. When I started, MapBox was written with a capital B and was headquartered in a converted garage behind 14th street in D.C.

It was a pretty good job. I made friends, learned a ton, and did stuff with a lot of impact. I helped move the needle, as they say. But I'm happy to be going. I'm starting something new and exciting in November, more about it in a week or so.

Blue Sky Trail Marathon recap

Saturday I finished the Blue SKy Trail Marathon in 05:25:47. That's 26 minutes faster than my 2017 time. I was 5th in my group, 50-59 year-old men, and 88th overall. We all enjoyed beautiful weather: cool temperatures, no wind, not a cloud in the sky.

At mile 9.2 I was in 67th place. I was having fun pushing my limits up and down the single track of Horsetooth. I eased to a more sustainable pace on the flatter part of the course, but was still running the outbound stretch of the Blue Sky Trail faster than I've done on long runs while training. Just before the turnaround, my legs started to feel off, and then I started to feel impending cramps in my hamstrings. I gobbled some pickles and potato chips at the next aid station, but it was too late. I battled cramps all the way to the finish. I ran until my legs cramped and then I walked until the cramps subsided, repeating this over the last 7 miles. I lost 3-4 minutes per mile and slipped 7 places.

On a different day, cramps might have been demoralizing, but so many things kept me in good spirits. The company on the trail was great, I saw friends at aid stations, the weather was perfect, and every other part of my body felt great. Best of all, eight months of training and racing was almost over. Finishing with a smile was easy.

Dawn at Horsetooth Reservoir's Inlet Bay.

Rolling into the aid station at mile 22.7 looking for salty snacks. Photo by Stefan Kroll.

I'm going to keep running this fall and winter, but nothing very hard or long. I might not start workouts until next April.

My Gnar Slam mug.

Blue Sky L minus six days

I just got back from my last long run before the Blue Sky Trail Marathon, an out and back on the Blue Sky trail covering miles 9.2-15.6 and 22.7-26.7 of the race course. If conditions allow, I plan to run the race with the same gear, wearing my Evo Speedgoats and carrying only a 16-ounce bottle in my hand. The aid stations are less than 5 miles apart and the weather looks like it will be cool on race day. Since I managed to run 10 miles today with only one bottle and a single gel, I should be fine. It might be below freezing when the race starts at 7 a.m., so I plan to start with a warmer layer and then switch at mile 9 when we loop back through the starting line.

My fitness is pretty good. Not where it was before Never Summer at the end of July, but better than before Black Squirrel in September. Finishing in the top five for my category (17 registered runners) might be feasible. Until Saturday, I'm going to focus on getting lots of sleep, eating well, and staying hydrated.

Thursday could be our first snow. I'd love to see the course get watered a little bit. It's very dry and dusty now. Although the forecast has the sun coming out again on Friday, sometimes the arrival of these first fall storms can be a little delayed. We'll have to wait and see. I would prefer sunny and cool weather, but I've run this course in the snow many times and am ready to do it again.

End of summer running recap

It's been a busy time. Let's get caught up. Last time I posted something on my blog, almost 5 weeks ago, I started building up again after finishing the Never Summer 100k. I succumbed to a sinus infection before the Black Squirrel Half Marathon, the 3rd event of the Gnar Slam, on September 11, but did fairly well despite the warm weather. It's now three weeks until the Blue Sky Trail Marathon, the last race in the series and I feel like my fitness level is finally going back up again after a rough August and early September. Last Saturday I ran 20 miles for the first time since the Never Summer event and felt fine. I intend to go out for more this coming weekend if the weather allows. The window for alpine running in Colorado is closing quickly, we've already had snow above treeline.

Three weeks to the Blue Sky Trail Marathon. My knees feel better, my sinuses feel better, I'm less stressed out about work and looking forward to lots of fun trail miles in October.

Blue Sky training week one recap

This year there are six weeks between Never Summer and the Black Squirrel trail half marathon and another five weeks to the Blue Sky trail marathon. I took two weeks off after Never Summer and started re-building last week, the first of a nine week program ending with Blue Sky on October 16. I'm going to use four week blocks again, three for building fitness, one for recovery. The first recovery week falls on the week before the trail half.

Here are the numbers for Blue Sky week one.

  • 8 hours, 21 minutes

  • 41.9 miles

  • 6,171 ft D+

I did back-to-back long runs on the weekend for the first time in six weeks, 15 miles on Saturday and 10 on Sunday. Local air quality has been okay and the weather has cooled off a bit. The only things which haven't been great are my quads. They're quite tight and are putting stress on my knees. I need to be more diligent about stretching and foam rolling and am going to ask Ruth's massage therapist for a session soon.

Never Summer 100k recap

Week 12, race week, is done. By time and miles it was my biggest of the year.

  • 19 hours, 12 minutes

  • 78.3 miles

  • 11,962 ft D+

I finished the Never Summer 100k in 18:29:19, 50 minutes faster than last year on a course 3 miles longer. I was 104th of 246 starters and 204 finishers, 7th in my category and 65 minutes behind 3rd. I moved up 30 places from 2020.

The finish line, Friday

Friday evening the race directors, faced with a forecast for stormy and wet race day weather and, because of a flash flood watch in the county, an insufficient number of available search and rescue staff, decided to reroute the race. They replaced the traverse from North Diamond Peak to Montgomery Pass and the long backcountry segment past Kelly Lake with less exposed segments nearer to aid stations. This eliminated about 2,000 ft of climbing and added a mile to the race distance.

I ran the middle of the race relatively quickly, moving up from 158th at mile 11 to 97th at mile 50. After the Canadian aid station poor fueling caught up with me and I bonked. Between Canadian (49.8 miles) and Bockman (55.6 miles) aid stations I slipped six places and passed no one. I passed five runners after Bockman and was passed by six others. Four times on the final climb I came to a stop, sagging onto my poles until I could recover enough to continue slogging. I did manage to pick it up in the last two miles and crossed the finish line 40 seconds before midnight.

Aspen near Clear Lake aid station

The weather was quite good west of the divide. It was only when we ran up to Clear Lake that we encountered heavy rain and mud. I changed shoes after and was dry from Clear Lake #2 (44 miles) to the finish.

My second consecutive finish

Thank you for pacing, Mike, and huge thanks to all of you volunteers. I couldn't have done it without you.

Never Summer training week eleven recap

I wrapped up a low volume, high quality week. There are only 6 days to go.

  • 4 hours, 56 minutes

  • 28.5 miles

  • 2,392 ft D+

I did a bit of tempo running on Tuesday out on the county roads while my daughter was doing her equestrian thing. Intervals on dirt at Pineridge on Wednesday. Some easy suburban single track on Thursday. More easy running at Horsetooth on Saturday and an easy out and back on the Spring Creek bike trail today. I'm still doing strength and conditioning workouts, but am going easy on my legs.

Next week I'm going to run about 75 miles, including the race on Saturday, which returns to its original 64 miles after a reduction to 61 last year. Due to a failure of attention I ended up doing about 63 miles last year. I'm not going to do 66 this time. If you're curious about the latest pre-race information from the directors, read it here. I'm taking Friday off work to get up to the race start and do some volunteering at the finish line for the 60k version of the race.

Until then, my main goals are to sleep well, stay healthy, and tune out non-critical things. I apologize in advance for not replying to emails, new issues on GitHub, etc.

Trying new things

Today I got fins, mask, snorkel, and an introductory snorkeling lesson in a pool as a birthday present and homework for an upcoming trip. Ruth, my partner, grew up on the Southern California coast and is a swimmer and passionate about scuba diving. I grew up in the desert of the Intermountain West and am ambivalent about putting my head under water. We're going to meet in the middle. Our kids took the lesson with me. Both are pretty good swimmers, one has some open water snorkeling experience already. I've spent a lot of yoga hours training to inhale only through my nose, so learning to inhale only through my mouth with a snorkel clenched in my teeth is kind of a trick. I enjoyed the lesson and am looking forward to some snorkeling in the ocean.

Ruth and Beatrice, our youngest daughter, ride horses regularly and our oldest rides occasionally. It's been clear that I need to try this, too, and I did yesterday, spending an hour learning to saddle, mount, and ride a horse at the stable where Ruth and Beatrice have been riding. They're into dressage and jumping, I'm only learning the basics of Western riding, My goal is to be able to go out on a two hour trail ride with my family without falling off and prematurely ending things. I'm pretty sure I'll succeed. I'm getting comfortable with horses and they, at least the ones at Sunrise Equine, are comfortable with me.

Jet the mustang, my first horse

I learned how to sit and how to use my feet and legs, how to hold the reins with two hands and one hand, how to turn, how to trot, how to balance going up and downhill, kind of a crash course in Western trail riding. I'm still a rank beginner, let's be clear, there is so much yet to learn, but my mind really did expand yesterday. I have much more appreciation for the passion people have for horses and riding. Horses are fantastic creatures, with brains and personalities, and connect us to the ancient times of giant mammals. I expect I'll remain primarily a runner, not a rider, but one who wouldn't want to live in a world without horses.