« Return to show page
Transcript for Episode #143:
Spike the robot, powered by Python!
0:00 KENNEDY: Hello, and welcome to Python Bytes where we deliver Python news and headlines directly to your earbuds. This is Episode 143, recorded August 7th, 2019. I'm Michael Kennedy.
0:10 OKKEN: And I'm Brian Okken.
0:11 KENNEDY: And Brian, we have a special guest this week.
0:13 OKKEN: Yeah, very special.
0:14 KENNEDY: Yeah, Kelly Schuster-Paredes. Welcome, Kelly.
0:17 SCHUSTER-PAREDES: Thank you, thank you for having me.
0:18 KENNEDY: It's great to have you here. I know you do a lot of podcasting. But you can do a little podcasting with us in addition to that, huh?
0:24 SCHUSTER-PAREDES: It's very exciting, and I've become quite a expert now at podcasting, I think, with my whole 25 or 26 episodes.
0:30 KENNEDY: I would say, I don't know, Brian, what do you think, what's the major milestone you got to cross, 10? After 10 you're kind of in?
0:37 OKKEN: Yeah, I think so, I don't think I'm worried about these guys, they're pretty dedicated, I think.
0:42 KENNEDY: Yeah, definitely you all seem to be going strong. So, we'll talk more about your podcast at the end, let you get a word in about that and tell everyone. I also want to tell you that this episode is brought to you by DigitalOcean, check them out at pythonbytes.fm/digitalocean, get a $50 credit for new users. Lots of good stuff there, tell you more about that as well. Brian, you want to kick us off with a keynote?
1:03 OKKEN: Yeah, we don't often... there's a lot of great videos out there, and sometimes we'll mention when new conference videos show up. So I don't really even know what PyLondinium, PyLondinium19, I'm guessing that's a London Python conference.
1:19 KENNEDY: Yeah, that or it's a new element discovered, out far at the far end of the elemental table there.
1:25 OKKEN: But it sounds cool. I saw a couple people recommending this video by Lukasz Langa, his keynote about Python 2020, so that's just looking forward a little bit. It's a keynote, so it's kind of a long talk, it's, you know, about an hour-ish. It was really interesting, and it's interesting on a lot of fronts. What I want to highlight is he gets into that it is important for us to try to get Python on multiple platforms and not just on the desktop or on the back end. There's other platforms specifically like web front end stuff, 3D games, system orchestration, mobile platforms, that have other languages that are used more than Python. The question is really, maybe we can get there if we don't limit ourselves to the same implementation of CPython, that maybe we limit the implementation. And as an example, MicroPython and CircuitPython are very successful, and they are limited implementations, they don't do everything that Python can do.
4:17 KENNEDY: It's definitely an interesting idea, and worth thinking about. Kelly, you do a lot with education, your main day job is teaching kids in programming and stuff, yeah?
4:26 SCHUSTER-PAREDES: Yes, that's correct, and we use MicroPython and CircuitPython, and I actually watched some of the keynote, and I found it kind of interesting how he scrolled through the documentation. And I don't really get into that conversation with the kids on where it's coming from. I always tell them that some smart guys and girls have like put all this information in there and we don't have to worry about that. And in some cases it's great, because we can only do that limited amount, and it's fast, and I think there should be more of it.
4:56 KENNEDY: What parts of programming is relevant for education and younger kids learning, do you think? What stuff doesn't matter, what stuff matters to them? Like, what kind of programs do you teach them or what kind of projects do you give them, I guess?
5:08 SCHUSTER-PAREDES: Right now the physical computing is really big, because it's that instantaneous gratification. A lot of kids don't want to code 200, 300, 400 lines of code before something happens. So, that old school thought of, "Oh, we're going to build an app or a game." is just out of the question I think right now, because the kids want something, they want to code and they want it to happen. So we particularly work on physical computing, or a little bit of instantaneous activities.
5:35 KENNEDY: Yeah, so Adafruit stuff, things like these little Circuit Express and so on, that kind of thing?
5:39 SCHUSTER-PAREDES: Correct, and the ESP, and the BBC micro:bit, and Lego and stuff that we're going to talk about later.
5:46 KENNEDY: Yeah, pretty cool, what age group is that?
5:49 SCHUSTER-PAREDES: We currently are working with 10-year olds to 13, 14-year olds. And then as they go up higher, then they're getting more deep into Python and AI and TensorFlow and things like that.
6:00 KENNEDY: That sounds like a way cooler education than I had.
6:03 SCHUSTER-PAREDES: It's totally cooler than what I had. I didn't grow up on this stuff.
6:08 KENNEDY: Yeah, amazing. That dovetails really well into what you want to talk about next, so tell us about Mu.
6:14 SCHUSTER-PAREDES: Oh yeah, so Code With Mu is a software that was created by Nicholas Tollervey, and what's so great about Nick is that he's a former teacher, he's a music teacher. And he's developed this code editor that is specifically for beginner programmers. And it's a modal editor, whereas the kids can go and click on a mode and code in BBC micro:bit, code in CircuitPython, code in ESP, PyGame, he just added Flask. And the kids can click on it and it kind of packages everything so we don't have to worry about slow processing and all these nice little, from import, micro:bit, everything, it's right there in that package. And it just bundles things up with simplicity, a lot of, you know, when you work in another editor like PyCharm, there's so much going on for newcomers, you don't know where to go, with Mu, it just has these buttons, and you can click check for updates, save, flash, put on a REPL, it's just a great little package.
7:17 KENNEDY: Yeah, it's incredible, and it really makes me think, this is kind of what IDLE should be. The IDLE editor that's built in is like, kind of meant there to be a little helpful editor, but it seems like it just doesn't help enough. And this really brings together a similar philosophy by really making so many things easy to get started with. Like you said, these modes you can put it into. It's very great.
7:40 SCHUSTER-PAREDES: All the books that are out there always tell you to install IDLE or to go there and get Python, but it's really not something that a newcomer like myself that just started coding, it's not intuitive. So with using Mu you're able to just jump in and start coding right away, so it's great. And what I love about it is he's constantly updating, he just released a mode called Flask for the kids so they can start making some short web apps. And he presented at EuroPython, and he released a whole bunch of new alpha features of Mu, which I think is great, because he's not afraid of just throwing something out, or pre-alpha. And he just lets everyone get on there and train, so it's pretty cool.
8:21 KENNEDY: It's so exciting that Flask is on there, and Flask, it can run on these little devices, is that right?
8:27 SCHUSTER-PAREDES: It just runs on the desktop.
8:28 KENNEDY: Yeah, I think it's really great to make it a mode, and then the kids can just start writing Flask apps. Want to have a website, well, here you go, you flip this switch on, and it's really great.
8:38 SCHUSTER-PAREDES: Yeah, and he just tweeted out, literally like 30 minutes ago, that he released a project he started two days ago called PyperCard, which is a HyperCard inspired GUI framework based on what Adafruit had released. And when I mentioned to my coworker, Sean, about PyperCard, he was like, "Ugh, I hated HyperCard." I don't remember, I don't know if you guys used HyperCard back in the days, I don't think you guys were around.
9:03 KENNEDY: No, I only know it in the lore, I have never used it.
9:07 SCHUSTER-PAREDES: It's like in 1980s, so that might be dating some of us. But, what it does, is he just released, it's called PyperCard, and he's asking for feedback on it. And you can run it through Mu by just going into the toggle, the little cog on the bottom right, and install PyperCard, and then you can run it in the Python 3 mode. I can't wait to get my hands on it, and I just had a little bit of play just a few seconds ago.
9:31 KENNEDY: That's exciting, anything that contributes to the GUI story and Python makes me happy.
9:35 SCHUSTER-PAREDES: It helps with the instant gratification for the kids, you know, you click on that button, and then, so they can type something and get in there, it's just great.
9:42 KENNEDY: Yeah, absolutely. Brian, you're a fan of Mu, right?
9:45 OKKEN: Yeah, I'm really excited to try the Flask and the PyperCard, looks really fun, and also CurcuitPython. I want to get my daughter started working on CircuitPython, and the serial output, how to configure that, it's not hard, but it's not something I can expect a nine-year old to do. But with the Mu editor, it just does it, hooks up to it automatically, so.
10:09 SCHUSTER-PAREDES: Yeah, you should check out the alpha release that they launced at EuroPython, and he has the ESP MicroPython on there as well, which is LAE from AdaFruit.
10:19 KENNEDY: Yeah, supercool, I'm really happy that project exists. So let's keep with the theme a little bit, in this helping beginners, there's a cool article that I want to reference and then talk about some things here. So there's an article called "Understanding the Python Traceback" and it's on Real Python, written by Chad Hansen, and I'm pretty sure one of the first experiences any new programmer has, is being confronted with this traceback, some kind of error, probably syntax error, but maybe not, right, could be some kind of runtime error, but you get this giant dump of information, and it's like, "Ugh, what is all of this?" And I just want to highlight this article and talk a little bit about some of the things it covers, because there is a wealth of information in the traceback, and depending on the tools you're using, the tools maybe understand that and they can allow you to navigate different parts of your application, by turning various things into hyperlinks and stuff like that. So if you go to traceback, what do you learn right away? You learn the type of error, attribute error, key error, something like that, a description of the error, hopefully, sometimes, the line of code that the error occurred on, usually the syntax that that error was on, the call stack, and the file names, the line numbers, the module names, and even if that happened while handeling some other error, some exception caused another exception to happen, or things like that. So really nice, I think there's even some plugin on PyPI that colorizes this, I can't entirely remember, it might be a PyTest extension, Brian, who knows. This article is really nice, people should check it out if they've always, I'm sure they've, like I said, one of the first things you learn about is errors, but it's nice to really highlight, actually look at all these things that are there. So people should check that out. One of the things that's unusual, so if you're experienced in programming but not Python, about tracebacks, is they read and reverse. Most error messages like this, in other languages, they start with the error that actually happened and then where, and then what caused that, and so on, but this is the reverse, you read it from bottom to top, instead of the other way around, I think it's a little bit weird. It also has some interesting conversation and highlights of different common error messages. If you see this type of error, that probably was caused by this. You see this other type of error, it's caused by it, and I don't know if it was even covered by the article, but I would throw out the most common error you're going to run into is Attribute Error NoneType does not have, whatever you're trying to do to the NoneType, right, it's some kind of crash there. So it's useful if you have some more junior developers or people that are learning, I think handing this article out to them would be great.
12:59 SCHUSTER-PAREDES: I love this article, I picked it up, I looked at it after you posted it, and the idea of the NameError being at the bottom, that's something that I never knew, I just was like, skim down until you find something that you can figure out. It's one of those things that I tell the kids.
13:14 KENNEDY: This looks like it applies. Yeah, exactly.
13:16 SCHUSTER-PAREDES: It's like, "Line two, there's nothing on line two." And I'm like, "Just keep reading, somewhere in there it tells you the error." So I love that, I didn't know that it was the only the last thing was the first, so thank you for that.
13:27 KENNEDY: Yeah, for sure.
13:28 SCHUSTER-PAREDES: But I'm constantly using my error readings lately.
13:31 KENNEDY: When you're teaching people, and especially younger kids. This is something that's got to be a little frustrating, but also something they've got to get used to right away and it's not really beginner friendly, I wouldn't say. One of the things that's really nice that Al Sweigart does in his book "Automate the boring stuff", is, like right near the beginning he says, "Let me show you how to Google some errors and find ways to fix it." He literally spends several pages talking about, here's this problem, type this into Google you get this answer, here's what you mean, here's how you interpret it, it trains people to understand how they can solve their own problems when they hit this kind of stuff, which I think is really cool too.
14:11 SCHUSTER-PAREDES: Yeah, that's one of our features as well, going straight to Google and putting that error in.
14:15 OKKEN: One of the things I want to pop in is, when you're playing with some code you might have to deal with one traceback, when you're dealing with test suites there may be lots of failures and lots of tracebacks all together, and I've found that people get a little overwhelmed with these, just lots of huge tracebacks. So PyTest has a feature that you can limit the size of the traceback, and I highly recommend people use short tracebacks, it only gives you like 10 lines of code around the failure instead of having a huge traceback, and it makes it a little less intimidating.
14:51 KENNEDY: Yeah, you don't need to see the whole call stack all the way into the PyTest library, right? Because otherwise, yeah, you'll be chasing that down. So one more thing to throw in, I don't know that this is covered in the article, but it's definitely worth considering. To make tracebacks more helpful, to make exception handling better and more specific, you should definitely consider making your own exception type. If you're writing a library, or you're writing an application, it's super easy to make your own classifications for errors, like you could have some kind of lookup, you could have a derive from KeyError, that means something more specific, and it's literally like two lines, three lines, probably two lines to write that, class exception name derived from the exception you want, colon pass. And it really helps communicate errors back and let's you be more specific in your try/except blocks, so also worth considering there. All right, now before we move on to the next one, let me just tell you about DigitalOcean. So, all of our infrastructure here runs on DigitalOcean. When you get your audio on your player, that's distributed through the DigitalOcean infrastructure, our website, our database server, everything runs there, it's been wonderful, it's super affordable, it's the right level of detail, you have enough features to do what you need but it's not overwhelming, like you're trying to build the world's most complicated app, so I definitely recommend checking out DigitalOcean, visit them at pythonbytes.fm/digitalocean, sign up, get $50 credit to play around for six months, yeah, give them a try, it's a really good place to be. Now Brian, you did mention plugins and other things, or settings at PyTest, so let's keep going with that.
16:32 OKKEN: Yeah, so we actually, this is a listener contribution from Ray Cote via email, and he recommended us cover extension, like Mypy extensions to other tools. So there's a flake8-mypy and a pytest-mypy. So Mypy is the, I'm sure we've covered that, talking about testing type hints in your code to verify that they're right or something?
16:59 KENNEDY: Right. So let me give a quick overview for people that don't know. I mean you sort of did, but Python has optional type hints. I can say, "Here's a function that has a thing:int." Now the runtime of Python does nothing with that, right? There's no validation. But if you run Mypy, it will do static type checking to make sure that everywhere you're calling that function you actually are passing integers and all that. So all of the stuff you're talking about is built on top of that. Carry on.
17:25 OKKEN: Yeah. There's a couple of ideas. Flake8 is a static type checker also. flake8-mypy, is just an extension to that so that you're running Mypy while you're running flake8. The interesting thing that Ray brought up is that he said that he tried to do run Mypy by itself and always had trouble getting it configured right. But with the plugin flake8-mypy, had just worked easier. I dunno, it was easier to use, so I'm going to try that. Also, I've tried Mypy with a limited success, so I'll try this as well. And this extension to flake8 is also, I guess it's Lucasz Langa Day for me, but this is a project maintained by Lucasz and then another project. These are static analysis, but if you want to check to see if you're really using runtime, whether the types are right or not. Actually I'm not sure if I'm telling this correctly, but as part of the PyTest tests now, I think I lied. I don't think it checks runtime types. It is still just a static type checker, but it's triggered by your PyTest suite, so like PyTest can check doc text, can check other things as well. And this is just an extension that runs Mypy while you're running your tests, so.
18:39 KENNEDY: Yeah, that's pretty neat, I like it.
18:40 OKKEN: And it's maintained by our friend Dan Bader and David Tucker.
18:43 KENNEDY: That's a good one. Kelly, do you do any testing with the kids or do you do any of these type hints where you say, "Hey kids, this is an integer."? Or is the beauty of Python that you don't have to even talk about that kind of stuff?
18:56 SCHUSTER-PAREDES: No, we're getting into it a little bit, we do introduce a little bit of the idea of tests in the older grade levels. Sean, my colleague, he uses it quite often just to set parameters. We use the lingo, he's a big fan of tests and he's been trying to show me all of that. So I plan to learn more this year, step by step.
19:17 OKKEN: Yay.
19:18 SCHUSTER-PAREDES: We have the test, the test book signed by somebody famous or something.
19:20 KENNEDY: Amazing, got the legit version..
19:21 OKKEN: I'm blushing.
19:22 KENNEDY: All right, speaking of working with kids, your next one has to do with Lego education and tell us about this.
19:38 SCHUSTER-PAREDES: Yeah, I don't know if you're familiar with Lego education. We all know the Lego bricks that you buy at the store, but Lego education launched a series of robots over the years. The last robot that they last launch was in 2013 called the EV3 Mindstorms. And there hasn't been a new robot since. The EV3 Mindstorm, you can still code with Python. There was a gentleman named Nigel Ward who did this. You'll have to dig into it yourself, but this kind of convoluted way of getting Python to run on the EV3. And it was a Debian Linux based operating system Of EV3 does. So you're going to have to explain that to me. But it was a little bit difficult for a person not knowledgeable in Python to run it on Mindstorm. We played with it a a little bit, but it's kind of convoluted. Well since earlier this year, they're launching a new robot called SPIKE Prime. And SPIKE Prime is said that it's going to be running with MicroPython. And this is really huge that Lego education is launching this because there's over 300,000 kids who compete with Lego robotics. And now instead of just using the Lego programming operating system, they're now going to launch it with any programming system that they want to use. And with support of MicroPython. And then earlier this year they launched a whole guide about how to run MicroPython on top of the EV3 Dev with PyBricks. And there's a whole bunch of people with their hands in there and it's just a really interesting thing. They even have its own Visual Studio Code extension where you can click on it and install it with Visual Studio Code. There's no need for use in terminal, has all these instructions. It kind of looks like the MicroPython API when you open up their guidebook and it just seems a lot easier. And there were a couple people with their hands in this, in this development and I'm not sure who started what and if it's all based on the original guy, but Sebastian Thomas, he's one of the main contributors that looks like for PyBricks. And then David Lechner, Laurens Valk and Antwan van Hook are the Lego MicroPython release guys. And they have a lot of really cool programs that they've converted into MicroPython. So we're excited.
22:00 KENNEDY: This is such exciting news. This is like really a mainstream thing that'll probably bring awareness of MicroPython and exposure of Python to a lot of kids and teachers.
22:10 SCHUSTER-PAREDES: Absolutely, and then what the cool thing is is like EV3 Mindstorm robots, they're a little bit, you know, like all other robots, they don't really do what you program them to do. But with using MicroPython, you're pretty much getting down into correct angle and speed and you can use the gyroscope to regulate where it is on what GPS kind of a coordination on a mat. So you're going to get a little bit more controlled environment. So we're excited.
22:37 OKKEN: I'm so buying that when it comes out. Just sounds so cool.
22:42 SCHUSTER-PAREDES: It's really cool. It wait till SPIKE Prime gets released later this year. It's got really a lot of colors, so I think it sounds bad, but I think it's going to get more girls involved with robotics. It's not the, the basic gray and white of the EV3. There's a lot of colors on SPIKE Prime, so I'm excited about it.
22:59 KENNEDY: Yeah, it sounds like it's going to look fun. It's cool, yeah, very exciting. Thanks for coming that one, I think that's great. So the last one, what to start with a popular saying. So 20 years ago was the best time to plant a tree. You know, the second best time might be like right now, and that's Kind of the story for Mozilla. So Mozilla has tons of Python and they wrote this sort of, let's look at what we're doing with Python large Mozilla, and what's the story around Python 3 and the converting over to it. So they say, "Hey, look. we actually have 3,500 Python files at Mozilla Central, which is like 230,000 lines of code, which is a lot of Python." And they also have 462 repositories over at the Mozilla or GitHub repo organizations. So they've got a lot of stuff going on with Python and they looked and they said, "You know, most of this is Python 2 only boohoo." So we all know that the end of life of Python 2 is quickly approaching. Brian, you were talking about Python 2020 like that sounds still to me way in the future. I don't know what 2020 years, but that is maybe while flying cars by then, I don't know. But that's way out there, isn't it?
24:15 OKKEN: It's next year.
24:15 KENNEDY: I know it's like five months, it's crazy. How's that possible? So that is when Python 2 is going to be end of life. So this is an interesting article because I knew a lot of organizations are thinking about their status with Python 2 and Python 3. Whether it's worth upgrading things, are they behind and looking to other leading organizations on how their might do their migration. So this is kind of a walkthrough of where is Mozilla, where are they going, what's their assessment here? And the idea was first of all, do they actually need to migrate off a Python 2? Technically no, you can still download 2.7. You could still run it. But here's the things we're concerned about at Mozilla. Python 2 will no longer receive security fixes. That could be a problem. More scary I guess is all the exciting growth of all the other packages they depend upon may no longer support Python 2 and so they will be stuck on old versions of all the other libraries that are great, right? So in a sense like the libraries, they can use will be calcified, not just the runtime. It also means delaying more code they've got to migrate and probably writing new code that is not as easily migrated. And there also has an opportunity to cost. They can't use the cool features like async and await, f-strings and all those good things. So probably they should migrate to Python 3 is what they decided and their first step was to set up some linters. They said one of the linters, make sure that that Python code at least can be imported into Python 3 without failing. Like that's a pretty low bar. Can I say import this and run that statement under Python 3 yes or no? Right, but it's like that's the first step, you know. And then the other linter or they set up was to make sure that all the Python 2 files had the dunder future import statements. So things like print statements and what what not we're working out. All right, so you write the right print statements at least. And then we've talked a lot about pipenv, poetry, managing dependencies, all that kind of stuff. And so there's the interesting conversation there about their evaluation of pipenv and poetry and whether or not that made sense for them. And pipenv and poetry are pretty good for like, I would like to create a project, and here are some dependencies I want to install, you know, pipenv install whatever, right requests or something like that. But it turns out the way Mozilla works with one huge mega reposit like monolith repository, those tools don't really work for that. And so they actually created this thing called jetty, which is based on poetry that is more appropriate for those types of like systems and dependencies and stuff. So it's a pretty interesting look into some simple steps that Mozilla is taking to move to Python 3.
26:57 OKKEN: Yeah, Jedi seems interesting. Take a project based on another project that removes features.
27:00 KENNEDY: These features, what, what did you do? Well, I removed these three features so now we won't use them. The idea of some of the stuff about the way poetry worked, it assumed that the top level of the project is kind of all of it and it Mozilla, that's like all of their code in entirety and they want to work in like sub bits or something to that effect is what I got out of it. So if you're thinking of moving your organization to Python 3, which should be anybody who is not already on Python 3, I would say... Or that's your role or something like that. Check out this article, I think it's got some good tips.
27:44 OKKEN: One question for you, Michael. Wouldn't the second best time to plant the tree be 19 years ago?
27:51 KENNEDY: Yeah, but it makes explaining the thing along. It takes like 21 statements instead of two so.
27:57 OKKEN: Okay, okay.
28:00 KENNEDY: All right, so that's our main, our main topics. Brian, you got anything actually just want to throw out there eal quick?
28:04 OKKEN: Yeah, the beta 3 for Python 3.8 is out and the core Python team is encouraging everybody, especially people that maintain third party package... Third party Python projects to heavily test 3.8 because it can be fixed now but if you wait until 3.8 is actually out, it's harder to fix, so please test.
28:25 SCHUSTER-PAREDES: Think it seems like we're getting it a little bit closer to Python 4, is that in a future?
28:33 KENNEDY: It's such an interesting idea.
28:35 SCHUSTER-PAREDES: 2.7, 3.8?
28:37 KENNEDY: Well, I asked him to speak of like a slang guy, ask him about it back at Pycon when I did an interview with him and Anthony Shaw around the features of Pytho 3.8, and I think, you know, there's hesitation to have a double digit second number there like 3.11 or something like this. But there's also so much fatigue of this Python 2 to 3 conversation that I'm not sure that we're going to be going to four anytime soon.
29:02 OKKEN: On that note though, I think it might be interesting to have a 4.0 be a non event to have it just be another version.
29:10 KENNEDY: Yeah, that would be nice wouldn't it?
29:12 SCHUSTER-PAREDES: Especially since everyone's getting used to the conversion. So you might as well just throw it in and have another one there.
29:18 KENNEDY: We've, we've been converting for like 10 years. Let's just keep going. All right, so I've got a quick one hour show throughout their pipx, I love pipx. It lets you install things that are Python but are meant to be little utilities that you just run on your terminal, install and manage those separately. Kind of like homebrew, but for Python stuff, it now has shell completions, which is pretty cool. So you can install those real easy. You can say pipx u , and it'll show you all the things that you can send to pipx that starts with u for it. Like upgrade, upgrade all, things like that. Not a huge thing, but I'm a big fan of pipx, so it's a little bit better still. Yeah, Kelly, how about you?
29:56 SCHUSTER-PAREDES: So again, to put a plug in for our podcasts at teachingpython.fm, Sean Tibor and I, we started this podcast because if you haven't been heard, I'm an a new coder. I can't say I'm a newbie anymore. I guess I've been around for a year now trying to learn how to code and Sean's a new teacher and we started this podcast and it's just about the frustration of working with a coder who's becoming a teacher and a teacher who's trying to become a coder. And it's just about our pitfalls and what we've learned. And it's been a great push for me learning Python. So for all those people that listen to you guys, Michael and Brian, I think it's a good in-between when we go home and after we listen to you, we start googling what is he talking about? It's great.
30:41 KENNEDY: Yeah, that's a great podcast. I'm happy you all are doing it. I think you're doing good work there.
30:45 OKKEN: I recommend the podcast to anybody that has to teach anybody anything Python related, not just a teachers or paid instructors. If you're acting as a mentor within your organization, I think that you get a lot out of this podcast also.
31:00 SCHUSTER-PAREDES: Absolutely, we really want to hit everyone in the college, even colleagues who want to learn Python and just about good teaching, whether it isn't Python, you know, it's not Python, God forbid it's, it's something else. It's just that idea of all the other skills that come along with being a coder.
31:16 KENNEDY: Yeah, it's a good podcast. People should definitely check it out. Especially like Brian said, if you're in that role somehow. All right, time for a joke, huh? This is visual, so I'm going to set the stage, but you too, you have to click that link to open that and see the image here, okay. Then I'm going to describe it, describe to folks, we'll see if we can do a visual joke on the air. So here's the idea, in Python has this phrase, something to the fact of like, we're all consenting adults. We don't need to be overly protective or overly structured in how we put our data together. Like we can just say, you know, this part of our data is meant to be internal and leave it alone. And so there's conventions but not really enforcement in the language to make that happen. So like if I had a module and something was like an internal implementation, I might have underscore value instead of value or underscore method for a private method. But of course you could still get to it, right? So the joke is this is the little cartoon and the cartoon has a door and a welcome mat. It has a key, like sometimes you have a key under the doormat, but the keys half sticking out. Kelly, what does it say? Right? Little invitation there.
32:24 SCHUSTER-PAREDES: It says Python private method.
32:26 KENNEDY: It says Python private method. You know you're not supposed to pick it up, but it's right there, so anyway, yo, we'll put the link in the show notes. You all can click it and check it out. But it's pretty funny that comes to us both from Real Python and Nick's spirit. So thanks guys for sending that over. All right, well that's it for the show. Brian, great to chat with you, as always. Kelly, thanks for being here. It was great to talk to you and get your perspective on all this stuff.
32:50 SCHUSTER-PAREDES: Thank you for having me. It's always fun talking to you guys and listening to you guys.
32:53 KENNEDY: Yeah, you bet. See you all later. Thank you for listening to Python bytes. Follow the show on Twitter via at Python Bytes. That's Python Bytes as in B-Y-T-E-S and get the full show email@example.com. If you have a news item you want featured, just visit pythonbytes.fm and send it our way. We're always on the lookout for sharing something cool. On behalf of myself and Brian Okken, this is Michael Kennedy. Thank you for listening and sharing this podcast with your friends and colleagues.