Sign in

Dane Hillard

@dane.dev
543 followers 465 following 77 posts

Artsy, fartsy, musical computer nerd building modular software for @jstor.bsky.social freaks and geeks. Wrote Practices of the Python Pro 🐍📘 and Publishing Python Packages 🐍📦⬆️ dane.dev

PostsRepliesMedia
Dane Hillard @dane.dev · 24/12/2024
Being on an absolutely empty floor of an NYC office on Christmas Eve making pour over coffee and working on self-directed things has a certain charm to it.
A photograph of an office desk with a Kalita Wave pour over coffee brewing setup, a Picasso ceramic mug, a MacBook Pro with jazz playing on Spotify, and an external monitor with a fireplace YouTube video playing.
030
Dane Hillard @dane.dev · 02/12/2024
@willmcgugan.bsky.social we did it!
A Sunday roast with prime rib, Brussels sprouts, roast potatoes, and Yorkshire puddings
110
Dane Hillard @dane.dev · 29/11/2024
Got up at 5, braved traveling via O’Hare, and skidded home through a northern Michigan blizzard to make it in time for this shindig! Thankful for so much this year, too much to say here but it strikes me that I need to get better at writing them down.
A Thanksgiving spread atop a lace tablecloth. There are all the fixings including turkey, mashed potatoes, gravy, stuffing, cranberry bread, homemade and canned cranberry sauces, dinner rolls, butternut squash, acorn squash, and applesauce.A Thanksgiving plate atop a lace tablecloth with turkey, mashed potatoes, gravy, cranberry bread, homemade and canned cranberry sauces, dinner roll, butternut squash, and applesauce.
1100
Dane Hillard @dane.dev · 26/11/2024
The next big thing was the plugin system. Typer makes this part really nice, because everything in Typer is either a group or a leaf node—so a plugin can just expose a Typer app or root-level command(s) that get added to the CLI's root Typer app. It's Typer all the way down!
A screenshot of a Slack message where I describe the fun I'm having composing Typer applications together. The text says "I just converted repo-man to a Typer-based CLI (from Click) and now I can compose it as a subprogram of the ITHAKA CLI, which I'm doing from an installable CLI plugin. I feel like I'm playing Factorio or something." It also has an attached image showing the the ITHAKA CLI and its plugins, and possibly things they use, are Typer applications all the way down.
100
Dane Hillard @dane.dev · 26/11/2024
I also created an npm-like prompt to install newly-available versions to drive adoption further. With the metrics, I was able to see version adoption over time. Generally pretty good, but some clear stragglers! The upgrade prompting broke in one version, so I had to make the rounds with folks.
A screenshot of an upgrade prompt for an internal developer tool. The prompt says an update is available, shows the currently-installed version and the available version, links to the changelog, and tells the command to run to upgrade.A screenshot from a metrics dashboard showing version adoption for an internal developer tool as a 100% stacked area plot. As each new version is adopted over time, it takes up more of the plot.
110
Dane Hillard @dane.dev · 26/11/2024
Early on I invested in metrics, exposing user commands to our logging system. This made it easy to understand real-world usage and I could reach out to folks proactively if they were doing funky things. This also helped me encourage people to upgrade who hadn't, driving adoption of new stuff.
A screenshot from a Grafana dashboard showing metrics for an internal developer tool. It shows usages of the tool grouped in four different ways: by base command, by user, by tool version, and by Python version.
110
Dane Hillard @dane.dev · 26/11/2024
Just about a year ago, I started building an internal development tool to codify some of our most repeatable practices. The aim was to build something observable, composable, and intuitable, all without breaking the bank—we're a mid-sized non-profit at the end of the day.
A component diagram describing an internal developer tool architecture. The command users run can enter a command-line interface mode or a text user interface mode, both of which expose available commands. Commands use integrations to interact with external systems. Commands and integrations can be provided by plugins.
130