Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
This is episode 301, recorded September 13th, 2022.
And I am Brian Okken.
And I'm Michael Kennedy.
And we're listening.
Anyway.
Hey, Brian.
Before we get started, we do have a sponsor, Microsoft for Smart Startups this week.
So that's cool. Thank you.
We'll talk about them later.
And what do you have for us first, Michael?
I want to take you on a journey.
Let's start at python.org.
I've mentioned this before, and it's been a while and not very many times.
And I never noticed this.
But if you see that code sample, there's like a set of different code samples that are on the page.
It's like the REPL.
And there's a little yellow, I guess that's supposed to be a prompt.
Like, I don't know.
It doesn't look like my prompt.
But, you know, you click it, though, and you wait for a moment.
What actually happens is it really, inside the website, opens up a Python REPL that is yours.
You can run it, right?
And this online console is hosted from Python Anywhere.
Pretty cool.
That is cool, right?
And it has, I think, stuff like various popular packages.
So I can type import requests and whatnot without doing any, you know, there's no pip install and stuff, right?
You have access to not just the standard library, but you have access to many aspects of the Python ecosystem.
That's super cool.
And you can also run not just these terminals, but you can also run probably more relevantly, most people, is Python web apps.
So API endpoints or, you know, some kind of like signup application for your kids.
I don't know, your kids' baseball team.
Who knows what, right?
So it's, they make it pretty easy because they've installed a lot of the things like Django and Flask and Pyramid.
So you don't even have to do a lot of setup.
They configure the servers.
You get this console in your browser to access it.
Get your own domain name.
And you can get much of this for free with some limitations.
Okay.
So, yeah.
So the reason I bring this up is Matthew Kramer sent over a message and said, in light of Heroku canceling their free tiers, which we talked about last week, I think, as an extra.
And so the Python Anywhere folks said, we are reaffirming our commitment to providing free accounts and free resources for the Python community.
How cool is that?
That's pretty cool.
Yeah.
I think this is great.
And they start out by saying, look, managing fraud and abuse for free products is definitely a challenge.
I mean, the thing I still really, really miss is Firefox Send.
Do you remember that?
Used to be able to go and create a temporary encrypted and encrypted type of way to exchange files.
And it was amazing until people started using it for malicious purposes and writing on the back of the domain for Firefox that would give it more credit than it otherwise deserves.
So it's hard to have free things on the internet because people are mean or some people are mean.
This is why we can't have nice things.
It is absolutely why we can't have nice things.
But the Python Anywhere folks are saying, look, we think we can have nice things within limits.
And we think those limits are not too significant.
So, you know, both of these companies went through an acquisition and possibly some kind of cultural shift.
So it's interesting to think about.
So Heroku was acquired by Salesforce.
Salesforce is a pretty interesting company.
They've got some wild history.
And then Python Anywhere was acquired by Anaconda Inc.
So, you know, if you think of who's deeper in the Python space, certainly Anaconda is more so than Salesforce.
Also, I want to point out that the free, I mean, free is awesome.
But if it's not quite enough for you, their one step up is only five a month.
That seems like a reasonable step.
Yeah.
It seems totally, totally reasonable.
So they said, look, we think we found a way to have free things.
And in our world, what that looks like is a few very minor restrictions.
So, for example, in this terminal that I showed you here, the REPL, you, for free accounts, you cannot have outbound internet access.
You can pull things in, but you can't serve stuff.
What is it?
You can't serve stuff out or something along those lines, right?
It's like one of the directions is restricted.
Okay.
Because they said, as soon as we had it completely open, bi-directional, hackers were all over it, doing all kinds of things.
So, let's see, they say explicitly here in the article, yeah, they limit outbound internet access.
That's what it is for free accounts.
And that dramatically limited the abuse that they have to deal with.
The other problem, you know, running these, especially for web apps, for consoles, like who cares?
It doesn't really matter.
But if you have a web app that's constantly running, probably its biggest resource is memory, right?
You know, it's using a certain amount of memory to keep that Flask or Django app running.
You don't really shut down the web app because the person stops interacting with it, right?
So, it said accounts like that where people might want to create an account to say, hey, look, I tried out Flask and here's my app.
I got it on the internet.
And then they left it alone.
They just quit.
They have no intention of doing anything with it, but they didn't bother to shut it down or delete it, right?
That's pretty tricky.
So, they basically set up a proof of life scenario here.
So, for a free web app to keep running, what you have to do is you have to go and click a button.
Yes, I want it to still run once every three months.
That seems completely reasonable.
That seems pretty reasonable, right?
Four times a year, you got to click a button.
You could automate it if you really want it, I suppose.
And then similarly for accounts, if you have a free account and you want to keep your resources,
you've got to do something similar once a year.
So, you've got to go in and say, yeah, yeah, please keep my account active.
And that's pretty much it.
So, with those don't seem like terrible restrictions and they get to keep offering free Python as a service.
Yeah.
I think that's completely reasonable.
Yeah.
Pretty cool.
Anyway, thanks, Matthew, for sending that in.
Yeah.
It is neat that people can, especially the example you mentioned.
So, I learned Flask and I made this Flask web app and I want to at least show my teacher and my friends and everything and my parents maybe.
Yeah.
Leave it.
That's fine.
Cool.
Exactly.
I want to put up a school project, but I don't know Linux and I don't want to go to big cloud providers.
I just want to get it up and running.
Yeah.
Yeah, this is great.
I need something for my Raspberry Pi that shows automation for my school project or whatever.
Yeah.
All right.
What's next?
I would like to talk about Python tooling.
So, I ran across this.
Not sure how, but there's an article called Python tooling could be much better, much faster, much, much faster.
And this is by Charlie Marsh.
And he, so apparently this is a thing that's going on.
I don't have an ear to the JavaScript world, but apparently the JavaScript ecosystem as well is thinking we need to make sure that our tools are really fast.
And Charlie said, maybe the Python tool should be really fast too.
So, what he did was he's putting together, he put together a thing called Ruff, which is, he says it's a proof of concept.
It's a Python linter, kind of like Flake 8.
It's written in Rust and it's like 150 times faster or something like that.
Wow.
And I was like, well, it doesn't cover everything, but it's covering like most of the stuff that Flake 8 covers without any plugins.
So, I guess, well, without the three main plugins that it ships with.
So, there's, it's pretty neat.
I downloaded it, tried it out.
So, we'll take a look at the GitHub repos here.
And it's, it's pretty awesome.
I downloaded it, tried it on.
Granted, I had a small project.
So, I had a small project where Flake 8 takes like a third of a second.
But it's, even at a third of a second, I was interested to know that I can kind of detect that it's doing something and then coming back.
But that's fast enough for me.
But I ran, I ran Ruff and I, like, just returned.
And I'm like, oh, something's broken because it's not doing anything.
It didn't do anything.
So, I ran it again and then looked at the output and it said found zero things.
I'm like, well, maybe I'm not pointing it at my code or something.
Right.
So, I intentionally added some errors and it found those errors and it was in like 0.01 seconds or something.
It was, it came back so fast.
So, I'm pretty, I'm pretty blown away by it.
The, and I think other people are too.
I took a look at the stars.
I'm like, how long has this been around?
And it only came in at the end of August.
So, a couple weeks.
And we're at, what, 1.8?
Yeah, that's fantastic.
1.8 thousand stars.
So, it's pretty cool.
That's very cool.
They do, there's a hat tip to Flake 8 and stuff.
And so, there's a desire to make it.
It doesn't do everything yet, but they're working on it.
It's compatible with Black.
And, yeah.
So, there's a whole bunch of rules already built into it already.
And I think this is also kind of a cool project if people wanted to help out with the, or take a look at a project that's a Rust Python hybrid sort of thing.
This is kind of a neat project to take a look at.
Yeah, it looks very neat.
Can you pull up the star count thing?
Yeah.
What is it?
Star-history.com?
Yeah.
Hat tip to the XKCD type graph there, huh?
Yeah.
I actually love star history.
It's kind of fun to look at.
You know, and I have used this before.
I've never used it.
What do you do?
You just pop in, like, a GitHub account.
So, for this one, when I went to the GitHub thing and just took the GitHub address and popped it in.
Nice.
This is fantastic.
I really like it.
That's it.
Okay.
Well, now I definitely, and you can compare them, too.
I see.
So, you can put other, you could put, say, like, Flake 8 on there, and it would show you how to compare.
Yeah.
I'd have to go look up what the GitHub repo is for Flake 8.
I don't know it off the top of my head.
But.
Yeah, of course.
But this is neat.
I like it.
I'm going to have to play with star history.
But also rough.
So.
Yeah.
Very good.
Well, cool.
Before we get going any further, we need to thank Microsoft for Startups Founders Hub.
And thank you for sponsoring the episode.
They've been sponsoring a lot this year, and we really appreciate it.
So, starting a business is hard.
By some estimates, over 90% of startups will go out of business in their first year.
With this in mind, Microsoft for Startups set out to understand.
What startups need to be successful and create a digital platform to help overcome those challenges.
And that's Microsoft for Startup Founders Hub.
The Founders Hub provides all founders at any stage with free resources to help solve startup challenges.
The platform provides technology benefits, access to expert guidance and skilling resources, mentorship and networking connections, and so much more.
Unlike others in the industry, Microsoft for Startups Founders Hub doesn't require startups to be investor-backed or third-party validated to participate.
Founders Hub is truly open to all.
So, what do you get?
You speed up development with free access to GitHub and the Microsoft Cloud with the ability to unlock credits over time.
And to help startups innovate, Founders Hub is partnering with innovative companies like OpenAI, a global leader in AI research and development, to provide exclusive benefits and discounts.
Through the Founders Hub, becoming a founder is no longer who you know.
You'll have access to their mentorship network, giving you access to a pool of hundreds of mentors across a range of disciplines, across areas like idea validation, fundraising, management and coaching, sales and marketing, as well as specific technical stress points.
You'll be able to book a one-to-one meeting with the mentors, many of whom are former founders themselves.
Make your idea reality today with the critical support you'll get from Microsoft for Startups Founders Hub.
To join the program, visit pythonbytes.fm/foundershub 2022.
And, of course, that link is in our show notes.
Awesome.
Thanks, Microsoft.
Really appreciate it.
And that's such a cool program.
If I were doing a startup, I would consider reaching out and applying.
But my startup has started and it's cruising along, keeping me extremely busy.
So it's all good.
More of that later, actually, Brian.
Yeah.
Right now, let's talk about a startup that's started a while ago called Meta.
Have you heard of it?
Facebook?
Yeah, I've heard a few things.
So many of the machine learning frameworks are actually brought out of internal projects at places like Google, Facebook, other large Silicon Valley type companies.
And PyTorch comes from Meta.
Okay.
And, you know, Angular is Google and things like this.
And I think that that can also Flutter, things like that can cause a little bit of concern.
Like, well, if you depend on this project, you're kind of buying into the Facebook world or the Google world or whichever world that that framework came from.
So the news here is that Meta is spinning off PyTorch into the PyTorch foundation and making it vendor neutral by making it basically part of the Linux foundation.
Okay.
Interesting.
Cool, right?
Yeah.
So if you're interested in PyTorch, well, it's a little more open than it used to be.
And this is the article I'm linking to for the announcement.
You can check out their direct blog post if you want.
But I'm linking to the Ars Technica article.
I love the comment section and just the type of discussion around some of these things.
In Ars Technica, although maybe this is not the best example of that because there are some silly questions in the comments.
But anyway, says PyTorch, which powers Tesla Autopilot and 150,000 other projects, will join the Linux foundation.
So that's pretty cool.
Let me see here.
So they say the PyTorch foundation will strive to adhere to four principles, remaining open, maintaining neutral branding, staying fair, and forging a strong technical identity.
And according to Meta, the transition to the PyTorch foundation will not affect any PyTorch code.
I'm guessing no namespaces change or anything like that.
The other relevant part, I guess, is that the governing board will include representatives from NVIDIA, Meta, Google, Microsoft, Amazon, and AMD.
Okay.
Yeah.
Yeah, so why?
Do you know?
Well, I think just to make it feel a little more truly open source and a little more independent, not something that's going to continue.
Less completely controlled by one company?
Yeah, exactly.
And, you know, maybe there's, I think, especially with AI machine learning frameworks, there's a little more concern that some implicit bias is not quite the right word, but some implicit influences that are being driven by the company behind it will influence the way that maybe it makes decisions.
Like, so if the algorithm is slightly tweaked in ways to help Facebook do more Facebook-like things, well, maybe it becomes less of a good framework to help you drive a car.
I don't know.
Right?
Something like that.
Right?
Whereas if it's a web framework, it's kind of like, dude, these are pipes.
They just do pipe stuff.
They carry the HTTP over, they return it.
There's no, like, concern that it's going to do stuff a little more interested in raising engagement in social.
Because it just doesn't, it's irrelevant to it, right?
Yeah.
Whereas maybe with machine learning, that's more of a concern.
Like, I did highlight the comments.
And so, you know, much like you asked, I respect this move, but I wonder why anybody would want to give up such a value, control of such a valuable software package.
And why do Microsoft and Google give things away?
I mean, obviously, like, it's just the benefits of open source, right?
It's not the framework that gives them the magic.
It's the data.
They can, you know, train the framework up on and then apply the framework to.
And they're not giving away the Facebook data.
So I don't see a big problem.
But what was an interesting conversation is that, for example, Google, their version of this is TensorFlow.
But Google is also a part of the representative group.
That's interesting, right?
Yeah, that is interesting.
The people in the comments basically said, well, look, much of the research field has moved to centralize on PyTorch.
And Google has a bunch of research people, and it's still relevant to them as well.
And it's a big company.
Yeah.
And it's a big company.
There's like a thousand things.
Let's see.
Paul Cutler.
Hey, Paul.
Fellow podcaster out there says, it helps to be more neutral or perceived neutral.
The Lindex Foundation is a good steward for projects like that.
Yeah.
And Panfield says, also in the, quote, war, you know, in the battle for mindshare, I guess, against TensorFlow, it's a killer move to say, well, which one are you going to choose?
Well, why not the more open one?
Yeah.
Yep.
Yeah, for sure.
Good, good.
It's a good move.
Yeah.
It is.
All right.
Well, well done, Meta.
Yeah, well done.
Well, I just want to take it back to simple things like strings.
So I actually kind of really enjoy this every once in a while.
They're just, especially people coming from, you know, I came from C++ and other languages, Perl and whatnot, into Python.
And so it's good to, sometimes I forget exactly how powerful a string is, even just simple things in Python.
So this is an article from Trey Hunter called Python String Methods to Know.
And this is something that's, I mean, we see articles like this every once in a while, but I like having one, a newer one, because some cool stuff came in in 3.9.
So I like how he broke it out, too.
He broke out the most useful string things to know, like join and split and replace.
And then strip, of course.
And then also he has it laid out with like related methods.
Like, for instance, strip has rstrip and lstrip for the left and right.
And then a couple of things that came out recently, I think the remove prefix and remove suffix are things that came out in 3.9, I believe.
Yeah.
Because everyone thought that would not, many people thought strip, if you gave it a substring, would take that substring off.
Yeah.
Really.
Yeah.
And it doesn't.
So the, yeah, remove prefix was added in 3.9.
So these are like really kind of cool things to just, you know, be able to do string manipulation quickly.
And it's a good reminder to, as you jump in, just because people manipulate strings all the time to just like, there's some power here you should be aware of.
And then if all of these seem easy, at the bottom, he's got learn these methods later, like encode and title and capitalize.
You know, I forget about this all the time that we have like the title function.
Title.
Interesting.
I did forget about that too, actually.
To title case of string.
And that's pretty cool.
And justification even.
Neat.
I didn't know is identifier was a thing.
I learned that new looking at this.
So check if a string is a valid Python identifier.
So, okay.
So this is a kind of a quick one.
So I wanted to throw in another one string related.
I use f strings a lot and I use numbers a lot.
And I, and so I ran across this Python f string number formatting cheat sheet.
It's actually pretty darn useful.
I, I, I always have like a cheat sheet like this around for, I used to have one for C++.
Then I had one for Perl and now I've got one for, for Python.
And it's kind of a nice layout.
You got float representations and how to, how to print those, how to print, replace a field within, within an expression.
It's kind of neat field replacement.
But what the main thing I like around it is all the number, number format things to remember, like if you want to have a certain number of digits on the right of the decimal point, how do you do that?
If you want it scientific case with like a, you know, E to the plus three or something, how to do that?
So these are cool things, especially if you're dealing with science and numbers and engineering and whatnot.
The percent one is great because I, I've always just said, all right, well, if I have 0.5 and I want to put it as a, I'll multiply it by a hundred and then treat it as a float, you know, but you can just do a percent and it will multiply it by a hundred and treat it as a float for you.
It's great.
I actually didn't know that.
So I didn't either.
Yeah.
Neat.
Yes.
Save your line of code there.
Nice.
And a little bit of memory.
Yeah.
Cool.
Awesome.
Yeah, this is great.
I love the cheat sheets and there's a lot you can do and either f-strings or just, you know, dot format style.
It's the same format string that goes on the end there, but this is, this is cool.
Like I said, I learned something with a percent already.
All right.
Um, are those our items?
Those are our items.
How about some extras?
Yeah, I've got a couple and then we have a really big one that I'm excited about.
So, one of the, in back in episode two 71, we talked to that, talked about, and
that was back in February.
We talked about Seaborn was, trying out a new object interface.
And, so Seaborn just announced that Seaborn, the release of Seaborn 0.12 does have that object
interface.
So if you're waiting for an official release to use the object interface, it's here.
So go out and use it.
Um, the other thing we talked to, we've talked about lazy imports, a couple of
times, on the show, PEP 696, 690.
Yep.
Yeah.
Um, there was an interesting discussion on LW in that, or I don't know how to say that.
So anyway, there's a, there's a cool discussion there about talking about some of the pros and
cons, but anyway, I, the, it, the PEP says it's on, it's, it's still in draft mode.
So it's not, they haven't made a decision yet.
Um, but it's targeting 312.
I kind of hope it goes in.
Yeah.
I kind of do too.
Yeah.
It seems like a, a good one, right?
You get the performance of not importing things unless you actually use them.
There's always those edge cases, right?
With enough people living at the edges, then it can become an issue, I guess.
Yeah.
And the discussion around whether or not how to turn it on, whether you turn it on by default
or whether you do a flag or have, have to turn it on in your code with the, the comment
that like, if you're doing an, if you're doing a library, you know, you don't know how somebody's
going to use it.
So maybe not turn it on, but if you're doing a package or something, but if you, if you're
doing, an application, then you're testing everything and you know whether or not it's going
to work.
So you can turn it on.
Yeah.
Give it a try.
See if it works.
Yeah.
See if it's worth it.
Before we move on to my item, I just want to say, while out there says first time watching
the show, usually just check into the audio.
I just want to take this chance to say, if you're listening to the show and you want to
maybe get your comments featured or you want to see it, what we look like on video, I suppose,
check us out.
We usually stream on Tuesdays at noon Pacific time.
And we're going to try to stick to that for a while.
Also they say like the browser choice for Vivaldi.
It's very cool.
Like you and I are both using Vivaldi for this and many other things, of course, also check
out cute browser that we actually covered back in episode two.
91 about three months ago.
So people can check that out if they're interested.
All right.
Onto my item.
Yeah.
Hey, Brian, tell me about pytest.
Yes.
So we've been working on this for a while and it's live now.
So there's a pytest course, now at, at how do I, how do people get there?
Talk Python.
They just go to talkpython.fm, click on courses and it will be right at the top.
So, yeah, super easy to get there.
And you just hit the courses.
It's like the very first one because it is the newest one released just over the weekend,
basically.
And people can check this out.
It's a four hour course that goes through all things pytest.
And it's really good for getting, I think it's good for getting a sense of what is the spectrum
of features of pytest, right?
Like it's, we've all seen courses that are like, well, red, green refactor, let's go, you
know?
And it's, it's fine.
And it's, it's, those are useful ways to learn testing.
But if you really want to take advantage of modern Python testing, you know, what are,
what are the ways to structure your code?
What are the different things that pytest can do?
And some of the plugins that make it better, like X fail and whatnot.
I think you did a really good job putting all of those together.
So especially the fixtures and purge of amortization and say that fast.
If anybody has the book, for instance, I think, and you've read the book and, and it's, thank
you if you've read the book.
Uh, but the, the, the, a lot of the material is related to the content in the book, but the
material of this course being that it's intended to be like, yeah, what is it?
4.7 hours or 3.7, I don't know.
It's around four hours or something.
Four ish.
Um, that we, it's, we edited.
So we took, took out a lot of the material from the book to focus really on,
ramping people up and, and showing them the, the complete power of pytest.
And I think people can run with it as is, with it, with the content of the book,
for quite a while before they hit roadblocks and need to learn a little bit more.
So this, I think this would be great for teams to take together too.
So.
Yeah, absolutely.
That'd be great.
You know, get together and spend a week, one hour each, like a lunchtime, get lunch
together, sit in a conference room and watch it together.
Maybe.
Yeah.
That'd be cool.
So yeah.
Very excited.
Yay.
Awesome.
I'm excited for you as well.
And like I said, I learned a bunch from it.
I thought it was a great course.
So really excited to be offering it and you know, people go check it out.
Talk by thun.fm.
Click on courses.
It'll be right there.
Awesome.
All right.
That's not very funny.
Very useful.
Very cool.
But not that funny.
I caught something that's pretty funny though.
Okay.
Before we do the joke though, let me just really quick handful out there to audience
follow-ups.
On Scientific Python, we already are providing lazy imports.
SciPy and SciKit image, for instance, have a version of that and are acknowledged in the
pep.
Very cool.
And Alvaro says, congrats on the new course, Brian.
Thank you.
All right.
Now for something funny.
What if you're trying to build a horse with programming?
What would that look like?
So this is a cartoon by Goon Squad by Toggle.
And so it goes through the different languages.
You do C++, right?
Yeah.
So it starts with C++ and it says, so you built a horse and the people are looking quite
disgusted at it.
And it has like no skin or anything.
The organs are all hanging out.
There's weird bits that are not seen as it's ugly as can be.
It has a lot of dangling parts, but it gets the job done.
And of course, for Java, of course, you really want to build a horse.
So you open up your blueprints and you're studying.
It says, but first you need to build a horse factory.
Oh no.
Yeah.
The indirection, it runs deep.
JavaScript is pretty darn good.
Your horse has arrived in different packages.
You built the horse, but the backbone came out of Angular.
So the horse is paralyzed.
There's like a droopy horse that can only lift it by its poor front legs.
So sad.
The person is gasping and covering their mouth like, oh no, what have I done?
That's great.
All right.
Next, we have a no sequel horse.
I guess speaking to like, maybe it's unreliable.
I don't know.
No sequel.
You had a fast, beautiful horse.
Now there's a person in a pasture with no horse, but you have no idea where it is.
All right.
Next one up.
Kobold.
This one is real good.
It's black and white, like old fashioned overalls, like where it's being built.
You built a horse in 1962 and like so triumphant.
It can only be tamed by the original creator for all of the purposes.
It's a dragon.
It's like breathing fire and it's being battled by like modern military people.
Yeah.
That's funny.
That was pretty good.
Now, before I show you the Lisp one, I don't know if people are familiar with Lisp.
I, this is like the first CS class I had to take in college when I did a CS, a couple
of classes from my, like a minor part of my math degree.
And I really wanted to take C++.
And I said, please kind of take that.
No, you have to take Lisp.
All right, great.
So Lisp, I don't know if you've ever seen it, but boy, is it fun to have parentheses.
It's like everything is just parentheses, parentheses, parentheses.
You end up with like, even like a really simple example with like a line with five consecutive
closing parentheses.
Right.
So it's just all about the parentheses.
Lisp stands for lots of insipid, silly parentheses.
Exactly.
So the Lisp one is, it just says you built a parentheses, parentheses, parentheses, parentheses,
like about 50 parentheses, a horse emoji, close parentheses, about 50 times to match those
off.
That one's awesome, isn't it?
Yeah, it's good.
All right.
C-sharp.
C-sharp has camel casing for its, it's like a naming.
So it says, the horse works best when dressed in a camel costume.
They try to take it off and make it do something.
When you try anything else than a camel, it gets a bit fussy.
It won't even eat an apple because it's not, it's got its camel costume off.
Assembly.
This one may be, actually, this might be my favorite.
It's like eight bit graphics.
It's super old school looking.
And it's a, so it's like completely, I don't know, it looks like it's out of late 80s graphics.
It says the horse turns out a little basic, but boy, can it run fast.
And the girl, I just ride it like lightning.
Yeah.
I think this is the last one.
PHP.
You built a Trojan horse.
Oh, great.
It releases hundreds of tiny horses to punish you every day forever.
Okay.
And no, but unfortunately Python was absent or I, I don't know.
I'm not sure what it would have said, but Alvaro added it.
I guess for the Python one is just import horse emoji.
Import horse emoji.
That's pretty good.
Actually.
Oh, can you put emojis in, in package names on PyPI?
I don't know about package names.
You can put them in Python code.
Like they can be comments.
I don't know if you, they can be a pop, a pip install horse, but that'd be awesome.
Roman says Python is beautiful, but slow.
It's like a show horse.
Unless it's chased by C++ and it'll run.
Yeah.
The fast horses are actually just written in Rust and then imported in Python.
Exactly.
Very true.
All right.
Well, I thought this was a pretty good one.
A bit of a language lesson for everyone.
Yeah.
So what did we learn about PHP?
It releases hundreds of tiny horses to punish you every day forever.
Yeah.
You just hire new people to maintain it.
Exactly.
All right.
Well, good times.
Good times.
Yeah.
Thanks for, thanks for all the work on the pytest course too.
I appreciate it.
Yeah, absolutely.
Yeah.
People do check it out.
It really is good.
And Brian, thanks for doing it.
And thanks for being here.
Bye everyone.