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 · 04/08/2026
AHHHHHH WAKE UP GRAB THE DEPS AND DO A LITTLE SHAKE UP HIDE REMOTE CODE EXECUTION’S MAKEUP WHY’D YOU LEAVE THAT VECTOR ON THE TABLE SHOULD’VE CLOSED THAT GAPING HOLE WITH FABLE YOU WANTED TO — System o̶f̶ ̵a̶ is Down
022
Reposted by Dane Hillard
Mariatta @mariatta.ca · 14/04/2025
Thanks for a great conference @pytexas.org I had fun. All the talks are really good, I learned many new things. Closing it with an #IceCreamSelfie with @willingc.bsky.social , @dane.dev, and @bajoran.engineer At Yummi Joy. I had the Pandan and Squid Ink ice cream (vegan) #PyTexas
Selfie with a group of people each holding an ice cream cup with various ice cream flavors, inside a candy store.
Left to right: Carol Willing, Mariatta, Dane Hillard, Dawn Wages
062
Reposted by Dane Hillard
PyTexas Foundation @pytexas.org · 03/04/2025
Today on our Speaker 📣 Spotlight 💡 we're highlighting @dane.dev who will be presenting Place-making and Productivity: Build Maintainable Broad-scale Tools With a Small Team. Join us April 13 either in-person or virtually to watch. Get your tickets today pytexas.org/2025
021
Dane Hillard @dane.dev · 02/02/2025
Authors, if you see this, it's a sign to post the first line of your book. "Python, like me, was born in December of 1989." -- Practices of the Python Pro
020
Reposted by Dane Hillard
Samuel Colvin @sa.muelcolvin.com · 29/01/2025
Meet pydantic.run - a python sandbox for writing, sharing and running Python code in the browser. For example, here's sandbox with examples of @logfire.pydantic.dev instrumenting an HTTPX request and a @fastapi.tiangolo.com server using a sqlite database. pydantic.run/store/c81c32...
pydantic.run
pydantic.run
2255
Reposted by Dane Hillard
Charlie Marsh @crmarsh.com · 29/01/2025
We’re building a new static type checker for Python, from scratch, in Rust. From a technical perspective, it’s probably our most ambitious project yet. We’re about 800 PRs deep!
35722104
Dane Hillard @dane.dev · 25/01/2025
Oof, this is my signal to book my PyTexas travel…
000
Dane Hillard @dane.dev · 21/01/2025
Happy to be included alongside both new and familiar faces talking about some great things at @pytexas.org 2025! I see APIs, WASM, embedded, testing, observability, security, and more on the docket! See you in Austin 🐍
030
Dane Hillard @dane.dev · 14/01/2025
It seems like I could grab every command iteratively from the Click app and do something with it in Typer, but I think I’d have to manage all the argument and option type mappings too, which breaks down when an app uses custom types. Because then I have knowledge of the app, again.
000
Dane Hillard @dane.dev · 14/01/2025
For Typer-in-Click you can get Typer’s generated Click app through some utilities available in `typer.main` and add it to another Click app as usual as well.
100
Dane Hillard @dane.dev · 14/01/2025
It’s tantalizing because Typer uses Click under the hood, but it’s creating the Click app on the fly. So wrapping an existing Click app is a different beast. For Typer-in-Typer, you can “just”install the package, import its main app, and `typer.add_typer` it to your own app as a subcommand.
100
Dane Hillard @dane.dev · 14/01/2025
Namely I’m trying to channel @simonwillison.net’s `llm` to devs through our internal CLI and I want to avoid cloning all the option and subcommand names and so on in my own code. This makes more work for me, but also makes the code brittle to new releases of `llm`.
100
Dane Hillard @dane.dev · 14/01/2025
Has anyone successfully wrapped an existing Click app as a subcommand of a Typer app in a generic way? Typer-in-Typer is easy, Typer-in-Click is easy, but Click-in-Typer has proven nigh impossible without the Typer app knowing details of the Click app.
100
Dane Hillard @dane.dev · 14/01/2025
This project is also a monorepo of AWS Lambda functions alongside some packages, but none of them are particularly isolated from each other, proving quite challenging. I feel that in a monorepo the projects need to be readily extractable at any time, with a management tooling layer on top.
000
Dane Hillard @dane.dev · 14/01/2025
This was also at the tail end of a pairing session on a code base that has some challenging dependency injection patterns that we already gave up on during the session. We couldn’t for the life of us get a particular call site to behave how we wanted. More to fix soon…
100
Dane Hillard @dane.dev · 14/01/2025
Yesterday I learned something new about pytest! When using `with pytest.raises`, the line that raises the expected exception must come last in the block. Lines after it won’t be executed. This makes sense in retrospect (context managers) but cost me a few minutes of being befuddled.
110
Dane Hillard @dane.dev · 01/01/2025
I noticed this from my ballroom dance coaches; they’d often start you off with incorrect but ballpark mental models, and when you were finally ready they’d say “well so it isn’t *quite* like that after all…it’s more like this.” Inquisitive me got occasionally frustrated, but it worked well overall.
110
Dane Hillard @dane.dev · 01/01/2025
The cumin lamb ones are pretty good. Have purchased multiple times 🙈
000
Dane Hillard @dane.dev · 24/12/2024
The building having a hard time adjusting to the current temperatures and being a stiff 67 degrees or so has little charm to it.
020
Dane Hillard @dane.dev · 24/12/2024
This Dane is quite vulnerable to cheese
020
Dane Hillard @dane.dev · 24/12/2024
media.tenor.com
a boy in a blue shirt is saying my favorite 's gouda
Alt: The scene from "She's the Man" where Viola says "My favorite's gouda!"
000
Dane Hillard @dane.dev · 24/12/2024
All good here, on a project using py311/12/13 + pytest + pytest-cov with branch coverage reporting!
010
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
Reposted by Dane Hillard
GitHub @github.com · 23/12/2024
Are you an open source maintainer? Comment below 👇 and find others in the community on 🦋
13626541
Dane Hillard @dane.dev · 22/12/2024
This was an enthralling talk indeed. Thank you for sharing 🙂
020
Dane Hillard @dane.dev · 21/12/2024
There’s no gap on *my* machine 🤷🏼‍♂️
020
Dane Hillard @dane.dev · 18/12/2024
How do you catch a unique beaver? Unique up on it. Hope do you catch a tame beaver? Tame way.
000
Reposted by Dane Hillard
Django @djangoproject.com · 11/12/2024
Thank you to our 12 candidates for the Django 6.x Steering Council elections! www.djangoproject.com/weblog/2024... We’re elated to see so many stellar contributors rise to the challenge 🚀 Now time to vote! #python #django
0193
Dane Hillard @dane.dev · 12/12/2024
A great many WHATs aren't that special, and creating a service for a WHO that is really just doing a WHAT but naming it as if the WHO is very special and deserving of bespoke treatment means you may not be thinking about all the aspects of the WHAT and WHO ELSE might need to do that WHAT.
010
Dane Hillard @dane.dev · 12/12/2024
When e.g. merging platforms or products or businesses you'll maybe want to extract the lowest common denominators and rename them WHAT they do. You might still need layers that serve the different WHOs, but only if they are specializations. Much like an inheritance tree.
110
Dane Hillard @dane.dev · 12/12/2024
If you have something that's already named after WHO it serves, it's probably already doing things it doesn't say it does, and should be avoided for use by others, because now both the WHO and the WHAT in the name are wrong.
100
Dane Hillard @dane.dev · 12/12/2024
Regarding microservices, naming something WHAT it does lets it keep doing the thing it does perpetually. Naming something WHO it serves, on the other hand, lets it morph to serve ever evolving needs until it doesn't do what it did anymore.
121
Dane Hillard @dane.dev · 10/12/2024
It’s really shucking shellfish, yes
010
Dane Hillard @dane.dev · 10/12/2024
I haven’t seen anyone go in either. For $30 I want to be chased around the rink by Jim Carrey’s Robotnik
000
Dane Hillard @dane.dev · 10/12/2024
Yep, I certainly write more look-before-you-leap code than I should, still today. It’s natural to write defensively 😄 Some kind of static checker tool could even help fight that tendency, by specifically suggesting writing a try/catch rather than vaguely saying “look out!”
100
Dane Hillard @dane.dev · 10/12/2024
Brings some of the value of type hints (exception hints??) without going all the way to the level of changing Python's philosophy on error handling. More like a pair programming buddy saying "hey, that's gonna bite you there."
110
Dane Hillard @dane.dev · 10/12/2024
Some of it is dynamic and unknowable (does this loop result in an `IndexError` under any condition?, dynamic exception types, etc.) but some seems knowable (the called code has at least one `raise` in it or calls code that does). Seems useful to have a lil' utility for seeing such things quickly.
110
Dane Hillard @dane.dev · 10/12/2024
Is there some kind of nice static utility for Python that spans the gap between Java's checked exceptions and Python's ask-for-forgiveness where at any level of the call stack you can get an enumeration of the possible set of exceptions from the code below?
110
Dane Hillard @dane.dev · 06/12/2024
(We have a newer better way going forward but this was mid-incident which isn’t a great time to go experimenting)
110
Dane Hillard @dane.dev · 06/12/2024
Today I lost several hours of my life to forgetting that a GitLab template testing process we have involves manually building, pushing, and referencing a Docker image to be able to test updates to the template. This is roughly instance #13 of this problem, for me.
100
Dane Hillard @dane.dev · 05/12/2024
This can also be configured in [tool.ruff.lint] in pyproject.toml!
020
Reposted by Dane Hillard
Kara Sowles Deloss @feynudibranch.bsky.social · 03/12/2024
Is there an open source software maintainer in your life? Are you one? GitHub has a private community you can apply for at maintainers.github.com! Folks discuss common problems/solutions, there’s a direct line to GitHub product & betas, and I post funding opportunities. Spread the word please :)
maintainers.github.com
Maintainer Community
916272
Reposted by Dane Hillard
Dan McKinley @mcfunley.com · 21/11/2024
Hello, I wrote a new talk that is ultimately about how misery is a dumb strategy egoless.engineering
egoless.engineering
Egoless Engineering
It turns out misery is a shitty proxy metric.
2117762
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 · 01/12/2024
Doing the advent of code thang, maybe I'll actually finish it this year 😜 trying out uv in the Python solutions this time around. github.com/daneah/2024-...
github.com
GitHub - daneah/2024-advent-of-code: Advent of Code 2024
Advent of Code 2024. Contribute to daneah/2024-advent-of-code development by creating an account on GitHub.
040
Dane Hillard @dane.dev · 01/12/2024
Thanks for drawing this so I didn’t have to 😂
010
Dane Hillard @dane.dev · 01/12/2024
*Ad playing "Holiday Road" comes on* Me: I can't hear this without thinking about that T-Mobile ad. Mom: Me too. It was written for that ad, after all. Me: Wait...you never heard that song before that commercial? Mom: Oh, I don't know the Top 40 songs. It was written 6 years before I was born.
010
Dane Hillard @dane.dev · 30/11/2024
Also: Please send help, I am now round
110
Dane Hillard @dane.dev · 30/11/2024
If all goes to plan we may well have a fairly proper Sunday roast tomorrow—beef roast with Yorkshire puddings, at least, but not sure if the veg will be exactly right 😄
210
Dane Hillard @dane.dev · 29/11/2024
is this like how "an apron" used to be "a napron"
000