Brooks Groves
All Posts Browse by tag β†’

👥 Who’s the Biggest Generation Where You Live?

Inspired by Jake Steinberg’s map in The Twin Cities in 50 Maps: every census tract in the Seattle metro and in Tuolumne County, California, as a dot colored by its largest generation. Millennials lead 408 of 863 Seattle-area tracts, Gen Z fills the University of Washington, Gen Alpha gathers in the Pierce County suburbs, and Boomers lead 15 of Tuolumne’s 18 tracts, where one of the exceptions is a state prison.

Read post →

🏔️ Torres del Paine, Twice: A Sunrise Flight and a Patagonia in Miniature

Torres del Paine two ways: a sunrise flight from Lago Grey and the Grey Glacier over the Cuernos to the Torres, rendered with forge3d from Copernicus elevation and a clear Sentinel-2 pass, and a spin-it-yourself diorama with icebergs, condors, hikers on the W and a Patagonian wind button, plus sidebars on the glacier, the Cuernos’ dark tops, the wind, the pumas, the W and the O, and the fires, with podcasts and papers to go deeper.

Read post →

🐄 Zermatt in Miniature: The Matterhorn, the Gondolas and the Cows

Going big in Switzerland: Zermatt and the Matterhorn from swisstopo’s free 2 m elevation data and OpenStreetMap, with 46 lifts on their cables, the Gornergrat cog railway, 2,620 chalets with red geraniums, alphorn players, cows dressed for the Alpabzug, and a switch to ski season, plus sidebars on the Matterhorn’s African summit, the 1865 first ascent, the cog railway and the Eringer queens.

Read post →

🏁 The Dakar in Miniature: The Algarve, the Atlas and the Sahara

The little diorama engine takes on a whole rally: the 2027 Dakar from the Algarve across the strait to Morocco, through the snowy High Atlas, the Merzouga dunes and the Draa oases, down to Smara and back to Marrakech, with bivouacs, a convoy you can ride along with in the dust, and sidebars on how the Dakar left Africa, the Atlas rain shadow, ergs and hamadas, and the marathon night.

Read post →

☁️ Lake Tahoe Goes to the Cloud

I moved secchi's 12 million Lake Tahoe readings into SQL Server and Azure, proved every month matched, set it to keep itself current for free, and drew the map in QGIS straight from the cloud. Then I did it again in C#, and raced bcp against SqlBulkCopy.

Read post →

🦠 The Rock Eaters

In 1996 I worked with Doug Rawlings in Cape Town on bacteria that eat iron and sulfur. Thirty years later those rock eaters pull copper, nickel and gold from rock on four continents, leach rare earths on the space station, and may yet turn mine waste back into ore. Here is how they work, how far they have come, and the pioneer who helped start it.

Read post →

📟 The Handoff: Teaching SIERRA-FLOW a New Language

Before handing over an old system, you read it like an inheritance. I wrote down what my COBOL streamflow job really does, rebuilt it in C#, and replayed every production night through both until they printed the same bytes. Then I broke it on purpose, and SQL Server caught USGS quietly revising its own numbers.

Read post →

🧊 The Athabasca Glacier, 1844 to 2100

One view from the Icefield Centre lookout on the Icefields Parkway, 256 years of ice: a forge3d film of the Athabasca Glacier from its Little Ice Age high stand in 1844, through today, to 2100 under three emissions scenarios, with the Columbia Icefield and the three oceans its meltwater reaches.

Read post →

📖 Open the Hood: Notebooks for My forge3d Projects

Asked on X whether I use forge3d from notebooks or through agents, I made walkthrough notebooks for nine forge3d projects: Chaco Canyon, Serpent Mound, Yosemite, Humphreys Peak, the Icefields Parkway and four Washington animations, each running the project’s own code from raw data to a finished frame.

Read post →

⛏️ Mother Lode: The Holes in the Hills Where I Grew Up

I grew up in Groveland, in a county where the hills are full of holes. So I counted them: 1,040 shafts, adits and prospect pits from the old USGS topo maps, laid over bare-earth lidar. Columbia’s limestone rock gardens, the flooded Harvard pit, and old tailings that now sit out on Don Pedro Reservoir.

Read post →

🪨 Pikas, Part 2: Washington’s Quiet Rockpiles

21 of Washington’s old museum pika sites have no record nearby since 2000. Read the original labels and most aren’t missing at all: the pin is in the wrong place, or the label is just a place name. Here are the 10 real places worth a hike, on a map, from a low creek near Naches to the quiet Kettle River Range.

Read post →

🏺 Project Kiva: What the Laser Sees

I rebuilt Project Kiva into an atlas of ten archaeological places in bare-earth lidar, from Chaco Canyon to Cahokia, Serpent Mound and Poverty Point. Drag a line across the aerial photo to see the ground underneath, switch between five relief views, and turn each site in 3D with forge3d.

Read post →

🐟 Survivors of an Inland Sea

Pyramid Lake’s fish are survivors of Lake Lahontan, an ice-age inland sea the size of Lake Ontario. The cui-ui lives nowhere else on Earth; the world-record cutthroat vanished in the 1940s and came back from a creek 300 miles away. Maps, GBIF records, and a look back at heat shock proteins at UNR.

Read post →

🐟 Two Creeks of Gold

California’s state fish, the golden trout, evolved in just two creeks on the Kern Plateau. In 1876 a coffee can carried it over the Sierra crest, and now it lives in high lakes from the Sierra to Wyoming. GBIF maps of where it lives now, and why its meadow streams run so hot.

Read post →

🪨 What’s Up With the Pikas?

The American pika is the poster animal of climate change in the mountains. I checked 276 of its pre-1950 museum sites against every GBIF record since 2000. Where pikas are still being found, they’re found right where they always were. The low sites are the ones going missing.

Read post →

🏔️ Up the Icefields Parkway

A 95-second flight up the Icefields Parkway on a September evening: Lake Louise, Bow Lake, a slow pass over Peyto Lake, and the Columbia Icefield. Satellite elevation and Sentinel-2 imagery, rendered with forge3d 1.40.1, plus why the lakes first came out grey.

Read post →

📟 SIERRA-FLOW, Revisited: Normal Termination

My COBOL streamflow program compared Sierra rivers with made-up medians, matched them to the wrong rivers after sorting, and could never report a falling river. Version 3 builds real normals in COBOL from 30 years of USGS data, sorting 584,000 records in a second, and prints them on green-bar paper.

Read post →

⛰️ Where the Trail Runs Out

A researcher asked why two of my numbers didn’t match. The answer: roads named after mountains had pinned 1,560 city calls to the wrong preserves, and blurred addresses had hidden most of the real rescues. Fixing it put 1,489 Phoenix mountain rescues on the map, added Scottsdale and Boulder, tested whether Phoenix’s heat closures explain the drop in rescues (mostly, they don’t), and mapped 20,058 national park rescues.

Read post →

🍺 What’s in the Can? Building HopLove

The can says Citra, Mosaic, Strata, and I’d nod like I knew what that meant. HopLove is the fix: every hop in over 2,000 Pacific Northwest beers, what each one smells like, how hard it bites, and during fresh hop season, the farm it came from. Every number is a citation, not a claim. Plus a camera that reads the hops off a can, a chemistry primer with the molecules in 3D, and free data for anyone who wants it.

Read post →

🦎 Six Islands, Six Lizards

It started with a throwaway line on a Death in Paradise film sites tour: the little island in the background of the show has its own lizards. It does. Strand one small green lizard on six Caribbean islands and wait: on Guadeloupe you get six species, from the Marie-Galante giant to a golden-eyed anole whose whole world is two low islets. ANOLE-WATCH maps nearly 3,000 GBIF records of them. Along the way the data turned up its own mysteries, including a lizard placed 60 km from home because two archipelagos both have an island called Terre-de-Haut.

Read post →

🌫️ Where the Fog Lives

The Namib runs on fog, and this year we learned the fog itself may be alive: bacteria growing and dividing inside the droplets, eating pollution. If fog is a habitat, it needs a habitat map, so I built one from ten years of ERA5 reanalysis. It fades inland exactly the way a new ground-based study says it should, it peaks around 6 a.m. from October to February, and its foggiest square sits offshore over the Benguela Current. Plus the beetle that does the headstand, and the one that got the credit.

Read post →

🗿 What Really Happened on Easter Island

I grew up reading Jared Diamond, and the ecocide story is a hell of a parable. It is also mostly wrong. Three lines of evidence converged on Rapa Nui in the last two years — shortwave infrared satellite imagery mapping every rock garden on the island, 800 years of rainfall read from hydrogen isotopes in lake sediment, and a salinity meter walked along the coastline every ten meters. The farming was smart, the drought was real but survivable, and the moai turn out to have been standing wherever there was fresh water. The actual collapse has a date, a cause and a name, and it is not the Rapanui.

Read post →

⚪⚫ A Plate on a Rope: Getting to Know Lake Tahoe’s New Sensor Network

UNR opened up a network of sensors in and around Lake Tahoe, and I started reading along. A lake that only looked short of breath, a rain shadow you can measure in the soil, trees that breathe on a daily schedule, a soggy forest station explained by the ground beneath it, and a plate on a rope that still keeps score.

Read post →

🎲 I Wanted to Play Star Frontiers Again. I Accidentally Built a Game Engine.

It started with a photo of a 1983 Referee’s Screen on Instagram. Four games and about two thousand lines of JavaScript later: a shared engine, dice with real silhouettes and synthesized audio, and a survival game built on genuine USGS topo tiles of Railroad Valley, Nye County, where every distance and walking time is computed rather than invented. Plus three things I got wrong in public — impossible dice checks, atmosphere where information was needed, and death clocks nobody could see.

Read post →

🔥 Watching a Mountain Burn

The Hawk Fire burned across Peavine Mountain north of Reno on 22 August. Ninety-two minutes after ignition, a thermal satellite saw it 315 metres from an aspen grove where Basque sheepherders carved their names into the trunks a century ago — a place I hid a geocache in 2008 and used to ride to in the 1990s. Sentinel-2, VIIRS and a watershed analysis, all free and public, from eight hundred miles away. Includes the terrain conclusion I got wrong first, and why a healthy recovery curve would be bad news for the carvings.

Read post →

🌲 Finding the Trees

A stretch project into airborne LiDAR and point clouds — PDAL, canopy height models, individual tree detection — taken from a synthetic Finnish forest through to real national data. The detector scored 78.4% recall against 450 trees I placed myself. Then recall went up as the data got worse, perfect ground calibration hid a canopy bias, and a 100% precision turned out to be structurally guaranteed. Validated against 1,295 stands from the Finnish Forest Centre inventory.

Read post →

🏞 The Creek That Isn't There

Big Creek runs dry more than a third of the time, then floods 200 times over. Asking Snowflake's warehouse-native AI agent about the creek behind my hometown, and why it only worked because a tested dbt model was underneath it — plus 170 years of Groveland history explaining why the creek was never the town's water supply.

Read post →

🌲 Half a Million Trees

Learning Snowflake and dbt by pointing them at the federal Forest Inventory and Analysis dataset for Washington — 531,490 measured trees, where the wood is, where it dies, what fire does to both, and five confident predictions that turned out wrong, including two the data caught quietly lying.

Read post →

πŸŽƒ Boo Before You're Ready

A twelve-foot animatronic skeleton in the garden-center aisle in July isn't really about Halloween. It's the newsvendor problem, a tariff that changed its legal basis twice this year, a real-estate arbitrage disguised as a costume shop, and a seasonal-adjustment model quietly getting fooled.

Read post β†’

🌿 Eight Years Later, a 2018 Volunteer GIS Project Gets Its Answer

In April 2018 I sent a cold email to a nonprofit I had never worked with. Eight years later, I finally finished the project. A remote-sensing field report on three ONDA riparian restoration sites in eastern Oregon β€” 42 years of Landsat, a completely independent Sentinel-1 cross-check, and one two-sensor disagreement that turned out to be the signal.

Read post β†’

🌊 Thirty Minutes, Fifty Years of Fire

A watershed and post-fire flood-risk analysis for Tuolumne County, California β€” 1,151 stream segments extracted from a 30m USGS DEM, 30 major fires from CAL FIRE FRAP overlaid on the network, and one small fire that broke out on Old Priest Grade above Groveland on the exact ground the model was studying, while it was studying it. A hydrology love letter to the county I grew up in β€” thirty minutes with QGIS, GRASS GIS, and Claude via MCP.

Read post β†’

πŸ”₯ BdgrovesBot β€” A Wildfire Bot That Edits Wikipedia at 7am

Zero to live in a single day: a fully automated pipeline that watches WFIGS fire data and updates Wikipedia's Tuolumne County wildfire tables without a human in the loop. Python, Pywikibot, GitHub Actions, and pixi β€” through the authentication rabbit hole, a live test insert, and a BRFA filed by the book. Every morning at 7am Pacific the bot wakes up, checks the fire lines, and goes back to sleep.

Read post β†’

πŸŒͺ️ Sierra Nevada Alert Bot β€” Intel the Moment It Happens

It started as a question: could one person, with no server and no budget, watch an entire mountain range and know about every fire, flood, quake, and storm the moment it happened? Seven federal data streams on one free runner, plus a MetPy and Py-ART science toolkit with automatic NEXRAD signature detection. Posts to @SierraNevadaWX.

Read post β†’