Station Identification

Hi, my name is Sean Gillies, and this is my blog. Blog is short for "web log". I write about running, cooking and eating, gardening, travel, family, programming, Python, API design, geography, geographic data formats and protocols, open source, and internet standards. Mostly running and local geography. I live in Fort Collins, Colorado, and sometimes in Montpellier, France. I work at TileDB, which sells a multimodal data platform for precision medicine. I appreciate emailed comments on my posts. You can find my address in the "about" page linked at the top of this page. Happy New Year!

https://live.staticflickr.com/65535/54250758229_1ae83401e3_b.jpg

The Aurora Borealis over Northern Wyoming, viewed from Colorado on May 24, 2024.

How to start a garden

Gardening looks like a fun and satisfying activity, does it not? And a source of fresh and tasty ingredients? It really is, and it’s something you can enjoy for the rest of your life. You have probably seen older relatives or neighbors puttering contentedly in their gardens. That could be you someday!

If you don’t have a garden, and want to try one, how do you get started? I’m going to try to answer that question and point you to better and more complete gardening resources.

I know very little about commercial farming, but I do know about growing fruits and vegetables for fun. I grew up in a gardening family. My parents were students and hippies and our household budget was super tight for a few years. A big backyard garden was part of our subsistence plan. After a teenage hiatus, during which I lived on M&Ms, Doritos, and Mountain Dew, I returned to gardening and have been at it ever since. I even had a little container garden when we were living in Montpellier, France.

https://live.staticflickr.com/4567/38575574352_403b8c901b_c.jpg

A tiny kitchen garden (un potager, in French) in November.

Currently, my garden is pretty small, 18 square meters (190 square feet) in 6 raised beds and a strip of soil adjacent to one of the beds. It provides all the basil, beans, cucumbers, lettuce, scallions, and zucchini that my family can eat from June to September, plus half of our annual garlic consumption, and some novelty melons and peppers.

During the growing season I spend about 30 minutes each day watering, weeding, and whatever [1]. Much of that time is pure enjoyment. I could garden more efficiently if I wanted to. Preparing the garden for planting in the spring takes a couple weekend afternoons of hauling compost and digging, but not more than that.

Let’s presume that you’re interested in gardening in soil, on the ground. It’s a practical starting point and I’m not qualified to give advice about hydroponic or container gardening. With that, your basic requirements are soil, sun, water, and seeds.

If you can, start with accessible, flat, non-compacted ground, that is mostly free of rocks and weeds, and is close to a water source. Pull and dig out the existing vegetation and mix commercial compost into the top 6 inches. A 1.5 cubic foot bag per 10 square feet is a good start. Ground that has seen a lot of foot traffic or has had cars parked on it will need a lot of treatment before plants will thrive in it. Water tends to run off sloped ground, and scattered seeds will, too. From a gardening perspective, turf grass is a weed, and a chore to remove. I installed raised soil beds in my backyard instead of removing our turf, but that’s pretty expensive and I don’t recommend starting this way. A small garden won’t need any herbicides. Just pull the weeds by hand or dig them out with a trowel.

Plant growth is powered by photosynthesis, and fruiting plants, such as cucumbers, beans, and tomatoes, enjoy full sun. Leafy greens like lettuce and spinach will tolerate partial shade. Sun might be the limiting factor in an urban or suburban environment with buildings and trees. You can’t add more sunshine, but climbing plants can get more out of limited light on the ground. In some cases you may want to filter photons. My neighbor has found that our Colorado Front Range sunshine is too strong for her favorite tropical peppers, and hangs sheets of fabric to give them a marginal amount of shade. This is an advanced gardening scenario, however.

Photosynthesis converts carbon dioxide and water into the sugar that fuels a plant’s growth. Water will be one of your most important considerations. Your garden’s water needs will be determined by soil drainage, but mostly by the growth rate of your vegetables. If plants are wilting, they are not growing. That’s the signal that I look for in my garden. It’s fine for the soil to be dry on top as long as the plants look perky. It’s hard to over-irrigate in sunny and dry climates, so I’m not very skilled at recognizing the signs of a waterlogged garden. I water by hand with a hose and a sprinkler wand attachment. This is a perfectly adequate way to start.

Choosing what to grow and when to put it in the ground is a fun puzzle. In any climate there is a good variety of plants to try. Since most will require 60-90 days of growth before harvest, there is some commitment involved. Assuming that you’re not trying to grow all your food, I suggest beginning with a limited variety at a time. It will be more rewarding to pick a bowl of green beans than to pick a handful of beans and one tomato. In a mild climate, you can easily grow one spring/summer crop and one summer/fall crop. For example, snap peas or spinach early in the year, and chard or winter squash later. And, there’s always next year to try something new.

My only recommendations on what to begin with are cherry tomatoes, basil, pole beans, cucumbers, lettuce, scallions, and summer squash. Cucumbers, beans, and squash will rapidly outgrow most weeds, thanks to their large seeds. Pole beans let you exploit conditions where light is scarce on the ground. Many Asian cucumber varieties thrive when trained vertically on a trellis. Cherry tomatoes do well in large pots or other containers and can climb if you provide structure like a wire cage. These are all great when you have limited space.

Scallions, or bunching onions, are perennial, cold-resistant, and tolerate some shade. Plant them on an edge of your garden, as they will spread when they have established, and you may never again have to buy slimy supermarket green onions. Lettuce is also good for cool weather and partial shade, and you’ll be able to pick leaves in less than 6 weeks. Sow lettuce seeds generously and thin them as they grow larger.

Fresh-picked basil speaks for itself. I like to grow both the Genovese and Thai varieties.

https://live.staticflickr.com/65535/51744477811_53503cf2ab_c.jpg

A raised garden bed packed with basil plants.

With the exception of the beans, lettuce, and scallions, which should be planted directly into soil, I start these seeds indoors in peat pots filled with general purpose potting mix, 6 weeks before their outdoor planting date, 3-4 per pot. Once it’s clear which is the most vigorous, behead the others with a pair of scissors, and let the favored plant take over the peat pot. After your last frost, stick the plant and its peat pot into the ground. Roots will have no trouble penetrating the pot as it breaks down.

Buying young vegetable plants in small black plastic pots from a garden store is an option to consider. They will probably be larger than plants that you would start at home in your first try. They’ll be more expensive than starting from seed, of course, and you won’t find as much variety as you will in a seed catalog. Still, you’re very likely to find good cherry tomato plants. Get some red Sweet 100 and sweet yellow plum tomatoes and plant them in 5 gallon pots.

Locate some flat, sunny ground, and add compost. Choose and start some seeds in peat pots or source some vegetable starts. Plant them after your last frost, water them regularly, and watch them for flowers and fruit. These are the basics of starting a garden. There are lots of little details, of course, but you don’t need to know all of them before you begin. A printed gardening bible, like Southern Living or Western Gardens, will fill in many of the details. I refer to Western Gardens often. Your local State University’s Ag Extension program will have tons of information about gardening in your particular climate. Colorado State’s is very good. I checked this blog post against CSU's Plant Talk as I wrote it to be sure that I was not contradicting the experts.

Lastly, here’s a brief shopping list for 2 5 x 5 foot garden beds, a nice small beginning garden.

  • Short, D-handle shovel: $24.99

  • Hand trowel: $8.99

  • Watering wand: $19.99

  • 5 bags compost at $8.99 each

  • 10 pack of 3” peat pots: $4.99

  • 4 quart bag of potting mix: $9.99

  • Seeds of your choice: $2.99 per packet

That’s less than $130. If you harvest 30 organic cucumbers, which 4 plants can easily produce, you’ll break even. Of course, this does not include water, which might be $40 per month, or more, and your time. Don’t expect to break even. Instead, look forward to developing a different appreciation for the weather and the seasons, and to the pleasure of enjoying your own homegrown cucumber or tomato.

https://live.staticflickr.com/65535/54250542956_5e14e2fcb1_c.jpg

A child holding two long white radishes, pretending that they are tusks.

[1] This expression is from Farm Days, by William Wegman.

Gardening in 2024

2024's gardening season was warm, dry, and long. Long enough to grow potatoes, followed by green beans, in one raised bed, and garlic followed by basil and peppers in another. Long enough to grow ripe Chanterais and watermelon, even with a slightly late start. We had the usual good amount of cucumber and zucchini.

This was my best melon harvest yet. More than a dozen small Chanterais (a smooth-skinned canteloupe) and five large personal-sized watermelons. One of them weighed 4 kilograms!

https://live.staticflickr.com/65535/54114422186_e8c75f234b_c.jpg

Two halves of a large watermelon the size of a small watermelon on a bamboo cutting board.

We had 3-4 cucumbers a day in July and August and were still picking one every other day in mid-October.

https://live.staticflickr.com/65535/54113561487_4f9af62476_c.jpg

A cucumber shaped like a question mark, wondering, on October 10, when summer will end.

August, September, and October were all about beans, beans, beans. So many bean pods.

https://live.staticflickr.com/65535/54114752814_03a2238b99_c.jpg

A large steel bowl full of green bean pods on October 24.

Our long season allowed all my sweet peppers to fully ripen. We grew yellow Corno di Toro and red Carmen peppers and cooked them into piperade and similar dishes.

https://live.staticflickr.com/65535/54114422181_8c099e36c7_c.jpg

A large steel bowl stacked full of long, thin, yellow and red peppers.

I planted Shishito peppers this summer and neglected them for more than a month. Summer went so long that there was time for them to revive, flower, and produce a pretty good crop of fruit before the first frost. I'll grow these again next year and take better care of them.

https://live.staticflickr.com/65535/54114752839_497ded061c_c.jpg

Charred and salted green shishito peppers on a white plate.

For our raised beds, the only change I'm planning to make next year is to not grow potatoes and plant some other vegetables instead in the early half of the season. More spinach and mustard greens, perhaps. I got a Kitazawa Seed Company catalog in the mail on Saturday and am looking forward to browsing it for ideas.

The other major producer in my backyard was our Damson plum tree. I made over a dozen pints of jam, which I've been eating regularly, and a liter of Damson liqueur, which I've been holding for the new year.

We compost all of our household vegetable waste. Coffee grounds, egg shells, potato peels, banana skins, etc., and also fallen leaves and soiled straw from the chicken coop. Every year we transfer the mature composted matter into our raised beds. Despite this, we seem to be running a small nutrient deficit. Plants languished in my one bed where I have not planted a late summer crop of beans, and I resorted to using a fertilizer solution to wake up the Shishito peppers. I'm considering the removal of some tired soil and replacing it with commercial compost.

2024 was an uncomplicated year for backyard gardening here. Access to tap water, of course, means we're always gardening in easy mode. We had no hail, no late or early freezes, and plenty of sun. 2025 could be different. We will have to wait and see.

2025 running goals

2024 was a bust, but I like my plan and am going to reuse it for 2025. That means my A race is the Bear 100 Mile in September and my B race is the Never Summer 100K in July. I'm already registered for those two events. I'm still looking for shorter events for April, May, and June.

My long range planning spreadsheet looks like this today. 32 weeks of training in four phases. It's modeled after the one on page 230 of Jason Koop's book (2nd edition) and begins with eight weeks emphasizing speed work and weight lifting, with plenty of active recovery and bike riding.

https://live.staticflickr.com/65535/54237136408_fd421a94dc_b.jpg

Screenshot of a Google spreadsheet. Each week from January through September is a column.

My oldest kid is signed up for the Bolder Boulder 10K in May, and I'll be supporting her there. Maybe I should sign up for it. I have never run a paved 10K.

My friend David Bitner, who got me into ultrarunning, is coming to Colorado for Never Summer and I am super excited about that. It'll be a good time.

Running in 2024

2024 was a tough year. I was injured most of the time, started no races, and realized less than half of my running volume goal. Lessons learned include:

  • Don't try to run through an arthritis flare-up. Switch to lower impact activities.

  • Be conservative about increasing training volume. 10% a week is a healthy limit.

  • High intensity training in a pool is fun and useful.

  • It's good to make friends with elliptical trainers and treadmills.

I had a moment of decent fitness in June and enjoyed running in the Alps during my family's summer vacation. One day I ran up to a gondola station below Mont Blanc, four miles of 20% grade trails, one of the steeper runs I've ever done. It was a nice to grab a coke, an espresso, and a brownie at a café before heading back down. Definitely a highlight of a difficult year.

https://live.staticflickr.com/65535/53942610897_0e644a5926_b.jpg

Deck of a trailside café above Chamonix in the French Alps.

Late fall biking

I've decided to try to ride a bike for exercise more in 2025. Run harder, but run less, with more active recovery and low-intensity outings on a bike. At least until June, when I need to start building the running and hiking endurance that I will need in September.

I got a new bike to make this more fun. It's a Rocky Mountain Solo C50 and I bought it from my favorite local bike shop, Drake Cycles, last Saturday. The first thing I did was pedal it from home up Spring Creek Trail to Pineridge Open Space and ride some laps around the pond. It sure beats riding my commuter bike on dirt and gravel. I haven't bought a new bike or any new bike components in 10 years. Electronic shifters feel like magic to me.

https://live.staticflickr.com/65535/54189616719_ef97cbfdda_b.jpg

A dark blue-green bike with wide drop handlebars leaning on an interpretive sign in a dry valley under an overcast sky.

So far this week I've done two rides from the barn where we keep our horses while Bea has been doing her equestrian stuff. One at sunset and one at sunrise. I've been three miles east of the barn and seven miles north of the barn, following roads on the PLSS section grid.

https://live.staticflickr.com/65535/54189616674_92bf31726f_b.jpg

A dirt road at dusk, headlights of an approaching truck, and orange sunset glow behind the Rocky Mountains.

In the neighborhood of the barn, the ground is completely free of snow and quite dry. Passing trucks raise medium density clouds of dust. There are scattered homes out here, and vehicles going to and fro periodically. There are large construction sites, too, which can mean a wave of large rigs pulling trailers.

https://live.staticflickr.com/65535/54189616694_998304cd98_b.jpg

A rolling dirt road and brown grassland with snow-dusted mountains in the background.

I've got a lot to learn about this kind of riding. The right tire pressure for road and trail conditions, for example, and how to get in and out of the drops smoothly. How to descend and corner safely, and how to survive washboard surfaces. Dressing, too. I'm riding at a low intensity and don't generate as much heat as I do when I run.

One of my favorite things about riding further east is the panoramic views of the Front Range peaks. I can see Pikes Peak, Mount Evans, Longs Peak, and the Mummy Range, a span of 200 kilometers, from the top of every rise.

Productive running

At last, I'm less than 1% injured and am getting back into regular and productive running. We've had a long stretch of mild and dry weather here, which makes it easy to just lace up and go. I ran four times last week, including a nice hilly run in Lory State Park, and will run three times this week. Thursday I did some harder running and a bunch of strides for the first time since June.

Some faint numbness lingers on my left quad, but my hip, butt, and leg are otherwise just fine. My doctor prescribed a course of prednisolone in early November to calm down my pinched nerve and that seemed to banish the last of my Achilles tendonitis as well. My right heel and calf haven't been pain-free in a long time. It's really nice to feel good.

https://live.staticflickr.com/65535/54189776380_5425f11980_c.jpg

Shoes, legs, and shorts in warm December sunshine

Python typing mulligan

This is why I've been hesitant to add type hints to Fiona, Rasterio, and Shapely. David Lord on missteps and misgivings:

I want a "start over" tool for type annotating a Python library. I started with Flask as untyped code, then added annotations until mypy stopped complaining. But this didn't mean the annotations were _correct_. Over time I've fixed various reported issues. I feel like if I could start from scratch again, I'd probably get closer to correct with the experience I've gained. But removing all existing annotations and ignores is too time consuming on its own. #python

Let's fucking go

I saw a physical therapist yesterday. I had a virtual visit with my physician today. I had a 2 mile hike in the sun around a local reservoir. Now I'm listening to the Glenn Branca Orchestra on The Frow Show and my take on my health is: let's go!

The expert consensus is that I did not injure my spine, but that muscles in the left side of my hip have clamped down on a nerve. I'm going to proceed as if that is true, foam rolling, walking, and running through the pain, and not worrying about my spine cracking in pieces. I do have a little bit of numbness in my upper left leg and so I will not directly dive into long technical downhill runs. I expect that I'll resolve that soon.

A new CLI for GDAL

Even Rouault has proposed a new, modern, and more coherent command line interface (CLI) for the GDAL/OGR project. I think it's a good idea and a good time to do it. I've wanted a better one for about 15 years. Even credits Rasterio for inspiration, and that's gratifying to see. I started writing Rasterio 10 years ago in part because I wanted a better CLI for GDAL.

What I wanted in a GDAL CLI were the following features:

  • A root command and a few subcommands, one namespace for everything.

  • Uniform arguments and options with predictable ordering and naming.

  • Good documentation of arguments and options.

  • More subcommands with fewer options each. Making gdal_translate into 3-4 commands, for example.

  • Input and output that favor stdin/stdout and JSON.

  • Ease of installation. For example, with pip instead of an OS package manager.

I estimated in 2013-2014 that it was not feasible for me to achieve those goals within the GDAL project itself. GDAL and its community had no funding for this kind of work at the time. I found the GDAL project's tests somewhat inscrutable and frustrating. A hefty legacy of documentation and folk wisdom about the old ways would have to be updated. Mostly by me, certainly. And the GDAL user community largely did not care. Free software that was fast and effective (and, most of all, free!) was already more than most people had dreamed of. A GIS analyst had so many business and organizational problems to deal with already that the rough edges of gdalinfo and gdal_translate didn't even crack her top 20. Software polish wasn't a big concern in the second decade of FOSS4G. I think it's still a hard thing to sell. Individual consumers will pay money for slick, well-designed software that makes them feel good. Organizations value polish less. And neither GDAL nor Rasterio sell anything to individual consumers.

Overhauling gdal_translate, ogr2ogr, and friends within the GDAL project looked like a non-starter to me. Pushing a herd of boulders up a hill, by myself, for free, for a community that was largely content with working around and stepping over these boulders. I think I made the right choice for myself. I got to start from scratch, move fast, and use a modern CLI framework. I made a command line interface for Rasterio that, while not perfect, met most of my goals. And I didn't go broke or burn out while doing it.

Today, thanks to years of fundraising work by Howard Butler, Paul Ramsey, Kristian Evers, and Even, the GDAL project does have funding to overhaul its command line interface as an aspect of overall project health and maintenance. Multiple developers can be paid to work on it. They won't have to donate their time to it as I would have. Rasterio's command line interface can't be adopted by GDAL, or be forked to become GDAL's because it doesn't have all the features of existing GDAL programs (or even of gdal_translate and ogr2ogr for that matter), and my decision to have more subcommands with fewer options is kind of against the grain of GDAL. But the new GDAL CLI can adopt the demonstrably useful features and design of Rasterio's. JSON output, for example, is something that GDAL has already picked up from Rasterio.

Rasterio will certainly fade a little if the new GDAL CLI is designed and executed well. But that's in the nature of software and software communities. Rasterio has always depended on GDAL and benefited from being built on a technically solid and well loved foundation. And I didn't invent CLI subcommands and JSON output, not at all. It's not unfair. If you succeed in open source, if you move the needle, you will be emulated. In this case, I think we can call it progress. I'm content.

In the long run, I stand to get half of what I originally wanted from a GDAL CLI, the first three of the six features I listed above. And there's probably still room for a suite of Unix style programs with different opinions and design decisions, especially if it and GDAL agree on basic concepts, arguments, options, and flags.