« Return to show page
Transcript for Episode #224:
Join us on a Python adventure back to 1977
00:00 Hello, and welcome to Python bytes where we deliver Python news and headlines directly to your earbuds. This is Episode 224. Recorded March 10 2021. I'm Michael Kennedy.
00:10 And I'm Brian Aachen, and I am Calvin Hendrick Parker. Hey, we
00:13 have a special guest. Calvin, welcome to the show.
00:15 Hey, thanks for having me.
00:16 Yeah, it's fantastic. to have you here. Always great to have a fresh face. I believe it's been about a year since you were on the show previously, right?
00:23 I think almost exactly a year. Yes.
00:25 Yeah. YouTube reminded me that it was one of the first videos of this whole Python bytes that we put up there before we were live streaming. We'd record it and then put it up here. That was so last year.
00:36 I mean, Python byte, you guys are really up your game. I'm super proud of y'all.
00:39 So 2020. Yeah, yeah, we
00:41 got our broadcast studio working right here in Portland, Oregon. Super, super nice. Speaking of nice, I want to do a follow up. You know what's nice, Brian, so often, our guests, they send us all these items. And you know, we'll mention something. And we'll think this is like the first time I've heard of this. And they're like, and here's the 10 other amazing things that you've never heard of. Yeah. And so this, this is a little bit of a follow up along that before actually,
01:05 I realized before I get into that, though, Kevin, maybe you want to do a quick, who are you? It has been a year, it has every year God who you are sure, sure. I'm calling him next Parker, co founder and CTO of six feet up, and also the co founder of the indie pi Group here in Indianapolis, the Python user group. And we are also the organizers of the Python web conference, which I'll talk about later. So that's kind of a quick rundown on me
01:26 use that company hands out Python jersey shirts. Oh, yeah,
01:28 we do some killer swag.
01:30 Yeah, for sure. That's a cool conference. We want to talk about that in a little bit. Though. The first thing though, that I do want to talk about over here is AWS simple. We talked about bodoh type definitions, I think it was and then someone mentioned, that boater type definitions is kind of been deprecated ignored, and so on. And so they pointed us out this my PI live generated version that we talked about last week. And also we got a message from James Apple, who said Abel, who said, Hey, I built this cool library called AWS simple, and I got it all flow together to get all the pieces to fit in there. AWS simple. And the idea is that it's a typed wrapper around the AWS API. And if you recall, I kinda was harsh on the Boto three API, and I end by that, because there's just zero discoverability, on how it works. There's like in consistencies on how you pass parameters, sometimes you pass them by name, sometimes you pass them as dictionaries with names in the dictionary, just a lot of stuff going on there. And it's really not discoverable. And so this one also is one of those libraries that meant to help with that. So it's a simple API for basic services like s3, dynamodb, their hosted NoSQL, database, simple notification service, simple queuing service, I don't know if you guys have been to AWS lately, but you go to your console, and it says, here's the two things you've recently visited, see the rest and it like, it scrolls, there's a lot. So this is clearly not everything. But it is some common ones, especially around s3, I think it's also maybe the kernel of other things, right? People often ask me, hey, what project could I contribute to? Well, if you're like, I would really love to have simple email service and great integrated with this like, Well, you know, it's probably easy to add, like one more service here to some of the features include a nice object oriented API on top of Boto three, with proper type definitions and classes and static things that all the static type checkers and the editors all know about and love, you can write really simple, like one liners to do s3, readwrite, deletes, it has automatic retry for s3, it has caching. So for example, it will when you get a file or upload a file, it will hash that result. And basically, if you try to get it again, it'll say, let me check the E tag. That's the way web browsers and servers exchange like, here's the sort of history or the version of the file, and it'll check has this thing changed or not. And so it will not download the s3 file if it hasn't changed. And you ask, I'll just use like the last version that got since it touched it, things like that some dynamodb, full table scans, secondary indexes and pagination. So there's some simple examples like my s3 access, and then you could maybe you could do Dynamo DB create a dynamo DB access and just put an item or get an item and off it goes really, really simple. You know, as you imagine something with a name like it'd be a simple has, but you know, it's just one more thing around AWS API's that I think is pretty interesting. What do you guys think?
04:22 I kind of expected the ball at the very end they're saying add a simple is not simple, because this is a massive undertaking to try and make something like this simple.
04:29 Yeah, absolutely. I totally agree with that. I mean, it's it's pretty neat over in their documentation, they've got a little more examples and a quickstart guide and how to use it and so on. But yeah, it's, it's pretty easy. You just do like s3, create bucket s3 write string to this key on, it's quite easy. So if you're struggling with the AWS API's, this is a cool project. And again, it's I think it's pretty limited to just a couple of the services. So it's somewhere that if you've got your favorite service and you want something like this for it, you know, reach out names and add it.
04:58 Yeah, and all of the service This could be added and then AWS simple could be as complex as everything else. Exactly.
05:05 Like I can barely install this thing anymore. It's really
05:09 Yeah, they're trying to become the AWS API's for humans kind of like requests for HTTP URL lib,
05:15 maybe, I mean Boto three was kind of like that, too, right?
05:18 Well as the, again, the s3 API's, they've changed names are inconsistent, it's really hard to like parse sometimes as a human, like the uploading process of like, multi part uploads. If you're not into the web, this can be really daunting. Sounds like this is a great way to enter this space and not have to learn all that stuff.
05:34 I can't just do this thing. I got to create a wager on the thing and so on. Yeah, absolutely. Ding links them up there in the livestream said it's amazing. To me how many of the most accessed API's in the world need third party packages? make them useful? Yeah. I mean, if it weren't such a small little rinky dink company, if they could hire a bunch of developers to work on this, like, Oh, wait, no, it's Amazon. No, I totally agree with you, Dean. That's funny. All right. Yeah, so AWS simple. Check it out. If that appeals to you, Brian, what do you got for us?
06:02 Well, I was going to do this. Oh, yep.
06:06 We don't collect Sorry about that. We, it was a race.
06:11 So I learned something new the other day and learn something new about something old. So I've, I've used coverage up high a lot over the past several years. And I've even covered it a lot on the testing code podcast a couple times covered it on the podcast. Yep. That's a meta joke.
06:31 there's something I missed the whole time. So there's, there's a source thing. So you can tell coverage where the source code is, or where are the sources for your whatever you're covering in, hidden in here is the source can be the sources, either directories or packages. It's the or packages I never saw before. So that's why this is significant. And apparently, this has been here the whole time. And I just missed it is there was a workaround. So if I, if I'm testing, if I've got if I'm developing a package, and I want to test it as an installed package, I install it, and then I run the tests against the installed package. But how do I run coverage against that, and there was an old trick to it, I guess it still is works is to use the paths. option within coverage to say, these two paths are identical. So you can say the actual source code directory is identical to the site packages directory so that it kind of lines everything up. And then reports, even though it's measuring the coverage on the installed package, it reports it as if it was sitting in the source directory. And so I've been doing that in the past. And that still is a good idea so that the the output is readable, but it isn't required, you can just pass in the name of your package without the.py or anything, or if it's just a file, but just the name of the package. And it just reports it. And yeah, anyway, I just figured that maybe some people out there have missed that. Also, it's very handle.
08:05 Well, you might wonder like, why are you testing packages? I don't need the coverage of requests. When I use it. I just know that I use it. And we're all good.
08:12 Well, if you're developing requests, you
08:14 might want to go Yes, exactly. Or, you know, it may well be that you're building your application out of several packages that you control. And you kind of want to keep them separate for reuse. But you might also want to know, like, how much am I interacting with that one, right?
08:29 Oh, that's a cool use to say Really? What? How much am I interacting with the package? You could run coverage on that?
08:35 Yeah, that's the hero. Take it out of your quirements.
08:39 That would be super nice. Yeah, that was
08:41 really cool.
08:42 Yeah. Also, I guess when one of the reasons why that might be handy is if they change drastically change an API, like go to a new dot, you know, like a three dot something to four dot something. What is the API change? And you could check to see if you're even using that API, or that entry point. That might be
09:01 that's interesting. Yeah, yeah, that part was like a breaking change. But I don't care.
09:05 Yeah. Like, I can really see that. There's a huge use case here, though, for old code bases, where the developers aren't there anymore. And there's been dependencies brought in and you don't know exactly what's being used. So this is like super nice stability that
09:17 they have. And of course, as a reminder, you can have as many of these as you want to so if you if you're wanting to measure several packages, you can add multiple source flags. And if you're using pi test dash kuv it's the cover flag so you which is identical and not sure why they used coven dash cover instead of dash source, but
09:36 there you go, pressing okay. Yeah, super cool. Super cool. No, Calvin, I didn't know that you were an artist.
09:42 I wish maybe more machine learning artists but machine learning artists. This really interesting article came up on my newsfeed last week, which was finding Mona Lisa in the game of life with Jax and so there's kind of three interesting things there like Mona Lisa game of life and in Jax, the the author was attempting to find if he could start with a starting set of points on a game of life. If you have a game of life, there's a whole Wikipedia articles about that. But if you could basically seed an initial Game of Life, and after so many generations have it show you a picture. So he actually started with the Mona Lisa, and kind of went through what it would take to go from, you know, Game of Life running all the kind of constraints that happen in that. But this seems like a really interesting machine learning problem.
10:29 And that's cool. So it's like are it randomly runs the game of life, but right in the ML says, Oh, that's starting to look like Mona Lisa, more of that?
10:38 Well, it's more of, I'm going to run a generation of Game of Life and then reset, I'm going to invert some pixels again, and go again, until I can generate What is my target picture. And it took a lot of CPU cycles, seed basically wrote a simple, single threaded version of this in Python. And there's a note, there's Python notebooks included with the GitHub links in here. But it took days of CPU time for him to run the initial four generations to see if we could even make this be possible. And then kind of went if with any machine learning project, it's really important to understand like the preparation of your data before you kind of go dive in. So what I also thought was interesting here is he talks about the preparation of data down here pre processing, using pill to understand how to generate that target first, yeah, given the game of life algorithms, a chance of getting it correct, came into like, really halftones would work better, because there's some constraints around Game of Life, that the whites can't be contiguous to contiguous because they'll, they'll kill each other and ends up being all black. And but at the end, the kind of goal, this was how fast we know, do it. Take the single threaded Python example, which took hours or days of CPU, can we actually do it on a GPU? And so there's a Jack's library, which is a Machine Learning Library. And Python allows you to actually like, super parallelize the problem. So if you can actually slice the problem up shows kind of example, here in pictures was just kind of nice. For a person who doesn't do a lot of machine learning. Yeah, they actually kind of show you what the process looks like. And hyper parallelized this. Basically, in 40, he went from days of CPU time down to 40 seconds to get through the first camera was the final time 40 seconds. It was, yeah, it was ridiculous. It's like so 1000 iterations. So the first one was for four generations took days. The next one, where he did it with Jack's was 1000 iterations, took 40 seconds on a Google colab GPU. So Jax is basically a Python library. I've got a quick little quickstart over here, need library, actually, you kind of have to alter your brain a little bit to how you code so that you can code in a way that can be hyper parallelized across the all the GPUs I mean, for people who aren't familiar GPUs, which you may not be because Good luck getting a GPU right now they're unobtainium at this point. But if you did have a GPU, you can take advantage of those, you know how many cores are and some of these modern GPUs like 1000s in the new
12:56 video, every time that I tried to think about and try to conceptualize like, how fast and how much these things can do, I'm like, whatever that is, is probably off by 10. Or many, many more. Yeah, factor of 10. Just like ramp that up to beyond what you can think is reasonable. It's rare, anything of we've got a, you know, half a million polygons on the screen, and we're going to draw that, oh, we're actually going to do that 200 times a second,
13:17 right. So within shrinks review, you are doing some machine learning experimentations, learning a tool like jack smashy help you speed up your iteration. So you actually can get some useful results out of it. Because a lot of machine learning is kind of picking out what your algorithm or algorithm based algorithm is going to be. But you have to run it enough to know whether your algorithm is getting you the results you expect. So be able to run to those algorithms quicker with a tool like Jax, I think would be super beneficial.
13:40 Yeah, absolutely. That's, that's super neat. And I think the biggest takeaway here is Jack's Actually,
13:46 yeah, that was that was Yeah, that was the end goal was like, Can we talk about Jack's cuz that's a really cool library.
13:51 What a cool logo, by the way. Yeah.
13:53 Yeah. Yeah, I love the logo is super cool. Actually, I like it.
13:57 Yeah. But definitely, I think they, they have support for tensor processing units as well. So not only GPUs. But if you're doing like TensorFlow stuff with tensor GPUs, or tensor processing, and and so you can take advantage of those as well.
14:07 Yeah. Okay. super neat, super neat. I want to talk about something, it's not as neat, maybe it'll get you excited, but in the wrong way. This one was sent over by my friend, Mark, little Bella portlander. And a follow up related one sent over by Tony, so link into a couple of articles here. And recall, we talked about Google coming on as the visionary sponsor when their primary goals that they wanted was to improve the package security, you think about you think about some of the things that have happened recently that are super scary. One, the outlook catastrophe that you know, 60,000 companies have been like taken over and then the solar winds one as well. And I think they're somewhat related, even though they're not the same origin or the same type of hack the solar winds. One is one of these supply chain vulnerabilities and these breaches, right? It's one thing to say, I'm going to protect against somebody breaking into my website. I'm going to run Proper firewalls, low privileges, everything's patched, etc, etc. That might still not be enough for that's like a good start. But do you think about Well, next time you pip install the new version of package, whatever, what if it was influenced with some kind of negative package that had some vulnerability that then got into your servers and then went on, like, the supply chain story around all of these package management places is, is scary. I think that's not what happened to solar winds. They just had the password solar winds 123. That's a different type of problem.
15:32 But those aren't interns?
15:34 Exactly, exactly. But the problem is that it might be untrustworthy to install all of our beautiful open source things.
15:43 I don't know it's very scary, like, but what do you guys think about this, it seemed like this went even a level deeper, there was an even scary to install the open source things, it was dangerous to install your own private package names if someone knew about them, and put them into a public repository with a newer version.
15:58 Yeah, so let me read the titles here for people are listening the Python package index nukes 3653 malicious libraries uploaded soon after a security shortcoming is highlighted. And the other one is poisoned packages, supply chain risks, users hit iPhone community with 4000 fake modules. And these are basically the same, I don't know if like one's rounding up or whatever, but are ones counting multiple incidents. But the idea is, there's this form of type squatting, that's pretty sketchy dude, we've covered this before, where if you have maybe I want to use the audio library asteroids singular, but then somebody puts asteroids plural, that is a virus. And it could just as well have exactly the same code plus the virus. So it looks like it works, you wouldn't even know that it's not working. Right. And that's quite the problem. But here, the highlight is, what's it called? Like, the one thing was calling it evil twin another. This is a research by Alex bearson. And basically, there's a lot of people who are using private package repositories, right, like dev pi, and things like that artifactory, where you have a local one, but if you ask for something in public, you can just ask your local one, and the local one will go out and ask the public one. So as you're handing out, Calvin, the problem is, what if I just have like data layer, or e commerce or like some random thing that might be an internal package name? Maybe if it's what I think the real problem was, they were saying, if you don't secure your server, right, you just post a higher version on the public one than on on the local one. And it'll go, Oh, well, there's a newer one over there, I better get that.
17:37 virus. I'm also surprised that folks aren't pinning the versions of their internal packages as well, because I would this would satisfice. Solving that problems. If you had like, we use Pip pip tools, Pip compile to make sure we got hashes and versions for every dependent package. But yeah, if you didn't do that, you're absolutely susceptible to this.
17:56 Yeah. So just people check this out. It's, it looks a little scary. I, you guys, you do tell me if you think I'm crazy. I'm getting to the point where I'm really freaked out about like these kinds of things. And especially, you know, people send us stuff that I called, check this out, here you go. Like, I'm not PIP installing those things locally and trying them? No way. All right, I'm gonna install them in some isolated environment. One thing I've been thinking about doing is setting up my own dev PI Server, which is exactly the problem sort of that we're talking about. So that doesn't necessarily solve it. But what you can get with your dev PI Server, you can get dev pi constrained, which will let you not blacklist stuff or exclude stuff, but you have to whitelist things. So you're like, Alright, I'm going to try to install a set up this project. And when it tells me I need these things, and they're failing, I'll make sure they're good. Make sure they're used a lot. I'll put them in the whitelist. And then I'll be happy to just pip install versions, no versions, whatever. Right. But but sort of being more protective about this. I don't know, maybe I'm just paranoid. But this stuff is it's creeping me out.
18:54 I'm still just having it. I'm still sinking in. I don't not sure how I react to it. Yeah, my
18:59 reaction is I think there's still more infrastructure security wise, that has to happen in the community. And there's, there's efforts to do signed packages or support in the latest version of PIP for sign packages. And there's also some good hygiene behaviors. But to true, if you want to just try out a package and you just did pip install from command line, you're typically not going to specify a specific version, and you're going to get whatever just comes off of pi pi with it. Yeah, we've gone around around about it internally as well, talking about this, because we want to make sure we're not susceptible to this kind of an attack. And I think good practices like the PIP tools. I'm using that and having pin versions has British Givens a comfort level with worse pretty safe. I mean, no one's 100% safe. That doesn't exist. But we're feeling pretty good because of the practices.
19:42 Yeah, yeah, I know that sounds good. I mean, there's only so much you can do but layers, layers are good, right? layers are good. Anyway, this if you are running, I want to highlight this. The ultimate problem highlighted here is that if you have a private peipsi server that there were ways to go squat on your internal names, not on the public name and There's no way for the public stuff to go, Well, you can't have that. Because it looks too close to this right? It might not exist publicly. So just be really careful about the versions Be really careful about like whitelisting things. If you're doing your own private pie,
20:12 it is important to also note this is not a Python specific problem. So I think some proportion, but like other packaging, distribution, tooling, all have some similar problems. Yeah.
20:22 And I just saw a message. He was on Twitter or somewhere. Yeah, this I mean, obviously NPM has this problem. Ruby gems, all these places, new get whatnot, as somebody who was involved in like diagnosing and solving these problems is like, please don't go post another 4000 packages to prove your point, just we are already aware is send us a message, you're causing a lot of work that is, like distracting us from addressing this problem. So you know, we don't need more example. We need just maybe a notification.
20:49 Yeah, I guess one of the other things is, is that it is typosquatting. So we in our organization, we try to minimize individuals having to pip install anything really, they we have all of our projects have requirements files with pin versions, so they're not going to type the name of anything. It's going to have to be in a requirements file first. Yeah.
21:11 All right. Well, check out the articles. There's more details in both of them. Brian, what do you got for us?
21:15 Oh, my turn again. Okay. Um, I wanted to I wanted to talk about something new adventure tech space adventure games veer to the
21:26 I love it. I used to play muds when I was quite younger. Oh, those were so fun. They weren't so magical, even though they were just text.
21:35 So I actually never got into this. But I my I entered adventure games. What was it called? The dungeons of dagger wrath was a game that I had on the trs 80. And it was it wasn't text based, but the graphics were just lines. So it was go through a cave and stuff like that. But anyway, a little bit before that. So we're talking in early 70s. So 75 to 77 was a game called adventure. And then her Colossal Cave adventure. So you can play Colossal Cave adventure because Brandon Rhodes has Python adventure. And this is just awesome. I played this the other day. It's so well, I don't know, it's so fun. Maybe like overselling it. But it's kind of neat. It's a faithful part of the adventure game to Python three from the original 1977 Fortran code.
22:31 Sounds awesome. So if I get distracted, it's because I've actually PIP installed this and I'm playing right now.
22:38 It's lets you explore Colossal Cave where others have found fortunes and treasure and gold though it is rumored that some who enter never seen from again, like maybe Calvin. But one of the things that I loved is I played in both modes. So you can there's two modes you can play you can you know Python console, you can just kind of run it. But you can also going to show for the people watching kind of what it looks like. You import adventure and then you say adventure dot play. And it has gives you instructions and you have to type things like east, west get lamp, things like that. Oh, it's
23:12 even like function call style? Well, it's
23:14 function call style if you do the import on the repple. See, if you if you go through the others traditional mode, okay, yeah, the traditional mode is you do Python dash m adventure. And then its traditional mode you say get lamp with a space between the get and the lamp. And that's how I played it. But the fun part about this the traditional mode, it's a 1200 baud. So you have to wait for this to type its message to you.
23:42 You may have to explain that to some of our listeners.
23:46 I don't know if I can, it's slow. So it sort of ticker tapes out the message to you and you're waiting for Wow, that's impressive. I used to be able to identify by sound, the speed of the connection I would get I could tell you is at 9600 is like 32 whatever or is it 56
23:46 and whether they were the error correcting kicked in or not exactly. You
23:46 hear donkey tongue, but I don't think I even remember what that sounded like I was some solo business.
23:46 One of the things so Okay, so a little bit tie into that my own personal nerdiness I was curious how this related to zork. So zork I never played either. It was a little bit after adventure. But there was a TV show called Chuck that I really liked. And one of the premises is this Chuck and his buddy used to play this game. And he met this other guy by both of them being zork nerds. And they they did their own port of zork. And I'm like is that a made up thing or real? And apparently it is real zork was a follow on to adventure from 77 to 79. So anyway, so I'm gonna ask Brandon so Brandon, can we get a port of zork also for Python? That'd be great.
23:46 Then we'll get our little IoT devices that we can play these adventure games on. Nintendo Switch but super, like low baud rate. That'd be great.
23:46 Oh, I want this totally for my Oculus quest. So I can do text adventure and full VR. Well, the
23:46 body, the body slows down thing is is entertaining for about 10 seconds. And then I'm like, Can I get faster now? So? Yeah, yeah,
23:46 the true retro, though. That
23:46 was cool. Very nice. Cool. Awesome. All right. So for those of you who are Django knots in the audience, there is a new long term support release, coming up for Django, three tattoo
23:46 is a big deal, because the term support ones are the ones you want,
23:46 Oh, my gosh, oh, and Django this community is really good about that long term support mean, and they have a very good security policy and release revision policy, it's very clear, were very well documented. So the next one coming up with which has to be released here in April is gonna be three to this post, specifically that I linked to, is actually your an overview of some highlights of interesting features that you may not have noticed, you can go read the main Jenga Three, two release page and see kind of the overall new features are going to be coming in. But this post specifically covered some things that I thought were also interesting, a lot of them are performance, and kind of protections against, you know, hurting yourself when you're programming. So things like covering indexes for Postgres, so you can actually avoid full table scans and do index scans and Postgres for indexes are magic. Yeah. And so this is enabling even more the nice magic of those indexes inside of Django.
23:46 Yeah, I think it's really cool that it's the LTS release three twos coming out. I think there's also some async and await stuff in here coming along, which is pretty exciting. I know that one of the areas is still pending, to get really the async and await stuff properly, like full stack is O RM. So RM Yeah, so we can wait on the database, that's the thing you need async for more than anything else. Yeah.
23:46 And that's kind of one of the notable missing items. For me in 3d. I mean, the team is doing an amazing job of implementing, or all the async features for Django in 3031, you started off with the routing, then you got the views 32 was supposed to be I think that the ORM included that maybe just do the fact that we are talking about a long term support release that that was maybe too risky of a feature to get included here. But look for that coming soon, like in 3334, for the RM which will be a big, big deal. The other things that are included in this Three, two release, again, kind of focusing on security and safety and performance. Time Zones, you know, it's probably one of the two hardest things in programming is the time zones and character encoding and off by one errors. So there gonna be some truncate stuff in here, that actually, you know, helps you assign a default timezone, in case you didn't. But one, there's gonna be some cool stuff for people who like unstructured data, the JSON object DB functions, you'll actually be able to assign some DB functions that can produce, you know, JSON, mapping type objects, where key value pairs, where you pass in database functions that operate on it, there's going to be some cool stuff around signals. There's a sin robust, which didn't log exceptions, but now will so you don't have to
23:46 log your themes for the admin section is that coming to this one? I don't think they're working on
23:46 I don't know on the themes, but no, for the admin section. And this is a common thing I've done in the admin is sometimes you want put computed fields into the admin pages for like your your objects, there's gonna be a new was that there's a new value that a value expression of the display decorator, so you can actually make creating admin feels a lot cleaner. The the kind of syntax for it previously was just a little convoluted if you were not used to it. And so as a new person, you may not figured out how to do it very easily. So there's a new decorator that actually makes that super, super easy to do. There's some other performance things around the database with query sets with aliases. So you can actually create like reusable aliases for things that you're selecting against. So you can use them as like filters or that kind of combined statement. So it doesn't do two sub queries instead of just one. Not a lot of cool performance. Do you think and these were kind of the less notable, but really kind of important features that are coming into Jenga? 320 Yeah, the next day, you can you can see all the other stuff. There's there's a zillion things coming from three to these are just some small ones, but there's some important ones.
23:46 That's Yeah. When is this coming out?
23:46 April, so we should see you next month. Very soon. Yeah.
23:46 Awesome. Oh, it's great. If you're on a Django that sounds really like a big deal. Is it? Yes, it is. All right. Brian, anything else that you'd like to throw out? Those are all of our items? anything extra?
23:46 No, I don't have anything extra this week. How about you?
23:46 Oh, I've got a couple of things I would like to touch on. I heard some amazing stuff. I heard that Python. Open Source stuff is on Mars. Yeah. But what I'm gonna say is Python is on Mars question mark. Because what I found is if you go look at there's this thing called f prime that NASA open sourced awesome, and if you go over here and you look at it, this is the flight control thing that is for embedded them flying including that little helicopter, awesome. It has 16% Python and 44% c++ but if you Look at the Python bits don't much of it seems to be around the, like the training pipeline. So my theory is I didn't see any stuff in like the real, like running regular bits. I'm thinking maybe it's brain with Python locally, and then the models are put on the helicopter and flown with c++. If If someone knows for sure that Python is on Mars, you know, but details, let me know. That'd be awesome. I still think it's cool that pythons involved here. Yeah. Alright, so that's one quick one. Number two just released a new course. And this one is a little different. So it's full web apps with fast API. And fast API is awesome for building API's. But there's like three or four features of fast API, when put together in the right combination, make it sort of a equivalent framework to what you would get with flask. So if you're thinking I would love to use this beautiful API with really nice decorators with really nice async support with pedantic and all those awesome things that it has. But I want to build a web app with it. Watch the course on that, that people can check that out. That's really awesome. Like, basically, I've built some API's with fast API, and I need like four or five more pages to round out the app. Do I have to have a Django plus fast API multi deploy thing? Like, no, actually, and this is all about how do you do that? So people can check that out? As far as
23:46 excited about that. That's cool. Yeah.
23:46 Yeah, thanks. Over on talk Python. I'm giving away five tickets to pi con one a week for five weeks. So if people want to win a free ticket, pi con this year, it's virtual. So you can attend from anywhere. There's not the challenge. Well, I got the ticket, but I need the $1,000 for the hotel, right. Like that's not a problem this year. So I think it's really cool that I did run a contest on that the link is in the show notes. We got a couple questions saying, Hey, we we heard about this live stream? Because we're listening to the podcast, how do we get to this live stream? This is awesome. I think it's fun, right? I'm enjoying doing the live streaming. Yeah, it makes it a lot more fun. Yeah, we get we get our listeners to come in and give us comments. And all this stuff is great. So if you just go to Python bisetta FM slash YouTube, right at the top, there'll be upcoming live streams, as you can say, click the button to remind me of it, and so on. So that's how you do that last thing I was on, I got a chance to talk to the medical community and the medical research community around Python over on this podcast called the finding genius podcast. And it was just a lot of fun to speak about the advantages of Python for like medical researchers and folks like that. So I'll link to that podcast as well. Alright, Calvin, anything else you want to throw out? I know you. I do. I wore your I wore my shirt. No, you
23:46 you were fully outfitted. So yeah, I've actually got two things. One before I get to pick them up conference, the Django con Europe. 2021 call for papers is open until April 1. So if you're interested in talking at Django con Europe, it'll be a pretty worldwide conference, it was last year is a lot of fun. We actually did it on the same platform as we did the Python web conference, which is the other thing I want to mention in the extras. So Python web conf 2021 is coming up in about, well, it'll be a week or so after you probably hear this. March 22. To the 26th. We've got an awesome lineup this year, again, even better than last year, Michaels, obviously back and be speaking at the conference, we've got about 60 speakers, almost 20% women, there's 43 new speakers this year, like five,
23:46 yeah, it's like four or five days or so it's a big conference.
23:46 Yeah, it's it's five days where we're doing half days. So you don't have to consume your whole day with being in a virtual conference. Because we understand that that is just hard. And I think we're all adjusting to what virtual conferences really kind of should be. So this is a new experiment, which got four tracks, there's aptiv PI data, it's an official PI Data track, there's a cloud track and a culture track. So if there's nothing you're interested in, I would be hard pressed to believe that there are tickets for 199 for professional 99 per student. And we do have our grant program back again this year. So we are doing offering up grants for those who you know, we want anybody who wants to truly attend to be able to no matter what the financial piece may be. So check out the grant program. For everyone who buys tickets, we offer up grants for those who can't afford tickets. And I'm really excited about that. You can check that out at Python web conference calm. Yeah, it's gonna be a ton of fun. It was a lot of fun. Last year, we got a bunch of social events planned, and some really awesome sponsors. And I'm just super excited about being able to produce something like this for the Python community. I feel like the web is an area that doesn't always get the attention. It shouldn't some other conferences and we're totally fulfilling that. Yeah,
23:46 super cool. It was a good conference last year. So I'm looking forward to it. Yeah, yeah. Brian and I were just on a virtual conference at pi cascades, which was a lot of cool. Cool, fun. We were on that panel about podcasting.
23:46 It was great. You all might know a thing or two about that.
23:46 We've we've done it once or twice. I'm not sure I would laugh at it. But maybe a joke. We could laugh at a joke. Would you guys think? Yeah, yeah. All right. So I know we got like two rounds of jokes. But let's do let's do another round of these. These comments.
23:46 I'm already laughing.
23:46 I know they're so good. So I'll do the first one right into the next one. Coming to the next one. We'll just kind of we got five or six. I'm like that. So it's important to comment your code. There's this code. I believe it's Java and it is part of a class it says private logger capital L class logger. variable name logger equals logger class factory method dot get logger. So private logger logger equals logger dot get logger. What is the comment? Say?
23:46 logger is a logger.
23:46 Fantastic. You've passed your code review. Yes, I guess you have comments.
23:46 Yeah. All right,
23:46 Brian. What's the next one?
23:46 Next one looks like c++ comments. But comment this block that says this is black magic from some Stack Overflow link. Don't play with magic. It can bite.
23:46 Calvin, all we got next,
23:46 but this one obviously is a Python comment. In the code it says for the sins I am about to commit me Guido van Rossum, forgive me.
23:46 Yes, I love it, which I'd be
23:46 hard pressed to know what they're getting ready to commit. If they read this in Python. They really should know the guidance already. Yeah, yeah. Yeah.
23:46 Maybe they put a semicolon in there. I don't know. All right. Then next one is remove this if you want to be fired.
23:46 Remove the comment or the code below it. We don't know. Yeah, we don't. We don't know. Next is a try except block or catching exception. With just a comment. It says Houston, we have a problem. There's no code there, though. So you're just kidding. Yes, we do have a problem. You're just catching a rock exception. Don't Exactly.
23:46 Alright, what's the last one?
23:46 The last one here is a definition int get random number. And the body of the function is returned for and the comments as chosen by fair dice roll guaranteed to be random.
23:46 If you want
23:46 a real code someplace, I mean, come on. Yeah.
23:46 Oh, there's all sorts of good ones here. Yeah, they're beautiful. One of them. This one on the list is the comment is just I need to find a better job. Alright, one more, I hope to put this one in here. I threw that in there. This one.
23:46 I'm kind of a card car nut. So if you if you kind of exactly like hover over just the first half of the picture. You see a guy in a Ferrari, like waving and says yeah, maybe rolling in the era, those using Linux and then.dot.in windows with Ws L. And if you scroll down, you see that the Ferrari is actually on a tow truck flatbed being driven someplace.
23:46 And the guys in it. Yeah, like oh, yeah, he's driving. That's right. Cool. Very cool. Very cool. That's funny, a lot z DAX that you guys like the jokes out there? and Dean as well?
23:46 Yeah, just I mean, I commented in the in the chat that you can increase your odds of winning the pike on tickets by laughing at the jokes.
23:46 Yeah, absolutely. Well, if you laugh, for sure.
23:46 How it works. Like the dad jokes of programming here. Oh, yeah, of course. Yeah.
23:46 That's half our show. That's
23:46 where we all qualify.
23:46 For sure, for sure. All right. Well, Brian, thanks for being here. As always, Calvin, thanks for joining us. My pleasure. I really enjoyed it. Yeah, good luck in your conference in catching