Categories
Climate change Gardening Nature ruminations

Relating to natural life today

In the last month I took a family vacation to the Great Smoky Mountains and read two novels about logging: Ron Rash’s Serena and Annie Proulx’s massive Barkskins. Here are some resulting thoughts about trees, creatures, and the people who inhabit their world.

The natural world in America is nothing like what it was

We fall into the trap of thinking that climate change is unprecedented in its destruction of the natural world. But it has a clear predecessor in the deforestation of the period c. 1600-1960, documented in Barkskins, during which nearly every tree in America was cut down, every forest razed, and most wildlife extirpated. The first two sections of Barkskins start with Europeans trapping all of the beavers, minks, and martens in the northeast. Only after the furs are gone do they move onto logging.

In Serena, the logging barons clear-cut the Smokies before selling the land to the government for a national park. Serena is fiction, but this part of the story is true. In the Smokies, we hiked to Avent Cabin, a structure built around 1850. It contains a picture showing its setting around 1920, when it sat in a clearing: all of the surrounding trees had been logged. Now the cabin is again back in the woods, as the regrown trees approach a century of age.

Of course, letting the land go wild again does not recreate the complex webs of life that existed before Europeans arrived. Keystone species like the American chestnut and the passenger pigeon are extinct and megafauna like moose and bear – characters in both novels – have limited presences. The city nature areas and state parks I visit are a sad joke compared to what they held five hundred years ago. At the end of Barkskins, a character muses about “dark diversity,” the species whose absences from an ecosystem can be measured. There’s a lot of that here.

Both novels do a good job painting the picture of natural splendor that was destroyed forever. As a Michigan resident, I particularly appreciated the Breitsprechers’ trip to survey the endless, towering white pines of this state. My family has stopped at Hartwick Pines State Park on our way up north, a tiny postage stamp of old-growth forest that escaped logging. It’s the closest we can get to experiencing what was once here.

Despite being once despoiled, the trees and wildlife in the Smokies were still beautiful by modern standards. This lifted my spirits. There’s something encouraging about the fact that we’re a hundred years past the low point for trees in the Smokies and moving in the right direction. When it comes to logging, at least.

Categories
Cooking Recipe

Easy Vegan Chili with TVP

This chili is easy to make, healthy, and my kids all like it, so I cook it frequently in the colder months. It’s also vegan and gluten-free.

The recipe evolved over the years (from a mediocre starting point) and I typically just cook it from memory. But a couple of people have asked for this recipe and I’d probably be more consistent if I cooked it to spec each time. I recently took notes as I made a particularly good batch and behold, a recipe.

There’s one lesser-known ingredient: TVP, which stands for textured vegetable protein. This recipe works fine without it but the TVP takes it to the next level. I keep TVP in the pantry but acknowledge it’s a divisive ingredient that some people dislike. Wikipedia notes, “Because of its relatively low cost, high protein content, and long shelf life, TVP is often used in prisons and schools, as well as for disaster preparedness.”

Without further ado, chili. It’s not spicy (unless your chili powder is powerful) so that everyone in my family can enjoy it. I like it hot so I just add hot sauce or chipotle powder to my bowl. This makes a big batch, around 8 servings. It’s good leftover and freezes well.

In short, saute the vegetables and cook a bit longer in tomatoes with spices until everything is soft. Then add beans and broth, cook a while, add TVP, cook a little more. Serve over thick, crumbled-up corn chips (Ann Arbor Tortilla Factory is the best, Fritos is fine too).

As in my lentil soup, smoke gestures at the meat that some might be expecting. Feel free to increase or modify the spices, this is a starting point.

Easy Vegan Chili with TVP

Serves about 8. I’m separating the ingredients and cooking steps so that my recipe software can parse this post correctly.

Ingredients

  • 3 tbsp vegetable oil
  • 1 red onion, diced
  • 1 yellow onion, diced
  • 4 cloves of garlic, diced
  • 2 bell peppers, chopped
  • 1 can (14 oz.) diced tomatoes
  • 1/2 tsp chili powder
  • 1/2 tsp smoked paprika –
  • 1 tsp dried oregano
  • 1 tsp ground coriander
  • 2 tsp ground cumin
  • 4 oz or less tomato paste. If I have an open jar of tomato sauce in the fridge, I use it up here instead of the paste. An entire 6 oz. can will make it too tomato-ey.
  • 5 cups cooked or canned beans. I use a mix of black, kidney, white, and/or pinto beans depending on what’s on hand.
  • 2 quarts vegetable broth
  • 1 cup textured vegetable protein (TVP)

Directions

  • Dice the onions and garlic and saute in oil.
  • Add the peppers and saute another minute or two.
  • Add the can of tomatoes and cook until peppers are soft, between 5-10 minutes.
  • Add the spices and tomato paste, stir.
  • Immediately add the beans and broth, stir.
  • Cook until beans are about done. If they’re already soft, this can be as little as couple minutes after it comes to a boil. Adjust seasoning as needed – it will probably need salt.
  • Add the TVP. TVP sponges up liquid, which makes it a good hack for drying out a too-watery dish. Here that means you may need to add more water or broth if the TVP has soaked up too much liquid after cooking for a few minutes.
  • Check seasoning and acid one last time. It may need a teaspoon of vinegar for brightness.

This is all tolerant to variation. Use different kinds of onions, beans, spices, add bay leaves, etc. Just get the overall consistency and spicing right.

I was recently tempted into making the Serious Eats Chili Paste and I have some cubes of it frozen. I added some to the latest batch of this chili and it turned out very nice. I don’t often have time for such fanciful cooking but if this recipe is too simple for you and you want to work harder for more flavor, that would be a good twist.

Long live the bean soup project!

Categories
ruminations Software Work Writing

LLMs are good coders, useless writers

My writer friends say Large Language Models (LLMs) like ChatGPT and Bard are overhyped and useless. Software developer friends say they’re a valuable tool, so much so that some pay out-of-pocket for ChatGPT Plus. They’re both correct: the writing they spew is pointless at best, pernicious at worst. … and coding with them has become an exciting part of my job as a data analyst.

Here I share a few concrete examples where they’ve shined for me at work and ruminate on why they’re good at coding but of limited use in writing. Compared to the general public, computer programmers are much more convinced of the potential of so-called Generative AI models. Perhaps these examples will help explain that difference.

Example 1: Finding a typo in my code

I was getting a generic error message from running this command, something whose Google results were not helpful. My prompt to Bard:

Bard told me I had a “significant issue”:

Yep! So trivial, but I wasn’t seeing it. It also suggested a styling change and, conveniently, gave me back the fixed code so that I could copy-paste it instead of correcting my typos. Here the LLM was able to work with my unique situation when StackOverflow and web searches were not helping. I like that the LLM can audit my code.

Example 2: Writing a SQL query

Today I started writing a query to check an assumption about my data. I could see that in translating my thoughts directly to code, I was getting long-winded, already on my third CTE (common table expression). There had to be a simpler way. I described my problem to Bard and it delivered.

My prompt:

Bard replied:

Categories
ruminations Writing

Finish The Book, Sam

Another installment in what I’m realizing is a series of book-update blog posts.

In November 2021 I wrote half of a novel. In another six months I’d finished the rough draft. Then in November 2022, I resolved to edit it so that someone could read it. Then I said I would get it done by the end of June. I missed that deadline, but finally “finished” this fall! Two finishes so far.

In October I shared it with a few beta readers. There was good news and bad. The good news: it is not terrible! Most of the readers – my friends, granted – finished and enjoyed it.

It is, of course, rife with problems. Most of them I can chalk up to the ignorance of a beginner. For instance:

  • The book opens with my protagonist, Dani, waking up. I now realize that’s a deadly cliche.
  • Dani’s emotional growth arc needs work. I failed to plan that aspect of the novel before writing it.
  • Beta readers universally disliked my handling of a small romance subplot. They are right.

This is, in one sense, the worst news. Were the manuscript irredeemably bad, I would be done. Actually finished. But I believe there’s a chance it could become a good, solid book … with a lot more work. And it would be a shame to waste that chance. Argh. I was so glad to be “done” and finally hand it to people!

It has been satisfying to discuss the world that only lived in my head with others who have now visited it. They had good questions and ideas for making it better. Now I need to steel myself and commit to re-entering that world, not leaving until I’ve shored up its weaknesses as best I can.

If I buckle down, could I make the changes in … two or three months? The rewrite list isn’t enormous. For instance, I’m not changing the perspective from 1st to 3rd person, a task I would not accept.

Discussing this at Workantile, my friend Anthony reassured me that I do finish things. And I have finished things. Now I need to keep finishing. I hope I can find the focus and willpower to finish until this is actually Finished.

I keep coming back to this quote from an old interview with Andre 3000 about releasing imperfect art:

As an artist you can sit and tinker with stuff forever. You can add and take away but I think that’s kind of the importance of having someone over you saying, “We need this, this is a deadline.” Sometimes those oppositions or those who push and pull are needed because we’ll just sit and tinker forever. There are actually songs on The Love Below that were not finished, but that’s how they are, that’s how it came out.

I just knew I wanted to put that [imperfect song] on there, but it wasn’t done, but it was enough.

The GQ&A: Andre 3000

The worst would be to sit on this book and not keep improving it. It’s not timeless material and I need to wrap it up and move on and stop having it paralyze me. So I think I need to say, February is the deadline. I hope I work hard on it until then and fall back in love with the story and the process. But even if I don’t, or I only complete some of what I hoped to, it might be time to say, it’s enough.

In the meantime, feel free to ask me about the project and encourage and/or shame me depending on how it’s going!

Categories
Local reporting ruminations

Advertising Overload

This post is a tirade against the ever-increasing presence of advertising in my life, prompted by attending a University of Michigan basketball game.

I went to the Crisler Center last night, where Michigan lost an exciting shootout against Long Beach State. It was entertaining. Both teams were very talented and tried hard.

I make it to a couple of Michigan sports events each year and will crown Michigan Athletics the victors and the best… at cramming advertisements into the experience. Always innovating. I’d love to see a photo series showing the interior of the Crisler Center over the decades, documenting the creep of ads.

How many ads would you think can be placed on the basket itself? Let’s count. Here’s the view of the near hoop from my seats:

That’s between four and six ads, depending on how you count: the base pad, the vertical pad (“meijer meijer meijer” lol), the State Farm pad by the rim, and a freaking TV ad mounted up top. Now let’s look to the other hoop and see what’s facing the court:

From this angle we can see there’s also the UMCU ad and the Libman ad. Each basket is adorned with seven corporate logos plus a TV that plays ads for Coke Zero and Jersey Mike’s. I wonder how many ads I saw over the course of the game. Dozens? Hundreds?

Categories
DIY How-to Making

Replacing the Logo on a New Era Baseball Cap

My brother recently suggested I could upgrade my hat game. He was right: the crusty, adjustable-strap White Sox hat I’d worn for years was due for replacement. I liked the fit and look of the New Era 59Fifty wool ballcap he lent me. But I didn’t care to advertise for a team (a.k.a. company) I don’t care about, nor did I wish to invite small talk about sports.

My mission: replace the logo on an official New Era baseball cap with one of my own design. It was a fun mixed-media project, part art, part craft, and part hack.

I ordered a gently-used cap from eBay. If you don’t care about team logo, the choices are vast! I purchased a 1990s vintage black hat with a black Yankees logo for $13.

A black vintage Yankees hat, untouched
The original hat, ready for surgery

First I removed the existing logo. I used a seam ripper to slice threads and pliers to yank on loose ones. When removing logos from other garments, I rip stitches from the back, but that wasn’t possible here due to the white backing liner on the inside.

Many of the threads have been picked off
Going…

This part was slow going. All of the yanking with my dominant hand bent the cap slightly. I probably should have done more slicing and snipping and less brute force with the pliers.

Going… (this was messy)

The result wasn’t perfect. A few threads from the logo remained and I pulled out a little material from the hat itself. But it sufficed once I covered it up. I wonder if contrast would have helped. Would a white logo on black hat work better (because the white logo stitches would be easier to selectively remove) or worse (anything left over would stick out)?

Gone! The outline visible here can’t be seen under the new logo.

Next I made the new logo, using the community laser cutter at All Hands Active. I downloaded the Extinction Symbol and loaded it into Lightburn, which auto-traced the outlines. I was ready for the laser.

I cut the logo out of corrugated plastic sheeting, often called Coroplast. Most plastic is unsafe to cut on a CO2 laser, but Coroplast is okay. In Ann Arbor, unscrupulous companies print advertisements on this plastic and illegally place them in the public right-of-way near highway off-ramps and busy intersections.

I considered 3D-printing the symbol. That way I could have controlled its depth – the Coroplast stock is a tiny bit thicker than a New Era-style logo – and added touches like tiny holes through which to sew the logo to the hat. But that would have taken a while to design and print. And I liked the spirit of reusing roadside litter.

The laser burned nearly through and I finished it with an X-ACTO knife.

extinction symbol burned into a plastic sheet
After the laser cutter
shape cut out of plastic sheet
Trimmed with the knife

Next, I wrapped the logo. I used a small bundle of embroidery floss, I believe a 8.7 yard bundle of 6-stranded DMC 25. That was exactly enough for this project.

beginning to wrap the plastic with embroidery floss
Wrapping underway, trying to keep the knots on the back

A crafty friend at Workantile suggested I wrap the logo before attaching it to the hat. Brilliant!

logo almost entirely wrapped
Mostly wrapped
fully wrapped logo sitting on the brim of the hat
Fully wrapped and ready to mount

I got it almost entirely wrapped, then tacked it onto the hat in a few places with the same thread. Finally, I completed a few tricky wrapping stitches that were easier once the logo was anchored to the hat.

The wrapping is imperfect and in one spot I pulled too hard and compressed the plastic. But from across the room it passes for a commercially-made hat!

The completed hat with logo finished
The finished product

I’m pleased with how it turned out. I have a comfortable, well-made hat and instead of promoting a sports franchise, I’m starting conversations about living during the Sixth Mass Extinction. Seeing the logo reminds me to think timefully.

If I hack another hat, I’ll consider 3D-printing the symbol to try to precisely match the depth of the hat’s original logo. And I’d start with a hat that isn’t black-on-black so the New Era logo on the side pops: I enjoy the tension and confusion that comes from this being a mass-produced object with a hand-made logo.

Categories
Local reporting Politics

Eliminating Medical Debt in Michigan

Want some good news? Check out this neat article about RIP Medical Debt. A group of Philadelphians raised $17,000 to buy people’s medical debt for the purpose of forgiving it. As such debt can be bought for a penny on the dollar, that $17k purchased (through the coordinating entity RIP Medical Debt) $1.6 million of local medical debt. Seventeen hundred Philadelphians are receiving letters informing them that some or all of their medical debt has been abolished.

Medical debt is an abomination. It shouldn’t exist and doesn’t in most peer countries. This is a high-impact way to do something about this scourge. And RIP Medical Debt makes it easy to organize such a fundraiser. When I read that article a month ago I thought, “maybe I’ll organize a local debt abolition fundraiser for my 40th birthday!” (coming this February).

Unbeknownst to me, some of my wonderful friends on the local Mastodon instance were thinking something similar (minus the birthday part). And they went ahead and made it happen! Which does me a huge favor as it’s one less thing I have to organize. All I had to do was donate and advertise it here. Done and done.

Here’s the link to the fundraiser: https://ripmedicaldebt.org/campaign/eliminate-medical-debt-in-michigan As of this writing, we are more than halfway toward the goal of raising $10,000, which would erase up to a million dollars of debt that is haunting Michiganders.

Please consider donating and spread the word! Consider it an early birthday gift to me. And for my non-Michigan friends, you could check RIP Medical Debt to see whether such a fundraiser exists for your region and consider starting one if not.

Categories
Local reporting

Park(ing) Day 2023 in Ann Arbor

Last month was House Party week in Ann Arbor. I made it to two of the events and thought I’d blog briefly about them. This post is about Park(ing) Day, a national day in which public parking spaces are taken over and re-imagined as something other than car storage.

I’d briefly engaged with past Park(ing) Days in Ann Arbor. This one hooked me with a serious repurposing of parking: a mini skatepark in the street! The sk8r dad crew (me and Dave-O) skated over from Workantile to check it out.

Dave-O going up the mini ramp for a rock-and-roll
Categories
Software Work

Stumbling blocks with Azure CLI on the AzureUSGovernment Cloud

This is foremost a note to my future self, a reference for the next time I get stuck. If someone else finds it via a search engine, bonus!

Using the Azure CLI (command line interface) on Microsoft’s Azure Government cloud is mostly like using their regular, non-gov cloud. Cloud computing on Azure has been a positive experience for me overall. But I’ve gotten burned a few times when the gov cloud operation needs a different command than what’s shown in the official Azure CLI docs.

Each case took me several unhappy hours to figure out. The reason I was seeing a certain error message was unrelated to the reasons other people on the internet were served the same message. No one on StackOverflow asks, “might you be using the Azure gov cloud?”

Categories
#rstats Data analysis ruminations Software Work

Same Developer, New Stack

I’ve been fortunate to work with and on open-source software this year. That has been the case for most of a decade: I began using R in 2014. I hit a few milestones this summer that got me thinking about my OSS journey.

I became a committer on the Apache Superset project. I’ve written previously about deploying Superset at work as the City of Ann Arbor’s data visualization platform. The codebase (Python and JavaScript) was totally new to me but I’ve been active in the community and helped update documentation.

Those contributions were sufficient to get me voted in as a committer on the project. It’s a nice recognition and vote of confidence but more importantly gives me tools to have a greater impact. And I’m taking baby steps toward learning Superset’s backend. Yesterday I made my first contribution to the codebase, fixing a small bug just in time for the next major release.

Superset has great momentum and a pleasant and involved (and growing!) community. It’s a great piece of software to use daily and I look forward to being a part of the project for the foreseeable future.

I used pyjanitor for the first time today. I had known of pyjanitor‘s existence for years but only from afar. It started off as a Python port of my janitor R package, then grew to encompass other functionality. My janitor is written for beginners, and that came full circle today as I, a true Python beginner, used pyjanitor to wrangle some data. That was satisfying, though I’m such a Python rookie that I struggled to import the dang package.