20km de Montpellier

Yesterday I ran in the 33rd 20 km de Montpellier, the race I've been training for the past 12 weeks. Once again I had the bad luck of having a cold and mild sinus infection on race day and fell short of my goal. I was aiming for under an hour and 40 minutes, which would have been in the top third, but finished in 1:45:19, the 660th of 1320 finishers. The race départ was at the bottom of the Rue de la Loge in Montpellier's center and we ran from there out to my neighborhood in Aiguelonge, to the northwest suburbs, and then back to the arrivé on the Place de la Comédie. It was a hilly course and we hit all the passes in the north and northwest districts of the city: Pioch de Boutonnet, Montmaur, Plan des 4 Seigneurs, Hauts de Massane, and Malbosc. I'm exaggerating a bit when I call these passes, they're all small climbs of less than 70 meters. Except for a small rise near the finish up to the Arc de Triomphe, the last 4 kilometers were downhill and I was pleased to have enough energy to run the final two in 9 minutes. I moved up about 50 places in the last 4 km.

This time of year the weather can be cold and wet, but it was perfectly sunny and mild for this edition of the race. One thing that seems to bedevil the race, from reports on the web in previous years, is traffic control. By the time I was running through the Alco and Cévennes districts on the way to the finish, impatient drivers were forcing their way past the course marshals and one had to be heads up at intersections. Police came to intervene at Avenue de la Gaillarde and Rue de las Sorbes where the situation was particularly bad, but could have been used elsewhere.

After the race, I spent the rest of the afternoon and evening in the kitchen making and eating our delayed Thanksgiving dinner. I'm super thankful for my family's support this fall, I couldn't have put in all the training time without their backing. Thank you, Ruth, Arabelle, and Beatrice!

It's 16 weeks now to the Montpellier Marathon and I'm trying to figure out either a training plan that will give me a little downtime or a different race for the spring.

Disaster

Welp. The 2016 presidential election was an utter disaster. In large enough numbers in key states, Americans threw a tantrum and voted for machismo, racism, and kleptocracy. I think the situation now looks worse than it did two weeks ago. We've got an abusive president-elect with a history of self-dealing and other cons who indicates that the sleaze will continue unabated and he's advised by a pack of wingnuts, climate deniers, internet trolls, and neo-nazis. Surrogates of our president-elect are on news programs floating insane ideas like a national registry of Muslims and internment camps. I'm very concerned for the safety of my Black, Latino, LGBT, immigrant, female, Muslim, and Jewish friends and family in such an abnormal political climate. Don't tell me that this is normal, that nothing has really changed, or no one is more at risk today unless you're ready for an earful. If you're a Trump voter who insists that you're not a racist or bigot, I insist that you prove it by speaking out and standing up against atrocities when the time comes.

Vote!

I hope you've had the chance to vote early by mail, like I have, like we all should be able to do. But if not, please do take the time to vote on Tuesday and bring a friend or two. I'm sure almost all of us know people who feel frustrated about the system or less than passionate about the candidates or complacent about a Clinton victory (which I'm counting on!) and who might stay home on election day. Put some pressure on them, remind younger friends how much they'll regret letting bitter old white men further dictate their future, drive or carry them to the polls if need be. I think John Scalzi really nails it here:

Basically lots of people would love it if you didn’t vote. Disappoint them.

Disappoint the misogynists. Disappoint the bigots. Disappoint the literal racists and fascists backing Trump in this election. Vote!

Trail des Calades

Last Sunday, the 16th, I ran in the 3rd edition of Trail des Calades, a 16.5 km trail run in the hills north of Montpellier. I downloaded my track from Runkeeper, converted it to GeoJSON, uploaded it to my Mapbox account (disclaimer: I work for Mapbox), and styled it in Studio for the map below. It's fun to see how much has changed since the last time I blogged a running map. It's all WebGL now, with changeable perspective, and the style editing is super slick. I particularly appreciated how the Mapbox editor suggests reuse of elements that already exist in the Outdoors style.

Montpellier is on the interior edge of the coastal plain. The countryside north of the city is rolling hills dotted with limestone outcrops, all of it covered with live oak woodlands or vineyards. The Trail des Calades made a rugged loop through this landscape, starting and finishing in the town of Saint-Jean-de-Cuculles. There was a short triangular loop through the cobbled streets of town after the start, in order to settle the pack, and then it was singletrack or jeep roads the rest of the way, counter-clockwise from the town up to the base of the Pic Saint-Loup prominence, and back. I'm not in great running form yet and didn't want to risk breaking an ankle or anything else with my 20k 4 weeks away, so I took it fairly easy, even stopping to take some photos. My time was 2:08:01. The winning time was 1:22:36!

https://c2.staticflickr.com/6/5542/30401227495_a4d8ca51fb_b.jpg

Parking at the entrance of the town

The weather was overcast and cool, but not cold. I went with no jacket and no water, planning to drink 2 cups at the mid-way station, and this worked out very well. In hotter or colder weather I might have geared up more like my fellow runners.

https://c1.staticflickr.com/9/8136/30103957390_1c6406a8e9_b.jpg

At the départ

Something like 320 people signed up for the race and 291 of us finished. The race was very well organized and staffed. There were bathrooms, and coffee! Course marshals, many of them pompiers (firefighters), were out at trail crossroads. We had a moment of silence before the start in memory of Jérémy Beier, one of their comrades who died fighting a wildfire in August.

https://c2.staticflickr.com/6/5832/30284555982_560645c26a_b.jpg

En route

I stopped to take a photo at a mellow, wooded spot in the second half of the course, which was generally very steep and rocky or muddy. It was a very challenging and fun course, part scramble and part run. I'm looking forward to another race like this one.

Blog Makeover

The feature I need most in a static site generator right now is incremental builds. Regenerating the hundreds of existing posts on my site has become a barrier to posting often. I'm trying Nikola and am satisfied so far. With each new post there are still a number of files to be regenerated – the index page and feed, pages and feeds for tags I've used – but the write, preview, publish cycle feels much faster.

Syndication feeds for the tags I use is a feature I gave up in 2013 when I quit blogging on Zope, but they're back thanks to Nikola. See https://sgillies.net/tags/rasterio.html and https://sgillies.net/tags/rasterio.atom for example.

I'm using "work" and "life" tags to make it easier to subscribe to posts that are mainly about programming and spatial data processing or posts that are mainly about food, running, and being a temporary resident of France. This doesn't mean that I'm making my work feed a safe space for people who don't want to hear about workplace diversity, climate change, and politics or that there won't be any posts about maps and computing in my lifestyle feed.

Thanks for reading my blog. I hope the changes work for you, too.

Running in Montpellier

Cooler and wetter weather has returned to Montpellier. City forests and natural areas which have been closed all summer because of fire danger have reopened. This steel door at the southwest corner of Montpellier's Zoo Lunaret has been shut all summer, but is now open from 9 to 19.

https://c1.staticflickr.com/9/8281/29778264556_9626cfe2a6_b.jpg

Emergency exit no. 11

I took the photos for this post with my G4 on a morning run around the Zoo at the end of September.

Bois de Montmaur, the wooded park on the outcrop west of the Zoo is open for business. It's a great place to go for short hill repeats and is just big enough (27 hectares, or 66 acres) to provide the illusion of being in the oak woodland (called the garrigue here) outside the city.

https://c1.staticflickr.com/9/8387/29188019833_c838c7f4ba_b.jpg

Bois de Montmaur

Directly north of the bois and zoo is the Agropolis International campus. Behind its cluster of buildings, next to the Lez (Montpellier's primary river), is a stretch of pleasantly quiet and shady foot trail.

https://c1.staticflickr.com/9/8388/29186429214_64b9978515_b.jpg

Agropolis single track

Beyond a canoe and kayak park the trail enters the Réserve Naturelle de Lunaret and tiptoes along a section of short cliffs above the river. The cable hints at how slippery the mossy limestone can be during the rainy season, and while the Lez is low now, you wouldn't want to fall in after one of the episodes (cévenols) of torrential rain that can happen in fall.

https://c1.staticflickr.com/9/8848/29521313010_11e59d6824_b.jpg

Réserve Naturelle de Lunaret

After a kilometer of rough conditions, the trail opens up again near the southwest corner of the zoo. These parasol pines (Pinus pinea, the tree that gives pine nuts) are just on the other side of the green steel door I showed at the top of this post.

https://c1.staticflickr.com/9/8479/29814028355_1aba536e31_b.jpg

Parasol pines

I've been enjoying running the streets and paths of Montpellier, but I'm very happy to have easy access to dirt trails and nature again. I'm not alone in this feeling; I shared every stretch of this loop with other runners, some of them obviously radiating with pleasure.

On October 16 I'm going to do the Trail des Calades, a 16km trail run at the foot of the Pic St-Loup. It's the 3rd edition of this event and looks like it'll be a bit like the Black Squirrel, but shorter and steeper. There are one or two races like this within an hour's drive of Montpellier almost every weekend. I'm using it as training for the 20km road race in Montpellier on November 27 and don't have any ambitions other than to finish without getting injured and enjoy some fresh air and good company.

Benjamin Gerard Gillies (1976-2016)

My brother Ben died on August 25 after being seriously ill for most of the summer. I got the news that life supporting measures were no longer helping while I was in Germany and was able to get back to Denver to be with him, his partner, and family at the end. He was just 40 years old.

Ben was a bookseller, he worked at the Hungry Minds (later, Ruminator) and Subtext bookstores in St. Paul, Minnesota and in 2015 opened a store, City Stacks, on Denver's Wazee Street. City Stacks had a memorial on September 2nd. If you've come to this page via a search for news about Ben, I recommend going to that Facebook page. I was touched by the kind words of his friends and customers.

Ben was in the bookselling business to be close to the things he loved most: books and readers. I don't think there is any aspect of the trade, from printing to distribution to customer service, that he didn't appreciate and enjoy. I'm sorry he didn't get to keep selling, trading, and talking about books any longer.

Bye, Ben. I love you. Rest in peace.

Instants and intervals for event-like GeoJSON features

Now that RFC 7946 has been published, I'm returning to my work on describing event-like GeoJSON features at https://github.com/sgillies/geojson-events. My goal is to come up with a representation for instants and intervals of time that does for "when" what GeoJSON has already done for "where." Applications like the USGS earthquake feeds are what I have in mind for this GeoJSON extension; geojson-events is not suited for GPS tracks or telemetry of moving objects, these kind of measurements require a different model.

I would be grateful for your comments on geojson-events. Please check out the project repository and let me know if this GeoJSON extension is or isn't useful to you.

RFC 7946, the GeoJSON format

Hello, RFC 7946. Congratulations to everybody involved! I'm very satisfied with it. Taking off my editor hat, I'd like to add some personal commentary on the RFC and the process that produced it.

The results

GeoJSON is already well adopted. What did we accomplish by making it an IETF standard?

  • We've made a standard for encoding geographic data in internet messages that isn't just for GIS or web mapping developers and is more likely to be used in network applications like WebRTC.
  • GeoJSON is more precisely defined than ever. Bugs in the spec have been fixed. My job at Mapbox involves services that accept GeoJSON uploads and I'm looking forward to more standardized GeoJSON as time goes on.
  • At last we can check off the "standards" box when selling GeoJSON services to customers that are required to use formal standards.

Acknowledgements

RFC 7946 is the product of the IETF GeoJSON Working Group (WG) formed in October 2015. All the original authors of the GeoJSON spec participated in the WG: Howard Butler, Martin Daly, Allan Doyle, Sean Gillies (me), Tim Schaub, and Christopher Schmidt.

I scraped the WG email list and the geojson/draft-geojson GitHub repo for the names of other WG participants: Vladimir Agafonkin, Richard Barnes, Ben Campbell, Jose Manuel Cantera Fonseca, Micah Cochran, Simon Cox, Sergey Fedoseev, Atle Sveen Frenvik, Jérôme Gasperi, Pedro Goncalves, Blake Grotewold, Max Hartmann Friedrich, Chris Hills, Tõnis Kärdi, Éric Lemoine, Chris Little, Alexey Melnikov, Calvin Metcalf, Volker Mische, Matthias Müller, David Neufeld, George Percivall, Alexandre Petrescu, Paul Ramsey, Carl Reed, Maik Riechert, Peter Rushforth, James Seppi, Andrew Sheppard, Jerry Sievert, Scott Simmons, Raj Singh, Sergey Tolstov, Dirk-Willem van Gulik, Peter Vretanos, Christine Waigl, James Winterbottom, Jeff Yutzler, and Mohammed Zia. Two participants are identified only by their GitHub user names: breynolds, and roomthily. All these folks helped shape the RFC.

GeoJSON was also shaped by people playing specific IETF roles. The WG chairs, Martin Thomson and Erik Wilde, did a fine job of keeping the draft on track. Our Area Director, Alissa Cooper, was the first IETF member I talked to about chartering a working group and was a super guide throughout the entire process. IESG reviewers Ben Campbell, Stephen Farrell, Suresh Krishnan, Alexey Melnikov, and Kathleen Moriarty asked questions and made suggestions that greatly improved the final draft. I'm grateful to Mary Barnes and Cullen Jennings, the Dispatch WG chairs, for explaining how dispatch works at the IETF and inviting me to present remotely at IETF 92.

I'm grateful to Tom MacWright for all the GeoJSON explainers on his blog and for his rhetorical support. Tom regularly reminded the web – and me – why a GeoJSON I-D was worth the effort.

Stefan Drees was the one who really got this ball rolling with the first commits creating the technical framework for authoring the draft. Thanks, Stefan.

I did much of the draft editing at work and Mapbox paid for my attendance at IETF 93, where the proposal was dispatched and the working group charter was launched. I'm proud to work for a company that's committed to making the internet work better.

Changes

The changes from the Pre-IETF GeoJSON Format Specification published in 2008 at http://geojson.org are listed at https://tools.ietf.org/html/rfc7946#appendix-B.

To summarize:

  • Coordinate reference systems are no longer in the core of the specification; use CRS84 longitude and latitude with GeoJSON from now on.
  • Don't extend coordinate arrays with linear referencing measure, timestamps, or other variables.
  • Follow the math and physics right-hand rule (not the surveyor's right-hand rule) when forming polygon rings.
  • Construct bounding boxes so they are not ambiguous at the Earth's poles and antimeridian.
  • Do extend GeoJSON, but don't change its semantics.
  • Don't write longitude and latitude values with more than 7 decimal places of precision.
  • Avoid using GeometryCollection when possible.
  • Reference RFC 7946 from now on instead of http://geojson.org.

One change that we glossed over in that appendix is that the set of GeoJSON types is closed. Extensions can't, for example, add a "Circle" type. That doesn't mean that there will never be GeoJSON circles, ellipses, and curves, but that they must be added to the core by a future RFC.

Here's an important point that may be obscured by formalities: RFC 7946 does not define a "GeoJSON 2.0." This is "GeoJSON." If you need to be more specific, e.g., in describing support for deprecated features like "crs", you should refer to "2008 geojson.org GeoJSON" vs. "RFC 7946 GeoJSON" or "application/geo+json GeoJSON." There is no "GeoJSON 2.0."

IETF process and people

I'm pleased to report that the IETF process works pretty much as described at https://www.ietf.org/about/standards-process.html. Whenever I got baffled, I found helpful and generous people to point me in the right direction. I'm going to stay involved in the IETF in one way or another.

Bonjour, Montpellier

I woke up yesterday morning in Montpellier, France, my home for the next 12 months. Here is the view of our neighborhood from the roof.

https://c1.staticflickr.com/9/8664/28212652704_6479847ff1_b.jpg

I'm happy to be here, with the last week of house cleaning and travel preparation far behind me. The trip itself, except for delays, was easy. My kids and I (Ruth and our dog went 4 days earlier to save money) wrangled our bags through many halls, stood in many lines, sat in many seats, and emerged into sunshine just as our patience was about to end.

https://c1.staticflickr.com/9/8678/28227771533_5b2edca713_b.jpg

I haven't left the house except to run with my dog across the river to Castelnau-le-Lez, the village next door, and to walk around the neighborhood with my family after dark to enjoy the silence of vacation season, see the stars, and spot geckos hunting for insects under the street lights. Friends have come by to welcome us back and I've unpacked and stashed our empty luggage. In a few minutes I'm going to log in and begin to catch up on projects and look forward to going out to visit friends this evening. There are a bunch of tasks ahead of us this week: getting new phone service and bank accounts, school registration, meeting with a French tutor, and shopping for home and office supplies, but I'm going to put these off for a few more hours and enjoy a break from lines and service counters.