Rasterio 1.0.15

Rasterio 1.0.15 is on PyPI. It's the first really usable release of the package in 2019. I bungled 1.0.14, so am not counting that one as usable. There is one barely noticeable, but rather big change in the 1.0.15 Python package, and a more noticeable change in the binary wheels that we're publishing for the package.

First of all, the time had come to expand the range of spatial reference systems supported by Rasterio. Before 1.0.14, the package was strictly tied to PROJ4 and could not handle spatial reference systems outside of that module with complete fidelity. Rasterio 1.0.15 has switched to using OGC WKT (version 1) as the canonical representation of spatial reference systems. The Python API remains the same, but we have higher fidelity and more interoperability. The one small change in the API is that rasterio.crs.CRS.to_string() may return a string that looks like PROJCS[blah,blah] or GEOGCS[yada,yada] instead of +proj=utm ... or +proj=latlong .... The result of rasterio.crs.CRS.from_string(rasterio.crs.CRS.to_string()) hasn't changed, so I am not counting this as an API change. Don't use microformats in your API's return values is another lesson, I suppose. A byproduct of this work is that integration of new features in PROJ versions 5 and 6 will be much easier to realize in future versions of Rasterio. New features like local and engineering coordinate systems.

The more major change is that the binary wheels for Linux and OS X that we are publishing to PyPI include GDAL 2.4.0. There are many bug fixes in this release and many new fixtures, some of which I've never tried. I hope that users find this a positive addition. Vincent Sarago showed me how to add HTTP/2 support to libcurl and I have done so for the Linux wheels. I have not done the same for the OS X wheels because I am not sure how to make curl and SSL on OS X completely sound and interoperable with what the fruit vendor ships.

As always, the project is indebted to Even Rouault for help with building, configuring, and debugging GDAL. Rasterio has also enjoyed new help from Alan Snow and Dan Little on spatial referencing and Google Cloud issues.

Share and enjoy.

Why do computers stop and what can be done about it?

I have no formation in computer science and will forever be catching up on reading classic papers from the field. Bill de hÓra posted a reading list on his blog and I'm taking advantage of it. I've read a few of the papers ("The Law of Leaky Abstractions", "As We May Think") and seen references to others, but some are completely new to me. "Why do computers stop and what can be done about it?" caught my eye. What a title. Jim Gray nailed it.

The paper outlines a playbook for highly available computer software systems in general terms. Gray wrote it for all software engineers, not only for users of a particular language or product. I didn't know that concepts like failing fast, shared nothing, heisenbugs, and fail over were established 30 years ago. I found the description of them from the time that they were fresh fascinating. Gray wrote this paper in a simple and straightforward style and I'm grateful for that. I've read a number of AWS product sheets this week and they are opaque in comparison. Do AWS Glue or Step Functions use strategies from Gray's playbook? Do they operate on different principles? It's difficult to tell.

I remember well the search for Jim Gray when he went missing at sea in 2007. I didn't plan to write a blog post about one of his papers on the 12th anniversary of his disappearance, but that's what has happened. Read the paper if you haven't, I almost guarantee that you'll find at least a few interesting insights and rules of thumb.

Training week nine recap

The basic numbers from week 9 aren't that much different from week 3.

  • 7:44 running time

  • 44 miles

  • 3819 feet D+

The difference is that I had 3 outings at a steady pace or faster instead of 2, my steady pace is significantly faster now, and one of these outings was an uphill tempo pyramid with intervals (2-4-6-4-2 minutes of effort) twice as long as my first pyramid workout in week 3, on a 10% grade above Pineridge Natural Area. There was more intensity in my sessions this week. The next two weeks will be even more intense as I get into bigger hill workouts.

I started week 9 sore and tired from two days of telemark skiing at Steamboat (hundreds of lunges per hour) and the soreness lingered. I'm not sure how to mix skiing with my training. Two days of teleing made my rest week less restful, for sure. We have another 4 days of family skiing planned for this winter, so I'll have more chances to figure it out.


Horsetooth Mountain from Coyote Ridge on Saturday's long run

Training week eight recap

This was a rest week and I ran just 3 days. I did one bike ride, my usual strength and conditioning session, a yoga session and did two half days of telemark skiing at Steamboat. No hiking, but plenty of bumps, so I got a pretty solid workout. Though I didn't run today, I did run yesterday evening after skiing. Steamboat Springs has a trail system that is plowed mostly clear in the winter. I always lose the trail before Emerald Park whether I'm coming from the north or the south, but that's not the city's fault.

The numbers:

  • 3 hours running

  • 17.8 miles

  • 404 feet D+

I spent more time cross-training than running, which is fine.

A big highlight of the week was helping Bea discover some new skiing terrain. She was super excited to be going through these black diamond gates for the first time.


The case for impeaching Donald Trump

In The Case for Impeaching Donald Trump, Jason Kottke writes:

Meanwhile, the US government and a populace bewitched by breaking news is stuck in traffic, gawking at this continually unfolding accident. And we somehow can’t or won’t act to remove him from the most powerful job in the world, this person that not even his supporters would trust to borrow their cars or water their plants while on vacation.

It's time. To not impeach is irresponsible. It's cowardice.

Read the whole Atlantic article here.

Training week seven recap

I ran outdoors six days this week and did two speed workouts. I had a strength and conditioning workout on Monday, my only day off running, and yoga sessions Tuesday and Friday, so 1-2 activities a day. It was a pretty big week. I'm feeling tired but good.

  • 9:37 running time

  • 45.6 miles

  • 5217 feet D+

I ran one more hour this week than last and covered 3 fewer miles. This is because Saturday's long run was an epic slog with longtime FOSS4G compatriot and actual ultrarunner David Bitner through snow over the fifth and second climbs of the Quad Rock 50 course. I'd intended it to be the first and second climbs, but missed a turn. I missed three turns in all, and one of them took us up to Horsetooth Rock.


Wondering how I ever got a job in mapping

It snowed the night before our run and we had to do a bit of trail breaking. Otherwise, the conditions were great for running, no ice to speak of and good traction. This will drastically change this week.

It was great to catch up with David and absorb his sage advice about ultrarunning. Best outing of the year, for sure.

Silos and opportunities

I've been reading and linking to Subbu Allamaraju's blog for more than a decade. The Value is in Dealing with the Messy Stuff is a post about learning to see messy problems as opportunities and learning to see silos as tools for solving messy problems. Mapbox, where I work, is exactly at the stage where this mindset is helpful. Subbu uses team and silo almost interchangeably, but I don't think it's intended that the reader equate them. A team is part of an organization's model of how problems get solved and silos are part of the observed reality of how problems get solved.

Vacation's end

I took a few days off work at the start of the year. I did a little open source software support and issue gardening this weekend to warm up and will be back at work making the geospatial doughnuts full time tomorrow.

Here are a couple photos I took on the flight home from Boise, sitting on the North side of the plane for once. The reflection in the engine cowling chrome really makes the first one for me.


Trail Ridge Road in Rocky Mountain National Park


The Rawah and Never Summer Ranges and Cameron Pass

Training week six recap

The numbers:

  • 8:30 running time

  • 48.5 miles distance

  • 4268 feet D+

I bought new shoes last week and used them on all my trail runs this week. I still like the Speedgoat 3. Some reviewers have written that the max cushioning removes all trail feeel, but I must be a bit bigger than these reviewers because I still feel the trail. I feel it more gently, though, which suits me perfectly.

My Mom's hometown, Boise, ID has an extensive system of nicely planned trails. I ran 13 miles on dirt trails starting from the Cottonwood Creek trailhead above the VA hospital. Although steep in some sections, the trails were so smooth that I beat my Lory State Park pace by 2 minutes per mile. These trails were made for fast cruising.


Heading up on a packed snow trail


Beginning of the descent back to Boise

Rocky mountains and famous potatoes

We spent Christmas at home in Fort Collins and saved our travel for the New Year. Yesterday we flew from Denver to Boise to visit my Mom and stepfather. The views on this route can be spectacular when the sky is clear, and it was. Waypoints on the flight: Berthoud Pass; Dinosaur National Monument; Evanston, Wyoming; Cache Valley and Logan, UT; Twin Falls, ID; and finally, Boise.


Peaks of the Colorado Front Range


The Green River and Canyon of Lodore


The Wasatch and Wellsville Ranges and Logan, Utah

There is almost no snow on the ground in Boise, but it's cold. Not too cold to run, however, and I had a good one along the river today. Tomorrow I'm going to do a longer run up in the hills above downtown.