Transcript #301: PyTorch Grows Up and Moves OutReturn to episode page
00:00 Hello and welcome to Python Bytes where we deliver Python news and headlines directly to your earbuds.
00:05 This is episode 301, recorded September 13th, 2022.
00:10 And I am Brian Okken.
00:11 And I'm Michael Kennedy.
00:12 And we're listening.
00:16 Hey Brian.
00:17 Before we get started, we do have a sponsor, Microsoft for smart startups this week.
00:23 So that's cool.
00:24 Thank you.
00:24 We'll talk about them later.
00:26 And what do you have for us first, Michael?
00:28 I want to take you on a journey.
00:30 Let's start at python.org.
00:31 I've mentioned this before and it's been a while and not very many times, and I never noticed this.
00:37 But if you see that code sample, there's a set of different code samples that are on the page.
00:43 It's like the REPL, and there's a little yellow, I guess that's supposed to be a prompt.
00:48 I don't know. It doesn't look like my prompt, but you click it though and you wait for a moment.
00:53 What actually happens is it really inside the website, opens up a Python REPL that is yours.
01:01 You can run it, right?
01:02 And this online console is hosted from Python anywhere.
01:06 >> Pretty cool.
01:07 >> That is cool, right?
01:08 And it has, I think, stuff like various popular packages.
01:12 So I can type import requests and whatnot without doing any, there's no pip install and stuff, right?
01:18 You have access to not just the standard library, but you have access to many aspects of the Python ecosystem.
01:24 That's super cool.
01:25 And you can also run not just these terminals, but you can also run probably more relevantly.
01:31 Most people is Python web apps.
01:34 So API endpoints or some kind of like sign up application for your kids, I don't know, your kids baseball team, who knows what, right?
01:44 So they make it pretty easy because they've installed a lot of the things like Django and Flask and Pyramid.
01:50 So you don't even have to do a lot of setup.
01:52 They configure the servers.
01:54 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.
02:04 - Okay.
02:04 - 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.
02:16 And so the Python Anywhere folks said, "We are reaffirming our commitment to providing free accounts and free resources for the Python community.
02:26 How cool is that?
02:27 - That's pretty cool, yeah.
02:29 - Yeah, I think this is great.
02:31 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.
02:40 Do you remember that?
02:41 You 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.
02:52 and writing on the back of the domain for Firefox that would give it more credit than it otherwise deserves.
02:57 So it's hard to have free things on the internet because people are mean, or some people are mean.
03:02 - This is why we can't have nice things.
03:03 - It is absolutely why we can't have nice things.
03:06 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.
03:21 So it's interesting to think about.
03:23 So Heroku was acquired by Salesforce.
03:26 Salesforce is a pretty interesting company.
03:28 They've got some wild history.
03:30 And then Python Anywhere was acquired by Anaconda Inc.
03:34 So, you know, if you think of who's deeper in the Python space, certainly Anaconda is more so than Salesforce.
03:40 - 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.
03:48 That seems like a reasonable step.
03:50 - Yeah, it seems totally, totally reasonable.
03:53 So they said, look, we think we found a way to have free things.
03:55 And in our world, what that looks like is a few very minor restrictions.
04:00 So for example, in this terminal that I showed you here, the REPL, you, for free accounts, you cannot have outbound internet access.
04:10 You can pull things in, but you can't serve stuff.
04:13 What is it?
04:14 You can't serve stuff out or something along those lines, right?
04:17 It's like one of the directions is restricted.
04:20 - Okay.
04:21 - 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.
04:34 That's what it is for free accounts.
04:36 And that dramatically limited the abuse that they have to deal with.
04:39 The other problem, running these, especially for web apps, for consoles, like who cares, it doesn't really matter.
04:45 But if you have a web app that's constantly running, probably its biggest resource is memory, right?
04:51 You know, it's using a certain amount of memory to keep that Flask or Django app running.
04:55 You don't really shut down the web app because the person stops interacting with it, right?
05:00 So it's accounts like that where people might wanna create an account to say, "Hey, look, I tried out Flask and here's my app.
05:07 I got it on the internet." And then they left it alone, they just quit.
05:10 They have no intention of doing anything with it, but they didn't bother to shut it down or delete it.
05:15 Right, that's pretty tricky.
05:16 So they basically set up a proof of life scenario here.
05:20 So for a free web app to keep running, what you have to do is you have to go and click a button.
05:26 Yes, I want it to still run once every three months.
05:29 - That seems completely reasonable.
05:32 - That seems pretty reasonable, right?
05:33 Four times a year, you gotta click a button.
05:35 You can automate it if you really want it, I suppose.
05:37 And then similarly for accounts, if you have a free account and you wanna keep your resources, you've got to do something similar once a year.
05:47 So you've got to go in and say, yeah, yeah, please keep my account active.
05:50 And that's pretty much it.
05:51 So with those don't seem like terrible restrictions and they get to keep offering free Python as a service.
05:58 - Yeah, yeah, I think that's completely reasonable.
06:00 Yeah, cool.
06:01 - Yeah, yeah, pretty cool.
06:02 Anyway, thanks Matthew for sending that in.
06:06 - Yeah, it is neat that people can, like especially like the example you put, you mentioned if 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, and leave it where that's from.
06:21 >> Exactly. I want to put up a school project, but I don't know Linux and I want to go to big Cloud providers.
06:28 I just want to get it up and running.
06:29 >> Yeah.
06:29 >> That's great. I need something for my Raspberry Pi that shows automation for my school project or whatever.
06:35 >> Yeah.
06:36 >> All right. What's next?
06:37 >> I would like to talk about Python tooling.
06:40 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.
06:51 And this is by Charlie Marsh.
06:53 And he, so he, apparently this is a thing that's going on.
07:06 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.
07:20 It's a Python linter, kind of like Flakate.
07:22 It's written in Rust.
07:24 And it's like 150 times faster or something like that.
07:28 >> Wow.
07:29 >> 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.
07:38 I guess, well, without the three main plugins that it ships with.
07:42 It's pretty neat.
07:46 I downloaded it, tried it out.
07:48 We'll take a look at the GitHub repos here.
07:53 It's pretty awesome.
07:56 I downloaded it, tried it on.
07:58 Granted, I had a small project.
08:00 I had a small project where Flake 8 takes like a third of a second.
08:03 But even at a third of a second, I was interested to know that I can detect that it's doing something and then coming back.
08:10 But that's fast enough for me.
08:12 But I ran rough and I just returned.
08:17 I'm like, "Oh, something's broken because it's not doing anything." >> It didn't do anything.
08:21 >> It didn't do anything. So I ran it again and then looked at the output and it said found zero things.
08:25 I'm like, "Well, maybe I'm not pointing it at my code or something." So I intentionally added some errors, and it found those errors, and it was in 0.01 seconds or something.
08:37 It came back so fast.
08:40 So I'm pretty blown away by it.
08:44 I think other people are too.
08:46 I took a look at the stars, I'm like, "How long has this been around?" It only came in at the end of August.
08:54 So a couple of weeks, And we're at, what, 1.8?
08:58 >> Yeah, that's fantastic.
09:00 >> 1.8 thousand stars. So it's pretty cool.
09:02 >> That's very cool.
09:04 >> There's a hat tip to Flake 8 and stuff.
09:07 And so there's a desire to make it.
09:11 It doesn't do everything yet, but they're working on it.
09:14 It's compatible with Black.
09:15 And yeah, so a whole bunch of rules already built into it already.
09:21 And I think this is also 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.
09:31 This is kind of a neat project to take a look at.
09:33 - Yeah, it looks very neat.
09:34 Can you pull up the star count thing?
09:37 - Yeah.
09:38 - Is it star-history.com?
09:40 Yeah, hat tip to the XKCD type graph there, huh?
09:44 - Yeah, I actually love star history.
09:46 It's kind of fun to look at.
09:48 Have you used this before?
09:51 - I've never used it, what do you do?
09:53 You just pop in a GitHub account.
09:57 So for this one, what I went to the GitHub thing and just took the GitHub address and popped it in.
10:05 >> Nice. This is fantastic. I really like it.
10:07 >> That's it.
10:07 >> Okay. Well, now I definitely, and you can compare them too.
10:11 I see. So you can put say like Flake 8 on there and it would show you.
10:16 >> Yeah. I'd have to go look up what the GitHub repo is for Flake 8.
10:20 I don't know it off the top of my head.
10:22 Yeah, of course. But this is neat. I like it. I'm gonna have to play with star history, but also rough.
10:27 Yeah, very good. Very good.
10:29 Well, cool. Before we get going any further, we need to thank Microsoft for Startups Founders Hub.
10:37 And thank you for sponsoring the episode. They've been sponsoring a lot this year, and we really appreciate it.
10:42 So starting a business is hard. By some estimates, over 90% of startups will go out of business in their first year.
10:49 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.
10:58 And that's Microsoft for Startups Founders Hub.
11:00 The Founders Hub provides all founders at any stage with free resources to help solve startup challenges.
11:06 The platform provides technology benefits, access to expert guidance and skilling resources, mentorship and networking connections and so much more.
11:14 Unlike others in the industry, Microsoft for startups, Founders Hub doesn't require startups to be investor backed or third party validated to participate.
11:23 Founders Hub is truly open to all.
11:26 So what do you get?
11:26 You speed up development with free access to GitHub and the Microsoft Cloud with the ability to unlock credits over time.
11:33 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.
11:44 Through the founders hub becoming a founder is no longer who you know you 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 believe you'll be able to book a one to one meeting with the mentors many of whom are former former founders themselves make your idea reality today with the critical support you'll get from Microsoft for Startups Founders Hub.
12:19 To join the program, visit pythonbytes.fm/foundershub2022 and of course that link is in our show notes.
12:28 Awesome. Thanks Microsoft. Really appreciate it.
12:30 And that's such a cool program.
12:31 If I were doing a startup, I would consider reaching out and applying.
12:34 But my startup has started and it's cruising along, keeping me extremely busy.
12:38 So it's all good. More on that later actually, Brian.
12:41 Yeah. Right now, let's talk about a startup that's started a while ago called Meta. Have you heard of it?
12:47 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.
13:10 And I think that that can also flutter.
13:13 Things like that can cause a little bit of concern.
13:16 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.
13:26 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.
13:38 - Okay, interesting.
13:39 - Cool, right?
13:40 - Yeah, so if you're interested in PyTorch, well, it's a little more open than it used to be.
13:46 And this is the article I'm linking to for the announcement.
13:49 You can check out their direct blog post if you want, but I'm linking to the Ars Technica article.
13:54 I love the comment section and just the type of discussion around some of these things.
13:58 In Ars Technica, although maybe this is not the best example of that, 'cause there's some silly questions in the comments, but anyway, says, PyTorch, which powers Tesla Autopilot and 150,000 other projects will join the Linux Foundation.
14:12 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.
14:36 Yeah, the relevant part, I guess, is that the governing board will include representatives from Nvidia, Meta, Google, Microsoft, Amazon, and AMD. Okay. Yeah. So, yeah. So why do you know?
14:49 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.
14:58 - Yeah, exactly, and maybe there's, I think especially with AI, machine learning frameworks, there's a little more concern that some implicit, and 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.
15:18 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.
15:28 right, something like that, right?
15:30 Whereas if it's a web framework, it's kind of like, dude, these are pipes.
15:34 They just do pipe stuff.
15:35 They carry the HTTP over, they return it.
15:38 There's no concern that it's gonna do stuff a little more interested in raising engagement in social because it just is irrelevant to it, right?
15:48 Whereas maybe with machine learning, that's more of a concern.
15:50 Like I did highlight the comments.
15:52 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.
16:00 And why do Microsoft and Google give things away?
16:02 I mean, obviously like it's just the benefits of open source, right?
16:06 It's not the framework that gives them the magic, it's the data.
16:10 They can, you know, train the framework up on and then apply the framework to, and they're not giving away the Facebook data.
16:16 So I don't see a big problem.
16:17 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.
16:27 That's interesting, right?
16:28 - Yeah, that is interesting.
16:29 - 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.
16:41 - And it's a big company.
16:43 - Yeah, and it's a big company.
16:45 There's like a thousand things.
16:46 Let's see, Paul Cutler, hey, Paul, fellow podcaster out there says, it helps to be more neutral or perceived neutral.
16:51 The Lindex Foundation is a good steward for projects like that.
16:54 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 gonna choose?
17:04 Well, why not the more open one?
17:05 - Yeah, yep.
17:06 - Yeah, for sure.
17:07 Well, good thoughts.
17:08 - It's a good move, yeah.
17:09 - It is.
17:10 All right, well, well done, Meta.
17:11 - Yeah, well done.
17:12 Well, I just wanna take it back to simple things like strings.
17:17 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.
17:30 And so it's good to, sometimes I forget exactly how powerful a string is, even, just simple things in Python.
17:37 So this is an article from Trey Hunter called "Python String Methods to Know." And there's a, 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.
17:53 I like how he broke it out too.
17:55 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 related methods.
18:08 For instance, strip has Rstrip and Lstrip for the left and right.
18:13 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.
18:22 - Yeah, everyone thought that would not, many people thought strip, if you gave it a substring, would take that substring off.
18:29 - Yeah. - Really.
18:31 - Yeah, and it doesn't.
18:32 So the, yeah, remove prefix was added in 3.9.
18:37 So these are like really kind of cool things to just be able to do string manipulation quickly.
18:44 and it's a good reminder as you jump in, just because people manipulate strings all the time.
18:51 There's some power here you should be aware of.
18:54 Then if all of these seem easy, at the bottom he's got learn these methods later, like encode and title and capitalize.
19:02 I forget about this all the time that we have the title function.
19:07 >> Title, interesting.
19:08 I did forget about that too actually.
19:10 >> To title case a string and that's pretty cool.
19:13 and justification even.
19:16 I didn't know isIdentifier was a thing.
19:18 I learned that new looking at this.
19:20 So check if a string is a valid Python identifier.
19:23 Okay, so this is kind of a quick one.
19:25 So I wanted to throw in another one string related.
19:28 I use fstrings a lot and I use numbers a lot.
19:30 And so I ran across this Python fstring number formatting cheat sheet.
19:37 It's actually pretty darn useful.
19:40 I always have a cheat sheet like this around.
19:43 I used to have one for C++, then I had one for Perl, and now I've got one for Python.
19:49 It's a nice layout.
19:50 You got float representations and how to print those, how to replace a field within an expression.
19:58 It's neat, field replacement.
20:00 But the main thing I like around it is all the number format things.
20:05 To remember, if you want to have a certain number of digits on the right of the decimal point.
20:10 How do you do that? If you want it scientific case with like e to the plus three or something, how to do that.
20:18 These are cool things, especially if you're dealing with science and numbers and engineering and whatnot.
20:23 >> 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.
20:33 But you can just do a percent and it will multiply it by 100 and treat it as a float for you.
20:38 It's great.
20:38 >> I actually didn't know that.
20:39 >> I didn't either.
20:40 >> Yeah, neat.
20:42 >> Yes. Save a line of code there.
20:44 >> Nice.
20:44 >> A little bit of memory.
20:46 >> Yeah. Cool.
20:47 >> Awesome. Yeah, this is great.
20:49 I love the cheat sheets and there's a lot you can do in either f strings or just.format style.
20:55 It's the same format string that goes on the end there, but this is cool.
21:00 Like I said, I learned something with the percent already.
21:02 >> All right. Are those our items?
21:05 Those are 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 271 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.
21:37 So go out and use it.
21:39 The other thing we've talked about lazy imports a couple times on the show, PEP 690.
21:47 There was an interesting discussion on LWNNet.
21:51 I don't know how to say that.
21:53 Anyway, there's a cool discussion there about talking about some of the pros and cons.
21:59 But anyway, the pep says it's on, it's still in draft mode, so it's not, they haven't made a decision yet, but it's targeting 312. I kind of hope it goes in.
22:10 Yeah, I kind of do too. Yeah. It seems like a good one, right? You get the performance of not importing things unless you actually use them.
22:19 There's always those edge cases, right? With enough people living at the edges, then it can become an issue, I guess.
22:25 Yeah, and the discussion around 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 or something, but 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.
22:52 Give it a try, see if it works, yeah.
22:53 See if it's worth it.
22:54 Indeed, before we move on to my item, I just want to say, whilst out there says, "First time watching the show," usually just check into the audio.
23:02 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 what we look like on video, I suppose, check us out.
23:13 We usually stream on Tuesdays at noon Pacific time.
23:16 And we're going to try to stick to that for a while.
23:18 Also, they say, "Like the browser choice, Vivaldi." It's very cool.
23:21 Like you and I are both using Vivaldi for this and many other things, of course.
23:26 Also check out Qt Browser.
23:27 That we actually covered back in episode 291 about three months ago.
23:31 So people can check that out if they're interested.
23:33 All right, onto my item.
23:35 >> Yeah.
23:36 >> Hey, Brian, tell me about PyTest.
23:38 >> Yes, so we've been working on this for a while and it's live now.
23:43 So there's a PyTest course now at, how do people get there?
23:49 >> They just go to talkpython.fm, click on courses and it will be right at the top.
23:55 So yeah, super easy to get there.
23:58 And you just hit the courses.
23:59 It's like the very first one because it is the newest one released just over the weekend basically.
24:04 And people can check this out.
24:06 It's a four hour course that goes through all things PyTest.
24:11 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.
24:19 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 Pyctest can do and some of the plugins that make it better, like xfail and whatnot. I think you did a really good job putting all those together. So especially the of fixtures and programmatization and say that fast.
24:51 >> If anybody has the book, for instance, I think and you've read the book and it's, thank you if you've read the book.
24:58 But 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.
25:11 >> Four-ish.
25:12 >> Four-ish. We edited.
25:15 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.
25:25 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.
25:33 So I think this would be great for teams to take together too.
25:38 - Yeah, absolutely.
25:39 That'd be great, you know, get together, spend a week, one hour each, like a lunchtime, and get lunch together, sit in a conference room, and watch it together maybe.
25:47 - Yeah, that'd be cool.
25:49 So yeah, very excited.
25:50 - Yay, yay, awesome.
25:52 I'm excited for you as well.
25:53 And like I said, I learned a bunch from it.
25:55 I thought it was a great course.
25:56 So really excited to be offering it.
25:58 And people go check it out, talkbython.fm.
26:01 Click on courses, it'll be right there.
26:03 - Awesome.
26:03 - All right, that's not very funny.
26:05 It's very useful, very cool, but not that funny.
26:06 I caught something that's pretty funny though.
26:08 - Okay.
26:09 - Okay, before we do the joke though, let me just really quick, handful of other audience follow-ups.
26:13 On Scientific Python, we already are providing lazy imports.
26:16 SciPy and Scikit image, for instance, have a version of that and are acknowledged in the PEP.
26:21 Very cool.
26:22 And Alvaro says, congrats on the new course, Brian.
26:25 Thank you.
26:26 All right, now for something funny.
26:27 What if you're trying to build a horse with programming?
26:30 What would that look like?
26:31 So this is a cartoon by Goon Squad by Toggle.
26:35 And so it goes through the different languages.
26:37 You do C++, right?
26:39 So it starts with C++.
26:42 and it says, "So you built a horse, and the people are looking quite disgusted at it, and it has no skin or anything, the organs are all hanging out, there's weird bits that are not seen uses as.
26:53 It's ugly as can be, and has a lot of dangling parts, but it gets the job done." Of course, for Java, of course, you really want to build a horse, so you open up your Blueprints and you're studying.
27:06 It says, "But first, you need to build a horse factory." Oh, no.
27:09 >> Yeah.
27:10 >> The indirection, it runs deep.
27:15 Your horse has arrived in different packages.
27:17 You built the horse, but the backbone came out of Angular.
27:20 So the horse is paralyzed.
27:22 It's like a droopy horse that probably left it by its poor front legs.
27:25 So sad. The person is gasping and covering their mouth like, "Oh no, what have I done?" >> That's great.
27:32 >> All right. Next, we have a NoSQL horse.
27:34 I guess speaking to like, maybe it's unreliable, I don't know.
27:37 NoSQL, you had a fast, beautiful horse.
27:39 Now there's a person in a pasture with no horse, but you have no idea where it is.
27:42 All right, next one up kobold. This one is real good. It's black and white, like old fashion overalls, like where it's being built. You built a horse in 1962 and like so triumphant.
27:55 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.
28:05 That was pretty good.
28:06 Now, before I show you the Lisp one, I don't know if people are familiar with Lisp.
28:10 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.
28:20 And I really wanted to take C++.
28:21 And I said, "Please can I take that?" "No, you have to take Lisp." I'm like, "All right, great." So Lisp, I don't know if you've ever seen it, but boy, is it fun to have parentheses.
28:29 It's like everything is just parentheses, parentheses, parentheses.
28:32 you end up with like, even like a really simple example with like a line with five consecutive closing parentheses, right?
28:39 So it's just all about the parentheses.
28:41 - Lisp stands for lots of insipid silly parentheses.
28:44 - Exactly.
28:45 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.
28:55 That one's awesome, isn't it?
28:58 - Yeah, that's good.
28:59 - All right, C#.
29:01 C# has camel casing for its naming.
29:06 So it says, "The horse works best "when dressed in a camel costume." They try to take it off and make it do something.
29:13 When you try anything else than a camel, it gets a bit fuzzy.
29:17 Won't even eat an apple 'cause it's got its camel costume off.
29:20 Assembly, this one may be, actually, this might be my favorite.
29:26 It's like eight-bit graphics.
29:28 It's super old school looking.
29:31 And it's a, so it's like completely, I don't know, it looks like it's out of late 80s graphics.
29:36 It says the horse turns out a little basic, but boy can it run fast.
29:41 And the girl just ride it like lightning.
29:45 - Yeah.
29:45 - I think it's the last one.
29:46 PHP, you built a Trojan horse.
29:48 Oh great, it releases hundreds of tiny horses to punish you every day forever.
29:56 - Okay.
29:59 And no, but unfortunately Python was absent.
30:02 Or I don't know, I'm not sure what it would have said.
30:04 But Alvaro added it.
30:05 I guess for the Python one, it's just import horse emoji.
30:09 - Import horse emoji.
30:10 - That's pretty good actually.
30:11 - Oh, can you put emojis in package names on PyPI?
30:15 - I don't know about package names.
30:16 You can put them in Python code.
30:18 Like they can be comments.
30:19 I don't know if you can be a pop, a pip install horse, but that'd be awesome.
30:23 Python Roman says, "Python is beautiful but slow." It's like a show horse.
30:29 Unless it's chased by C++ in our run.
30:34 - Yeah, the fast horses are actually just written in Rust and then imported in Python.
30:38 - Exactly, very true.
30:42 All right, well I thought this was a pretty good one.
30:43 A bit of a language lesson for everyone.
30:46 So what did we learn about PHP?
30:48 It releases hundreds of tiny horses to punish you every day forever.
30:52 - You just hire new people to maintain it.
30:56 - Exactly.
30:57 All right, well, good times.
30:58 - Good times, yeah.
30:59 Thanks for all the work on the PyTest course too.
31:02 I appreciate it.
31:03 - Yeah, absolutely.
31:04 Yeah, people do check it out.
31:05 It really is good.
31:06 And Brian, thanks for doing it, and thanks for being here.
31:08 Bye everyone. - Thank you, bye.