Transcript #71: We can migrate to Python 3, careful please
Return to episode page view on github00:00 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to
00:04 your earbuds. This is episode 71, recorded March 22nd, 2018. I'm Michael Kennedy, and
00:10 normally I would introduce Brian, but Brian is not here this week, so I'm here with Trey Hunter.
00:14 Trey, hello, welcome to the show. Hi, thanks, Michael. How are you doing?
00:18 I'm doing great, doing great. Thanks for dropping in. There's a bit of a shuffle with the whole
00:23 spring break travel chaos going on, and so it's really great that you're here to record with us,
00:28 and Brian will be back with me next week. So, you know, probably a lot of people out there in the
00:33 audience know you, but maybe a really quick introduction just so people know who you are.
00:37 Yeah, I am super happy to be here because I'm a big listener to the show. I do on-site Python
00:42 training for teams, and I help folks learn Python on the internet through weekly things, and I tweet
00:46 a whole bunch. So folks have probably seen me on the internet, if anywhere. You work on the internet,
00:51 that's awesome. Yes. And do things on that internet. All right, awesome. So before we get to the first
00:55 item that you picked, I just want to say thank you to DigitalOcean. They're sponsoring this episode
00:59 like they do many. Check them out at do.co slash Python. Trey, what do you got for us this week?
01:04 So my first pick is kind of related to a talk I'm doing at PyCon. I've been researching this stuff a
01:09 whole bunch. It's the conservative Python 3 porting guide. This was written by a whole bunch of folks
01:14 at Red Hat. And it's pretty much the best porting guide I've seen for how to take your code from
01:20 Python 2 and switch it to Python 3. It's not perfect, but none of the guides out there really
01:24 are. Yeah, this is something that there's really not as much material on as I kind of would expect
01:31 there to be. I mean, there are tools. We have six. We have two to three. We have Anthony Shaw's
01:36 Pluralsight course that he just launched, which is really a good course. Well, you know,
01:40 that's brand new. And Guido just recently made a statement, which I thought was great,
01:46 that really solidified the date. Because for a long time, it's like, well, Python 2 is going to go
01:51 out of support, out of security patches and all that stuff in 2020. And that's a whole year, right?
01:58 We need a more time frame than a year, right? So when is it actually going out?
02:02 It's January 1st, 2020. So it is less than two years away now.
02:06 So people should probably start paying attention to this if they're ever going to.
02:10 Yeah, this is a really big deal. A lot of my clients use Python 2 and switching to Python 3
02:16 is going to be a really big headache. I do wish this guide used the future library,
02:20 which I know Anthony uses in his courses at Pluralsight or his one course there on switching
02:25 from Python 2 to 3 instead of the modernized library. But I mean, none of these guides is
02:29 perfect. Some of them are a little bit older than others. This is just one of the best ones I've
02:33 found out there.
02:33 Yeah, that's really awesome. I really like it. It's called the conservative Python 3 porting guide.
02:38 Why conservative?
02:40 Because they don't try to get you using Python, new fancy Python 3 features. They're just trying
02:46 to get your code working on Python 3, even if in a kind of begrudging way. You know, if you don't
02:50 want to switch, you have to out of necessity. This is a conservative guide.
02:53 I see. So it's not like, oh, and while you're here, wouldn't it be awesome to throw a little
02:57 async and await in there?
02:59 Exactly.
03:00 You know, maybe some stars to force some keyword arguments and off you go. No, this is just like,
03:05 you need to get it to your older code, your legacy code to run on modern Python. And that's it. No
03:12 changes.
03:13 Absolutely. Yeah. This is, you just need to get running.
03:16 Yeah, I think that's a really good way to do it. Because on one hand, I'm sure it's super tempting.
03:20 You're in there, you want to make all these changes. But on the other, you don't want to conflate the
03:24 making it run on Python with adding new features, re-architecting your code and so on, right? Maybe
03:29 that's a second project.
03:31 Absolutely.
03:33 So I have a question for you.
03:34 Okay.
03:34 Which companies use Python?
03:36 Well, there are a ton of them, actually. Some of the best companies on the web that you know of
03:42 definitely, definitely use it. So there's a really cool article on realpython.com by Jason Reynolds.
03:48 And I think a lot of people come to Python. I don't know, you give me your opinion on this. I feel
03:54 like they come and they're like, oh, I write a few scripts and I kind of like tinker with Python,
03:59 but I don't write apps in Python. Like that's a different thing. Do you get this
04:02 experience?
04:03 Absolutely. This is a big thing with a lot of my clients is we use Python. We don't use it for
04:07 making deployable software clients use. It's just for scripts.
04:10 Right. Exactly. And so obviously that's possible with Python, but there's so much more that you can
04:15 do. So I just wanted to pull this article up as some examples for how people might use Python. And
04:22 if you're thinking of using Python at your company and they're like, no, no, we use C#. That
04:26 compiles. That's something we can use in large projects. We can't use a toy language, right? Like
04:30 think about what these companies are doing. So the first one, industrial light and magic, they do all the special effects from any of the sci-fi
04:37 movies and so on. And they use Python to track and audit pipeline functionality, maintain databases,
04:44 and basically move items and assets through like a pipeline. That's pretty awesome.
04:50 We have Google. So in the beginning, of course, right? Of course, Guido worked there. Many of the luminaries in the Python space have or do. And they said, the founder said, we're going to use Python where we can and C++ where we must. That's pretty cool, right?
05:06 That is really cool.
05:07 I love that phrase. And of course, Python powers YouTube still to this day, handling millions of requests per second. That's a pretty insane number, right?
05:16 That's a ton of stuff to be putting through Python there.
05:18 I know. That's quite a bit. It's really impressive how much is going on there. And actually, there's some really interesting comparisons. Like there used to be Google Video, which was a competitor to YouTube when YouTube was a startup. And they were doing all their work in C++ at Google Video. And the people, many fewer, like 20 versus hundreds of engineers were writing Python and just like running circles around Google Video. So Google solved it by buying YouTube.
05:45 It's a pretty interesting history.
05:47 I never knew that. I mean, I knew they acquired YouTube while having video. I didn't know that Python was a deciding factor there.
05:53 Yeah, it was one of the deciding factors that let like the small team outperform Google because Google is using C++ for their video service.
06:00 All right. So speaking of large services, Facebook, they use this mostly on the infrastructure side. But Facebook is really interesting in that they have did a really interesting thing moving from Python 2 to Python 3 as sort of like changing the engineering
06:14 culture. Jason Fried did this really awesome talk on that. And the whole steps in which they took to make this happen are pretty amazing. Did you happen to see that talk?
06:22 I did. You know, I think he's given a similar talk at PyCon actually this year.
06:26 Oh, that'd be awesome. I'm definitely going. Definitely going.
06:28 Closely related is Instagram because kind of like YouTube, Instagram was its own thing and now it is like engulfed into Facebook.
06:36 But they run the largest deployment of Django web framework in the world.
06:41 And they have like 800 million active users.
06:45 I think maybe the most notable thing was Instagram's keynote at the 2017 PyCon with Lisa Guo and Hui Ding, who gave like the most inspiring talk,
06:56 how they migrated from old version Django to new version Django and Python 2 to Python 3 without branching and continuing to ship features.
07:04 Yeah, that was amazing.
07:05 I really like that talk because in the beginning they started with, here's how we did at a high level.
07:09 And towards the end, they dove right into the code that they used and the difficulties they encountered.
07:13 And, you know, if you are afraid of encountering difficulties, look at the ones that Instagram encounter because they've got a big code base.
07:20 Yeah, they have like millions, millions of lines or something. It's insane.
07:24 But the way they did it was truly inspiring.
07:26 And I felt like that was actually like a really clear playbook of, hey, we could do the same thing.
07:30 Absolutely.
07:30 We also have Spotify. They're doing a bunch of stuff with Python and primarily as backend services and data analysis.
07:37 Quora. I think Quora is the best Q&A place on the internet.
07:40 It always seemed to have such like super thoughtful questions and answers.
07:43 You know, I don't use Quora much mostly because whenever I go, it asks me to sign up or sign in.
07:49 So I mostly go to the other ones for that reason.
07:50 But I have actually found a lot of useful stuff in Quora before.
07:53 Yeah, I'm just surprised how much time and energy people are willing to put in the answers there.
07:57 Absolutely.
07:58 It's interesting because that runs on Python, of course.
08:00 And they were thinking about maybe C#, maybe Java, maybe Python, maybe C++ and so on.
08:06 And in the end, they ended up kind of doing what Google did is Python where they can, C++ where they must.
08:11 Netflix, obviously Netflix is insane.
08:14 They do like in the evenings, they account for one third of the bandwidth in the United States.
08:19 Wow.
08:20 Yeah.
08:20 And they run all their infrastructure management and operation stuff over Python.
08:24 I actually talked to those guys over at Talk Python on episode 16 way back in the day.
08:28 Really interesting stuff they're doing.
08:30 Dropbox.
08:31 When I think of the center of the universe of Python, I think Dropbox.
08:35 What do you think?
08:35 Why is that?
08:36 Well, Guido works there.
08:38 That's a big reason.
08:39 It seems to be one of the companies that is one of these major, major sort of technology companies that is all in on Python, right?
08:47 Like even their little widget thing that ships as a client app that is in your tray or your menu bar, that's even Python.
08:55 Yeah.
08:56 They definitely got a ton of deployed Python code on desktop computers that they don't have control over, which is pretty amazing.
09:02 I think they also have some open source packages up on GitHub there, Python.
09:05 Yeah.
09:05 I think they do have a lot of really interesting stuff and they've had some stuff that they put out and it's kind of like left to go as experiments.
09:10 Very, very interesting.
09:11 So last one I'll leave you with Reddit.
09:13 So they have half a billion visitors a month.
09:17 They had, let's see, it was the fourth most visited site in the United States and seventh in the world.
09:24 And I guess in 2015, they said they had 82 billion page views, which is kind of insane.
09:30 And of course, that's all driven on Python, SQLAlchemy, all sorts of goodness.
09:35 That's pretty incredible.
09:35 Yeah.
09:36 Awesome.
09:36 Those are the companies that I kind of wanted to highlight out of that article and just thought like, these are really great examples.
09:42 And if people are saying, oh, well, we have like 100,000 users, we can't use Python.
09:46 It's not going to scale.
09:47 Like, well, yeah, probably not, probably not the real problem.
09:51 There's probably some kind of architecture, infrastructure thing that is actually going to make this work easily.
09:55 For sure.
09:56 Yeah.
09:56 Nice.
09:57 So do you think we should stop writing classes, Trey?
10:00 Maybe.
10:00 I don't know if we should stop writing classes entirely, but my favorite, well, one of my favorite PyCon talks, I tend to tell people it's my favorite because I recommend it so much, is Stop Writing Classes by Jack Diedrich.
10:13 This is from PyCon 2012.
10:16 So it's kind of an old talk, but it is definitely the days of Python 2.
10:20 But all the code in it, all the advice in it is still really applicable today.
10:25 Yeah.
10:25 That's really awesome.
10:26 So give us the main takeaway from it.
10:29 One of the biggest bits of advice in it that I tend to tell people is if you have a class that only has two methods, one of those is your dunder init method, and the other one is some other method, especially if it's called call, you probably need a function instead of a class.
10:43 So this is something I recommend a lot to folks move into Python from Java and C++, because I teach a lot of folks who are moving programming languages.
10:51 And, you know, Python is just different from the other languages.
10:54 Especially if what you're going to have is effectively a static class, right?
10:58 Like there's just one copy of the variables.
11:00 It's very likely that you could get away.
11:02 And you're not doing any inheritance.
11:04 You're not doing any of that kind of stuff.
11:05 You probably could just have a set of functions and module level variables, and you get effectively the same output.
11:11 Yeah, absolutely.
11:12 And that's something I see a lot in code.
11:13 On the flip side of things, though, one of the great things about this talk is it doesn't just show you when not to write classes.
11:18 It does show you a couple examples of when classes are really handy in Python.
11:21 Yeah, that's cool.
11:22 I'm a big fan of object-oriented programming.
11:25 I think there's still, you know, people, it fades in and out of popularity.
11:28 I still think it's a really great way to model stuff.
11:30 But when you're creating more than one of the things typically, right?
11:33 Absolutely.
11:34 Yeah, it's when you need to make more than one of them, when you need to use it more than once, that's the time where classes need it.
11:40 They really can be abused.
11:41 Yeah, absolutely.
11:42 So what's up with PyPI, Michael?
11:44 I'm going to tell you about PyPI.
11:46 I'm super excited.
11:46 But before I do, I want to tell you about DigitalOcean.
11:49 So there's this thing coming up where I might need a whole lot more power for my web server because there's some big promotion and it could kind of end up overwhelming my servers, which so far they've never had an issue.
12:00 Like you log in, it's like 3%, 4% CPU.
12:02 But one of the things that's really cool about DigitalOcean, if you have one of their servers, you can go over there and you can flip a switch.
12:08 And within just a couple minutes, it will take it offline for a second, resize, re-whatever, however you change the infrastructure.
12:16 Say, I want four CPUs and eight gigs of RAM.
12:19 Change it to that.
12:20 And you could do that for like one day and then go, no, no, back to the one gig, one CPU the next day, right?
12:25 Spend five bucks and get like some super huge server to handle some spike that you know is coming.
12:30 So pretty cool.
12:31 A lot of the stuff that I do on the web is running through DigitalOcean.
12:35 So definitely recommend them.
12:36 Check them out at do.co slash Python.
12:39 All right.
12:40 They help make the show possible.
12:41 So another thing that I think is doing really awesome stuff on the web finally is the new PyPI.
12:48 Do you remember back when there's pypi.python.org slash PyPI because it's better if it ends up on both ends of the URL.
12:57 That's the original gray that's been around forever.
13:01 What the PyPI has been.
13:02 And then for a while there was a pypi.io.
13:05 Yep.
13:06 Which was like the new one.
13:07 Then there's a pypi.org, which they redirected to.
13:10 I think that's the same site.
13:12 It's getting confusing here.
13:12 I know.
13:14 And so there's been there's been a really almost a big problem with the old PyPI in that it was based on just super custom hand rolled socket processing.
13:24 And like the entire PyPI was running out of like a handful, two, three Python files, thousands of lines long, purely custom socket code.
13:35 You know, no, it's not based on flask or pyramid or any of those things.
13:38 It's just like, yeah, we're just going to start like at the lowest level.
13:41 I think it was more or less a prototype.
13:43 And it just became what PyPI was for many years.
13:47 And that was actually a big problem because people will come on.
13:50 Hey, I got this cool idea.
13:51 I want to add a feature.
13:52 Like, can I just plug that in as an extension or oh, my God, what is that?
13:55 I'm not going to contribute to this project.
13:57 I'm out of here.
13:57 Right.
13:58 And so finally, finally, Donald Stuffed and crew have released PyPI.org as an official thing.
14:06 It used to have that red bar up there.
14:08 Like, warning, this is like a testing area.
14:09 It's no longer a red bar.
14:11 Like, you go there and it's properly a website.
14:13 I'm going there right now to make sure.
14:15 Oh, wait.
14:15 It's back again.
14:17 It was gone earlier.
14:18 There is.
14:18 So there is a red bar.
14:20 I think you can close it.
14:21 However, this I love that this is officially it's coming up here, which is super exciting.
14:27 Yeah.
14:27 So the big news is not the website itself, although that's sort of the portal to it.
14:32 The big news is when you pip install a thing, it now goes through PyPI.org.
14:36 Oh, that's really exciting.
14:37 So this actually is not only the future.
14:39 It is the present of using pip with Python.
14:42 Yes, that is where we are.
14:44 So there's a really cool tweet.
14:46 I'm sorry.
14:47 I forget the guy's name.
14:48 I sent it out.
14:48 It has like graphs of the analytics of sort of the number of requests per second and errors
14:54 per second and memory usage and latency.
14:56 All that for the new PyPI.org handling the pip install requests.
15:01 That's exciting.
15:01 Yeah.
15:02 So I'm really glad to see that.
15:03 I guess I did just close that X and it stayed closed.
15:05 You're right.
15:05 So I opened it in like an incognito window.
15:07 It's still there, but it's almost gone.
15:09 Almost gone.
15:10 All right.
15:10 It's good.
15:10 They at least cookie you.
15:12 That's right.
15:13 It is good.
15:13 So one of the biggest challenges, you opened this whole section with like getting started
15:19 and converting from Python 2 to Python 3.
15:21 And I would say the biggest thing that people complain about saying this is really hard to
15:26 get this transition over is the old strings, byte strings, Unicode, bytes array madness around that,
15:35 right?
15:36 Yeah, absolutely.
15:37 This is one of the biggest challenges is figuring out what is text and what is data and separating
15:43 those because Python 2 didn't make a distinction.
15:45 Python 3 forces you to make that distinction.
15:47 So there's a nice talk by Ned Batchelder, right?
15:50 That you pulled up for us.
15:50 Yeah, absolutely.
15:51 It's called Pragmatic Unicode.
15:53 I think it's Pragmatic Unicode or How Do I Stop the Pain is the full talk title.
15:56 It's counterintuitively.
15:58 This is from PyCon 2012 and it is mostly Python 2 code.
16:02 And so if you're switching to Python 3, this might seem odd to watch this talk.
16:05 But the reason this is still relevant today is Unicode hasn't changed.
16:09 The default way we see Unicode in Python 2 versus 3 has changed.
16:14 And there's a big analogy in this talk that I really like, a metaphor that Ned uses, the
16:18 Unicode sandwich, which I'll let you go watch the talk to figure out what that is.
16:22 But this really helps shape your mental model of how text works versus how bytes work in
16:28 the Python interpreter.
16:29 And I think this is really important, especially if you're not familiar with Unicode and you're
16:33 going to switch to Python 3 or to start using Unicode.
16:36 You've got to understand a little bit about how it works.
16:38 Yeah, this is really, really interesting.
16:40 And Unicode is definitely one of those tricky things.
16:42 And I think growing up in the United States definitely at least puts, I felt like, put
16:47 me at a disadvantage of appreciating Unicode.
16:50 You know?
16:51 Because it's like, well, ANSI?
16:53 What's wrong with ANSI?
16:54 I don't know.
16:54 It seems fine.
16:55 Yeah, absolutely.
16:56 And I feel like the big thing that's making the change here for a lot of people is emoji,
17:01 which is being used even by people who are in English-speaking countries.
17:05 So the rest of the world is finally going, yay, everyone cares about Unicode now, all because
17:09 of these emoji characters, which is sort of sad in a way, but also sort of good because
17:13 it means we're actually caring about adopting this universally.
17:15 It's really interesting because it's a bit of a sad commentary on the world that that's
17:20 what pushes us forward.
17:21 At the same time, it is good that it's being pushed forward, right?
17:24 Absolutely.
17:25 Yeah.
17:25 Nice.
17:26 All right.
17:27 So this last one that I want to cover really has to do with thinking about alternate implementations
17:33 or runtimes of Python, right?
17:36 It's easy to say, well, there's CPython and, you know, there's just Python, right?
17:40 I type Python and it runs, but there are actually many different runtimes.
17:44 And I say runtimes because sometimes they're called interpreters, but only some of them interpret.
17:49 Right.
17:50 So like, we have IronPython, Python.net, Jython, Cython, a whole bunch of other ones
17:59 that are like a little more niche.
18:01 And I'd say probably the most popular alternative one is PyPy, P-Y-P-Y.
18:07 Have you done anything with this?
18:08 I have not done anything with, well, I played with PyPy, but only, only in one of those kind
18:12 of like, maybe I'll pip it or maybe I'll apt to get install it and see what happens.
18:15 Yeah, exactly.
18:16 Yeah.
18:16 So PyPy is a JIT compiling implementation of CPython.
18:24 So the way CPython works, even though it's written in C, when you first hit your code, it all
18:28 gets compiled to bytecode.
18:30 But then those bytecodes don't get further compiled to machine instructions.
18:33 They just get interpreted in like this massive switch statement while true loop.
18:38 And it just looks at things and it just interprets them as bytecode at runtime.
18:44 But that's not the same as compiling down to machine instructions, right?
18:47 So PyPy surprisingly does the same thing that CPython does until it finds a slow spot and
18:54 then it switches it to a JIT compiled version, which is interesting.
18:57 Wow.
18:58 That's really clever.
18:58 Yeah.
18:59 It just finds the slow spots and go, did you call this a thousand times and it's slow?
19:02 All right.
19:02 We're going to make that fast.
19:03 We'll fix you up.
19:04 So there's a little bit of a slow startup.
19:06 So if this was like a script, it runs for half a second and it goes away, there might
19:10 be no benefit or less benefit, maybe even a drawback.
19:13 I don't know.
19:13 But if you use a web app that's going to be up for six hours and maybe get recycled or it's
19:18 a game, say, or a game that we're running, then that stuff would get JIT compiled and be
19:23 sort of warmed up, if you will.
19:25 Yeah.
19:25 So your share here, I think we're talking about games specifically, right?
19:29 Yeah.
19:29 Why would it be a game that this is nice for?
19:31 Yeah.
19:32 So there's a, one of the nice ways to make games is with Pi Game, right?
19:37 And this, this guy, Renee Dunfield, he was at the pypy Sprints in Switzerland, which were
19:45 like in the Alps at some beautiful resort.
19:47 I'm like, man, I need to go to a sprint up here.
19:50 Anyway, they were working on it.
19:52 And one of the things they got running is they got the new pypy running Pi Game perfectly
19:57 well.
19:57 Apparently there were issues with it before.
19:59 And they said on some of the games, they got up to a 30 time speed up by just simply
20:03 typing something different to start your game.
20:06 Wow.
20:06 So they got a 30 time speed up by instead of typing Python, they type Pi, just run it in
20:10 pypy and they get 30 times faster.
20:12 That's amazing.
20:13 Yeah.
20:13 It's the same, same Pi game, same code that runs on, you know, CPython and so on.
20:18 So pypy has a different way to implement C extensions and different APIs.
20:23 So this is really nice, right?
20:25 It has this new way to do extensions for C or assembly language.
20:29 It's the CPy EXC is getting faster, which apparently was important for the game to run quicker and
20:36 so on.
20:36 So basically the people are saying like, it's really nice to have one code base that I don't have to try to like split across these different run times.
20:42 It just runs in both places.
20:44 Apparently there's a few types of operations that are slower because transitioning into and out of pypy down into the C level and back is slower than regular CPython, apparently.
20:55 But still pretty cool.
20:56 That is.
20:57 That's very cool.
20:58 Especially if you're using Pi game.
20:59 This is exciting news.
21:00 Yeah, for sure.
21:00 Like who wouldn't want their game to run?
21:02 Like you think of like how much people optimize video games to shave, like get a few frames per second here or there.
21:09 All right.
21:09 So one example, and this is massive.
21:11 Like one example they gave is like ray tracing and they had run it on Python 2.7.
21:17 It took nine and a half minutes and then they ran it on pypy and it took 18 seconds.
21:22 So that's a pretty good speed up.
21:23 That's not just a pretty good speed up.
21:25 That's an incredible speed up.
21:26 If my tests took 10 minutes to run and then they went down to seconds, I would be pretty amazed.
21:30 Yeah, that would be so awesome.
21:31 So if you're playing with Pi game or even if you're like doing stuff on the web or whatever, check out pypy.
21:39 It could make a huge difference.
21:40 Awesome.
21:41 Yeah, it's good to see that project continuing to grow.
21:43 That's it for our items.
21:44 You got any extra news or things you want to share with people?
21:46 Ooh, it's tough to decide what's new.
21:48 Going to, you know, conferences, going to find new things on the internet, making new things on the internet.
21:54 The one thing I think I'd want to share is I launched a thing a couple months ago, kind of quietly,
21:59 and I've been slowly kind of testing it out with folks called Python Morsels, where I send an exercise out every week.
22:04 And this is my way of trying to serve the folks who are at my local study group and other people that I meet on the internet who want to learn Python.
22:13 And, you know, they don't have a company that they're working in that does Python that could bring me in for training because I love teaching and I really want to serve individuals.
22:20 So folks could check that out.
22:22 It's a pretty fun service.
22:23 Nice.
22:23 That's just PythonMorsels.com?
22:25 Yes.
22:25 Yeah.
22:25 PythonMorsels.com.
22:26 And it redirects right now.
22:27 But, you know, one day in the future, it'll have its own domain that doesn't redirect.
22:30 It'll be all grown up on the internet.
22:32 Exactly.
22:32 Yeah.
22:33 That's awesome.
22:34 Yeah.
22:34 So I'll put that in the show notes.
22:35 Yeah.
22:35 I just have one piece of news to share.
22:37 I've launched, well, I kind of talked about this last week, but now it's in full swing.
22:41 Launched my 100 Days of Code course with the PyBytes, unrelated to this podcast, but similar name.
22:47 PyBytes guys, Bob Belderbos and Julian Secrea.
22:50 So really happy to have this course out.
22:52 It's an 18-hour course that guides people day by day through 100 Days of Python.
22:57 So that's pretty epic.
22:59 Yeah.
22:59 I scrolled through the page for it.
23:01 It is a long page.
23:02 There's a lot in that course.
23:03 It's super exciting to see that.
23:05 It gave us a chance to play with stuff that's really pretty far out there and really fun,
23:09 like building GUIs in Python or different ways to consume APIs and just lots of really
23:15 interesting stuff that we got to play with.
23:17 So people can check it out at talkpython.fm/100 days, 100 days.
23:21 Put that in the show notes as well.
23:23 Nice.
23:23 Yeah.
23:23 All right, Trey.
23:24 Well, thank you so much for jumping in and being a co-host for this week.
23:28 It was fun to share these items with you.
23:30 Yeah.
23:30 Thanks for having me.
23:31 This was super exciting.
23:32 I hope to be back one day.
23:33 We'll have you back for sure.
23:34 Thanks.
23:34 Bye.
23:34 Thank you for listening to Python Bytes.
23:38 Follow the show on Twitter via at Python Bytes.
23:41 That's Python Bytes as in B-Y-T-E-S.
23:44 And get the full show notes at pythonbytes.fm.
23:47 If you have a news item you want featured, just visit pythonbytes.fm and send it our way.
23:52 We're always on the lookout for sharing something cool.
23:54 On behalf of myself and Brian Okken, this is Michael Kennedy.
23:58 Thank you for listening and sharing this podcast with your friends and colleagues.