Python Bytes - #301 PyTorch Grows Up and Moves Out
Episode Date: September 15, 2022Topics covered in this episode: PythonAnywhere: Our Commitment to Providing Free Accounts ruff: An extremely fast Python linter, written in Rust. Meta spins off PyTorch Foundation to make AI framew...ork vendor neutral Two string resources Extras Joke See the full show notes for this episode on the website at pythonbytes.fm/301
Transcript
Discussion (0)
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 Ocken.
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, 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
relevant. 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 the reason I bring this up is Matthew Kramer sent over a message 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.
Yeah.
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.
Yeah, I think this is great.
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?
It used to be able to go and create a temporary encrypted, end-to-end 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. 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 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.
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.
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.
Yeah, I think that's completely reasonable.
Yeah.
Yeah.
Yeah.
Pretty cool.
Anyway, thanks, Matthewew for sending that in
yeah it is neat that people can like especially like the example you put you you mentioned if so
i i learned flask and i made this flask web app and i want to at least you know show my teacher
and my friends and everything and my parents maybe and yeah leave it that's fine so cool
exactly i want to put up a school project or but i don't know linux and i
want to go to like big cloud providers i just want to get it up and running yeah this is great i need
something for my raspberry pi that shows automation for my school project or whatever yeah so um all
right what's next i would like to talk about uh python tooling so uh i ran across this, not sure how, but there's an article called Python tooling
could be much better and much faster, much, much faster. And this is by Charlie Marsh.
And he, so he, 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 um and and charlie said maybe the python tool should be
really fast too um so uh what he did was he's putting together he put together a thing called
rough 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 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 it's pretty neat i i downloaded it
tried it out um so uh we take a look at the the github repos here um and uh it's it's pretty
awesome i downloaded it tried it on i 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 rough. And I like just returned. I'm like,
oh, something's broken, because it's not doing anything. It didn't do 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 a, um, added some errors and it found those errors
and it was in like 0.01 seconds or something. It was, it was, it came back so fast. So I'm pretty,
I'm pretty blown away by it. Um, the, the uh and i think other people are too i took a look
at the the stars i'm like how long has this been around and it only came in at the end of in end
of august so a couple weeks and we're at uh what 1.8 or you know yeah that's fantastic thousand
stars so it's pretty cool so that's very cool um 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 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.
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 of, you know, and you 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, 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.
And you can compare them too.
I see.
So you can 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.
Yeah, of course.
But this is neat.
I like it.
I'm going to have to play with Star History., but. Yeah, of course. But this is neat. I like it. I'm gonna have to play with Star History,
but also rough.
Yeah, very good.
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 look,
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
slash foundershub2022. And of course that link is in our show notes. Visit pythonbytes.fm slash foundershub2022.
And of course, that link is in our show notes.
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 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.
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?
Yeah.
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...
Less completely controlled by one company?
Yeah, exactly.
And maybe there's...
I think especially with AI machine learning frameworks,
there's a little more concern that some 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.
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 concern that it's going to do stuff a little more interested in raising engagement
in social because it just is irrelevant to it stuff a little more interested in raising engagement in social because it just
doesn't, it's irrelevant to it. Right. Whereas maybe with machine learning, that's more of a
concern. Like I did highlight the comments. And so 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. 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.
Yeah.
And Pamphil 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 thoughts. 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 well good good thoughts it's a good move yeah
it is all right well well done meta yeah well done well i just want i want to take it back to
simple things like strings so um i actually kind of really enjoy this every once in a while they're
just especially people coming from you know i 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 there's, and this is something that's,
I mean 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 three nine so um okay i like how he broke it out too he broke out the most useful
string things to to know like join and split and replace um And then strip, of course.
And then it also has it laid out with 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 it looked like everyone thought that,
well, not everyone, many people thought strip, if you gave it a substring, would.9, I believe. Yeah. Because it looked, everyone thought that, 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,, you know, be able to do string manipulation quickly. And, and it's a
good reminder, um, to, as you jump in just because of people manipulate strings all the time, um,
to just, uh, like there's some power here and you should, should be aware of. And then if all of
these seem easy, um, at the bottom, he's got learned these methods later, like in code and,
and title and capitalize tight. I, 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 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, uh, and so I ran across this, um, uh, Python F string number formatting
cheat sheet. Um, it's actually pretty darn useful. Uh, 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 Python.
And it's kind of a nice layout.
You got float representations and how to print those,
how to print, replace a field within an expression.
It's kind of neat, field replacement.
But the main thing I like around it is all the number format things.
So 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've always just said, all right, well, if I have 0.5 and I want to put it, I'll multiply it by 100 and then treat it as a float, you know?
But you can just do a percent and it will multiply it by 100 and treat it as a float for you.
It's great.
I actually didn't know that.
So I learned that from you.
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 these cheat sheets.
And there's a lot you can do in either F strings or just, you know,.format style.
It's the same format string that goes on the end there.
But this is cool.
Like I said, I learned something with the percent already.
All right.
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,
um,
one of the,
in back in episode two 71,
we talked to that,
talked about,
um,
and that was back in February.
We talked about Seaborn was,
uh,
trying out a new object interface.
And,
uh,
so Seaborn just announced that 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.
The other thing we talked about, we've talked about lazy imports a couple times on the show pep 690 690 yep yeah there was an
interesting discussion on lwn net 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 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 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 to turn it on in your code with the comment that like,
if you're doing a library, you don't know how somebody's going to use it. So maybe not turn
it on, but if you're doing, or package something, but if you, if you're doing, um, 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, uh, whilst, uh, 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 Vivaldi. It's
very cool. Like you and I are both using Vivaldi for this and many other things, of course. Also check out Qt Browser. That we actually covered back in episode 291 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 is a PyTest course now at, how do people get there?
TalkPython.
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. 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,
that'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 Xfail fail and whatnot i think you did a
really good job putting all those together so especially the fixtures and programmingization
and say that fast if anybody has the book for instance i i think and you've read the book and
and it's a 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 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.
Four-ish.
We edited it.
So we took out a lot of the material from the book to focus really on ramping people up and showing them the complete power of PyTest. And I think people can run with it as is,
with the content of the book for quite a while
before they hit roadblocks and need to learn a little bit more.
So I think this would be great for teams to take together too.
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. 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. Talkbython.fm, click on courses. It'll be right there. Awesome. All right. That's not
very funny. Very useful, very cool, but not right there. All right. That's not very funny.
It's very useful, very cool, but not that funny.
I got something that's pretty funny though.
Okay.
Okay.
Before we do the joke though, let me just really quick pamphle 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 used as as it's ugly as it 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's 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. 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 can I 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 that's good all right c-sharp c-sharp has camel casing for it's, it's like a naming.
So it says you,
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.
Won't even eat an apple.
Cause 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 turn turns out a little basic but boy can it run fast and
the girl just ride it like lightning yeah i think it's the last one php
you built a trojan horse oh great it releases hundreds of tiny horse 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 But Alvaro added it.
I guess for the Python one, it's just import horse emoji.
Import horse emoji.
That's pretty good, actually.
Can you put emojis in package names on PyPI?
I don't know about package names.
You can put them in Python code.
They can be comments.
I don't know if they can be 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++ in an errand.
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.
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 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.
Thank you.
Bye.