Dane Hillard's Avatar

Dane Hillard

@dane.dev

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 πŸπŸ“¦β¬†οΈ https://dane.dev

535
Followers
464
Following
76
Posts
03.07.2023
Joined
Posts Following

Latest posts by Dane Hillard @dane.dev

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

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

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

14.04.2025 03:36 πŸ‘ 7 πŸ” 2 πŸ’¬ 0 πŸ“Œ 0
Post image

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

03.04.2025 17:04 πŸ‘ 2 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0

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

02.02.2025 19:11 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
pydantic.run

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...

29.01.2025 19:58 πŸ‘ 25 πŸ” 5 πŸ’¬ 2 πŸ“Œ 1
Post image

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!

29.01.2025 17:18 πŸ‘ 725 πŸ” 104 πŸ’¬ 35 πŸ“Œ 34

Oof, this is my signal to book my PyTexas travel…

25.01.2025 23:18 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

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 🐍

21.01.2025 20:47 πŸ‘ 3 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

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.

14.01.2025 13:15 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

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.

14.01.2025 13:15 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

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.

14.01.2025 13:15 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

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`.

14.01.2025 13:15 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

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.

14.01.2025 13:15 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

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.

14.01.2025 12:58 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

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…

14.01.2025 12:58 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

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.

14.01.2025 12:58 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

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.

01.01.2025 22:59 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

The cumin lamb ones are pretty good. Have purchased multiple times πŸ™ˆ

01.01.2025 15:44 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

The building having a hard time adjusting to the current temperatures and being a stiff 67 degrees or so has little charm to it.

24.12.2024 19:32 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

This Dane is quite vulnerable to cheese

24.12.2024 19:05 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
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!"
24.12.2024 19:04 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

All good here, on a project using py311/12/13 + pytest + pytest-cov with branch coverage reporting!

24.12.2024 18:50 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
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.

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.

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.

24.12.2024 14:54 πŸ‘ 3 πŸ” 0 πŸ’¬ 0 πŸ“Œ 1

Are you an open source maintainer? Comment below πŸ‘‡ and find others in the community on πŸ¦‹

23.12.2024 22:53 πŸ‘ 271 πŸ” 42 πŸ’¬ 136 πŸ“Œ 3

This was an enthralling talk indeed. Thank you for sharing πŸ™‚

22.12.2024 19:33 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

There’s no gap on *my* machine πŸ€·πŸΌβ€β™‚οΈ

21.12.2024 15:26 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

How do you catch a unique beaver?
Unique up on it.

Hope do you catch a tame beaver?
Tame way.

18.12.2024 09:07 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

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

11.12.2024 03:00 πŸ‘ 20 πŸ” 3 πŸ’¬ 0 πŸ“Œ 3

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.

12.12.2024 20:16 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

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.

12.12.2024 20:16 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

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.

12.12.2024 20:16 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0