WEBVTT 00:00:00.001 --> 00:00:05.360 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds. 00:00:05.360 --> 00:00:10.380 This is episode 331, recorded April 11th, 2023. 00:00:10.380 --> 00:00:11.840 And I'm Brian Okken. 00:00:11.840 --> 00:00:13.020 And I'm Michael Kennedy. 00:00:13.020 --> 00:00:18.620 So I want to thank everybody that's showing up on the live stream and watches it on YouTube as well. 00:00:18.620 --> 00:00:22.860 I know a lot of people just listen to the audio, which is great. Thank you. 00:00:22.860 --> 00:00:27.240 But sometimes it's nice to pop over and join the chat. 00:00:27.520 --> 00:00:33.380 We usually record it Tuesdays at 11 Pacific time. 00:00:33.380 --> 00:00:34.940 So if you can catch it, great. 00:00:34.940 --> 00:00:37.520 If not, we enjoy your presence anyway. 00:00:37.520 --> 00:00:41.840 I also want to thank InfluxDB for sponsoring this episode. 00:00:41.840 --> 00:00:44.040 We'll hear more about them later in the show. 00:00:44.040 --> 00:00:46.840 But first, what do you got for us, Michael? 00:00:46.840 --> 00:00:48.360 How about we make an application? 00:00:48.360 --> 00:00:51.160 Yeah, let's do it. 00:00:51.160 --> 00:00:51.920 Let's do it. 00:00:51.920 --> 00:01:06.900 So this one was actually thrown out just in passing over on Talk Python when I had that panel about sort of the direction of packaging and Python in general. 00:01:06.900 --> 00:01:09.220 Like we've got all these different choices. 00:01:09.220 --> 00:01:10.280 We've got poetry. 00:01:10.280 --> 00:01:11.220 We've got PipDMV. 00:01:11.220 --> 00:01:12.440 We've got Hatch. 00:01:12.440 --> 00:01:13.800 We've got straight Pip. 00:01:13.800 --> 00:01:14.340 We've got PipDual. 00:01:14.420 --> 00:01:16.460 So I had a bunch of folks on the show to talk about that. 00:01:16.460 --> 00:01:21.040 And Paul mentioned like, oh, MakeApp is something that I'm really dreaming about right now. 00:01:21.040 --> 00:01:24.640 That might be a nice way to think about how we work with packages. 00:01:25.320 --> 00:01:36.260 And so Felix Ingram noticed this maybe more than even that I did while we were watching or while he's listening and thought, you know, maybe I should talk a bit more about this. 00:01:36.260 --> 00:01:40.040 So I didn't I wasn't really aware of this before I dug into it. 00:01:40.040 --> 00:01:45.860 But MakeApp, it's a little bit like cookie cutter and those kinds of things. 00:01:45.860 --> 00:01:52.520 But it'll guide you through creating your application as well as helping you test certain things. 00:01:52.520 --> 00:02:00.500 Like, for example, if I want to create some Python package having to do with secure, I can't call it secure because guess what? 00:02:00.500 --> 00:02:03.020 That's already taken on PyPI as a package. 00:02:03.020 --> 00:02:05.520 So I'm never going to be able to publish that. 00:02:05.520 --> 00:02:06.460 I'm going to have to rename it. 00:02:06.460 --> 00:02:09.060 I might find that out later along the way. 00:02:09.060 --> 00:02:16.520 So MakeApp will do things like check to see that the thing you're trying to create could be uploaded to PyPI if you later chose to do so. 00:02:16.520 --> 00:02:16.920 Right. 00:02:16.920 --> 00:02:26.880 And also with a quick point out, Felix said, hey, look, here's where you can link to it over onto the Talk Python transcript page. 00:02:26.880 --> 00:02:34.940 And it has every paragraph, I guess, more or less, has its own little link that you can link to and play and hear what it's talking about. 00:02:34.940 --> 00:02:37.180 And I don't think we have that on ours. 00:02:37.180 --> 00:02:38.620 And I'm wondering how much people care. 00:02:38.620 --> 00:02:40.560 Like, that's work that Michael has to do. 00:02:40.560 --> 00:02:41.940 But a bunch of people are like, yes, please. 00:02:41.940 --> 00:02:42.760 Then let me know. 00:02:42.760 --> 00:02:45.080 Anyway, that's how they shared it with me. 00:02:45.080 --> 00:02:46.280 And I figured out what we're talking about. 00:02:46.280 --> 00:02:53.020 So this is an app that simplifies creating applications, rolling them out and publishing them. 00:02:53.020 --> 00:02:58.140 And what it does is it will make a skeleton for your new application in one command. 00:02:58.140 --> 00:03:00.060 That's kind of the cookie cutter equivalent. 00:03:00.060 --> 00:03:04.560 Although there's absolutely fewer templates or project types, right? 00:03:04.560 --> 00:03:08.600 There's like five or six project types instead of five or 6,000 for a cookie cutter. 00:03:08.600 --> 00:03:10.400 So that's a consideration there. 00:03:10.400 --> 00:03:14.440 But then it'll automatically create a Git repository for you. 00:03:14.440 --> 00:03:18.740 I'm guessing just locally and you've got to link it to GitHub or wherever. 00:03:18.740 --> 00:03:22.800 As I said, it'll check whether the application name is available on PyPI. 00:03:22.800 --> 00:03:25.180 You pick your layout. 00:03:25.180 --> 00:03:29.680 And then it also allows you to sort of manage your app over time. 00:03:29.680 --> 00:03:36.320 So you can easily add entries like here's a new item or here's a breaking change to your changelog. 00:03:36.320 --> 00:03:37.100 Oh, cool. 00:03:37.100 --> 00:03:39.160 It'll publish your application. 00:03:39.160 --> 00:03:44.440 You know, push to source control, push to PyPI, those kinds of things in a single command. 00:03:44.440 --> 00:03:45.420 I don't know if I'd use that. 00:03:45.420 --> 00:03:48.060 I think I kind of just am always pushing to GitHub. 00:03:48.060 --> 00:03:51.140 I don't really wait until I'm ready to publish something. 00:03:51.420 --> 00:03:52.840 Like I'm pushing like stuff. 00:03:52.840 --> 00:03:54.660 I always kind of feel bad. 00:03:54.660 --> 00:03:57.820 I think GitHub try like, why does this person commit so often? 00:03:57.820 --> 00:03:58.980 But it's just like, you know what? 00:03:58.980 --> 00:04:00.300 I'm done with this little thing. 00:04:00.300 --> 00:04:01.180 I want to save it. 00:04:01.180 --> 00:04:02.300 What if I'm on my other computer? 00:04:02.300 --> 00:04:04.580 I don't want to have to try to remember how to get it back. 00:04:04.580 --> 00:04:06.680 Anyway, that's a cool feature. 00:04:06.680 --> 00:04:07.520 I'm not sure I would use. 00:04:07.520 --> 00:04:11.120 So when you create a new one, you say make app new and you give it a name. 00:04:11.120 --> 00:04:14.680 You give it a location and other things like what is the name or what's the author? 00:04:15.080 --> 00:04:19.080 And you can also take things like the author, which you would put on the CLI. 00:04:19.080 --> 00:04:21.660 You can put that into a config file and say, you know what? 00:04:21.660 --> 00:04:22.460 It's me. 00:04:22.460 --> 00:04:23.380 It's always me. 00:04:23.380 --> 00:04:27.480 When I'm logged into this user profile, my name is still the same as it was before. 00:04:27.480 --> 00:04:27.780 Right. 00:04:27.780 --> 00:04:29.580 So don't ask me about that. 00:04:29.580 --> 00:04:29.920 Right. 00:04:29.920 --> 00:04:31.700 So that's kind of cool that you can do that. 00:04:31.700 --> 00:04:39.240 It'll create templates for things like a click powered app, something based on pytest. 00:04:39.240 --> 00:04:41.880 It'll let you create a pytest plugin project. 00:04:41.880 --> 00:04:44.520 That's intended to be a pytest thing. 00:04:44.680 --> 00:04:48.860 Django web app or this thing called Web Scaff, which is also a scaffolding thing for web 00:04:48.860 --> 00:04:49.100 apps. 00:04:49.100 --> 00:04:54.500 And then when you're ready to publish it, you say make app release and that'll bump a version 00:04:54.500 --> 00:04:57.960 or you can say make app release increment the major version. 00:04:57.960 --> 00:05:00.400 Like that's a major change that you want to make. 00:05:00.400 --> 00:05:00.640 Right. 00:05:00.640 --> 00:05:05.500 So this automatically bump the version number, tag it in source control, push the source 00:05:05.500 --> 00:05:12.900 and the tag up to GitHub or GitLab or wherever you're acting on and publish it to PyPI all 00:05:12.900 --> 00:05:14.140 in one fail swoop. 00:05:14.280 --> 00:05:17.140 Then again, if you want to make changes, you can say make app change. 00:05:17.140 --> 00:05:22.180 And then you put the text of that change and it'll put that into changelog in the right 00:05:22.180 --> 00:05:22.540 place. 00:05:22.540 --> 00:05:28.140 So you put like quote like here, it's plus new change command implemented or whatever. 00:05:28.140 --> 00:05:33.200 And it has certain prefixes like plus for a new feature edition, exclamation mark for important 00:05:33.200 --> 00:05:37.920 change, minus for a deprecation or star for some minor change. 00:05:37.920 --> 00:05:38.300 Right. 00:05:38.300 --> 00:05:38.860 Pretty cool. 00:05:38.860 --> 00:05:43.740 And then on top of that, you it comes with autocomplete in your shell. 00:05:44.000 --> 00:05:48.660 So if you're using bash or oh my z shell or something like that and you want to hit tab and have 00:05:48.660 --> 00:05:53.800 it know about make app, what are its commands right after that, then you can put something 00:05:53.800 --> 00:05:59.260 into your profile, your RC file, and it will activate the autocomplete, which is cool. 00:05:59.260 --> 00:05:59.940 That's cool. 00:05:59.940 --> 00:06:00.480 Yeah. 00:06:00.480 --> 00:06:01.900 Anyway, so people can check this out. 00:06:01.900 --> 00:06:06.440 Comes lightly recommended from that episode. 00:06:06.440 --> 00:06:07.660 But yeah, pretty cool. 00:06:07.660 --> 00:06:08.380 It looks interesting. 00:06:08.380 --> 00:06:08.880 Worth all. 00:06:08.880 --> 00:06:09.500 Nice. 00:06:10.120 --> 00:06:19.680 Well, one of the things I've been thinking about and looking forward to is Python 312, actually. 00:06:19.680 --> 00:06:25.440 So 312 is not here yet, but it is kind of here, right? 00:06:25.440 --> 00:06:28.960 So it's a yearly development cycle. 00:06:28.960 --> 00:06:29.760 Python's on. 00:06:29.760 --> 00:06:31.860 Where are we at right now? 00:06:31.860 --> 00:06:35.940 Well, we just had, so we just passed Alpha 7. 00:06:35.940 --> 00:06:39.900 So Alpha 7 was released recently. 00:06:39.900 --> 00:06:41.860 I don't think it was right on the list. 00:06:41.860 --> 00:06:42.400 That many days ago, yeah. 00:06:42.400 --> 00:06:42.940 Yeah. 00:06:42.940 --> 00:06:44.280 But yeah. 00:06:44.280 --> 00:06:47.640 So 312 Alpha 7. 00:06:47.640 --> 00:06:52.640 And it's nice that they've published the schedule, the expected schedule. 00:06:52.640 --> 00:06:57.860 So we've got up through a couple more months of four or five months. 00:06:57.860 --> 00:06:59.420 Bad at math. 00:06:59.420 --> 00:07:02.760 And this early in the morning of betas. 00:07:03.040 --> 00:07:08.080 And then candidate releases and then the final in October, which is awesome. 00:07:08.080 --> 00:07:12.000 So why am I bringing this up? 00:07:12.000 --> 00:07:14.260 I'm bringing it up because a couple things happened recently. 00:07:14.260 --> 00:07:20.080 So the Alpha 7, if we took the release notes, there's some fun stuff in here. 00:07:20.080 --> 00:07:22.540 And I'm not sure when this came in. 00:07:22.540 --> 00:07:30.120 But the thing that I really am looking forward to in 312 is, well, there's some stuff that isn't really mentioned here. 00:07:30.120 --> 00:07:33.400 But I think we're going to get more speed improvements, which I'm pretty excited about. 00:07:33.400 --> 00:07:41.580 But there's some cool stuff with, oh, this is just the major new features. 00:07:41.580 --> 00:07:45.100 We've got even more improved error messages, which are great. 00:07:45.200 --> 00:07:47.060 And that's one of the things I wanted to talk about. 00:07:47.060 --> 00:07:48.260 A whole bunch of great stuff. 00:07:48.260 --> 00:07:51.440 But these are pretty cool. 00:07:51.440 --> 00:07:57.780 Also, invalid backslash escape sequences now worn for syntax warning and deprecation warning. 00:07:57.780 --> 00:07:58.660 That's kind of neat. 00:07:59.720 --> 00:08:07.780 So in the What's New article for 312, this does have some examples of the new error messages. 00:08:07.780 --> 00:08:10.140 So these are really kind of neat things. 00:08:10.140 --> 00:08:20.460 Like if you just kind of use SysVersionInfo, but if you forgot to import it, there's some new error logs of, did you forget to import Sys? 00:08:20.460 --> 00:08:22.020 So did you forget to import? 00:08:22.020 --> 00:08:23.820 Those are nice error messages. 00:08:23.820 --> 00:08:36.200 There's another one from like if you're using a variable within a class that's not around, maybe it's a self variable that you forgot. 00:08:36.200 --> 00:08:37.340 There's self member variables. 00:08:37.340 --> 00:08:40.660 So there's a did you mean self.black. 00:08:40.660 --> 00:08:43.040 Nice example. 00:08:43.040 --> 00:08:50.880 Syntax error from, and I've done this a lot, of import from messing this up. 00:08:50.880 --> 00:08:53.600 So it's import something from this other thing. 00:08:53.600 --> 00:08:54.540 It's not that. 00:08:54.540 --> 00:08:57.900 You're supposed to say from something, import something. 00:08:57.900 --> 00:09:02.540 And the syntax error now says, did you mean to use this instead? 00:09:02.540 --> 00:09:09.620 Which also, I don't know, to me begs the question of like, can't you just figure it out if you know what I meant? 00:09:09.620 --> 00:09:10.640 But anyway. 00:09:10.640 --> 00:09:15.440 Yeah, some other like import error messages, some cleanup. 00:09:15.440 --> 00:09:20.040 More specific error messages, always exciting. 00:09:20.040 --> 00:09:24.180 The other, there's always new exciting things in new versions. 00:09:24.180 --> 00:09:24.940 One of the. 00:09:24.940 --> 00:09:29.340 Off of that bit, I just want to bring a little audience feedback. 00:09:29.340 --> 00:09:34.080 Sean Tibor from Teaching Python out there says, hooray for better error messages. 00:09:34.080 --> 00:09:39.640 And Pamela Fox says, yay, I've already been benefiting from 3.11 error message improvements. 00:09:39.640 --> 00:09:44.100 Some of which requested my, I requested myself in the Python forum. 00:09:44.100 --> 00:09:45.420 Tell Pablo what you need. 00:09:45.420 --> 00:09:47.040 Yes, I think this is really great. 00:09:47.040 --> 00:09:53.180 It's certainly getting nice to have those, especially for people getting started in Python to be less confused. 00:09:53.180 --> 00:09:53.760 Yeah. 00:09:53.760 --> 00:10:00.900 And I'm finding myself just, I'm in a hurry more often than I guess I'm always in more of a hurry, getting stuff done. 00:10:01.100 --> 00:10:04.820 And if the error message can help me solve something quicker. 00:10:04.820 --> 00:10:06.860 That's a, that's a nice win. 00:10:06.860 --> 00:10:09.480 So just one of the announcements that came out recently. 00:10:09.480 --> 00:10:12.000 So I was, this is like tight schedule. 00:10:12.000 --> 00:10:13.800 So we've only got, we're on alpha seven. 00:10:13.800 --> 00:10:16.120 We've got no more alphas. 00:10:16.120 --> 00:10:17.460 We've got some betas coming. 00:10:17.720 --> 00:10:23.800 But I thought we were no new feet, no new features beyond the beta one. 00:10:23.800 --> 00:10:34.980 And one of the new features that I don't see so far, but it's supposedly coming in is, is this, this per, per interpreter Gil, PEP 684. 00:10:34.980 --> 00:10:37.740 It's a 312. 00:10:37.740 --> 00:10:39.160 It just got approved. 00:10:39.540 --> 00:10:42.560 And it's, I'm pretty, I think I'm excited about it. 00:10:42.560 --> 00:10:43.320 I'm not sure. 00:10:43.320 --> 00:10:47.120 I'm, I don't know if you know much about it, Michael, but it says here. 00:10:47.120 --> 00:10:47.620 Okay. 00:10:47.620 --> 00:10:50.120 So I'm just going to quickly summarize the abstract. 00:10:50.120 --> 00:10:56.160 So, CPath on users, can run multiple interpreters, interpreters in the same process. 00:10:56.160 --> 00:11:01.320 however, interpreters in the same process always shared the same global state. 00:11:01.320 --> 00:11:05.220 And so one Gil, it is a source of bugs. 00:11:05.220 --> 00:11:15.160 so, and, with a growing impact as more people use the feature, furthermore sufficient isolation would facilitate true multicore parallelism. 00:11:15.160 --> 00:11:17.900 Ooh, I like multicore parallelism. 00:11:17.900 --> 00:11:20.560 so I think we want this. 00:11:20.560 --> 00:11:23.320 And, so there's outlines in the proposal. 00:11:23.320 --> 00:11:30.680 So we're going to have, they're moving the data surrounding the Gil into the per interpreter data. 00:11:30.680 --> 00:11:33.780 and I think I'm excited about it. 00:11:33.780 --> 00:11:39.600 But then, then later on it does say, there's a, there's a reference to like for how do we teach this? 00:11:39.600 --> 00:11:44.220 and it mentions, oh, I think I lost the link. 00:11:44.220 --> 00:11:49.480 Oh, this is an advanced feature meant for a narrow set of users of the C API. 00:11:49.480 --> 00:11:55.680 So I'm not sure how this will affect normal people, in the future, but it still thinks a good thing. 00:11:55.680 --> 00:11:56.840 Do you have any idea, Michael? 00:11:56.840 --> 00:11:57.920 I have no idea. 00:11:58.040 --> 00:11:58.240 Yeah. 00:11:58.240 --> 00:12:01.280 I think that the trick is how do you start a new interpreter? 00:12:01.280 --> 00:12:11.700 And what I am, what I would imagine might come out of this is there might be right now in Python, we can create threads and we can create multiprocessing and we can do asyncio, right? 00:12:11.700 --> 00:12:12.200 Yeah. 00:12:12.200 --> 00:12:14.580 asyncio, it's just one thread. 00:12:14.580 --> 00:12:16.100 It doesn't do any of that. 00:12:16.360 --> 00:12:29.520 So kind of put that to a side, it's, it doesn't really fall into the same realm, but with threading versus multiprocessing, it's always been this trade-off of like, well, I really just want to run more than one thing at a time. 00:12:29.520 --> 00:12:31.960 And, you know, like I've got 32 cores. 00:12:31.960 --> 00:12:33.260 Why can I only use one of them? 00:12:33.260 --> 00:12:35.060 I have this work I want to do. 00:12:35.060 --> 00:12:45.820 And this might be interesting for, you as a data scientist or a scientist or somebody doing computational work, say on like hardware devices, a lot. 00:12:46.120 --> 00:12:52.520 But then it also could be interesting for web consumer, web developers and APIs and stuff, right? 00:12:52.520 --> 00:12:59.640 Like those threads might be, you know, you're still blocked on the GIL on the server side for each process that you spin off. 00:12:59.640 --> 00:13:08.380 And that's why we have a bunch of worker processes that run, like you have eight worker processes already in a copy of your entire app consuming all that memory, right? 00:13:08.380 --> 00:13:09.980 That's the, why do you do that? 00:13:09.980 --> 00:13:15.100 Well, because you don't want to be subjected to the GIL for among other reasons, but that's a primary reason. 00:13:15.100 --> 00:13:18.860 Cause you can't really do it in parallel, but if you had a bunch of processes that are independent. 00:13:18.860 --> 00:13:30.460 So I can certainly see there might be some kind of API or something in the future where when you create a thread, you can say, and this thread lives inside this process, but I want more isolation. 00:13:30.460 --> 00:13:35.080 Like interpreter isolation equals true when you create the thread or whatever. 00:13:35.080 --> 00:13:38.660 And then, then when you run that work, there's two things that happen. 00:13:38.660 --> 00:13:43.640 One, it should run in true parallel form, but let the OS, it'll be an OS thread. 00:13:43.640 --> 00:13:49.040 The OS will schedule that on its own course, but then you also will have to actually care about lock. 00:13:49.040 --> 00:13:53.380 Like other languages like C and C# and stuff, you do parallels. 00:13:53.380 --> 00:13:54.860 And you're all about, okay, when do I lock this? 00:13:54.860 --> 00:13:55.500 How do I lock that? 00:13:55.500 --> 00:13:56.080 How do I unlock it? 00:13:56.080 --> 00:13:56.900 What about a deadlock? 00:13:56.900 --> 00:13:59.940 And then Python, you're like, eh, kind of the GIL will help us a lot. 00:13:59.940 --> 00:14:01.040 Like that's gone, right? 00:14:01.100 --> 00:14:07.340 And so it kind of levels up the difficulty of thread safety because there's more of a chance that these things run in parallel. 00:14:07.340 --> 00:14:07.880 So anyway. 00:14:07.880 --> 00:14:19.320 So we had, so I think the gist around it is there were a lot of people that were, or a lot, there are some people that are trying to utilize the multi-interpreter or sub-interpreter systems. 00:14:19.320 --> 00:14:26.300 And they were running into problems because of this, the GIL is global sort of a thing. 00:14:27.520 --> 00:14:36.800 And so push, it's not just the gill, but there's other things involved with this PEP that push more of the data around the per-interpreter thing into isolation. 00:14:36.800 --> 00:14:40.660 So it's increased isolation of the per-interpreter stuff, including the GIL. 00:14:41.840 --> 00:14:52.840 And those kind of people, like it says, maintainers of any extension module that created isolated interpreters, they'll now be able to utilize this better. 00:14:52.840 --> 00:14:56.100 So there's some people making some cool things that'll continue. 00:14:56.100 --> 00:14:56.820 So yay. 00:14:56.820 --> 00:14:57.320 Anyway. 00:14:57.320 --> 00:14:59.200 I'm very excited for this. 00:14:59.200 --> 00:15:00.440 I'm excited for this. 00:15:00.440 --> 00:15:01.700 I'm excited for the no-gil Python. 00:15:01.700 --> 00:15:05.000 I think it's one of these sort of chicken and egg type issues. 00:15:05.000 --> 00:15:07.240 Be like, ah, I don't really need the threading stuff. 00:15:07.240 --> 00:15:09.980 I don't really use it because it's Python. 00:15:09.980 --> 00:15:12.260 And a lot of people are like, well, there's no point in trying it. 00:15:12.260 --> 00:15:19.900 So there's just not like a culture of really leveraging the hardware outside of these very specialized C APIs or certain Rust scenarios. 00:15:19.900 --> 00:15:22.420 But then when you do see them, you're like, oh, it's like 50 times faster. 00:15:22.420 --> 00:15:27.140 Like, hmm, wouldn't it be kind of nice to go 50 times faster sometimes if you might need it? 00:15:27.140 --> 00:15:32.580 Or use half as much RAM on a server because you don't need to scale out as much for the gill? 00:15:32.580 --> 00:15:41.980 But like you said, in other languages, we have to freak out about locks or using a message queue system for different processes instead. 00:15:41.980 --> 00:15:44.020 And we don't have to deal with that now. 00:15:44.020 --> 00:15:48.480 So I think it's good that we're taking slow steps towards it. 00:15:48.480 --> 00:15:49.360 So it's good. 00:15:49.360 --> 00:15:49.760 Anyway. 00:15:50.520 --> 00:15:52.740 Yeah, no, I think this is good. 00:15:52.740 --> 00:15:54.500 I talked to Eric Snow about it long ago. 00:15:54.500 --> 00:16:00.140 It sounds like it's created better data isolation within the CPython source code anyway. 00:16:00.140 --> 00:16:06.400 There's a bunch of global shared variables that weren't really meant to be shared, but they were because there's really only one thing. 00:16:06.400 --> 00:16:10.740 And this refactoring, I think, has also made it a little bit better inside. 00:16:10.740 --> 00:16:11.300 Yeah. 00:16:11.300 --> 00:16:11.780 Okay. 00:16:11.780 --> 00:16:12.240 Cool. 00:16:12.240 --> 00:16:13.260 All right. 00:16:13.260 --> 00:16:14.680 Do you know what else is cool? 00:16:14.680 --> 00:16:16.360 Databases. 00:16:16.800 --> 00:16:17.120 Yeah. 00:16:17.120 --> 00:16:18.420 Databases are great. 00:16:18.420 --> 00:16:22.040 And we want to thank InfluxDB for sponsoring this episode. 00:16:22.040 --> 00:16:30.620 InfluxDB is a database purpose built for handling time series data at massive scale for real-time analytics. 00:16:30.620 --> 00:16:38.220 Developers can ingest, store, and analyze all types of time series data, metrics, events, traces in a single platform. 00:16:38.220 --> 00:16:40.620 So, dear listener, let me ask you a question. 00:16:41.040 --> 00:16:47.340 How would boundless cardinality and lightning-fast SQL queries impact the way you develop real-time applications? 00:16:47.340 --> 00:16:59.180 InfluxDB processes large time series data sets and provides low-latency SQL queries, making it a go-to choice for developers building real-time applications and seeking crucial insights. 00:16:59.180 --> 00:17:09.420 For developer efficiency, InfluxDB helps you create IoT, analytics, and cloud applications using time-stamped data rapidly and at scale. 00:17:09.420 --> 00:17:15.900 It's designed to ingest billions of data points in real-time with unlimited cardinality. 00:17:15.900 --> 00:17:24.520 InfluxDB streamlines building once and deploying across various products and environments from the edge on-premise and to the cloud. 00:17:24.520 --> 00:17:28.440 Try it for free at pythonbytes.fm/influxDB. 00:17:28.440 --> 00:17:30.580 The link is also in your show notes. 00:17:30.580 --> 00:17:32.820 Thanks, Influx, for supporting the show. 00:17:32.820 --> 00:17:33.660 Very, very awesome. 00:17:33.660 --> 00:17:34.680 Thank you for supporting the show. 00:17:34.680 --> 00:17:41.820 Now, Brian, you live in the future in this world of Python 3.12. 00:17:41.820 --> 00:17:42.320 Yeah. 00:17:42.320 --> 00:17:49.080 I live in the present, as in just a few days ago, Python 3.11.3 was released. 00:17:49.080 --> 00:17:49.660 How about that? 00:17:49.660 --> 00:17:50.400 Oh, cool. 00:17:50.400 --> 00:17:50.780 Yeah. 00:17:50.780 --> 00:17:51.380 I don't know. 00:17:51.380 --> 00:17:55.800 My feelings a lot of times when it's one of these point releases, maybe it's worth upgrading. 00:17:55.800 --> 00:17:57.540 Sometimes there's something cool in there. 00:17:57.540 --> 00:17:58.380 Sometimes not. 00:17:58.380 --> 00:18:02.340 This one, you probably want to get in there and check it out. 00:18:02.340 --> 00:18:08.600 Because number one, and this is not very common in the Python world, that there's a security update. 00:18:09.600 --> 00:18:17.800 So they updated the underlying OpenSSL version for Windows and macOS to 1.1.1 T. 00:18:17.800 --> 00:18:20.880 And we talked about like semantic version and calendar version. 00:18:20.880 --> 00:18:29.200 This one's the T versioning style to address, let's see, 1, 2, and 3 CVEs. 00:18:29.280 --> 00:18:32.960 And if you go pop over there to read a bit about that, it says severity high. 00:18:32.960 --> 00:18:34.260 Okay. 00:18:34.260 --> 00:18:36.700 That doesn't sound absolutely incredible. 00:18:36.700 --> 00:18:38.120 Another one is moderate. 00:18:38.120 --> 00:18:40.440 And another one is moderate, right? 00:18:40.440 --> 00:18:43.360 So those are probably worth paying attention to then. 00:18:43.360 --> 00:18:49.360 So that's, I just realized like 20 minutes ago that actually, I know it came out last week, 00:18:49.360 --> 00:18:51.420 but I just noticed it this little bit ago. 00:18:51.420 --> 00:18:55.900 And because of the security stuff, I decided I'm kicking out something I was going to cover before 00:18:55.900 --> 00:18:56.960 and putting this one in here. 00:18:56.960 --> 00:18:58.360 So that's pretty important. 00:18:58.360 --> 00:18:58.940 Yeah. 00:18:58.940 --> 00:19:01.060 I just want to be a little timely on that. 00:19:01.060 --> 00:19:03.620 So there's also some other things, you know, there's always a few things like, 00:19:03.620 --> 00:19:07.060 I wonder if that, that might be causing a problem. 00:19:07.060 --> 00:19:13.800 For example, stack top value on tracing entries to avoid corruption on the garbage collection. 00:19:13.800 --> 00:19:18.200 I'm like, I don't know that I do that, but maybe things that I use do that. 00:19:18.200 --> 00:19:20.900 And I don't want a corrupted garbage collector, right? 00:19:20.920 --> 00:19:21.740 That would be bad. 00:19:21.740 --> 00:19:24.900 Who knows if, like, if it lose, if it leaks data that's bad, 00:19:24.900 --> 00:19:28.820 but if it goes and collect something that's not bad, that's really going to be a problem. 00:19:28.820 --> 00:19:36.220 Overflow when creating very large dictionaries causes a crash when deallocating nested filter objects. 00:19:36.220 --> 00:19:39.280 Seg fault from a race condition during garbage collection. 00:19:39.280 --> 00:19:39.860 All right. 00:19:39.860 --> 00:19:41.580 So there's enough stuff in here that I'm like, you know what? 00:19:41.580 --> 00:19:42.980 This thing's getting an update. 00:19:42.980 --> 00:19:43.580 All right. 00:19:43.580 --> 00:19:45.500 So those are the cores and built in. 00:19:45.500 --> 00:19:49.040 And then there's a bunch of things, a bunch of improvements to the standard library. 00:19:49.720 --> 00:19:51.820 People can check out, right? 00:19:51.820 --> 00:19:57.900 So it's just always interesting how much, how many things get changed, even though you think, 00:19:57.900 --> 00:20:02.960 like, eh, standard library is kind of static and fixed, but, like, fixed dunder weak ref descriptor 00:20:02.960 --> 00:20:05.000 generation for custom data classes. 00:20:05.000 --> 00:20:12.460 And, you know, for binary mode, file hook compressed doesn't set the encoding, even if the value is none, 00:20:12.460 --> 00:20:13.220 and so on. 00:20:13.320 --> 00:20:15.500 So just a bunch of little things getting fixed. 00:20:15.500 --> 00:20:19.640 But the reason I put it to the top of the list is the security stuff. 00:20:19.640 --> 00:20:20.120 Yeah. 00:20:20.120 --> 00:20:25.640 One of the security things that's interesting to me, I haven't looked into that yet, is that subprocess, 00:20:25.640 --> 00:20:26.720 Popen thing. 00:20:26.720 --> 00:20:35.820 A lot of people use Python to coordinate other activities on, you know, like DevOps and systems 00:20:35.820 --> 00:20:37.240 admin and stuff like that. 00:20:37.840 --> 00:20:42.360 So security patches around that, you probably should pay attention to. 00:20:42.360 --> 00:20:43.540 So that's pretty interesting. 00:20:43.540 --> 00:20:44.760 Absolutely. 00:20:44.760 --> 00:20:45.940 Yeah. 00:20:45.940 --> 00:20:47.960 Specifically for Windows users, right? 00:20:47.960 --> 00:20:54.200 So now it uses a safer approach to find cmd.exd when launching with shell equals true. 00:20:54.200 --> 00:20:54.980 Yeah. 00:20:54.980 --> 00:20:59.580 And I can't imagine, like, I didn't even think that if you found the wrong command, you'd be 00:20:59.580 --> 00:21:01.760 passing all your stuff to the wrong shell. 00:21:02.020 --> 00:21:04.600 Some evil cmd? 00:21:04.600 --> 00:21:05.140 Yeah. 00:21:05.140 --> 00:21:06.420 Yikes. 00:21:06.420 --> 00:21:06.600 Yeah. 00:21:06.600 --> 00:21:06.880 Okay. 00:21:06.880 --> 00:21:08.440 Cool. 00:21:08.440 --> 00:21:08.780 All right. 00:21:08.780 --> 00:21:10.160 Well, that's that one. 00:21:10.160 --> 00:21:10.920 What's your last? 00:21:10.920 --> 00:21:18.460 I want to do something fun because I'm looking forward to PyCon coming up right pretty soon. 00:21:18.460 --> 00:21:19.860 Are you pretty excited about that? 00:21:19.860 --> 00:21:22.040 I am excited. 00:21:22.040 --> 00:21:27.360 I think it's approaching faster than I'm ready to prepare for being there for all that time 00:21:27.360 --> 00:21:28.680 and getting the most out of it. 00:21:28.680 --> 00:21:29.660 But yeah, I'm excited. 00:21:30.040 --> 00:21:30.180 Yeah. 00:21:30.180 --> 00:21:32.500 So there's an article. 00:21:32.500 --> 00:21:33.240 Who's this? 00:21:33.240 --> 00:21:37.580 By Sebastian Witowski, How to Make a Great Conference Talk. 00:21:37.580 --> 00:21:39.520 And I kind of like this. 00:21:39.520 --> 00:21:41.680 There's some really great advice in here. 00:21:41.680 --> 00:21:44.160 So I know it's kind of late. 00:21:44.160 --> 00:21:48.160 A lot of people that are speaking about people speak at all sorts of conferences, though. 00:21:48.160 --> 00:21:49.060 So it's good. 00:21:49.060 --> 00:21:52.980 But if you're speaking at PyCon, there's a couple of things I want to highlight. 00:21:52.980 --> 00:21:55.320 You probably already have your slides set up, hopefully. 00:21:56.200 --> 00:21:57.980 And no, you've already been accepted. 00:21:57.980 --> 00:22:00.040 So you don't need to worry. 00:22:00.040 --> 00:22:04.320 You can maybe skip the benefits of speaking at a conference. 00:22:04.320 --> 00:22:06.360 But I highly recommend people try. 00:22:07.180 --> 00:22:13.120 I think there's benefits of even submitting and trying to get an idea together, even if you 00:22:13.120 --> 00:22:15.180 don't present it, because it's nice. 00:22:15.180 --> 00:22:21.660 Anyway, then there's call for proposals, research preparation slides. 00:22:21.660 --> 00:22:23.560 There's a whole bunch of stuff in here that's great. 00:22:23.640 --> 00:22:25.180 I want to skip to the end. 00:22:25.180 --> 00:22:29.980 So you're in the middle of maybe trying to do rehearsing. 00:22:29.980 --> 00:22:36.500 So I say skip to this part, the live demos part and rehearsing and what to do on the day 00:22:36.500 --> 00:22:39.420 of the presentation and make sure you review these, because these are great. 00:22:39.420 --> 00:22:45.420 And the greatest advice I've ever seen for live demos is, do you really need a demo? 00:22:47.420 --> 00:22:53.060 We've probably all, I don't know if anybody's, anybody that's tried to do a live demo has 00:22:53.060 --> 00:22:55.120 had one not go as they expected. 00:22:55.120 --> 00:22:58.320 Even if it turned out okay, it's a stressful thing. 00:22:58.320 --> 00:23:04.120 So especially if you are new to presenting, I would say skip the live demo. 00:23:04.120 --> 00:23:06.740 It's cool when it works, when it doesn't. 00:23:06.740 --> 00:23:14.180 The other thing is, if you're going to do it anyway, and something goes wrong, the Python 00:23:14.180 --> 00:23:17.400 people in the audience are not going to heckle you or anything like that. 00:23:17.400 --> 00:23:20.900 We're a nice bunch of people and we've all had it happen to us. 00:23:20.900 --> 00:23:26.100 So you're not going to, you shouldn't feel too embarrassed, but prepare for it. 00:23:26.100 --> 00:23:28.500 Prepare for, what are you going to do if the wifi goes out? 00:23:28.500 --> 00:23:29.480 Things like that. 00:23:29.480 --> 00:23:36.180 So, and also, and also I just don't do them anymore because, because, because they've always 00:23:36.180 --> 00:23:36.980 gone wrong for me. 00:23:36.980 --> 00:23:37.300 Okay. 00:23:37.300 --> 00:23:39.980 Moving on at the very least practice them. 00:23:39.980 --> 00:23:41.440 Rehearsing. 00:23:41.440 --> 00:23:45.880 I see a lot of people and I used to be like this to forget to rehearse. 00:23:45.880 --> 00:23:48.440 The rehearsing is the most important part. 00:23:48.440 --> 00:23:56.200 And I can't remember where it is in here, but it's good advice of taking, practicing the 00:23:56.200 --> 00:24:00.420 first five minutes, making sure you've like got the five minutes, first five minutes, last 00:24:00.420 --> 00:24:01.740 five minutes memorized. 00:24:01.740 --> 00:24:07.140 You can like, you can like, you know exactly what you're going to say because it's hard. 00:24:07.140 --> 00:24:11.000 If you think you kind of know what you're going to say, when you get up there, it's blank 00:24:11.000 --> 00:24:11.340 page. 00:24:11.340 --> 00:24:12.700 You have to, how do you start? 00:24:12.700 --> 00:24:16.100 So knowing how to start and knowing how to finish is a, is a good thing. 00:24:16.100 --> 00:24:18.540 I, so practice. 00:24:18.540 --> 00:24:24.320 And I also see, I've seen people practice quietly and I've done this before in your head, practicing 00:24:24.320 --> 00:24:24.860 in your head. 00:24:24.860 --> 00:24:25.520 Doesn't count. 00:24:25.520 --> 00:24:27.680 Do it out loud and do it standing. 00:24:27.680 --> 00:24:29.120 You're going to be standing at a conference. 00:24:29.120 --> 00:24:30.520 So don't sit and practice it. 00:24:30.520 --> 00:24:32.520 Stand up and practice it. 00:24:32.520 --> 00:24:35.100 I was at the lot at, Pike Cascades. 00:24:35.100 --> 00:24:38.780 I was in the hotel room and what did I use for a standing desk? 00:24:38.780 --> 00:24:43.160 The ironing board, the ironing work where it's great in a hotel for, for your standing 00:24:43.160 --> 00:24:44.140 desk to practice it. 00:24:44.140 --> 00:24:45.900 Anyway, practice your, your talk. 00:24:45.900 --> 00:24:47.720 And I take one of these. 00:24:47.720 --> 00:24:49.480 So I'm going to have a link in this. 00:24:49.480 --> 00:24:53.980 I'm going to take, take a look at this in a second, but, one of these, time 00:24:53.980 --> 00:24:54.460 timers. 00:24:54.460 --> 00:24:58.600 So, there it's 36 bucks for a little tiny timer. 00:24:58.720 --> 00:24:59.580 So what's the big deal? 00:24:59.580 --> 00:25:03.560 you can visually see what's going on and I love these things. 00:25:03.560 --> 00:25:05.520 and I, that's what I used to practice with. 00:25:05.520 --> 00:25:11.380 and to, and the other comment in here was to, pay attention to where you are in your 00:25:11.380 --> 00:25:13.480 slides at different points, which is a great idea. 00:25:13.480 --> 00:25:19.160 Like at 15 minutes or 10 minutes, 20 minutes, whatever, where are you approximately in your 00:25:19.160 --> 00:25:19.560 slides? 00:25:19.560 --> 00:25:24.760 The reason for that is while you're doing your presentation, if you're at the 10 minute mark 00:25:24.760 --> 00:25:28.580 and you're already halfway through your talk, slow down a little bit. 00:25:28.580 --> 00:25:31.940 If you're at the 10 minute mark and you've only gone through the first three slides, 00:25:31.940 --> 00:25:34.640 you're going to have to speed up a little bit or else you're not going to get into it. 00:25:34.640 --> 00:25:35.480 Or skip something. 00:25:35.480 --> 00:25:37.460 Or, yeah, or skip something. 00:25:37.460 --> 00:25:40.800 know what you're going to skip, but practice it. 00:25:40.800 --> 00:25:43.660 and then some great advice for day of the presentation. 00:25:43.660 --> 00:25:45.960 don't drink too much water or your coffee. 00:25:45.960 --> 00:25:50.340 You're going to want to, but don't, because, but drink, drink some, make sure you're 00:25:50.340 --> 00:25:55.700 hydrated, but not too hydrated because you know, so anyway, some great advice here, 00:25:55.700 --> 00:25:58.700 uh, packing checklist, make sure you have extra chargers. 00:25:58.700 --> 00:26:03.780 I, I've got like the little dongle thing because conferences usually have whatever you need to 00:26:03.780 --> 00:26:05.480 hook up to, but I don't trust that. 00:26:05.480 --> 00:26:13.200 So I make sure that my laptop can get to the HDMI, can get to, yeah, whatever it 00:26:13.200 --> 00:26:15.840 needs to, extra charger if you've got one. 00:26:15.840 --> 00:26:17.020 So just prepare. 00:26:17.020 --> 00:26:17.540 Yeah. 00:26:17.540 --> 00:26:18.340 It's a good article. 00:26:18.340 --> 00:26:20.080 Sebastian's a great presenter. 00:26:20.280 --> 00:26:22.060 So yeah, he's done a bunch. 00:26:22.060 --> 00:26:25.140 I, I also have some thoughts. 00:26:25.140 --> 00:26:29.800 I would say regarding the live demo part, I'm, I'm on board with Marco. 00:26:29.800 --> 00:26:35.100 Like I think not that one, this one that I find talks with live demos. 00:26:35.100 --> 00:26:37.000 He says more exciting. 00:26:37.000 --> 00:26:38.880 I say more, more real, right? 00:26:38.920 --> 00:26:43.160 Like if, and I think it applies an important role. 00:26:43.160 --> 00:26:45.540 Like there's certain things you show picture, picture, picture. 00:26:45.540 --> 00:26:46.860 You're like, Oh, that's cool. 00:26:46.860 --> 00:26:48.440 But I bet that's really hard. 00:26:48.440 --> 00:26:52.980 But if you show, actually there's these three lines that I wrote in a minute in front of 00:26:52.980 --> 00:26:53.160 you. 00:26:53.160 --> 00:26:56.020 And now the thing happens like, Oh, that's totally approachable. 00:26:56.020 --> 00:26:56.440 I could do it. 00:26:56.440 --> 00:26:58.580 And I think it just sets a different tone. 00:26:58.580 --> 00:27:00.440 I don't think every talk has to have it. 00:27:00.440 --> 00:27:05.680 Like, there's storytelling talks and like big picture talks and like those don't need 00:27:05.680 --> 00:27:05.800 it. 00:27:05.800 --> 00:27:11.220 But if you're trying to talk about as focused technology, I think it's almost table stakes. 00:27:11.220 --> 00:27:13.620 So I disagree a bit with Sebastian on that. 00:27:13.620 --> 00:27:14.060 Okay. 00:27:14.060 --> 00:27:20.980 However, I, that said you can go into it with a blank file and get confused. 00:27:20.980 --> 00:27:22.600 You can get distracted. 00:27:22.600 --> 00:27:23.580 You can make mistakes. 00:27:23.580 --> 00:27:24.560 You can forget things. 00:27:24.560 --> 00:27:27.540 So two things leave a lot. 00:27:27.540 --> 00:27:29.580 If you do do it, leave lots of breadcrumbs. 00:27:29.580 --> 00:27:33.540 Like maybe put a comment, like here, I want to create a flask app here. 00:27:33.540 --> 00:27:37.120 I want to make a view that responds to this URL. 00:27:37.120 --> 00:27:41.680 And like, it might be hard to remember, do all the steps, but if you see, make the flask 00:27:41.680 --> 00:27:43.560 app, you're like, Oh, I don't remember how to do that. 00:27:43.560 --> 00:27:49.520 Create a view that call it responds to this URL with like the actual variable passing thing. 00:27:49.520 --> 00:27:50.380 And Oh, okay. 00:27:50.380 --> 00:27:51.080 Well, that's easy. 00:27:51.080 --> 00:27:51.540 We'll drop that. 00:27:51.540 --> 00:27:51.720 Right. 00:27:51.720 --> 00:27:54.520 Like you can make it hard on yourself or easy on yourself. 00:27:54.520 --> 00:27:57.740 And then second, have a backup. 00:27:58.460 --> 00:28:02.780 Pample says at, at his research lab, they were actually saying, keep a spare laptop. 00:28:02.780 --> 00:28:07.240 I don't know necessarily about that, but I would at least have a finished version that 00:28:07.240 --> 00:28:08.100 you're like, Oh my gosh. 00:28:08.100 --> 00:28:09.600 Well, let me pull this up and show you. 00:28:09.600 --> 00:28:11.700 Then we'll talk like some kind of fallback. 00:28:11.700 --> 00:28:11.920 Right. 00:28:11.920 --> 00:28:14.820 There's like levels of live demo. 00:28:14.820 --> 00:28:20.360 Do I say file new project and we write a thousand lines or do I strategically highlight the important 00:28:20.360 --> 00:28:24.680 bits and not distract people with like oil and get potentially lost? 00:28:24.680 --> 00:28:24.900 Right. 00:28:24.900 --> 00:28:25.260 I don't know. 00:28:25.260 --> 00:28:30.140 So I think one of the, one of the halfway betweens is to script your demo. 00:28:30.140 --> 00:28:35.520 And there's a tool that the Sebastian links to called demo magic. 00:28:35.520 --> 00:28:42.580 And what you do with this is basically you, you have these commands of a PEI or PE and, and 00:28:42.580 --> 00:28:44.840 other things and wait for prompts and whatever. 00:28:45.040 --> 00:28:50.200 And these, what happens is you, you're demo, it looks like you're demoing, but all you're 00:28:50.200 --> 00:28:52.620 doing is hitting enter to go to the next thing. 00:28:52.620 --> 00:28:58.660 and, and then people can see in real time what it looks like, but they don't have to wait 00:28:58.660 --> 00:29:00.760 for you to type it just sort of, you know, yeah. 00:29:00.760 --> 00:29:02.720 It kind of types it out as if it's doing. 00:29:02.720 --> 00:29:02.980 Yeah. 00:29:02.980 --> 00:29:03.340 Absolutely. 00:29:03.340 --> 00:29:03.560 Yeah. 00:29:03.560 --> 00:29:04.760 So this is kind of nice. 00:29:04.760 --> 00:29:10.480 I also, one of the things of all conference advice, Sebastian does talk about this, 00:29:10.480 --> 00:29:11.380 but keep it in mind. 00:29:11.500 --> 00:29:12.940 This is what works for him. 00:29:12.940 --> 00:29:18.460 I disagree with some of it and, and you disagree with some of it and be, it's okay if you disagree 00:29:18.460 --> 00:29:20.320 with it because it works different for everybody. 00:29:20.320 --> 00:29:26.800 like one of the exam, one of his advice, pieces of advice also is to write out your talk 00:29:26.800 --> 00:29:28.500 before you write your slides. 00:29:28.500 --> 00:29:29.820 I never do that. 00:29:29.820 --> 00:29:32.360 because I'm writing my slides in Markdown. 00:29:32.360 --> 00:29:37.700 I'm thinking about what I'm going to show while I'm, while I'm talking and while I'm thinking 00:29:37.700 --> 00:29:38.580 about the topic. 00:29:38.680 --> 00:29:42.880 So my, my slides really are kind of outlining to begin with. 00:29:42.880 --> 00:29:47.340 And, and then I, you know, I can put junk in there and cut it out, whatever. 00:29:47.340 --> 00:29:52.860 also a code, I don't know how to do, and it says you should be able to do your talk without 00:29:52.860 --> 00:29:53.340 slides. 00:29:53.340 --> 00:29:55.680 I just, I don't think that's true. 00:29:55.680 --> 00:30:00.620 This is a, for, for the kind of demo or kind of stuff I'm doing, there's a lot of code I'm 00:30:00.620 --> 00:30:01.040 showing. 00:30:01.040 --> 00:30:03.100 I'm not going to describe that code. 00:30:03.100 --> 00:30:07.780 If the slides don't work, I don't know what I would do if my slides didn't work, but anyway. 00:30:08.460 --> 00:30:09.040 So, yeah. 00:30:09.040 --> 00:30:13.600 One, one other, piece of advice that I want to emphasize is Sean out there says, 00:30:13.600 --> 00:30:16.020 I always take three slow breaths before I start talking. 00:30:16.020 --> 00:30:18.340 Try to talk slow and smooth for the first minute. 00:30:18.340 --> 00:30:19.540 That's really good advice. 00:30:19.540 --> 00:30:25.940 And you know, we, your body reacts to stressful situations like this in weird ways, right? 00:30:25.940 --> 00:30:28.960 Like you think your body's like, you're going to be eaten by a bear. 00:30:28.960 --> 00:30:33.260 If you like say something wrong, like, no, you won't be eaten by a bear, but you know, 00:30:33.260 --> 00:30:34.580 you, your heart does race. 00:30:34.660 --> 00:30:37.840 And a lot of times, especially when you're new, it's easy to perceive that as like, oh 00:30:37.840 --> 00:30:38.880 my gosh, I'm so nervous. 00:30:38.880 --> 00:30:39.900 I hope I don't screw up. 00:30:39.900 --> 00:30:46.060 But an equal interpretation, viable interpretation that would be, I'm really excited. 00:30:46.060 --> 00:30:51.680 Like my body's going like really those butterflies in my stomach are like, I am psyched to do 00:30:51.680 --> 00:30:51.920 this. 00:30:51.920 --> 00:30:55.260 And so I just convinced myself rightly or wrongly kind of lie to myself. 00:30:55.260 --> 00:30:59.340 Like, well, if you feel nervous, that's because you're getting excited and you're just about 00:30:59.340 --> 00:31:00.200 to do something awesome. 00:31:00.200 --> 00:31:01.620 So, you know, get ready for it. 00:31:01.620 --> 00:31:01.820 Right. 00:31:01.860 --> 00:31:03.420 Rather than, oh my gosh, I'm nervous. 00:31:03.420 --> 00:31:04.360 I'm going to make a mistake. 00:31:04.360 --> 00:31:06.700 So I think it's okay to lie to yourself in that regard. 00:31:06.700 --> 00:31:11.480 I also, I've been like, I don't want to go over. 00:31:11.480 --> 00:31:14.480 I don't think anybody's going to be mad if you go under. 00:31:14.480 --> 00:31:19.780 So I, my personal, I personally, if it's 25 minute talk, I practice it in 20 minutes. 00:31:19.780 --> 00:31:20.540 Absolutely. 00:31:20.540 --> 00:31:21.980 It's easy to expand. 00:31:21.980 --> 00:31:23.560 It's hard to shrink in real time. 00:31:23.560 --> 00:31:27.460 And also if you, if you're done early, nobody's going to complain about that. 00:31:27.720 --> 00:31:32.040 But also, also if something goes wrong at the beginning and you have trouble with your, 00:31:32.040 --> 00:31:36.160 the, the video setup, you're still, you still have enough time to finish it. 00:31:36.160 --> 00:31:37.700 So I think that's cool. 00:31:37.700 --> 00:31:41.700 The other, the other thing is pauses within. 00:31:41.700 --> 00:31:47.360 I just keep, I just talk constantly and I don't, I have to remind myself if I'm showing something 00:31:47.360 --> 00:31:51.940 that I think is going to be shocking, let people take a second to be shocked by it. 00:31:51.940 --> 00:31:57.700 And if I, and if people laugh, take a moment and let them laugh before you move on. 00:31:57.700 --> 00:31:58.480 on to the next thing. 00:31:58.480 --> 00:31:59.340 So yeah. 00:31:59.340 --> 00:31:59.820 Yeah. 00:31:59.820 --> 00:32:00.300 I embrace it. 00:32:00.300 --> 00:32:00.880 Absolutely. 00:32:00.880 --> 00:32:01.340 Very good. 00:32:01.340 --> 00:32:01.820 Cool. 00:32:01.820 --> 00:32:03.020 And good article, Sebastian. 00:32:03.020 --> 00:32:03.460 Okay. 00:32:03.460 --> 00:32:05.440 Well, those are our topics. 00:32:05.440 --> 00:32:06.940 Do you have anything extra for us? 00:32:06.940 --> 00:32:08.280 I sure do. 00:32:08.280 --> 00:32:09.220 I got a few things. 00:32:09.220 --> 00:32:16.000 I finally got that CDN Python web apps that fly with CDN's course published and online. 00:32:16.000 --> 00:32:20.220 Like I said that I would, but now I officially have it up so people can go check that out. 00:32:20.220 --> 00:32:20.880 It's super fun. 00:32:20.880 --> 00:32:24.940 Speaking of releases, Django 4.2 was released last week. 00:32:24.940 --> 00:32:27.620 Also a one day before Python 3.11.3. 00:32:27.620 --> 00:32:35.520 Major highlights include Psycho PG version three support, comments on columns and tables, support 00:32:35.520 --> 00:32:40.000 for asynchronous streaming responses and async interfaces related to managers and models. 00:32:40.000 --> 00:32:42.620 So you can go check that out. 00:32:42.620 --> 00:32:44.020 If you're doing the Django. 00:32:44.020 --> 00:32:46.360 Also, it's a LTS release. 00:32:46.360 --> 00:32:46.760 So. 00:32:46.760 --> 00:32:47.980 Oh yeah. 00:32:47.980 --> 00:32:48.700 That's important. 00:32:48.700 --> 00:32:49.100 Yeah. 00:32:49.100 --> 00:32:53.760 It has been designated a long-term support LTS release, which means it will be around 00:32:53.760 --> 00:32:54.260 for three years. 00:32:54.260 --> 00:32:54.720 All right. 00:32:54.720 --> 00:32:55.540 That's it for my extras. 00:32:55.540 --> 00:32:56.300 You? 00:32:56.300 --> 00:32:58.300 No, no extras this time. 00:32:58.300 --> 00:32:59.340 Oh, I forgot. 00:32:59.340 --> 00:33:00.500 I realized that I forgot. 00:33:00.500 --> 00:33:02.200 There's a lamp in the background. 00:33:02.200 --> 00:33:02.760 That's new. 00:33:03.840 --> 00:33:11.220 I had a big Easter party and the lamp got moved in here to save space in the rest of the house. 00:33:11.220 --> 00:33:12.040 I forgot to move that. 00:33:12.040 --> 00:33:14.260 Because why wouldn't you cram it into your office? 00:33:14.260 --> 00:33:15.280 Why not? 00:33:15.280 --> 00:33:20.820 I had a lovely experience where we had to remodel the inside of our garage, basically do a bunch 00:33:20.820 --> 00:33:21.520 of drywall and stuff. 00:33:21.520 --> 00:33:22.660 And so everything had to come out. 00:33:22.660 --> 00:33:26.660 So pretty much the entire garage moved up into my office into a mountain of junk behind me. 00:33:26.660 --> 00:33:27.620 It was awesome for a while. 00:33:27.620 --> 00:33:29.380 I'm very glad to have that mostly gone. 00:33:29.380 --> 00:33:29.780 Yeah. 00:33:30.780 --> 00:33:32.360 Well, how about a joke? 00:33:32.360 --> 00:33:33.100 Yeah. 00:33:33.100 --> 00:33:34.100 All right, then. 00:33:34.100 --> 00:33:36.040 This one comes from Programming Humor. 00:33:36.040 --> 00:33:42.480 And we are in this time of a thousand flowers blooming AI revolution. 00:33:42.480 --> 00:33:43.840 See where it goes. 00:33:43.840 --> 00:33:48.740 You know, we've got ChatGPT, got MidJourney, got StableDiffusion. 00:33:48.740 --> 00:33:53.680 And it seems like everyone is plugging AI into their tools. 00:33:53.680 --> 00:33:57.660 And email, copywriting, all those, there's a bunch of things. 00:33:57.780 --> 00:34:03.240 Like Notion, for example, you can get an AI plugged in to help you write your app, right? 00:34:03.240 --> 00:34:05.920 And so here, this is like two views. 00:34:05.920 --> 00:34:09.880 People send an email to each other, a couple of coworkers on one side, a couple on the other. 00:34:09.880 --> 00:34:12.000 And they don't know about each other, right? 00:34:12.000 --> 00:34:15.240 The first one is just one bullet point. 00:34:15.240 --> 00:34:17.280 You could see like a dot and a line. 00:34:17.280 --> 00:34:18.320 There's like one line. 00:34:18.320 --> 00:34:20.920 And this person's bragging to their coworker. 00:34:20.920 --> 00:34:23.960 AI turns this single bullet point into a long email. 00:34:24.060 --> 00:34:25.220 So I can pretend I wrote it. 00:34:25.220 --> 00:34:26.040 Boom, send. 00:34:26.040 --> 00:34:29.600 The person who receives it is talking happily to their coworker. 00:34:29.600 --> 00:34:32.740 He says, AI makes a single bullet point out of this long email. 00:34:32.740 --> 00:34:34.260 So I can pretend I read it. 00:34:34.260 --> 00:34:38.000 Oh, here we are. 00:34:38.000 --> 00:34:38.880 Yeah. 00:34:38.880 --> 00:34:41.340 When you talk about stuff getting sent over, how does that work? 00:34:41.340 --> 00:34:43.220 Well, first you connect over TCP. 00:34:43.220 --> 00:34:44.500 And then there's DNS. 00:34:45.120 --> 00:34:46.460 And then there's TLS. 00:34:46.460 --> 00:34:48.440 And then there's the HTTP layer. 00:34:48.440 --> 00:34:52.400 And now there's like this AI translation layer that rewrites it. 00:34:52.400 --> 00:34:56.020 But it's kind of the opposite of efficiency. 00:34:56.020 --> 00:35:01.500 Instead of sending the single bullet point, it expands it to a whole paragraph, sends it, 00:35:01.500 --> 00:35:02.640 and then shrinks it back down. 00:35:02.640 --> 00:35:04.080 It's the opposite of compression. 00:35:04.080 --> 00:35:06.140 AI is kind of freaking me out. 00:35:06.140 --> 00:35:08.840 I hope that I still have a job five years from now. 00:35:08.840 --> 00:35:10.860 But anyway. 00:35:11.460 --> 00:35:14.320 Well, we'll ask ChatGPT about that later. 00:35:14.320 --> 00:35:15.400 Yeah. 00:35:15.400 --> 00:35:16.420 At some point. 00:35:16.420 --> 00:35:18.660 And you know more about this than I do. 00:35:18.660 --> 00:35:25.880 So at some point, you're going to be like, can I get an AI, Brian, to host the podcast with me? 00:35:25.880 --> 00:35:26.880 Yeah. 00:35:26.880 --> 00:35:31.320 I'm already digging my bunker for when Skynet activates, as Sean says. 00:35:31.320 --> 00:35:32.940 Yeah. 00:35:32.940 --> 00:35:34.380 Anyway. 00:35:34.380 --> 00:35:35.400 Start growing carrots. 00:35:35.400 --> 00:35:36.800 Yeah, exactly. 00:35:36.800 --> 00:35:38.040 Find some goats. 00:35:38.040 --> 00:35:41.360 No, actually, I'm going to go right to it. 00:35:41.360 --> 00:35:42.740 Go back to writing by that code. 00:35:42.740 --> 00:35:44.120 But as always. 00:35:44.120 --> 00:35:45.860 ChatGPT, make me a goat. 00:35:45.860 --> 00:35:49.780 How do I start a goat farm and live off grid? 00:35:49.780 --> 00:35:51.360 Fantastic. 00:35:51.360 --> 00:35:51.660 All right. 00:35:51.660 --> 00:35:53.020 Well, Brian, thanks, as always. 00:35:53.020 --> 00:35:53.720 Thanks. 00:35:53.720 --> 00:35:54.620 Talk to you later. 00:35:54.620 --> 00:35:55.060 Bye. 00:35:55.060 --> 00:35:55.500 Bye. 00:35:55.500 --> 00:35:56.760 And thanks to everyone out in the audience.