Categories
Software Work

Running Our Own Fork of Apache Superset in Production

Here’s an update on my journey deploying Apache Superset and using Docker. It felt good to write about what I’ve learned at work, and it’s been a while: I don’t think I posted here that my job title is now Senior Data Engineer! But people who don’t work on computer infrastructure might not find this one interesting.

In 2023, we deployed Apache Superset at the City of Ann Arbor as our Business Intelligence (BI) / data visualization platform, choosing it over Microsoft Power BI or Metabase. That decision has been a resounding success. Superset is a rock-solid product that keeps getting better … and* we’ve saved over $150k and counting in license costs vs. proprietary software.

I’ve re-read the 2015 talk “Choose Boring Technology” a couple of times while working in my current job (that link goes to a slideshow version of the talk, turned into a website – that’s the format I’ve experienced it in). The author talks about having only three innovation tokens to spend on new tech at a given time. The rest has to be boring. Then when you’ve mastered the new tech, you get a token back to spend on something else.

Deploying Superset took all my tokens: Docker, DevOps, Linux sysadmin. I said, we will only deploy official Docker images released by the Superset project. No way are we in the business of creating our own, this is complicated enough.

I learned a ton in the intervening years. I’m still learning a ton. It’s great! As I’ve gotten those tokens back by becoming competent at those technologies, I’ve been able to do more with our Superset deployment.

First that looked like building our own Superset Docker image, tweaking the environment but not touching the code. The project forced our hand on this because starting in 4.1.0, it no longer included basic drivers needed to use Superset out of the box, most notably the one to connect to the PostgreSQL backend database. I’m still not entirely convinced this was the right choice for the project but I saw the other side’s argument that everyone really ought to be building their own image.

Categories
DIY Software

A Vision of Standardized DIY Kitchen-Mounted Household Tablet Displays

It’s 2026. People can use AI to generate copious amount of decent code, especially if they already program and especially if it’s for a low-stakes use case and imperfections are tolerable. And the world is awash in used tablets.

Thus it’s no surprise that at least 3 of my coder dad friends have mounted old tablets to the walls of their kitchens and living rooms and hacked together displays of information for their households. It replaces the paper calendars of yore with digital calendars, yes, but also displays family photos, weather forecasts, meal plans, shopping lists, chore lists, and various bespoke widgets.

A commercial version of such a product is the Skylight. But who wants to buy a new device and then pay a monthly fee? Everyone DIYs it instead. There must be thousands of takes on this project. But are they all one-off implementations of crufty code? And I can’t just deploy someone else’s solution? When I investigated the space six months ago for my own purposes, there wasn’t a single go-to candidate that looked usable. DAKboard is SaaS, Magic Mirror² runs on Raspberry Pi and a display?

It makes me think there’s a need for a standardized framework. I’m inexperienced when it comes to frontend development and have no mobile experience, so I’m not the ideal person to make it happen. But here’s my vision:

  • A well-made, simple Android and iOS app that can run on the tablet 24/7
  • It supports things like on/off/dim hours or waking-on-motion-detection
  • It has a framework for building plug-ins. These are widgets that can display on a grid. Like dropping widgets on a smartphone home screen, they can be various sizes, moved around, and be assigned to new screens you can scroll to.

The plug-ins I would build would be for Google Calendar, Google Photos, a chore list for my kids, and a generic web view widget. My neighbor created an app deployed on Vercel where we coordinate which dog is outside so they don’t bark at each other through the fence.

(I think this latter part is where this product shines: you can plug in janky vibe-coded web apps via a single widget).

Other devs would contribute plug-ins for Home Assistant, Notion, shopping lists, weather, etc.

Apache Superset, the data visualization software I run at work and contribute to, has invested massive effort in refactoring the codebase to support extensions. VSCode is an inspiration in this regard. The idea is that extensions will make it way easier for developers to contribute new modular pieces to Superset. I’m thinking something similar here.

Then an end user doesn’t have to know coding to use it. They install from their app store, then select and configure the widgets they want. They just populate the necessary config and credentials for each widget.

Initially I wouldn’t worry about the “accessible to layperson end users” or “on the app store”, those have a higher bar for code quality and then someone is on the hook for maintenance (though maybe that can be monetized, especially if it provides API services like weather?). I would just make an app you can sideload (I have sideloaded onto Android before, apparently it’s possible on iOS too).

What I really want here is that instead of thousands of us doing a crappy job on this, we get one rock-solid framework app and then individual devs build high-quality plugins.

Does this already exist and I can use it & contribute instead of building from scratch? Please?

If not, who’s coming with me? What stack are we building this in? Where do we start?

Categories
Cooking Science vs. Emotion

Hot Take: Aluminum Pots Are Fine For Making Maple Syrup

I have a 6 gallon aluminum pot that I wired an electrical heating element into. It appears in my first post on this blog, Homebrewing on a Potbelly Stove in 2015. I’ve used it with success to boil maple sap into syrup.

This year I went to lend it to a friend for syrup making and they expressed concern that the aluminum pot might contribute off-flavors to the final product. A quick search confirmed that indeed, this belief is widespread in maple syrup-making posts online – they say an aluminum pot is inadvisable due to the syrup’s acidity.

As a longtime beer brewer, this claim seemed questionable. Citation needed! Off I plunged into a rabbit hole. In short, here’s why I don’t think this risk can be real:

Categories
Jokes ruminations Writing

Caught sloppin’

Past participle: when others see through your attempt to pass off AI slop as your own writing and thinking, usually due to carelessness.

Ex.: “My teacher caught me sloppin’! I turned in my paper and forgot to remove a sentence at the end where ChatGPT asked, ‘if you like, I can complete one last pass of copy-editing.'”

“Sloppin'” can be used on its own to describe this lazy and deceptive use of AI, e.g., “I don’t read emails from John, he stays sloppin'”.

Categories
Software Work Writing

Reblog: good takes on writing with LLMs

I read these two pieces a few weeks ago and they were still kicking around in my head so I re-found them to share. They are nice complements to my 2023 post about LLMs being good coders and useless writers. They argue that, in fact, LLM writing is often worse than useless.

Link 1: Using LLMs at Oxide. This is the best guide I’ve seen for expectations related to LLM usage at a particular workplace. It acknowledges LLMs as valuable tools while focusing on their ultimate purpose, serving humans. It’s good throughout, but the can’t-miss section is 2.4, LLMs as Writers. Here’s an excerpt:

To those who can recognize an LLM’s reveals (an expanding demographic!), it’s just embarrassing — it’s as if the writer is walking around with their intellectual fly open. But there are deeper problems: LLM-generated writing undermines the authenticity of not just one’s writing but of the thinking behind it as well. If the prose is automatically generated, might the ideas be too? The reader can’t be sure — and increasingly, the hallmarks of LLM generation cause readers to turn off (or worse).

Finally, LLM-generated prose undermines a social contract of sorts: absent LLMs, it is presumed that of the reader and the writer, it is the writer that has undertaken the greater intellectual exertion. (That is, it is more work to write than to read!) For the reader, this is important: should they struggle with an idea, they can reasonably assume that the writer themselves understands it — and it is the least a reader can do to labor to make sense of it.

If, however, prose is LLM-generated, this social contract becomes ripped up: a reader cannot assume that the writer understands their ideas because they might not so much have read the product of the LLM that they tasked to write it. If one is lucky, these are LLM hallucinations: obviously wrong and quickly discarded. If one is unlucky, however, it will be a kind of LLM-induced cognitive dissonance: a puzzle in which pieces don’t fit because there is in fact no puzzle at all. This can leave a reader frustrated: why should they spend more time reading prose than the writer spent writing it?

Link 2: Your Intellectual Fly Is Open, linked in the above quote. It’s a short post. My favorite chunk:

When you use an LLM to author a [LinkedIn] post, you may think you are generating plausible writing, but you aren’t: to anyone who has seen even a modicum of LLM-generated content (a rapidly expanding demographic!), the LLM tells are impossible to ignore. Bluntly, your intellectual fly is open: lots of people notice — but no one is pointing it out. And the problem isn’t merely embarrassment: when you — person whose perspective I want to hear! — are obviously using an LLM to write posts for you, I don’t know what’s real and what is in fact generated fanfic. You definitely don’t sound like you, so…​ is the actual content real? I mean, maybe? But also maybe not. Regardless, I stop reading — and so do lots of others.

I see this from a few people in my professional network. It’s brutal.

“Your intellectual fly is open” is a good comparison to say “we see something embarrassing, we’re just not saying it” but it’s not strong enough in terms of the impact. Once I see someone I know writing through AI without disclosing it, I permanently distrust what they say from then on.

I was prompted to write this post when at a friend’s recommendation I listened to a podcast episode, AI and I: Why Opus 4.5 Just Became the Most Influential AI Model. The episode was okay, and I didn’t like the second episode of that show I tried. But I was struck by something the guest, Paul Ford, said. He spends much of the show discussing how he uses LLMs all day for coding and research. He’s building an AI-based product. But when it comes to writing, he said the bottom-line limitation of using AI is simple: “it’s not me*.”

It’s 2026 and I stand by my 2023 take. I double down on it, in fact: current LLM coding tools are leaps and bounds better than they were in 2023. When I wrote that post, Claude 3 had not yet been released, to say nothing of Claude Code, Github Copilot, Agent mode, etc.

But generating code is writing for machines. And LLMs still aren’t useful for writing to humans.

*I’m quoting that line from memory. I’m not going to re-listen to fact-check myself but please correct me if I got it wrong.

Categories
How-to

Everything I learned about winter tires

Sometimes you don’t intrinsically care about a topic but in the course of solving a problem you learn a bunch about it against your will. That’s me and winter tires. (For cars. Winter tires for bikes are fun and not a chore to me).

Here are my notes for … future me? My kids? In ten or fifteen years I’ll say “you should consider getting snow tires for your car, here’s the link to my blog.”

I find car stuff stressful, maybe writing this down will be cathartic.

Winter tires are worthwhile. Not having grown up in Michigan, I thought four-wheel drive was the thing for Michigan winters. I even bought a Subaru Outback. Then I learned from my car-savvy friends that winter tires make a bigger difference.

Why didn’t I have them when I lived in Chicago? I was about to blindly write that they weren’t necessary when I lived in Chicago because … the streets were plowed more? But that’s just wrong. Looking back on a few years of winter driving in Chicago:

  • I slid in the snow getting on Lake Shore Drive around 2008. I hit the curb, dented my wheel, and took the world’s longest bus trips to get my Corolla back from the repair shop.
  • About that time I barely made it home from work in a blizzard. The drive that normally took 25 minutes was 2+ hours. Along the way I totally lost traction on the Dan Ryan expressway. I was just sliding toward the barrier in slow-mo, wondering if I’d stop in time.
  • And I have a memory from some unknown age of trying to turn left across Lake Park Ave in Hyde Park and instead spinning 180 degrees into the oncoming lanes.

I was lucky to get away in all of those cases! I should have had winter tires in Chicago, storage would have been more annoying but I could have figured it out.

Categories
Life events ruminations

Kidneyversary

One year ago today* I gave away my left kidney. Taking a lap around the sun with only one kidney was everything I hoped it would be.

My body has long been fully recovered. I started learning ice hockey three months after donating; now I play in a beginner league and feel no sign of the surgery no matter how I stretch or sprawl. Besides my scars, which have faded from red to cream, there’s no sign I donated a kidney. I’m staying active, staying hydrated, and feeling great.

My one-year labs show my kidney function is as expected: about 60% of what I had with two kidneys. I gave away the larger one, which put me at about 45% remaining, but then the remaining kidney should have hypertrophied (grown) in response. At any rate, it’s getting the job done.

When I see my test values charted right on the edge of the normal range, I remind myself that my numbers might be concerning for someone with two kidneys but that’s not the accurate scale for me anymore and I’m where I should be.

This is, more significantly, my recipient’s kidneyversary. I still don’t know who they are and I remain satisfied with that arrangement. I hope the kidney is pumping away in good health!

Other donors mention have written that after a while, they forget about their donation. That’s humble, but in truth, it still pops into my head regularly. When the thought arises, it affirms parts of my identity that are important to me (I covered that in in the “how it feels” section of my blog post linked above).

One thing has changed since I wrote that earlier post: the donation never comes up in conversation. Immediately before and after the surgery, I talked about it with everyone. In the months that followed, people would ask me how I was feeling.

But now that it’s not affecting my life, there’s no context in which it arises. Which makes sense, it’s pretty far removed from the regular things people talk about. I can imagine a different timeline where I’m always deciding whether I should mention it, and I’m glad that’s not something I even have to consider. Sounds awkward.

I recently read The Serviceberry by Robin Wall Kimmerer. I believe the book began as this essay. In the essay and book, she quotes a Brazilian hunter-gatherer who has killed an animal larger than his family can eat. Asked how he’ll store the surplus, he replies, “Store my meat? I store my meat in the belly of my brother.”

* this sentence was true when I wrote it, but I’m a day late in publishing.

Categories
Local reporting Nature

Northern Flickers Drumming on My Chimney Cap

I didn’t ask for a fireplace in my bedroom. We hardly use it. And it means that when a loud clanging noise emits from said fireplace at six in the morning on a Saturday, it jolts me awake.

The first time I bolted upright. It sounded like there was an animal trapped in my chimney. I warily opened the flue, expecting a sooty bird to flutter out, but it was empty.

Eventually I realized the sound was percolating down the chimney, so I went outside to get a look. There I spotted a Northern Flicker (Colaptes auratus) drumming away on top of my chimney cap. Is it a cap or a cowl? I don’t know my chimney parts but it’s a metal thing on top that keeps the rain and animals out.

I wonder if this behavior is unique to the species, at least around me. I once observed a Northern Flicker drumming on a metal streetlight at Ann Arbor’s County Farm Park. I had thought woodpeckers peck into wood for food, but Wikipedia says they also use drumming to communicate:

Like most woodpeckers, northern flickers drum on objects as a form of communication and territory defense. In such cases, the purpose is to make as loud a noise as possible, so woodpeckers sometimes drum on metal objects.

I’ve experienced this early wake-up call several times in recent years. And I recently saw a Flicker – the same one that had just been waking me up? – drumming on my neighbor’s chimney cap across the street. When I texted them about it, they were inside trying to figure out what was causing the noise.

Last month I saw this bird feather around the corner from my house:

iNaturalist suggested the feather belonged to a Northern Flicker and several community members confirmed it. I hadn’t noticed the bird’s gold feathers (that’s where the name auratus comes from) from observing it perched so was surprised at this ID but the photos on Wikipedia show its golden underbelly. Maybe my wake up friend dropped this.

It’s a little annoying, but it doesn’t seem worth fighting. So far it’s been infrequent and, I think, only in the spring or early summer. The biggest discomfort came from not understanding the banging noise emanating from my fireplace, which is why I wrote this quick post: just in case anyone else is trying to figure out what’s happening. I hope our roof doesn’t need servicing for many years, but when that happens, maybe they can put an owl statue or some shiny ribbons up there as a deterrent.

P.S. As I went to publish I saw a button in WordPress offering to “generate title options” that would improve my SEO. Curious, I clicked it, and it suggested:


  • Northern Flickers: The Unexpected Noise in Your Chimney
  • What to Do About Noisy Birds Drumming on Your Chimney
  • Understanding Northern Flickers: The Sounds They Make

I hate this! It says these would “position my content as informative” and I agree they would likely get more clicks, but under a deceptive premise. This post does not deliver on any of those titles.

Someone has probably generated posts like those full of AI slop. And that right there is a big piece of what’s wrong with the web and search in particular.

The idea for this post occurred to me on a dog walk. I often write in my head on such walks and rarely do the ideas end up published here, to my chagrin. I played with the idea of dictating my thoughts during the walk and having AI clean up the typos and structure. The theory was that it would get me 90% of the way there and increase the number of posts I actually finish. But it added another editing step of putting the post back into my own words and tone and in the end did not save any time over cleaning up my own dictation.

Enough for now. Just had to let this post drift into another topic, which I can do because I’m a human being and it’s my own dang blog. More posts to come soon, I hope!

Categories
Gardening How-to Nature Uncategorized

An Easy Trick to Pollinate a Solitary Pear Tree

I haven’t got much room for trees at my house, but I wanted one fruit tree, and I love pears. So in 2021 I ordered a pear tree through the Washtenaw County Conservation Department’s plant sale. I biked it home from the Farm Council Grounds in Saline on a beautiful day spring day.

Two bundled up trees - just whips, no leaves - on the back of a cargo bike

That tree has thrived since then and is now almost even with our second-story windows. Last year it had many flowers, only one of which became a pear. We watched that lonely pear until it fell and was gnawed on by an animal.

I knew that this pear tree (Blake’s Pride) was not self-fertile. But it can cross with any other pear, including the Bradford Pear, aka Callery Pear, a loathsome invasive cultivar that looks pretty, smells awful, and breaks easily. You may already know and dislike it. I just searched up “Bradford Pear” and see Missouri is set to ban it from being sold – good stuff.

Ann Arbor has many of these misbegotten trees. One grows half a block away from me and I was hoping that would be close enough to do the trick. But our yield of one pear showed it was not.

What to do? I considered trying to hand-pollinate between the Bradford Pear and my pear. Their periods of flowering overlap. But that would be tedious and I can’t reach the top half of the tree.

Then an idea came to me: I would clip a bough from the Bradford Pear and hang it in my tree. Insects would alternate between the two kinds of flowers and not know the difference.

It was free and took five minutes. And it worked! I have dozens of tiny pears set on my tree:

A close up shot of a pear bough with a few tiny developing fruits

The clipped branch’s flowers wilted after a few days, but it had been long enough for the bees to do their business.

I have a bee hotel in my driveway maybe forty feet from the tree. I credit those little solitary bees with doing the work here. They didn’t have to repay me for hosting them but it’s sweet that they did.

Bee hotels are neat. Here’s a picture I took in 2020 during COVID lockdown of a large bee hotel at the Michigan State University Children’s Garden:

a large green bee hotel labeled "Native Bee Hotel" with many pieces of wood with drilled out holes

Mine is only the size of one of those rectangular blocks on the top shelves of this hotel.

We’ll see how the harvest turns out, but I’ve solved the pollination problem!

Categories
DIY Gardening How-to Nature

My Tote-ally Awesome Rain Barrel

I’ve now had a full season with my mega-sized rain barrel. It’s great. Here’s how it works and what I learned along the way.

The “barrel”: I also have a proper 55 gallon barrel collecting rain from my garage, but the barrel that’s the focus of this post isn’t actually a barrel – it’s a caged IBC tote (“Intermediate bulk container“) that holds a whopping 1,040 liters of rainwater!

Status: full.

I bought it from a local government unit, the Washtenaw County Conservation District (store link). It didn’t fit in my minivan so I carried it home on my cargo bike – that’s a whole ‘nother story that I wrote up as The biggest thing I’ll ever tote on a bike.

I won’t lie, these IBC totes sure are ugly! And mine is visible from the street. Here’s how it looked at first:

I had planned to build a wood screen in front of it and paint a mural or something, but it was simpler to buy online a black cover that zips right on. Also, apparently these totes will grow algae inside if you don’t cover them or paint them black to block out the sunlight, so this was a 2-for-1 solution.

Fully installed