Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
This is episode 396, recorded August 13, 2024.
I'm Michael Kennedy.
And I'm Brian Okken.
And this episode is brought to you by Scout APM.
Thank you to Scout for their continued support of the show.
Check out their link in the show notes.
We'll tell you more about them later.
If you want to follow us on the socials, you can find us all over on Mastodon.
Links at the top of the show notes.
And we are on X, although less active than we are on Mastodon, I would say.
When we catch the live show, you can do that at pythonbytes.fm/live.
And it takes you either to the old ones or lets you know about the new one if it's running right there.
So we appreciate when people are there, but audio always, always works as well.
Brian, how are you doing?
I'm good.
Yeah?
I didn't know we were still on X.
Well.
You're on X.
Here's the thing.
Oh, see, you're not on X anymore, okay?
Did you actually delete your account?
I have an account, but I check it like every other month or something like that.
So.
I still get notifications if people will at mention me.
Oh, okay.
I'll see it.
I don't like drop in and cruise through there as much.
I'd be happy on Mastodon, but there's just, I would say 75% of the people that follow us,
interact with us, at least through the show account, probably didn't make the transition.
Okay.
I should pay attention more.
So apologies.
Still there for them.
Yeah.
We're still there for them.
Okay.
Good.
That's all I meant by it.
Okay.
All right.
Well, let's kick it off with your first item.
Okay.
I want to talk, I think I already, I covered UV, a UV article yesterday, a lot yesterday.
Yeah.
Last week.
Well, it's the summertime.
You got to be real careful about your UV index and put it on your, oh, wait, no, not that.
I love UV.
Oh my God.
We could put together a UV index.
It'd be like the, that would be awesome.
Anyway.
So I saw this article, Python packaging is great now.
UV is all you need.
And I'm like, I don't know.
It seems like a little silver bullet dish for me.
But I took a look at it anyway.
This is from Juan Luis Cano Rodriguez.
Awesome name and cool profile picture.
Anyway.
So UV, what is, we like to bash on packaging, but it's just continually getting better.
And especially with people like Brett Cannon trying to continue to make it better.
It's going to, and people at UV at Astral making UV better.
But what, so what is this about?
This article, I didn't really want to completely cover the article, but there's some pretty cool
stuff here.
So bootstrapping, getting a project started is difficult sometimes or knowing what to do.
And, and I've been using a UV for making virtual environments, but, and it's really fast at that.
But I took another look at it.
There's been some updates that I didn't know it did some, some cool stuff.
So one of the highlights here is UV Python.
It manages Python versions.
And I'm like, what it does what?
So I went and checked it out.
And you can, so you don't even have to, so you can go down and say UV Python install and
it installs Python versions for you.
And it's really fast, but you don't have to.
And I'll tell you why in just a sec.
You can, you can install it like that, but you can also say UV Python list and it lists
all the Python versions that it can find on your system.
But if you say UV, V, E, and V, so creating a virtual environment, you can give it a Python
flag with a, with a number.
So you can do list to edit time.
And it tells you not only what versions are there, but also what versions it has available.
So you can, you can say like, if you don't have 3.11 on your system, you can,
you can say 3.11 anyway, and it'll install it.
I'm like, does that really work?
So I checked it out.
I tried it.
I personally, it, it said that it would just do it automatically if it wasn't there.
But I had to add the Python.
There's a flag called Python preference managed, and it's listed here somewhere.
Anyway, Python preference managed.
Dash to ask Python preference.
And then you can say UV managed.
Yeah.
Only managed or managed system or only system.
Gotcha.
Awesome.
Yeah.
Python preference.
But if you say managed, which is supposedly the default, but I had to pass it in anyway,
it just does it.
So I'm like, this is cool.
And I installed like six versions of Python on my Mac yesterday in seconds.
And just, just to have fun to create virtual environments.
And, and it's just neat.
So I only really need a Python with, I usually use Python within virtual environments.
So being able to just install one into a virtual environment is cool.
So what else can we do?
So the, there's other things that UV can do that, like it can initialize a pyproject.toml
for you.
And it sets up, if you do a knit, it sets up pyproject.toml and a readme and a source layout.
It doesn't do a lot, but it gets you started.
The, the thing that I thought was neat is add.
So you can add dependencies to your pyproject.toml with UV add.
And so you don't have to look up the syntax for it.
The other cool thing about it is you can give it the dev flag.
You can say UV add --dev.
Like you can say --dev py test.
And it'll add py test to your development dependencies, which is neat.
So I guess I was going to say packaging is not solved with UV.
But maybe, maybe it is.
There's some pretty cool stuff.
This is awesome.
Yeah.
If you look up, if you say UV help, there's a whole bunch of experimental, experimental items
through here.
So there's run, a knit add.
A lot of these are experimental features.
Tree is cool.
You can do a project dependency tree using UV.
So there's a lot of stuff that I used to use other tools for that UV is doing.
So kind of cool.
Locking, creating lockout.
Self.
I like it.
What does Self do?
Manage the UV executable itself.
Oh, yeah.
Okay.
So there was a lot of drama, honestly.
Not on our show, but on the mailing lists when this was announced.
With UV Python?
Or UV?
No.
With UV pip.
UV pip.
Yeah.
And so the reason that Charlie and team chose UV pip as part of the CLI interface as a sub-command
was so that they had space to do all these other things.
So if you just said UV install, well, is that install the Python thing?
Is that install a package?
Oh, yeah.
Yeah.
Right.
And so they put that in there as almost like a namespace for all their commands and stuff.
And how much new stuff is under these experimental sections?
Starting to feel like, okay, this is what they had in mind, right?
Yeah.
So the experimental part makes me nervous to put it into my normal everyday workflow a
little bit.
But for personal workflow stuff, why not play with it?
Yeah.
As you're going through this and seeing this title, Python Packaging is great.
UV is all you need.
I think it's all I use these days.
I don't think I use anything else.
There are some systems that the whole, especially with certain firewalls, that I know you can get
around it with UV, but there are some systems that I work on where I have trouble working
with UV, but pip works fine.
Oh, interesting.
Okay.
Yeah.
I have basically three or four, maybe four or five aliases that are just like two or three
letters that will do all the combination, like the full commands with this and that.
So those used to be pip commands.
Now they're UV pip with the different parameters and stuff.
Yeah.
So when UV pip started, came, I tried to alias pip to UV pip and same with virtual environment,
but I realized that I kind of like control.
I like to be able to use both.
So I just sort of taught myself these UV commands.
Yeah.
Sounds good.
Not too hard, is it?
All right.
Well, I have a set of bookends around Python versions to start and end the show here.
So let's start with Python 312.5 was out just last week.
Came out right after the show was released, I think.
So we didn't cover it, but yeah, here we have a brand new version of the most recent version,
Python.
And I just checked, by the way.
What?
Yeah.
And I just checked with the UV Python list.
And I think 312.4 is the latest there, just to give you a sense that like one week into
it, apparently we don't have the latest.
I was kind of hoping like that thing would be super cutting edge on top of it.
So, but I wonder if I, you know what?
It's possible that my UV is over a week out of date and it doesn't know, right?
Something like that.
I don't know.
Anyway, 312.5 is out.
And if you scroll through, I'm linking to the release notes.
Sometimes it's hard to find like what is actually changed in say 312.4 to 312.5.
Because if you go to the, if you go to python.org and click on downloads, a lot of times it'll
just show like, well, here's what's new for 312.
You're like, great.
And from the last one that I had to this, what was that?
But if you go and you can find the release notes, which I'm linking to.
And so there are a lot of releases and changes in just this minor point release.
So we've got a bunch of tests that are fixed.
How about that, Brian?
That's great.
Yeah.
Two different security improvements, patches, I guess.
You know, they're not, don't think they have CVEs.
So there must not be too bad.
Like audit, like missing audit events around certain behaviors.
Like, okay, so you couldn't audit it properly, but it's not, it's not a, you know, all your
bases are belong to us sort of thing.
A bunch of stuff in the library.
So for example, a new version of pip.
So for just a moment, just briefly, when you create a virtual environment, I won't say your
pip is out of date.
But this, things like this, fix crash when importing SSL after the main interpreter starts.
Hmm.
Might want to have that not happen.
Handle value errors raised by os.stat.
Fix some error messages in pickle.
Here's one that's worth paying attention to.
Fix a seg fault in async io.taskit coroutine.
Okay.
You know, a lot of times you think of, at least I think one of the really huge advantages of
Python is when stuff goes wrong, your program doesn't just go poof and go away.
It, it reports the error.
It gives you a chance to catch it.
Right.
You like this Python itself doesn't die.
It knows it's something's gone terribly wrong and it shuts down.
Right.
But the Python, cpython seg faults, then it just goes poof and goes away.
So there's a ton of stuff like this.
So I just wanted to call, call people's attention to all the changes here.
And there's even some that look like performance.
For example, what was it?
Uh, f-strings.
If you have an F string that has just one entry into it, it, I think it used to create an abstract
syntax tree to try to build it up.
And they're like, not really needed all that stuff for a single F string.
Our F string was single, entry in it.
So, yeah, that's, that's going to be a nice performance improvement as well.
Is it a dash?
How do they F string it?
Yeah.
So anyway, these are all good things.
Yeah, definitely.
Yeah.
f-strings are getting, getting, getting more secure, more fast, more faster, better.
Faster, better, stronger.
We have the technology.
We can rebuild it.
Okay.
Can you even imagine going back to the time before f-strings?
It was a dark time.
My percent, my percent key still has no, no, characters on it.
No, just kidding.
Yeah.
Indeed.
Okay.
And before we go on to the next one, you were probably going to give us some really awesome
segue there, but let's talk about, Scott APM before we move on.
Okay.
Let me tell you real quick about doubt APM.
They're big supporters of Python bytes.
So we appreciate that very much.
So if you are tired of spending hours trying to find the root cause of issues impacting your
performance, then you owe it to yourself to check out scout APM.
They're a leading Python application performance monitoring tool, APM, that helps you identify
and solve performance abnormalities faster and easier.
Scout APM ties bottlenecks such as memory leaks, slow database queries, background jobs,
and the dreaded N plus one queries that you can end up.
If you do lazy loading in your ORM, then you say, Oh no, why is it so slow?
Why are you doing 200 database queries for what should be one?
So you can find out things like that.
And it links it back directly to source code.
So you can spend less time in the debugger and healing logs and just finding the problems
and moving on.
And you'll love it because it's built for developers by developers.
It makes it easy to get set up.
Seriously, you can do it in less than four minutes.
So that's awesome.
And the best part is the pricing is straightforward.
You only pay for the data that you use with no hidden overage fees or per seat pricing.
And I just learned this, Brian.
They also have, they provide the pro version for free to all open source projects.
So if you're an open source maintainer and you want to have Scout APM for that project,
just shoot them a message or something on their pricing page about that.
So you can start your free trial and get instant insights today.
Visit pythonbytes.fm/scout.
The link is in your podcast player show notes as well.
And please use that link.
Don't just search for them because otherwise they don't think you came from us.
And then they'd stop supporting the show.
So please use our link pythonbytes.fm/scout.
Check them out.
It really supports the show.
Over to you, Brian.
All righty.
I want to talk about Tox a little bit.
We haven't talked, actually brought up Tox for a while, I don't think.
But there's an article on Victor Reimark's blog about compile and use dependencies for multiple
Python versions with Tox.
And it's kind of a neat idea.
I use Tox for incorporating it with GitHub Actions a lot to be able to, well, and just locally to be able to test multiple Python versions and multiple versions of different libraries, how they work together.
Tox is great for things like that.
But one of the things that I didn't think about was doing pinning, like compiling pinned list or lock lists for dependencies for multiple Python versions.
And so this article walks you through kind of why you would want to do that, but then also how to.
And the little trick here, which I think is cool, is that Tox uses an environment name called the env name.
And so there is a way to be able to specify, use that to look at different, the Tox environment that it created, because it creates a little virtual environments when it's running.
But the neat thing about that is you can use it other places.
And the idea around this was to go ahead and use this article uses pip-tools, but really, I think you could use anything.
But to target a compile, like a pip-tools compile and, and send it to using pip compile and using pyproject.tomla as the base file, and then outputting to a requirements in env name, which is, or a env.text or a, like a env-dev.text.
So you could do like a requirements with a requirements file, essentially with, with your environment specified in it.
You could, in this example, it's using a directory, pumping them all into a requirements folder with a directory, but you could also do, you could also do a directory.
And then also, I also like to have a requirements dash whatever.
So even if I had them all filed into a directory, I usually put something like requirements dash 312.txt or something like that.
But having that be able to specify it from the project allows you, allows the little trick to be able to say, oh, here's an example of with the requirements dash.
I like that a little bit better.
But to, to have a requirements target within Tox, so that you can use that to compile your project, compile those.
And while they're running, you're, instead of like in CI or something, can grab those.
And instead of generating a, just whatever it can find, it's a pinned or a locked set of, set of dependencies.
It might be a little bit more consistent.
So, so that locally, the, and the idea would be then locally you, when you're testing yourself, you can say, hey, I'm ready to update my dependencies.
And then it regenerate the, all of the, all of the dev files and then, or all the lock files.
And then later when you're, when CI is running, it doesn't look up dependencies.
It just like knows the fixed links or the fixed versions.
So kind of a neat idea.
I wanted to highlight that.
I also wanted to highlight this because I want to, I like this idea, but I want to do it with UV.
And I want to, I'd like to be, I think I'll play with this.
But if anybody else has time to play with this and see if they can get it working with UV, I'd love to see the outcome.
So.
Yeah, that's awesome.
I imagine you can, because if it was using pip-tools, you know, it's got the pip compile behaviors.
It shouldn't be that hard.
Yeah.
It's awesome.
Yeah.
This looks great.
I love it.
What do you got for us?
You let's, let's close it out with dark.
I did tell you it was the 13th, didn't I?
Yeah.
So I present to you a, this is not exactly a Python thing, but I feel like this is a, anyone who builds web apps or other types of apps and interacts with, you know, users sort of thing.
So superset, if you will, I present to you a catalog of dark patterns for software.
Dun, dun, dun.
It says discover a variety of dark pattern examples sorted by category to help you better understand deceptive design practices.
So there's some that you probably would know like bait and switch.
And each one of these has at least one concrete, like case study of evil, badness of darkness, let's say.
So the bait and switch one, which says this tactic lures users with an enticing offer only to change the terms unexpectedly.
So they've got a lift 60% off.
Wouldn't you like 60% off of your next ride?
Just click here and sign up, right?
And then once actually your next two rides, it says right here.
Yeah.
But then actually, as you try to apply it, it turns out it only counts towards 60% off the first $10.
So if you like went to the airport, it was 50 bucks.
It's like, well, you know, it's still 44.
Yeah.
Perfect.
Uh, so that's not ideal.
No.
To me, the classic bait switch is the cable companies for internet or, or anything like,
don't you want to add like a home phone, like digital phone?
And then you can add like the sports package and it's only $5 more for the first, you know,
for the first, six months.
And then it's like $150 more.
So I had one just like yesterday.
I had an email from my cell phone provider that said, since you've been here, like so many numbers
of years, we're going to give you 10% off.
I'm like, that's cool.
And I clicked on it and it was 10% off any of your case pair purchases.
Like, so shady.
So shady.
So that, I mean, people probably know that one, but there's other ones that are, interesting.
Like one that I really like is the roach motel.
Okay.
So, you know, what is that?
Oh, it's this dark pattern usually used for subscriptions, making it easy to sign up, but
nearly impossible to cancel.
So there's, you know, you can't, there's not like a just unsubscribe us button.
You've got to call somebody and they try to talk you out of it.
Like I'm a hat, hat tip.
The cable companies again on this.
Yeah.
Right.
But yeah.
There's one, there's one click subscribe.
All right.
Canceled.
So please come down to our office during hours of four and three.
Exactly.
And if you don't get through the line of people backed up trying to get out of it, then,
you'll, you'll, do bad.
Try again the next week.
So there's a bunch of these.
I'll do one more just that people go play with them.
Disguised ads.
Oh, I thought it was disgusting ads.
Disguised ads.
Okay.
Disguised ads, which are themselves disgusting, but the pattern is disguised.
So Microsoft edge, for example, and I feel like Google, this is towards Google Chrome, like
a thing towards, I feel like it's also kind of reverse a lot of like Google does that as
well.
Like, wouldn't you rather use this instead when you search for something?
Anyway, I'll give you the example that's on the page.
So you may encounter not one, but two dark pattern patterns when attempting to get Google
Chrome onto your computer.
When you have Microsoft edge, this happens when you have a empty install of windows.
Because you have edge installed, but not Chrome.
And, or, I mean, I feel like installing Chrome itself is a dark pattern that you should just
avoid use of all the brave Firefox, something else.
But anyway, that's not the point.
There's, there's two here.
And the first one is disguised ads.
The second one is confirm shaming.
And so this is like a good case here.
So if you go over to google.com/chrome in edge and you go to the down, you go to the,
like the, where you get to download it.
It literally has a built into the browser popup that comes out of the menu bar.
No, that dress bar rather says, I hate saving money.
Said no one ever.
Microsoft edge is the best browser for online shopping.
Just by literally visiting the Chrome page, you get this popup.
It's like integrated, not into the HTML, but into the UI of the browser.
That's so funny.
Yeah.
So that's, that's shady.
That's one.
I kind of love the boldness of that though, actually.
But I know.
And then if you go to, go to Bing, I believe this, which is the default search engine and
you just search for Chrome, you get some results.
And then there's like this other part.
Oh no, this is actually in the start, the start menu.
This is in the start menu.
So if you type Chrome, you like try to run Chrome.
Oh dear.
Half of the whole start menu says, try Bing wallpaper.
Switch to the browser recommended by Microsoft.
Download edge.
Yeah.
Oh my God.
Yeah.
So what's cool is it says, look here, like it kind of highlights the various patterns
that are here.
And then like other companies that do similar patterns.
Anyway, I think this is interesting reading.
I think figuring out, like just being aware of this stuff.
So if you're involved in building these things, you're like, Hey guys, people are going to not
like us.
Could we do this a little bit differently?
You know, sometimes marketing will win.
Sometimes developers will win, but.
So are these dark patterns or, or maybe growth hacking?
Yes.
Is this our yacht or is this a dark pattern?
Could it be both?
Hmm.
What could I incorporate these into?
No.
Yeah.
Hashtag you win if you can get like all dark patterns.
Oh, that'd be fun to try to.
It'd be good growth act.
Cause then you could appear under every category.
That'd be like some like link.
Pre-advertising.
Exactly.
Yeah.
Anyway.
Yeah.
This is what I got for you.
Kind of interesting.
Nice.
Extras.
You got any extras you want to share?
The extra I wanted to shout out was, was just, I've been, I've been, I think I have my
recording done for, for HelloPiTest.
The only thing left to record is the summary at the end.
The, I want, well I have the, there's a few things I want to like one extra video and
record, but I want to edit everything first.
I'm in the process of editing and keeping track of everything so that at the end I can go, Hey,
we went through all these things.
So I want to make sure.
Actually the thing that I have left is I want to review all of the command line flags that
I use in the course.
I don't remember all the ones I've used.
So I'm writing down as I'm editing.
So nice.
That's awesome.
But I'm on track for August 19th.
A few people have ordered already.
Thank you so much.
Everyone that's ordered so far.
So love you.
My wife loves you.
We went out to got coffee or off of money we got from this.
So beautiful.
Yeah.
Available for pre-order now.
Yeah.
Uh, what you got?
I have just a couple of things.
Django 5.1 released though.
Big deal here is easier guardrails for authentication.
Cause having people access stuff that was supposed to be authenticated, but isn't as bad.
They didn't say that that's my words.
The new and shiny login required middleware is available, which enforces authentication for
all views.
Yeah.
Um, better screen reader support, better HTML semantics.
The second oldest ticket is now fixed with a long awaited query string template tag.
So these things are all good.
And let's see.
What's there now?
I thought there might've been a CVE or something in here, but I don't think so.
I saw Django CVE not too long ago, security deal, but it doesn't seem like it's addressed
with this one.
So it must've been fixed previously.
All right.
So that, and then here's the bookend.
We started with a 312.5 being available.
Well, how about Python 313 looking forward with release candidate one is out.
So this happened a little bit ago, but if you're out there and they say, please test,
you have a package, especially a popular one, please test it with Python 313 ahead of time.
So we can do stuff about it.
And you're like, oh, it's betas.
I'm not going to take the trouble.
I'm not going to worry about it.
Well, it's now officially stable in terms of features, right?
They're not going to add or remove things ideally unless they absolutely have to.
So you should be able to properly start putting energy into testing and playing with this one.
And this one is a big deal because this is the first free threaded Python, which is going
to have significant effects on runtime behavior.
not just the API still work, right?
So it's going to be worth testing with this one.
All those other versions of Python, you have to pay for threading.
This one's free threading.
Yeah, it's awesome.
Finally, finally, it's free.
You just have, yeah, you have to pay by buying other machines and running copies on them to get parallels.
No, I, so I was hoping that UV Python would have 313 there, but it doesn't yet.
So yeah, that would, all right.
UV team out there listening.
Astral, come on Astral.
What are you doing?
Exactly.
Let's, let's get, let's turn UV Python into like, this is how I get the freshest Python, which is actually one of the things that's a little tricky.
Like homebrew, it takes a week for that stuff to show up and other stuff.
Yeah.
A week.
Yeah.
Who wants week old coffee?
No, no.
Your threads are totally stale, but.
It's a, it's a goofy episode, man.
It is.
All right.
I know you got the joke for us this week.
So.
Okay.
Well, actually, before we get onto this, I was just thinking because you, you wanted, when
you were talking about Django, I thought of a new, of a, a dorky joke.
So what do you call a 17 year old insect?
A minor, a minor bug.
Oh, that's pretty good.
Um, okay.
So, I saw this artist technical, a, is it ours or ARS?
I don't know.
ARS technica.
I say ours, but I know now you say that I'm not sure I've ever heard anyone pronounce it.
So.
Okay.
We're going with ours.
Cause it's lowercase.
Ars technica, had an article parody site.
Clown strike refuses to bow down to cloud strikes, bogus DMCA takedown.
Uh, so there's an article here.
Um, I wanted to check it out myself.
Um, so if you go to, clown strike dot LOL.
Um, and we'll refresh it.
Uh, see if it, it starts out looking like crowd strike, but it has a little goofy hat on
it.
Um, and then if you put, I'm not going to play the music now, but, if you play music,
it's got like some, some goofy little music that goes along with it.
And there's a clown.
That's it.
That's just, it's just funny.
Um, but, now if you click on the left, it tells you about all this.
Well, it tells you the, the ARS technica article, but it also talks about this story about how
they had these takedown, crowd strike tried to take them down and it's just silly.
Um, there's some other stuff here too, that I think it's just hilarious.
Like, the what scam advisor lists clown strike, LOL as a highly trusted might be safe.
It's like nothing there except for just this goofy little picture.
And, but, but there are some, some, some other stuff in it.
You can read the whole story and all the letters about, or all the emails, the back and forth
about the takedowns.
And actually, there, I was surprised to find out that they had to like cloud for cloud
flare was, was, was hosting this, but it, it like accepted the takedown at first.
Um, and eventually back down, but even after, but after it got moved, but I'm surprised that,
I'm surprised that it got taken down so fast because obviously this is a parody site.
Um, and parody is protected.
There's no way like even a cursory look at this.
Anybody would think this is a realistic, yeah.
It's not trying to impersonate it or anything like that.
Yeah.
Just making fun of the situation.
And, and I think that they just probably, I mean, they really should have just ignored
it.
And now clown strike is known and we're talking about it.
And ours technique is talking about it.
Anyway.
Um, exactly.
So it's the barber strain stand effect.
Right?
Yeah.
So, oh boy.
Anyway.
Yeah.
I mean, I'm somewhat sympathetic to crowd strike, but this is, this is a bad look.
You know, if you've got a right native code that runs in the kernel, the smallest mistake.
And it has to be like updated within hours of you learning new information.
I don't know.
It's, it's tough.
It's apparently it's one of the, the best antivirus systems out there that actually works.
And isn't just, you know, you wouldn't talk dark patterns.
Like a lot of this antivirus clean your computer stuff is really shit shady, but boy, did they
cause a problem that I would not want to be in their shoes.
No.
Well, I don't know.
I mean, a couple of weeks of shame over you get billions of dollars to pay for that shame.
So, yeah, I think they're going to get a lot of lawsuits from a lot of angry fortune 500
companies.
And even if they win defending them, it's going to, going to hurt them bad.
If it doesn't kill them, it's going to hurt them bad.
So.
Okay.
So yeah.
Sympathies out there for somebody.
Some, a little bit, a little bit, a little bit, but I feel like they've certainly earned
this website and wow.
I didn't know.
LOL was a top level domain.
Yeah.
It's funny.
It makes me laugh.
Yeah.
What's that stand?
What is it?
Is it like a country?
Is it literally lol?
Like laugh out loud?
Or is it because they're like dot pizza is a top level domain as well, which just seems
wrong.
Oh, that does seem wrong.
Really?
I think so.
I'll have to check that out.
Like pepperoni dot pizza and like, you know, Hawaiian.
Honestly.
Yeah.
Pineapple.
Maybe we need to get some domains.
Yeah.
Anyway.
Okay.
Awesome.
Great.
All right.
Thanks for being here like always.
Thank you.