Python Bytes - #363 DNS Again? It's Always DNS.
Episode Date: December 5, 2023Topics covered in this episode: Fixit 2: Meta’s next-generation auto-fixing linter FastUI Mail list / newsletter conversation CLIs from type hints Extras Joke See the full show notes for this ...episode on the website at pythonbytes.fm/363
Transcript
Discussion (0)
Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
This is episode 363, recorded December 5th.
And I'm Brian Ocken.
And I'm Michael Kennedy.
And this week we are sponsored by ourselves, so we will plug our own stuff a little bit later.
And if you want to follow the show, follow it at PythonBytes at Fostodon.org.
And also Michael and I are both on Fostodon
as well, which is
Mastodon. If you're anywhere other than
Fostodon also, that's fine.
You can still follow us, but if you would
like an invite, hit one of us up
and we will send you an invite.
Mastodon has made it easier to start
following people from other instances, by the
way. I don't know if you remember how it used to be. You'd go
and somebody would be like at mast.to and it'd be like, sign in. And you try to,
you couldn't follow them. You have to sign in. You're like, but I don't have an account here.
What is this weirdness? So now if you say follow, it'll pull a dropdown and say, you know, give me
a few letters out of your instance. And then we'll direct you over there where you're signed in to
click follow. So it's a little bit easier to follow anybody on Mastodon. It's still clunky.
I don't know why it's so hard, but.
So what I usually do is I, I'm not tried that.
I usually like pop somebody's a whole,
like say at mkennedy at fostodon.org or something.
I pop it in the search, the search bar.
That's what I did previously as well.
Yeah.
Yeah.
Usually, usually finds the person, right?
So yeah.
Yeah.
You can even put just the whole URL of their profile without reordering it to their username but if i'm trying to find the url
that's sometimes uh yeah so indeed all right well it's mastodon's getting a little smoother and
actually mastodon conversations are going to be featured at least in my my stuff here
somewhat heavily so yeah let's talk about fix it so fix Fixit is this, what's the best way to put it?
Probably a Flake 8-like. They compare it to Flake 8. This comes from Meta, aka Facebook,
and it's a linter for their monorepo. And when you hear monorepo, that is not a monolith.
Ironically, a lot of times, the more broken up your code is, the more it fits a mono repo. But anyway, it's they have literally a single repo. Is it Git? I'm not sure. But something like a
single Git repo for all of Facebook, which is just insane. They want to lint that and they want to
have things like black applied to it. And black actually came from Lukasz Lenga, who was at Meta
at the time. So kind of funny, But they don't use black. I don't
know why they don't use black. They have some reasons. Seems like black solves some of them
and could be probably adapted while Lukas was there. But anyway, they don't. So they had this
thing called fixit that goes through and is more like black, even though they compare it to flake8
in that it not just finds problems, but fixes them and normalizes things like,
where do your commas go in a list?
You know, or you have a plus to continue a line.
Is that at the end of the one line or the beginning of the other line, right?
Those kinds of things we're all familiar with.
So they built one called Fixit, and now they released another one called Fixit 2
that's supposed to be better, and they open sourced it
so people can check this out if they're interested, right?
So I'll tell you a quick few things about it and let's bump over to the mastodon not the mess an omnivore other other thing other thing because i have notes on this big long thing so
it turns out that python is super popular over at meta which is really cool they have production
engineers and software engineers. So production engineers
are like software devs who do production, their main role is to do production. And they also have
a whole Python language foundation team, which is pretty interesting. And the job of this team
is basically to build tools for the rest of the team. And that's where this fix it thing comes.
So one question is like, why not just use say black or flake eight or whatever format?
Well, Hey, now we're getting there. Okay. So it says, of course there's alternatives to flake
eight, but for example, flake eight doesn't fix things. It just tells you that there are errors.
Yeah. It has limited support. This is kind of interesting for hierarchical configurations for different projects within a monorepo.
So even though it's a monorepo,
maybe like the API gets formatted this way,
but the, I don't know,
the DevOps code gets a different set of configurations
because it's a different team,
but you still want to just hit the repo with it, right?
Interesting.
Yeah, that's an interesting,
so this is worth bringing up, I thought,
because there are some interesting ideas and some interesting challenges slow performance on code on
large code bases and then another thing that they do a lot is they plug in custom rules linting rules
and correction rules her like at a hierarchical level which is which is kind of interesting right
now brian i don't know everyone sees it but I have a list of these four things,
these four reasons of why not just X.
Three of them are green
because rough absolutely hits all,
rough space format hits all of those.
Rough format didn't exist.
And I honestly wonder if rough format existed,
you know, is this a thing that gets created?
I'm not sure.
I mean, it's an open question.
I didn't know that rough could do hierarchical configuration.
Actually, well, what rough can do is you can have a rough.toml that configures it at different levels.
Right.
So given the number of engineers and the fact there's a single repo, how hard would it be to automate, search this repo for all the rough.tomls, run rough format dot in that working directory.
Yeah.
Done. You know what I mean? Right. It would, I don't think it inherently does,
but in 30 minutes it does. You know what I mean?
Yeah.
Of one person's time. So I wouldn't suspect like as a company, like, well, we couldn't possibly
have somebody write that automation. That's way too much for us. So, you know, I think that
obviously I don't believe that's a, you know,
dash dash hierarchical sort of option, but I think that could easily, easily be added. So
that's pretty cool. It says, even with, here's the irony is even with the one we built, the,
it didn't contain the local rent linting rules or the hierarchical configuration.
And those are the core requirements. So it's like,'s like okay well we redesigned it to this
new one right and what's interesting is it works on the using the lib cst module okay which is a
concrete syntax tree you often hear the ast or abstract syntax tree which is like the intent of
the code is to loop over this iterable but it is not the variable is named this and there's two
spaces here and there's a
comment right it tries to like throw away just get to the essence but the cst is the code just
in hierarchy form and which means if you want to fix it right that's way more applicable for uh
these kinds of tools here so anyway people can check it out it's on pipey and i think it's an
it's an interesting thing to contrast with rough so So yeah. Yeah. Anyway, it's out there for people.
It's obviously tested on some pretty seriously large code bases.
And it could be interesting.
But I'm still going to rough space format dot for my money.
Yeah.
Yeah.
Interesting comment from Grant in the chat.
Another YAML file for each subproject
as opposed to supporting PyProject tunnel.
Yuck.
But, you know.
Totally fair.
In this case, I think it might be,
like you got to remember,
this isn't just Python, right?
This is like every bit of code at Facebook.
Oh, yeah.
Right.
So it's probably React, PHP, Optimize, PHP, Go.
Who knows how much stuff is in there?
Gobs of config files in each project.
Yes.
Yeah.
I mean, you wouldn't want all the configs for all the languages all mixed together, right?
So anyway.
Yeah.
But still interesting.
Interesting stuff.
Anyway.
All right.
How would you like to talk about user interfaces?
You know, we have been known to go on a gooey kick before.
It's been a while.
Let's do it.
I'm here for it.
All right.
So Samuel Colvin.
Why does he make it fast, Brian?
That was funny.
The person that brought us Pydantic
has worked very closely with FastAPI as well.
So FastAPI and Podendic work great together.
Now there's FastUI.
Well, FastUI is working with FastAPI,
but it also works with other stuff too.
So Samuel Colvin has just recently brought us FastUI,
which looks like an active development.
It's been modified five hours ago,
and it's already got,
but I only heard about it like last week,
and it's now at 1.8 thousand stars.
That's pretty awesome.
Anyway, so what's this?
It is supposedly a,
it's still a work in progress,
so not production ready,
but it's a way to build web applications and web UIs
defined by declarative Python code.
So there's a few points around this.
There's a bunch of parts of it.
It's a PyPI package, a fast UI,
so it brings in some models and some UI elements and components.
It's also an NPM package, so it brings in a models and some UI elements and components. It's also an NPM package.
So it brings in a little React type script stuff.
So what does it really mean, though?
It means that you can kind of look at,
and there's a couple examples he shows,
you declare it kind of like this.
You're declaring sort of for a fast API endpoint,
like user table or something like that as an endpoint,
it's going to return this thing that doesn't look like HTML,
and it doesn't quite look like Python either, but it is.
It's like there's a cpage object, which wraps the page.
There's components inside,
which is a list of things like headings and a table and
it it i don't really know what this looks like but it's not bad so i'm kind of excited to play with
it but in a few lines of code he shows a fairly workable clean looking user interface and then
along with it for the release he released a full demo, which you can walk through
a UI demo that was really zippy and works pretty good. Like the tables one is kind of fun because
it shows like a whole bunch of names and popular names of cities and populations. And you can
quickly filter by country and it's like super fast. um i think you get kind of a lot for not much work
if the if the workflow looks okay so you've done more uis than i have what do you think of this
it's interesting okay um so when i think of building web apps for myself i don't shy away
from saying oh i have to write html or there has to be a template model or something like that,
right? That's okay for me. But I've been doing it for 15 years, at least, I would say. I probably
started doing web stuff in 2000. So that's a little bit more than that. Anyway, that's a long
time. So I'm super comfortable with it. But I know there's a lot of use cases where I just want
something quick and easy. I want a simple deployment or I'm not a web developer and I just want to get this up and going. I like it. A lot of the sort of low code,
zero HTML styles of that I've seen like, oh, here you can do it in Python, have kind of a top to
bottom linear way of creating the code. And I super dislike that, right? Like first I'm going
to create a page object. Then I'm going to say page.components. right like first I'm going to create a page object then
I'm going to say page.components.add then I'm going to go page.components.add and then I'll
get a table and I'll say table.rows.add you know like wow like makes it really hard to see
the visual look so if you go check out the fast ui github readme you'll see that the structure
and the indentation of the code matches the DOM.
And that's quite nice. Yeah. So I really like that aspect of it. It reminds me a lot of Flutter,
where you write code in the exact same way you've got, I don't know if you call it a DOM,
but whatever the widget graph is called in Flutter, you do the same type of thing. Like you'd
have a body and then the body has a child and then the child can be some complex thing and it's all inherit uh nested in a very very similar
way so yeah i think it's super interesting i think it will empower a lot of people i like the
structure of the code matches the thing you're building that makes it way more appealing to me
because that's part of what's nice about html you go in there and you're like you're in the table
and you're indented in the table visually.
You know what I mean?
Yeah.
Yeah.
There's a lot of fun stuff here too.
So even like forms and stuff that you can do
with even server-side validation.
So that it's not just a component library,
but also some React and some other things going with it
is pretty cool.
Kim brings up something that I thought of
directly for myself.
He says, it's got a lot of appeal
for enterprise-grade web apps
where boring simple table layout is more than enough.
And I'm kind of thinking of it,
I was thinking of it kind of like that
a data set sort of thing.
If basically I've got a database
that I want to front end for,
but if, but I, you know,
it's not necessarily SQL or something
or data set just freaks me out maybe.
But something like this is,
I think pretty nice.
And I think a lot of enterprise projects
will be using this to play with.
So yeah, I'm actually thinking about it
for my own internal project myself.
Sure, it looks quite neat
and being based on FastAPI.
Boy, would it be cool
if there was a run it locally
as an Electron app-like thing
where the Electron app shipped with Python
and just ran a hidden FastAPI server
so it becomes a make it a thing,
an exe or a dot app
I can share with my users.
Yeah.
But yeah, I agree.
I agree with Kim
that forms over data,
this nails it.
Yeah.
And like you said,
if I mean,
a most web app,
a lot of web developers,
it doesn't take that much web training
to write some HTML.
And I mean,
to do it well,
it takes a little bit.
But to do it good enough for a lot of projects,
it's not bad.
And a normal HTML, CSS, and the normal tool chain
is still pretty good.
Or build a Django app or something.
But there's a lot of people that don't even
want to get into it at all.
So I think this is a good fit
for that so anyway indeed and chris may ask about you know hey i wonder what the escape hatch story
is it's always a good question when you're in a framework that kind of defines so much for you
like well what if i went a little bit more uh then what so yeah yeah brian is it a good time
to remind people that maybe they should check out a course or two yeah sure
let's I
so I'll remind people that this
episode is brought to you by both of us
Michael and Brian and the
thing that I've been working on a lot lately
is courses
courses.pythontest.com
and that is
the complete PyTest course
and it's almost done. We'll be done this
month. Um, I've got 13 out of 16 chapters done so far and it will grow then, um, after, after I've
gone through the entire Python testing with my test book, there's extras there. And as I've
noted before, there's a lot of stuff at the end, um, that has changed a lot, like talks and CI and
things, uh, since the book came out.
So it's pretty exciting.
So how about you?
Yeah, very awesome.
I just want to like highlight maybe some of our new courses.
We have an early access Visual Studio Code
for Python developers course,
which is partway done,
but available in early access mode.
If you want to check that out,
we have a data science jumpstart
with 10 projects from Matt Harrison
and HTMX plus Django course mode if you want to check that out we have a data science jumpstart with 10 projects from matt harrison and uh htmx plus django the horse by christopher trudeau so all of those are excellent
and we've got plenty more coming as well so people should check those out sweet all right let's go to
mastodon so this one's not exactly python but there are python elements to it and basically
i said like we talked about this after
the show and I thought, you know, why don't I just have this conversation for people out there?
I'll throw out a list. It's like, I've got a bunch of emails. I want to be able to reach out to
people. I want to run a newsletter or I want to run a training company in a podcast, you know,
and I want to gather those up. And for many years I've been using MailChimp and they just
increasingly rubbed me the wrong way. It's just on principle, I'm not super keen about it. Like three months ago,
like, oh, we got to raise our prices because the database storage for your 20K or whatever it turns
out to be is really rough. So it's another hundred dollars. Then the next month, like, oh, we're
going to need to raise our prices. It's another hundred dollars on top of the previous another
hundred dollars. And I'm just like, I'm not really using a lot of this. And it's, I kind of want to look for
something else. Right. So I went to Massadon and said, Hey folks, MailChimp alternatives. And boy,
oh boy, did we get like a ton of conversation about this. And so I've gathered this all up
and put the results of that into, um, into a list that I posted on the show notes.
So I just want to run through this really quick because there's some interesting choices for people that have like small or large
mailing lists, right? So they come from all these different places and interesting choices. So for
example, uh, one of them is called email octopus because it can, how much it can send like eight
times as much email as like a regular, maybe four, like a two-handed creature.
With all of its eight arms, it can really send email.
Now, so this one is email marketing, which is kind of interesting.
There's ListMonk, which is an open source, free, self-hosted newsletter and mailing list manager.
Interesting, right?
With 12,000 GitHub stars.
There's Kalia, which is similar.
There's also open source, Gemacht in Deutschland, made in Germany. Very, very similar. It's also open source.
Gemacht in Deutschland, made in Germany.
Very, very cool.
It looks kind of visually nice, right?
There's Melee Herald, which is a Ruby on Rails one,
also self-hosted, which is kind of fun.
There's SendPortal.
Again, so I didn't know about so many of these open source ones. And that's kind of why I thought it might be interesting
to point this out to people on the show, right? There's actually a bunch these open source ones. And that's kind of why I thought it might be interesting to point this out to people on the show, right? Like there's actually a bunch of open source ones.
Quite sadly, I haven't found a decent Python one. So there's that. There's Brevo, which is another
one. Button Down. This one is not open source, but it is made with Python open source. So I talked
to the guy who runs Button Down and this one is written in Django. So if you want your newsletters
powered by Django, I don't think it's open source, but anyway, pretty, pretty neat option there.
There's Zoho, which is pretty cool. Cindy, here's another cool one. Cindy has also self-hosted,
but you, it's not open source, but you buy it once for like $70 and then you run it on your system.
And what's cool is it hooks into AWS SES,
which is our simple email service,
which if you send a bunch of emails, you probably have.
I don't, I do, but I don't use it.
I have SendGrid, which it also works with
and Mailjet and Elastic email.
And the thing that's cool about these
is you can send like 10,000 emails for a dollar, right?
And it's based on consumption, right?
Like even if I don't send a mail in MailChimp,
it's many hundreds of dollars to just say, well, we're going to keep your database records fresh
for you. We'll sit here. But this one, it's like, you know, they say a hundred times cheaper. I mean,
obviously it matters how you use it, but you plug it into one of these super, super simple things
and they'll even set it up for you. You can pay them like another 70 bucks and they'll set up a
server and a Ubuntu server or Linux server.
I'll set it for you.
So this is what I'm actually thinking
of going with potentially.
And there's ConvertKit,
Mautic, I don't know,
open source marketing instead of just email,
constant contact.
I don't have any relations with any of these,
by the way, folks,
GetResponse, ConvertKit, all of those.
So if you want to see the the mastodon conversation about why people
suggested them some people are like oh i worked with that but it sucked don't use that uh and so
on you can check it out so i thought there's probably enough people out there who are going
like i have this problem and i just see so many choices and what are they maybe there's open
source maybe there's some python thing so there it is so we don't have a solution but we you've got something well i'll well i can report back to people how things go so it's a fork in the road
for me right um on one hand i don't really do i don't do any tracking of people and so i don't
know like retargeting and all these kind of like campaigns where like if you come and visit this
page but then two days you visit that page then Then we're going to send, you know, like that kind of stuff. I don't really do that. Uh, so I just basically send emails to people.
And in that case, right, you should be looking at something simpler. Maybe when there's open
source ones, it's pretty nice. Um, but if you want to do really interesting automations,
which maybe I should look into, I don't know. Uh, then maybe one of the real simple ones is
not the right choice. So I should either go way more simpler or more advanced,
but I'm in this like middle ground paying tons of money
for something that I don't really appreciate.
And I've also, finally wrapping this, put a bow on this.
People have said, well, you know, you can just use Mail Merge
with Google Sheets and like send it out of your Gmail.
Like, no, that's awesome.
If you run like a soccer team and you want to send them a message or something like that.
But if you have to be subjected to the U.S. Can't Spam Act, the GDPR, people delete my stuff, delete my info you have on me.
I want to unsubscribe.
I want to partially unsubscribe or I might mail bounced and I got to stop sending it.
Like all of that, you can't just like automate send.
Even out of send grade is not enough, right?
You need to have a whole backend
that like deals with all that crap.
And that's what a lot of these
like open source ones bring.
So anyway, pretty cool.
Newsletter is,
having a newsletter is more complicated
than people think
because it just is.
It's way more complicated.
And the weird thing that like
the first time i tried to set
one up was that you have to put your address down and um yes it's it's kind of a weird work
it makes sense but also it's weird but it kind of doesn't make sense it kind of doesn't make sense
yeah yeah like yeah i really just have to put my house there what can i put there like but
because the u.s can spam act i think is the reason that that is there and yeah you know that's the government right like maybe
we should have cook up cookie banners that everyone clicks like five times an hour a day for the rest
of their life that's gonna make things better well you know i i used to like um i know we've
done this enough but sorry about that um the uh i used to MailChimp, but I had a PO box set up just for that.
And I was like, I don't use it for anything.
So instead of paying the post office, I switched to paying ConvertKit.
Because one of the things ConvertKit does is you can use their address.
Oh, interesting.
Which is interesting.
But I'm still on the fence on ConvertKit.
I'm trying it out.
So we'll see. Yeah, we can both report back to people yep and steve it it's tricky stuff so anyway hopefully it helps
the folks now completely change of gears um back to command line interfaces i talked about user
interfaces um on guis but let's talk clis a little bit um so back on episode, what was it? 361. We talked about appeal. And I've talked about
arc person click and typer and stuff like that before appeal was another one. And, and this all
came out because I did an episode on, on Python test about arc parse applications and testing. So somebody, actually, Sander76 on Fastedon
contacted me and said,
hey, there's a bunch of other options
other than the ones you've covered so far.
Have you looked at these
and how do you test them?
I don't have an answer
about how to test them,
but I was interested
in this whole kind of line of things.
So there's a set
of command line interface tools that
instead of, um, uh, instead of arc parse style or something of telling, you know, defining flags,
they define it based on an object, a configurable object. So, um, his, uh, clip stick, for instance,
let's, let's start with Tyro. He is, this is one of the early ones it's kind of easy to figure out tyro is a is a command line interface tool that you can use data classes
or pydantic or adders to define the the all the options so for instance uh here's an example it
was showing the video um you can take a you importro, and then you define a data class with types on
on a bunch of args, you just it doesn't matter what it is, what's called, but you have a class
with a bunch of elements in it. And those are the things that you can pass to your application now.
And then you just you, you implement a Tyro CLI application, that's. That's the arguments. And it's kind of cool on parsing args that way.
So that's Tyro. And then there's Clipstick, which is kind of cute, like C-L-I.
Yeah, anyway, that defines all of your types within a base model, like from Pydantic,
Pydantic base model.
And then you can define a whole bunch of types in there.
And then you can, and it has help and all that stuff.
So basing it on a Pydantic object.
And then also there's a nicely designed website
called with Pydantic argpars.
So argpars with Pydantic.
So there's another one that's defining arguments
based on a base model.
And I just, I haven't played with these yet.
I just wanted to report back
that these are some different ways
to set up user interfaces using like Pydantic
or data classes or adders or something like that
as an object and then
and then you have instead of you get like this arg object instead of having a whole bunch of
different elements you have like this object with all of your arguments that you can pass around
and since it's things like pydantic you can do things i'm i haven't played with it but i'm
guessing that you can do things like limit the scope so it's not just an integer but it's an integer between one and five or something like that um right yeah that's cool
yeah so these are fun those are super fun yeah pydantic is great typing for this kind of stuff
is great because it it's usually not open-ended right that should be a number and if it's not
it's going to be a problem or that should be a string for the host name that's required. All these things like really map over to that validation side of pedantic.
But I do want to, so from Sandra 76's question, how do you test these or is testing easier?
It is a good question.
And I put it on my to-do list for January or sometime in 2024 to take a look at.
So I'll have to report back about that also.
Yeah, very nice.
Very nice.
So it's the Samuel Colvin and team day for you with fast UI and the Pydantic Bay stuff.
Yeah, indeed.
Good stuff.
So.
All right.
Extras.
You want me to do mine first?
Yeah, let's hit yours first.
All right.
Well, I have one and it's super quick. So I just, you know, there was this announcement here that Google is, Google Chrome in particular, is looking to limit ad blockers and start limiting how much control people have over their privacy and data and stuff with what's called the Manifest V3 API for basically for using extensions. And the main rule here is that they're limiting how many
domains and rules you can apply to block, basically to limit network traffic. So you can
say, well, there's 500 ads you can block, but those are the only 500, right? Which really limits
it. So people are whining. I'm like, you know, why don't I just write an article? Because like,
I could turn all that stuff off and I don't care at my house. And you could too, just instead of worrying about what
these browsers are doing, just go and turn on a network level ad blocker. Like you can use next
DNS, which I've talked about before, or you can, if you want to run your own server and only have
it when you're home, you can do this pie hole. I know that's super awesome, but next DNS is a
service, which so when you're at the coffee shop or traveling or on your phone, you can also have the benefit of PyHole. But anyway, I talked a lot
about how that works and how you set it up with some cool graphs, like 10,000 block queries on
my network for just two people for a little bit. And also, this is all great. Once you set this up,
though, when you get to a place that says, hey, you have to disable your ad blocker or you can't
watch this movie, read this article, you're like, you know what, I hate you. But a place that says, hey, you have to disable your ad blocker or you can't watch this movie, read this article.
You're like, you know what?
I hate you, but just for a minute, I have to do this
because I really, really need to get here.
It talks about how you can set up a second browser.
Like for me, it's Firefox, not Vivaldi.
Like Vivaldi is my main one,
but Firefox, I set it up to use a DNS over HTTPS,
but one that doesn't block like Cloudflare or something
that doesn't filter anything.
So if I have to escape my blocking network for whatever reason, I can just run Firefox
and it tunnels out of all this restrictions, which is usually nice.
But when you need to turn it off, you got to turn it off.
So there's a quick article, I say what you want to call it for people to check out.
Yeah.
Things like that still bug me though.
Like the turn off ad blockers, it can't be that high of a percentage of the population that's turning them off.
So yeah, I know.
Weird.
Yeah.
There was one show.
It was like Peacock or Paramount.
One of those streaming platforms would not let my wife watch some show because it says
she had her ad blocker on.
Of course she didn't.
She had, she was on the wifi, which was blocking everything.
And also the side, the extra benefit here is this means your mobile apps have ad blocker on. Of course she didn't. She had, she was on the wifi, which was blocking everything. And also the side, the extra benefit here is this means your mobile apps have ad
blockers built in. This means your TV has an ad blocker built in. This means like everything has
an ad blocker built in, not just your browser. Right. So all this whinging over, like whether
or not you're, you can do blocking in a browser, like, you know, you could just do better and it's
not even your problem anymore. Right. So, yeah, it super she's like well michael how do i watch this i'm like i don't know
actually i'm sorry but i don't want to turn it off for the whole everything right like i just
want to let you watch your movies how do you do that so that's in there as well yeah okay cool
nice okay i've got a few extras uh won't take long though uh django 5 released yesterday um
we've already talked about all the cool features of Django 5, didn't we?
I think you covered it a couple weeks ago.
But I just noticed that it's not a beta or anything anymore.
It's released as of December 4th.
It's all grown up.
Yeah.
That's awesome.
I'm excited to play with that.
So that's fun.
And then something submitted by Paul Berry.
So thank you.
He says, Brian seems to like Vim
and you can use Vim key bindings in a lot of places.
And so he sent over the Vim key bindings everywhere,
the ultimate list.
And it is a GitHub repo
with a whole bunch of awesome things
like debuggers and like vim PDB.
I didn't know you could do that.
That'll be fun.
IPython, you can turn VI key bindings on with IPython.
Anyway, quite a few fun settings
and telling you how to do it for different things.
Even email clients.
Look at that.
Yeah, none of them I use, but I used to use Mutt a long time ago. and telling you how to do it for different things. So even email clients, we got that. Yeah.
None of them I use,
but I used to use Mutt a long time ago.
Yeah.
I don't see mine either,
but that's Thunderbird.
I should try that.
Yeah.
So,
okay.
So,
and then I've got for my last extra,
I have a little drama.
So I talked about last week that i think that python or we have
before the test and code is now python test my other podcast but i left it on the domain
test and code for a while but uh recently i tried switching it to to podcast so we're looking at now
is podcast.pythontest.com so the the new URL is that. But if you just go to
if you just go to
pythontest.com,
there's a there's a link
to the podcast
so you can find it that way.
Just podcast.pythontest.com.
Anyway, what do I do
with the old domain?
I redirected it,
but it didn't work.
I don't know what I did wrong.
I contacted Namecheap
and they said,
let's find us.
So not sure what went wrong.
So I changed it,
changed the DNS settings last night to, to just point to like a small site. So a small site that
looks like this, this morning, it just says, Hey, I'm here testing code, the podcast moved,
it's over there. And so just so that it won't 404 on people. And I also have some redirects. So if you say like testing code.com slash 23, it'll redirect to the 23rd episode over
on the other one.
Awesome.
Except it didn't work last night.
I was pulling my hair out and then, uh, I woke up this morning and it worked on my phone,
but not here yet.
So, um, I know that there's this thing of saying, if you ever muck with DNS, it can take up to 72
hours to like ripple through the internet. I haven't ever had to deal with that before.
It's always been pretty quick whenever I muck with DNS settings. Apparently I'm hitting that.
So hopefully in a few days, it'll be all resolved. And so now I have to reset my
days since it last DNS problem to zero. So days is less.
Oh my God.
That is so amazing.
I love it.
So I'm showing an Etsy.
I think you can find them lots of places,
but there's an Etsy state sticker that says zero days since it was DNS.
And in parentheses,
it's always DNS.
It is anyway.
Oh my gosh,
Brian,
are you,
are you foreshadowing here?
Maybe.
Do you know what I did this whole weekend?
I have two things to cover from my extras.
Okay.
Well, I covered the one.
And I also just realized I wanted to give a quick mention just in case.
I spent my, I don't have anything to show.
So let's just leave this up because it's perfect.
Okay. I spent all of the weekend and a good chunk of Monday migrating domains from different places.
I have a bunch of old ones at GoDaddy because 15 years ago that seemed all right.
And they're super hard to get out of there.
So I've got a bunch at Google Domains because I thought Google Domains is beautiful until Google decided to shut that down because apparently it's too much work to store like a DNS file that's 500 characters.
I don't know.
Because it's a commodity now
and they can't make money off of it.
I know, I know.
Anyway, I can understand it.
But anyway, so I had,
well, I don't want to stuff on that thing
that's like shutting down.
I got to move that off
and I got some others in other places.
So moving that all together,
holy moly, does that take some time?
And sometimes they move quickly.
Sometimes they don't.
Some of the domains have security turned on
that if they transfer,
it takes three days for it to disable,
but the domain will transfer right away.
But if you transfer it to,
you reset it too quickly,
it'll like just permanently stop working.
Some of them have to have SSL
as part of the DNS definition,
like.dev requires only SSL. But if want to use let's encrypt well it's got to resolve to some place but it can't resolve to some place
you don't have SSL you're like okay who decided to invent a catch-22 for domain names like oh
ah so the last one of the last ones switching is pythonbytes.fm, which I requested after a 45-minute phone call
to figure out why GoDaddy couldn't give me the access code to do the switch.
I finally did this morning, and I got it.
But I hope everyone gets to hear from us after it switches.
The whole reason I'm telling this story is that for some reason it stops working.
It will be back.
I apologize.
I'll get it there.
I think it's going to go seamlessly.
Sometimes I do.
Sometimes I don't.
Fingers crossed for this one.
So we need to buy these stickers in bulk then.
Zero days since it was DNS.
It's always DNS.
So we need to get those ordered now.
Mojo is asking where I ended up.
I ended up.
Let me do it like this so I don't give away the joke. I ended up, let me do it like this. So I don't give away the
joke. Um, I ended up at a hover.com. Okay. It's the one thing that they do. They don't do other
stuff. They don't kill white rhinos for sport, nor do they not care about their DNS. It's like
their job. So it seemed like a good place so far. Fingers crossed. Thank you, Robert. All right.
So you already had probably the best joke
for the show, but I've got a joke as well. You ready for it? Okay. Yeah. Okay. Oh, I love this.
Yeah. So Chris, no, Josh Collinsworth, sorry, came up with this thing and it looks like some
kind of code he's written. It's over on codepen.io that generates these. So it's an honest LinkedIn
notification generator. So, you know, you go
to like your activity or your notifications and it tells you stuff. Well, this one tells you stuff
that is, you know, more in line with the reality of LinkedIn rather than what LinkedIn wants to
tell you. So here's a picture of this woman. It says, congratulate a near stranger for tears at
a job you didn't know they had. And then there's like a, yeah, it's so good.
There's like a blurred picture of somebody.
So someone looked at your profile who were holding that information for ransom.
It says is the smiling guys as follow the worst coworker you've ever had for their sudden unsolicited insights.
And it just goes on and on.
I think it even has infinite scroll. Somebody connected with your first manager from, uh, from your job in 2014 reacted to a former classmates
post. Thought you should know. Wannabe influencer shared an incredibly crappy opinion just for the
engagement. Click to engage. Never hire anyone who writes CSF ever. No CSS. So on and so on.
It's so good. Wish that guy who made you cry in the
bathroom a happy birthday. That's great. Oh, that was, that was, uh, did you already get the one
where it was like free work, the free labor one? Oh yeah. No, right there. You're, you're one of
the few experts invited. Oh yeah. Yeah. You're one of the few experts invited to slash do free
unpaid labor.
Rather, add to this collaborative article.
How do you exploit users without them noticing?
Well, I've been getting those like a whole bunch lately.
And I actually clicked on it when I'm like, what are they talking about?
Oh, they want me to write articles for free.
No, I'm not doing that.
I got one this morning even. So I got not one of these, but I got a congratulate
John Gould on his new or gold on his new promotion. And I'm like, he owns the company. I don't
understand. Good little pat on the old back there, John. Good job giving yourself a promotion there.
Exactly. Chris Taylor and 36 others at soul sucking corporation shared
this post from the CEO in hopes of avoiding the next round of layoffs. These are good.
Get a lot of those. Yeah. All right. Well, I don't know if it's too dark, but that's what I brought
for the joke. I think it's great. I kind of like LinkedIn to like keep in touch with people and
keep up your resume and stuff like that. But I don't actually ever use it as a finding new articles through service.
But anyway,
there's a whole group of people who do.
I don't think I'm part of it either,
but yeah,
I'm not the target audience.
So it's all right.
Yeah.
All right.
Well,
thanks again for a lovely Python bites.
Absolutely.
Bye.
See you later.