Python Bytes - #476 Common themes
Episode Date: April 6, 2026Topics covered in this episode: Migrating from mypy to ty: Lessons from FastAPI Oxyde ORM Typeshedded CPython docs Raw+DC Database Pattern: A Retrospective Extras Joke Watch on YouTube About the ...show Sponsored by us! Support our work through: Our courses at Talk Python Training The Complete pytest Course Patreon Supporters Connect with the hosts Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky) Brian: @brianokken@fosstodon.org / @brianokken.bsky.social Show: @pythonbytes@fosstodon.org / @pythonbytes.fm (bsky) Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Monday at 11am PT. Older video versions available there too. Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it. Brian #1: Migrating from mypy to ty: Lessons from FastAPI Tim Hopper I saw this post by Sebastián Ramírez about all of his projects switching to ty FastAPI, Typer, SQLModel, Asyncer, FastAPI CLI SqlModel is already ty only - mypy removed This signals that ty is ready to use Tim lists some steps to apply ty to your own projects Add ty alongside mypy Set error-on-warning = true Accept the double-ignore comments Pick a smaller project to cut over first Drop mypy when the noise exceeds the signalAdd ty alongside mypy Related anecdote: I had tried out ty with pytest-check in the past with difficulty Tried it again this morning, only a few areas where mypy was happy but ty reported issues At least one ty warning was a potential problem for people running pre-releases of pytest, Not really related: packaging.version.parse is awesome Michael #2: Oxyde ORM Oxyde ORM is a type-safe, Pydantic-centric asynchronous ORM with a high-performance Rust core. Note: Oxyde is a young project under active development. The API may evolve between minor versions. No sync wrappers or thread pools. Oxyde is async from the ground up Includes oxyde-admin Features Django-style API - Familiar Model.objects.filter() syntax Pydantic v2 models - Full validation, type hints, serialization Async-first - Built for modern async Python with asyncio Rust performance - SQL generation and execution in native Rust Multi-database - PostgreSQL, SQLite, MySQL support Transactions - transaction.atomic() context manager with savepoints Migrations - Django-style makemigrations and migrate CLI Brian #3: Typeshedded CPython docs Thanks emmatyping for the suggestion Documentation for Python with typeshed types Source: typeshedding_cpython_docs Michael #4: Raw+DC Database Pattern: A Retrospective A new design pattern I’m seeing gain traction in the software space: Raw+DC: The ORM pattern of 2026 I’ve had a chance to migrate three of my most important web app. Thrilled to report that yes, the web app is much faster using Raw+DC Plus, this was part of the journey to move from 1.3 GB memory usage to 0.45 GB (more on this next week) Extras Brian: Lean TDD 0.5 update Significant rewrite and focus Michael: pytest-just (for just command file testing), by Michael Booth Something going on with Encode httpx: Anyone know what's up with HTTPX? And forked starlette and uvicorn: Transfer of Uvicorn & Starlette mkdocs: The Slow Collapse of MkDocs django-rest-framework: Move to django commons? Certificates at Talk Python Training Joke: Neue Rich
Transcript
Discussion (0)
Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
This is episode 476 recorded April 6, 2006.
So many six is Brian.
I'm Michael Kennedy.
And I'm Brian Akin.
And this episode is brought you by us.
We have all sorts of awesome things to help you get better at Python, testing, and so on.
Check the show notes.
Subscribe to the newsletter.
We've got a bunch of cool things we're sending out there.
and every week, one of them, every week is a nice, extra rich summary of what we talked about, what we're covering, but also additional places to find more materials.
So you can get a little bit of the background information.
Like we might talk about, oh, here's how you do this thing in CI, but maybe the newsletter also includes details of getting started with CI and other things like that.
And that's all thanks to Brian.
So thank you for that.
With that, you know, let's migrate it over to Brian's topic.
What's up?
I am talking about Thai migration.
So Ty, Ty, Y, the Astro Project for type checking.
I, have you used it?
I am using it actively.
Yes, I love it.
Okay, so I, it's the speed thing.
So ties all rust, so it's way faster than a lot of other stuff.
Firefly is rust also, but Ty's still faster.
I think Firefly's rust.
It is, I believe, yes.
Okay.
But it's not, Firefly is not noticeably laggy, but, but MyPy is, and it's, MyPy is definitely something I use in CI.
But anyway, well, I'm bringing this up because there was a post by Sebastian Ramirez, and I just went away from it, that all of his Python projects, like Fast API, Typer, SQL model, Async, all of that stuff.
It's all just using, it's all using tie now for the primary type checker.
And so I'm thinking, and I had tried for a couple of projects and it like, it was a little bit pickier than I expected.
So I tried it again.
So I went ahead and migrated Pytist check to use Tye.
And I'm kind of doing a similar model and it's going well.
So anyway, there was a, he migrated that stuff.
and then Tim Hopper wrote a blog post called Migrating from MyPy to Tie,
Lessons from Fast API.
And it's a pretty fun walkthrough of some of the things,
because it's really pretty easy to migrate.
So the idea around it, I'm going to skip down to the end
because he's like, well, if you want to do this yourself,
what should you do?
Add tie alongside of MyPi.
And that's what I'm doing with Pytist Check.
doing both MyPi and Thai.
Actually, I've got them as two different talks,
runs sections to run them separately.
But locally, I'm just running Thai because it's so fast.
It's like it runs and it's done.
Whereas MyPi, I have to wait a few seconds.
A few seconds, not a big deal,
but it makes it so that I don't run it as much.
So anyway, add tie alongside MyPy.
There's one setting that I turned on because of this article
of errors on warning.
So there's some Thai warnings that show up
and they don't stop a Sierra run,
but I want it to.
I want to have it completely clean with no warnings.
So you can set error on warning is true.
There are, if there's parts where you have to comment out,
like you have to ignore certain lines for some reason,
the annoying part right now is that you have,
and I'll go back up to this discussion up here,
is that you have to do two.
the ignore line for my pie is different than Thai in some of these.
So that is a bit annoying if you're supporting both.
But apparently it got better in Thai 0.0.25.
Oh, come on, guys.
You've got to like, anyway.
There's zerovers just killing me.
That's a very, very, very zero ver.
Zero point zero is the version.
But supports a better way to say ignore these sets
things apparently that works so anyway check out the model if you want to have ignores i don't actually
have i think i have a few ignores but uh not too many and a lot of them are because i intentionally try to do
something bad um to to simulate an error um okay so uh how it fits in the workflow also um it's really
easy to run all that stuff it's great okay let's getting back so you accept the double comments and then
pick a smaller project and um whereas like on the first like on the
Fast API world, SQL model is now completely tie only and doesn't use MyPy apparently.
So drop MyPi when the noise exceeds the signal.
So right.
So the SQL model had too many, like it wasn't worth having supporting both because of all
the different ignores and all that stuff.
I'm currently, I've had so many people request MyPy support for PITIS check.
So I'm not planning and dropping it anytime soon.
And for a lot of packages, I've bought.
believe that's probably going to be the case of people just supporting both for a long time.
And one of the really unfortunate things about how Python typing works, there's a lot of good
things about it, so don't call me a hater. But one of the really unfortunate things is,
even amongst T.Y. Firefly, there are different conventions and warnings and things that count as errors
and things that don't count as errors. Things are checked and things that are not checked. And so if you
have a project that needs to support two, both or more, you've got to put all the
of them in there. You've got to
deal with cases where your type checker
says everything's fine, but
someone else type checker
doesn't think it's fine. You're like, are you
serious? Like the most
ridiculous version of this is for
one of my templating
packages. I can't remember which one
like chameleon
partials or
blast chameleon. One of those where
it lets you do something
with the, or maybe
the ginger partials. I can't remember. But somebody was
doing something with flask.
And when you put the decorator onto a view that the web framework calls,
it changed the signature in a very subtle way.
And the signature is extremely complicated at the definition level.
I mean, it's like multiple lines of what the warrant of the signature problem was.
You know, not just like expected it.
But it was really a lot of like stuff going on there.
And it said that that was wrong.
I'm like, who cares?
No one's ever calling it.
Like no one calls a view function.
It didn't have.
Nobody gave it a definition.
that it's this big complicated thing.
But somehow the framework, you know, like,
I think the something about the app.
dot get decorator expressed a type,
and then it changed that type.
But who cares?
Because it's still ran just fine.
So it was like,
I had to go and spend hours
reworking the signature of that thing
to get it just right.
So Pyrite would stop,
give me a warning where I never even used Pyrite.
I'm like, why am I spending my Saturday morning
doing this?
That's dumb.
But people were using it.
They would just get like loads of error, like every viewpoint and their flash function would have an error in pyrite.
Right now I have stuff in my code where it's got ignore statements for Pirefly, but if I loaded up in TY, TY gives me a warning that the ignore statement is unneeded.
I'm like, it's not unneeded for you, but it's unneeded for that.
Like, are you?
Anyway, this is why I say that.
Like, it's just, it's a struggle.
And if you create a library to your point, then you've got to put yourself in the situation.
where like, you don't have to work for a type checker that you choose.
You work for everyone's type, all the type checkers,
because whatever anyone may choose will become applied to your usage, right, in their project,
which is, anyway, rant over.
Yeah.
Luckily, I haven't had too many issues with, after supporting my pie, that was the big one.
I think more people are using my API than anything else.
But I think we'll see a shift.
One of the things I did want to call out also related to this is Ty, Ty, TY, whatever,
call it. Charlie says it's pronounced
TY. TY. TY.
TY did catch one
problem in Pytest check
that I was like, oh, this
well, it's a hidden possible
problem and I just, this was quick, but
I have support for
Pytest versions and
but I have runtime behavior that
changes based on version because of
when Pytas added features.
So I was expecting
this version tuple to be
integers and just comparing like you know is 70 through 7 o less than or equals 7 o sort of the thing but
the version tuple can be a string and t y caught that and so i have some code that i've converted to using
a thing called packaging it's a packaging project packaging dot version has a parse function and and
parse just creates an object that's comparable so that you can do this whole version 1 equals less
than are equal version two.
And yes, you can probably write this function yourself, but why bother?
It's right here.
It's supported.
Use it.
Yeah, very nice.
Okay, next topic.
Next topic.
I want to talk about an ORM built in rust.
Very interesting.
So this is basically an instead of Django ORM, which I think is really interesting.
There's a lot of ORMs out there that are like, this is a great ORM.
You can use it for anything, except for you can't use it.
for Django. Sorry, by now. Why can't you use it for Django? Because Jango so deeply cares about
the models, using the models to drive other things, the models generate forms, the models
generate the admin. The models and the way the ORM works in Jango is kind of like what makes
Django, Jango? Like, if you don't care about any of that stuff, why are you using it?
Pick a microframework, you know? Whatever, right? The reason you choose Jango is because it has all
these Lego blocks that you can use, right? Okay. So this one,
called oxide ORM.
Believe it is a, it's got to be written in Rust, given that name.
But what it is, it is a TypeSafe,
identic-centric, async ORM with a high-performance Rust Core,
and it's inspired by Django.
It's not necessarily, it doesn't necessarily sell itself.
I was explicitly replacing Django,
but I will tell you why I made this callback in a second.
So, hey, this is a young project.
Just heads up, so, you know, heads up.
This is a young project.
I bet it has a higher version than Ti-Y,
But nonetheless, it's got basically the same syntax as Django,
model that objects, dot filter, et cetera.
It has full PIDANIC V2 validation.
So in this world, you create your models using PIDANIC, right,
which has all the PIDANIC goodness.
We're going to come back to talking about this kind of stuff as well.
Okay.
But very cool to be using PIDANIC for the data access classes.
Also, A-Sync First, built on modern Python's ASync I.O.
Rust performance. SQL generation and execution is native in Rust. So one of the things you got to do
is, okay, you gave me a model called Customers, which is a Pidentic class. What does that mean in terms
of a SQL query when you say dot city equal, equal, whatever, right? That kind of stuff.
Multi-d database support, of course, transactions, migrations, Django style migrations, and a migrate
CLI. So you can see it's like trying to be the ORM for Django without explicitly saying,
Not quite. If you look at performance, there's a couple of things. Higher is better here.
Let's just take the Postgres. With oxide, it's 1,475 requests per ops per second versus Tortus, which is 888, Piccolo 930,
Django 730. So just almost exactly 2x of Django and 4X of SQL Alchemy, 4X of SQL Model,
mentioned tie back there, and holy moly, pee-wee is at 80, versus.
is 1,400. So that's pretty wild. And then obviously all the type checking, you know,
they've got this query of like, hey, here's how you would do a really long, complicated query
in both in Django and OXID. The only difference, literally the only difference in these,
you know, probably a 90-character, 90 column, rather, same thing. 90 column query on the ORM.
The only difference is the await keyword because it's async, which is pretty sweet. So, yeah,
good stuff. Now, back to Django, O'O.
little bit more. It has oxide admin. So oxide admin is auto-generated admin panel for oxide ORM
with zero boilerplate. So it's got all the jingo type of things here. And what's interesting is it's
for fast API, light star, santic court, and falcon adapters. Does it not have jango support? It's just jingo
like. I think it might not actually even integrate with jingo. But it gives you the jango style, right?
It gives you the admin, gives you the migrations. It gives you the queries. It gives you the queries.
syntax that's identical.
I bet you could, I bet you could use it with Django somehow.
Anyway, here it is.
That's pretty cool.
Yeah, yeah, pretty cool.
It's always on the lookout for these interesting data access libraries that are creative,
bring something new without, you know, being too weird, I guess.
Yeah.
So anyway, Django Oxide, or, sorry, Oxide Auram, not Janko Oxide.
Oxide Orim, check it out.
All righty.
Actually, I've been thinking about types, so I'm going to go back to types.
We have this theme of we're just going to talk about
the same thing for whatever our theme is.
Yours is types, go.
Types today. So this,
the suggestion comes to us from Emma typing.
So I think Emma cares about typing also.
Very cool. She says a very cool project,
which realizes something I've wanted for a long time,
documentation for Python with Typeshed types.
So what were we talking about?
I did a comparison of side by side.
So if we take a look at like the function,
the docks,
dot Python.org at the built-in functions.
You get like ABS like absolute for absolute.
And it takes a number, but what type is number?
Well, this new project has basically the Python docs, but with types.
So how that function signature would look with types.
And this is all from TypeShed.
So the project that we're shouting out to is,
Well, it's a GitHub.io thing, but it's an open source called typeshedding C Python docs.
A tool for to find missing typeshed stubs and generate type annotated C Python docs.
So it takes the C Python docs and annotates them with types.
It's pretty cool.
If you're looking at some of the internal stuff, and it's all doing it, it looks like it's using Pyrfly to generate some of these things.
Maybe.
I don't know.
But so that's pretty, that's pretty much it.
It's just as if you want to look at anything in the docs, but with types, there you go.
Like, what is a slice take?
Oh, slice takes, you know, well, it's going to be like.
It's an any, any, not too much of.
Any, any.
But there's somewhere probably an interval of or something.
Who knows?
Yeah.
So.
Pretty cool.
I like this idea.
That's great.
I think these kind of things are powerful, too, because especially if you're doing any sort of
AI thing, you would say, you know, you ask is to do something. It's like, what is you doing?
You have no idea. Thing, read the docs or check this out. And if it has type information,
that really gives it a lot more to work with. Yeah. And also because like, that the docs,
the Python docs are really for us. But TypeShed is really not for us. So the kind of the idea
to combine the information in TypeShed and present it as the docs. It's pretty kind of, it's kind of a
clever thing. Yeah, it's very clever. And also, if you're doing something kind of like something
built in, you can look at, you know, look at what the types are with that and try to match it.
Yeah, definitely. All right. Shall we keep with our theme? Or, yeah, of theme swapping. So.
Yeah, like to just keep in the theme going. So I want to talk about databases some more.
Okay. And ORMs, but from a different perspective this time a little bit in the sense that I wrote an
article. The article I want to talk about is raw plus DC database pattern, a retrospective.
This is pretty interesting. But in order to talk about, let me just talk about the design
pattern that I publish real quick. So people maybe didn't read that article or they didn't listen
a couple episodes ago or something. Right. So my thesis is there's a couple of reasons why
depending on maybe smaller ORM libraries is not that great of an idea necessarily. One is,
if that thing goes unsupported, you've got a good chunk of your application and a foundational
portion of it that is tied to this potentially unsupported thing. So make that concrete talk
Python training. When I created it, it was based on Mongo Engine. And that was a up-and-coming super
nice query syntax. Also models exactly the Django RM, by the way, by Oxide, like Oxide ORM.
So a lot of the queries in there looked very much like they were Djingo, but they were object-based
going to MongoDB, right?
So that's great.
But fast forward 10 years,
and that thing's had a couple of releases
that changed the read-me
in five years.
And for reasons,
maybe I'll get to later,
like another episode is I wanted to switch this to async.
I wanted to switch TalkBizant Training to Async,
but this older ORM library
was not ever,
ever going to move to adopt an ASync model.
Right?
Even if it doesn't throw away, it's synchronous model.
Like have an async option.
Like, no, I mean, if it's, all this happening is like a couple of readmys are getting updated,
there's no way they're rewriting the whole thing to be async.
You know what I mean?
Yeah, it's also probably a scratch your own niche sort of thing.
If they, if the current project does what they needed to do, why update it?
Yeah, and they're not obligated to, but I'm also not obligated to keep using it, right?
Yeah.
So that was, that's number one is like, is there a more stable base?
And the stable basis, whatever the core database driver package is.
In this case, it's Pi Mongo, but, you know, could be just the core one from the Postgres team talking to Postgres with Python, right?
Like, that's what all these ORMs are based on often anyway.
I mean, Oxide ORM is not quite based on the Rust version that the Postgres team provides, you know, whatever, right?
So something like that.
So that's one.
The other one, the raw part has to do with this theory that I have that talk.
talking to, when you're working with Agentic AI, they know frameworks, but what they really know
super well is the foundational stuff. Like, they probably know SQL model, but they really know
SQL. You know? Yeah. They probably know Mongo Engine a little bit, but they really know
just queer, like raw MongoDB queries. And so that's the idea is like, like, what if we just
had a data access layer that was just raw queries and it returned some kind of rich classes
like data classes.
Now, before people email me,
because I talked about this on Reddit
and like three-fourths of the comments
where why are you using Pydantic?
You could use Pydantic here.
Do you know that you're using data classes
when you could use Pydantic?
You have no type?
Yes, sure.
You want to call it Roplas Pidantic
and use Piedantic instead
is literally the same thing.
You're totally welcome to do that, right?
I just wanted something simple.
I found like my dream of Pidantic,
like in Beanie and other these ORMs or SQL model,
is you've got this,
ORM and it returns
Identic models and maybe you've got fast API
and you could just like take the thing straight from the database
and send it out over the API
and how amazing would that be?
I not almost never
was able to take the database model
and return it directly as an API response
and so you're always like transforming them anyway
and so I ended up so like I just don't need
I don't need a Pydantic all the way down like Pydantic at the boundaries
was good for me. Okay so all that's
so I can tell you about
my retrospective. So I wrote up this thing where I rewrote Talk Python training. Now, Python bytes is
already using this. So it already gets this benefit. But I did this for Talk Python training,
the courses. I said, well, let me just put it into practice and see how it goes and if it's any better.
So I came with pictures, Brian. Look at these pictures. Mongo Engine, the raw plus DC pattern. It's almost
2x more requests per second for the same hardware, the same everything else. Just switching this out.
the bonuses, you get a much more stable library to program against.
And AI is really good.
If you say, hey, AI, hey, Claude, create me an update function to do this thing.
And it can do that better.
Right.
It has much, much, much, much, much more training information to do that with.
And you get 2X performance.
And even when you're doing two times a number requests, you still get white a bit faster response time.
That's pretty cool.
Yeah.
Pretty neat, right?
Yeah.
And you scroll down.
Another bonus is actually about 10% less memory usage as well.
That's good.
Because apparently the ORM and the classes that it uses and the tracking and whatever,
it just hangs on to junk more.
I don't know.
I mean, I'm still using classes, right?
But for whatever reason, it's just quite a bit less memory usage.
So I think that's turning out to be a pretty promising way to go.
And yeah.
Yeah, expect more about this stuff later.
So I like it.
I can't resist.
If you've already considered data classes,
have you considered adders instead.
Thank you.
I want something built in.
I want something with fewer dependencies.
Data classes are built in.
Pydantic and adders are both separate packages, right?
Yeah.
The benefit for choosing adders has to be big enough
that it justifies taking another dependency.
So I talked about data class of wizards.
So for this kind of stuff, I'm like,
if I need to read and parse and validate data,
I'm doing data class of wizards along.
with data classes. But, you know, people are certainly welcome to choose adders. They're welcome
to choose Pythanaic. They all work good in this model. Yeah. Well, and especially like in, in,
like to give other people there to, for projects that already have Pidentic for other reasons,
that that makes sense also. Yeah, yeah, absolutely. Absolutely. All right. All right.
How much are you feeling? I, I've got one extra. So, um, tell us. Just this weekend,
I released a 0.5 release of the,
I know I haven't talked about this much lately,
the Lean TDD book that I was working over the fall
and over, I guess, over Christmas.
But it's, I went through, I'm preparing to read it.
So I want to release as an audiobook.
And so in preparing for that,
I have almost completely rewritten it.
It's restructured, and I think it's a lot nicer.
Now, that said, I'm still,
working on it. So I think it's
really solid now. I think it's a good
resource to go ahead and run with
but
I'm doing a third pass through right now
and with some
some comments from some trusted
trusted readers and
yeah anyway
there'll be some expansion but not I don't
think a huge direction shift in the future
because I really want to get this done
and wrapped up but anyway I'm pretty happy
with this state right now lean TDD
and yeah
If you're interested, let me know.
So that's it.
Awesome.
Congrats.
Getting there, huh?
Yeah.
I want to get this done.
Yeah, indeed.
All right.
Let's see if I can not be jumped on by the un-auto hiding of Vivaldi.
So I want to talk about hi-test just from Michael Booth.
This is a really quick, extra thing I want to give a shout out to.
Cool.
And just, you covered this a while ago.
It's just a command runner, one of those sort of circular references type of thing.
It's kind of like make, kind of how I see it.
You've got some files.
It tells you how to build things or test things or whatever, right?
Like, what syntax inspired by make?
There you go.
So make is kind of long and gnarly and just as more yamelish and cleaner, I think.
I don't know.
Anyway, it's a cool way to sort of structure automation for your projects, right?
Yeah.
So a shout out is.
It's just lovely to work with if you ever try to get.
Yeah.
I like it.
So Michael Booth created a Pytest dash just plugin.
And it's a plugin that adds session scoped just fixtures to PITEST so that you can test a
just file contracts directly in your test suite.
So it lets you test like really nice things like just assert there exists a CI, a CI section,
and that CI has a test, or it depends on Trest, test following the transitive dependencies of it and so on.
Anyway, I thought that was kind of cool.
So if you do stuff with Just and PiTest, check out.
Check out, PyTest dash just.
Cool.
All right, this next one needs a disclaimer before I go into it.
I was not going to put, I was not going to talk about this, Brian, because I don't want to, you know, it's not like TMZ bites.
Fight on Pites.
There's a lot of drama here, but I think it's pervasive enough that I think we should put it on people's radar.
So I'm not here, what I'm about to describe, I'm not here to take sides in.
I'm not here to like bad light on anybody, but there's a mad level of turmoil around the
encode projects.
H-TTPX, dingo rest framework, UV-A-corn, starlight, which is the foundation of vast API,
MK doc.
I mean, that's a mega set of dependencies that people end upon.
So I'm just going to link to four articles, five articles, and you all can read them
and think about those however you want.
But if you're using some of those libraries,
you should probably have a look at this.
So 320 upvotes on Reddit says,
anyone know what's going on with HTTPX?
The maintainer of HTTPX closed off access
to issues and discussions last week.
Hasn't had a release in a year.
I wonder what's going on.
Michelle says,
I forked HTTPX to HGX,
XY, talks about Y.
Transfer of UFeed corn and Starlit
causes great bunch of stirers.
There's an article called the slow collapse of MK docs.
Yeah.
And that ties into Zensical, right?
Yeah, exactly.
And so basically this documents over time, all the stuff that is going on that has led to Martin
and his co-founder creating Zensical, which was material for MKDox, but they found, like, yeah,
basically that this was becoming something they couldn't continue to work with, so they had to go and something else.
And Django Rest Framework is there's an inspiration to, somebody has proposed that it gets taken into Django Commons.
And Django Commons is this project to basically find and maintain packages that are important to Django that are kind of going unmaintained in a sense.
And so in this conversation I'm linking to, there's a bunch of people like, this is kind of a good idea, but the people who are actually maintaining are like, but I'm not really sure I'm going to come over become the main maintainer.
So it's sort of stalled out.
Anyway, again, not trying to throw a shade or call anyone out, but there's enough going on there with enough important projects that it's worth being at least awareness.
Yeah.
Yeah.
It's sad.
Okay.
Not sad.
Something awesome.
This is very awesome.
This one I like quite a bit is announcing course completion certificates over at Talk Python.
So I don't work in a big company, so that's not super relevant to me.
So I have not really maybe given as much love and attention as people want me to.
So now I have.
So what I've done is have a nice dashboard that I released maybe a month ago and talked about that, I think, that shows you what courses you're working on, how far you are through them, which ones you recently have most recently taken at Talk Python and so on.
But also, and if you have a bundle of like 50 courses, which a lot of people do, then it's like, well, here's a huge long list.
Which one was I doing again?
You know, it really helps solve that problem.
But now for the completed courses, it has a certificate section.
And you click that, it gives you a standard old.
PDF certificate that you can use if you have like continuing education requirements or something
like that where you need to submit an official certificate to your company or whatever. So that's
kind of fun. But more importantly, more fun, I think, is there's an option to say, publish this
as an official certificate on LinkedIn to my profile. So like one button click from Talk Python
in your account, boom, takes you over, populates and fills an official certificate, even with
a show your credential, which takes you back to an official, yes, this credential.
is verified for you page on LinkedIn.
That's pretty cool.
Yeah, so if you take it a bunch of courses, you know, and you want to have those there,
so people go, oh, yeah, they did actually take that flask class.
That's right.
They know a little bit more than, you know, maybe just flask as like a skill or something.
Can I print it out and, like, pin it to my cubicle wall?
You know what?
You could print it out and get that on like a mat finish.
Yes.
Yeah, you can't mean get the PDF.
You can print it out.
It's actually like letter, U.S.
size.
Awesome.
If it prints.
Like I had to get the DPI's of the image exactly right to fit for that.
So anyway, that's fun.
I thought not everyone's going to care about that, but people do, I think it's kind of
neat to do.
That's pretty cool.
Yeah.
I've had a couple of those requests.
I can't remember if I turned them on or not.
I think Podia, the platform I used, like, had them.
So it's nice.
I had a joke also, but I think let's save mine for next week and let's just use yours.
Okay.
Here's the funny things.
I don't even remember what the joke is, but I'm going to look, then we're going to find out together.
Oh, yeah, here we go.
It's about AI.
So I entitled this, Noia Rich, the New Rich.
In the 80s, think Don Johnson, think standing by a big mansion in Florida, in Miami, Ferrari Testarosa in the back.
Like, this is rich in the 80s.
Rich in 2026, in modal, change the button color to green, opus six, 4.6.
Yeah, it's which model are you using?
Yeah, and just like do like the completely most simple, a find and replaced or just a find and a type the letter, the word green would take care of it.
But no, Opus 4.6, extra effort mode. Change the button color to green.
That's funny.
Yeah. It doesn't have a whole bunch of great comments, but it's pretty funny.
So that's my joke.
That is pretty funny.
So April, we had like a changeover of our license.
licensing stuff March to April and on March 31st a lot of people were
like got their tokens removed or something and it's one day but there was so
many people complaining of like I I'm reported as out of tokens how do I work
hopefully you can still work without tokens but I know it's so bad it is so bad
so bad it's like pre-smart phone post smartphone you know well I was just
thinking that the other day. I was driving somewhere and I'm like how I'm in Portland and I've
had GPS ever since I've lived in Portland. There's a lot of places I don't think I could find
without a GPS. But you've been there before. Well, yeah, I've lived here for 15 years now and
I, but still I can't, I don't carry a plastic map or anything like that with me. So.
Yeah, I don't know if I even have an Atlas in the car anymore. Like if for some reason my
device broke and I was on a trip, I might just be there. I'm going to live here.
now.
Because we live here now.
Yeah.
This is funny.
This is great.
Thank you,
Brian, as always.
Thanks,
everyone for listening.
And get you all next week,
everyone.
