Brought to you by Michael and Brian - take a Talk Python course or get Brian's pytest book

Transcript #143: Spike the robot, powered by Python!

Return to episode page view on github
Recorded on Wednesday, Aug 7, 2019.

00:00 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.

00:04 This is episode 143, recorded August 7th, 2019. I'm Michael Kennedy.

00:10 And I'm Brian Reichen.

00:11 And Brian, we have a special guest this week.

00:13 Yeah, very special.

00:14 Yeah, Kelly Schuster Perez. Welcome, Kelly.

00:17 Thank you. Thank you for having me.

00:18 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?

00:24 It's very exciting. And I've become quite an expert now at podcasting, I think, with my whole 25 or 26 episodes. I would say I know Brian, what do you think? What's the the major milestone?

00:35 You got across 10 after 10. You're kind of in. Yeah, I think so. I think I don't think i'm worried about these guys They're pretty dedicated. I think 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 digital ocean check them out at Get a $50 credit for new users.

00:58 Lots of good stuff there. Tell you more about that as well.

01:01 Brian, you want to kick us off with a keynote?

01:03 Yeah. So we don't often...

01:05 There's a lot of great videos out there and sometimes we'll recommend people that mention when new conference videos show up.

01:12 So I don't even really know what PyLondinium...

01:15 PyLondinium19. I'm guessing that's a London Python conference.

01:19 Yeah, that or it's a new element discovered out far at the far end of the elemental table there.

01:25 But it sounds cool. I saw a couple people recommending this video by Lucas Lange, 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 a you know, about an hour ish. It was really interesting and it's interesting. A lot of friends and one of the eight. What I want to highlight is he gets into that.

01:47 It is important for us to try to get Python on multiple platforms and not just on the desktop or on the back end.

01:55 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.

02:06 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.

02:17 And as an example, MicroPython and CircuitPython are very successful and they are limited implementations.

02:23 They don't do everything that Python can do.

02:26 Right, those run on little tiny embedded chips, right?

02:28 Like $5 chips.

02:29 And so you can't put all of CPython into that little tiny thing and expect it to behave well.

02:36 So you've got like this, as you said, limited one.

02:38 And yeah, maybe that does make sense.

02:40 We kind of have a limited one for the web front end, right?

02:43 We've got Sculpt and Brython and some of those things as well.

02:47 But I don't feel like it's--

02:48 maybe it's not limited enough, because those are pretty massive downloads for your JavaScript.

02:54 But I think this is a really important message.

02:57 And I think the idea of some kind of limited thing is quite interesting.

03:01 We had the conversation or the debate at the Core Developer Language Summit and around that about what do we maybe take out of Python, or how do we create a minimum subset of Python?

03:14 It seems like this is kind of part of that conversation.

03:16 - The discussion even talked about things that I hadn't even thought about before.

03:20 Like if you're controlling, like you would on JavaScript, you're controlling, it gets compiled down into, modern JavaScript now gets compiled down into something that isn't the same as what people wrote it in that gets delivered to the end user.

03:34 And things that, like for instance, massive imports, Maybe we don't need the same flexibility of the import system for a web front end stuff.

03:44 And it also reminded me of how C and C++ went, because there are many other compilers of C and C++, not just Visual, like Visual Studio or GCC, that are targeted, because like you were saying, for different limitations, I've worked on platforms that really still felt like C++, but they threw out the template system.

04:07 You can't use that.

04:08 - Sure.

04:09 - He was even bringing up things that I didn't even think about, like monkey patching.

04:12 Maybe we don't allow monkey patching for some cases.

04:15 And I think this is a great idea.

04:17 - It's definitely an interesting idea and worth thinking about.

04:20 Kelly, you do a lot with education.

04:21 Your main day job is teaching kids and programming and stuff, yeah?

04:26 - Yes, that's correct.

04:27 And we use MicroPython and CircuitPython, and I actually watched some of the keynote, and I found it kind of interesting how you scroll through the documentation.

04:36 And I don't really get into that conversation with the kids on where it's coming from.

04:41 I always tell them that some smart guys and girls have put all this information in there and we don't have to worry about that.

04:48 And in some cases it's great because we can only do that limited amount and it's fast.

04:54 And I think there should be more of it.

04:56 - What parts of programming is relevant for education and younger kids learning, do you think?

05:02 What stuff doesn't matter, what stuff matters to them?

05:04 What kind of programs do you teach them or what kind of projects do you give them, I guess?

05:08 - Right now, the physical computing is really big because it's that instantaneous gratification.

05:14 A lot of kids don't wanna code 200, 300, 400 lines of code before something happens.

05:18 So that old school thought of, oh, we're gonna build an app or a game is just out of the question, I think, right now, because the kids want something, they wanna code and they want it to happen.

05:29 So we particularly work on physical computing for a little bit of instantaneous activities.

05:35 - Yeah, so Adafruit stuff, things like these little Circuit Express, and so on, that kind of thing?

05:40 - Correct, and the ESP, and the BBC micro bit, and Lego and stuff that we're gonna talk about later.

05:46 - Yeah, very cool.

05:48 What age group is that?

05:49 - We currently are working with 10 year olds to 13, 14 year olds.

05:54 And then as they go up higher, then they're getting more deep into Python and AI and TensorFlow and things like that.

06:01 - That sounds like a way cooler education than I had.

06:03 - It's totally cooler than what I had.

06:05 I didn't grow up on this stuff.

06:08 - Yeah, amazing.

06:09 That dovetails really well into what you wanna talk about next, so tell us about Mew.

06:14 - Oh yeah, so Code With Mew is a software that was created by Nicholas Tolerbe.

06:19 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.

06:30 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.

06:42 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 slower processing and all these nice little from import micro bit, everything it's right there in that package.

06:57 And it just bundles things up with simplicity.

07:01 A lot of, you know, when you work in another editor like PyCharm, there's so much going on for newcomers.

07:07 You don't know where to go.

07:08 With Moo, it just has these buttons and you can click check for updates, save, flash, put on a REPL.

07:15 It's just a great little package.

07:17 - Yeah, it's incredible.

07:18 And it really reminds me or makes me think this is kind of what IDLE should be.

07:23 The IDLE editor that's built in is like kind of meant there to be like a little helpful editor, but it seems like it just doesn't help enough.

07:30 And this really brings together kind of a similar philosophy, but really making so many things easy to get started with.

07:37 And like you said, these modes you can put it into.

07:39 It's very great.

07:40 - 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, who just started coding, it's not intuitive.

07:51 So with using Moo, you're able to just jump in and start coding right away.

07:55 So it's great.

07:56 And what I love about it is he's constantly updating.

07:59 He just released a mode called Flask for the kids so that they can start making some short web apps.

08:06 And he presented at EuroPython, and he released a whole bunch of new alpha features of Moo, which I think is great because he's not afraid of just throwing something out or pre-alpha.

08:18 And he just lets everyone get on there and train.

08:20 So it's pretty cool.

08:21 It's so exciting that Flask is on there.

08:23 - And the Flask, it can run on these little devices, is that right?

08:27 - It just runs on the desktop.

08:28 - Yeah, I think it's really great to make it just a mode and then the kids can just start writing Flask apps.

08:34 Do they wanna have a website?

08:35 Well, here you go.

08:36 You flip the switch on and it's really great.

08:38 - Yeah, and he just tweeted out literally like 30 minutes ago that he released a project he started two days ago called PiperCard, which is a HyperCard-inspired GUI framework based on what Adafruit had released.

08:52 And when I mentioned to my co-worker, Sean, about HyperCard, he was like, "Oh, I hated HyperCard." I don't remember, I don't know if you guys used HyperCard (laughing)

09:01 back in the day, if you guys were around.

09:04 - I only know it in lore, I have never used it.

09:07 - It's like in 1980s, so that might be dating some of us.

09:12 But what it does is he just released, it's called HyperCard, and he's asking for feedback on it.

09:18 and you can run it through Moo by just going into the toggle, the little cog on the bottom right, and install PiperCard, and then you can run it in the Python 3 mode.

09:27 I can't wait to get my hands on it, and I just had a little bit of play just a few seconds ago.

09:31 - That's exciting.

09:32 Anything that contributes to the GUI story in Python makes me happy.

09:35 - It helps with that instant gratification for the kids.

09:38 You know, you can click on that button, and then so if they can type something and get in there, it's just great.

09:42 - Yeah, absolutely.

09:43 Brian, you're a fan of Moo, right?

09:45 - Yeah, I'm really excited to try the Flask and the Piper card looks really fun.

09:50 And also CircuitPython, I want to get my daughter started working on CircuitPython.

09:55 And the serial output, how to configure that is not hard, but it's not something I can expect a nine year old to do.

10:03 But within the Mew editor, it just does it.

10:06 It hooks up to it automatically.

10:09 - Yeah, you should check out the alpha release that they launched at EuroPython.

10:13 and he has the ESP MicroPython on there as well, which is a board from Adafruit.

10:19 - Yeah, super cool.

10:21 I'm really happy that project exists.

10:23 So let's keep with the theme a little bit in this Helping Beginners.

10:26 There's a cool article that I want to reference and then just talk about some things here.

10:32 So there's an article called Understanding the Python Traceback.

10:35 And this is on RealPython, written by Chad Henson.

10:38 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.

10:49 It could be some other kind of runtime error.

10:51 But you get this giant dump of information.

10:53 And it's like, what is all of this?

10:56 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.

11:05 And depending on the tools you're using, the tools maybe understand that.

11:08 And they can allow you to navigate different parts of your application by turning, you know, various things into hyperlinks and stuff like that.

11:15 So if you get a trace back, what do you learn right away?

11:17 You learn the type of error, you know, attribute error, key error, something like that.

11:21 A description of the error, hopefully, sometimes.

11:25 The line of code that the error occurred on, usually like actually the syntax that that error was on, the call stack and for, you know, the file names, the line numbers, the module names.

11:36 And even if that happened while handling some other error, Right?

11:40 Some exception caused another exception to happen, or things like that.

11:43 So really, really nice.

11:44 I think there's even some plug-in on PyPI that colorizes this.

11:51 I can't entirely remember.

11:52 It might be a pytest extension, Brian.

11:53 Who knows?

11:55 But this article is really nice.

11:56 People should check it out if they just--

11:58 they've always-- I'm sure they've--

12:00 like I said, one of the very first things you learn about is errors.

12:03 But it's nice to kind of really highlight--

12:05 actually, look at all these things that are there.

12:07 So people should check that out.

12:08 One of the things that's unusual, so if you're experienced at programming, but not Python, about tracebacks is they read in reverse.

12:17 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.

12:24 But this is the reverse.

12:26 You read it from bottom to top, instead of the other way around, which I think is a little bit weird.

12:30 It also has some interesting conversation and highlights of different common error messages.

12:35 If you see this type of error, that probably was caused by this.

12:39 You see this other type of error is caused by that.

12:41 And I don't know if it was even covered in the article, but I would throw out the most common error you're gonna run into is attribute error, none type does not have whatever you're trying to do to the none type, right?

12:51 It's just some kind of crash there.

12:52 So it's useful if you have some more junior developers or people who are learning, I think handing this article out to them would be great.

12:59 - I love this article.

13:00 I picked it up, I looked at it after you posted it, and then the idea of the name error being, or the error being at the bottom, that's something that I never knew.

13:10 I just was like, "Skim down until you find something "that you can figure out." It's one of those things that I tell my kids.

13:14 - This looks like it applies, yeah, exactly.

13:17 - They're like, "Line two, there's nothing on line two." And I'm like, "Just keep reading.

13:20 "Somewhere in there, it tells you the error." So I love that I didn't know that it was only the last thing, you know, it was the first.

13:26 So, good, thank you for that.

13:27 - Yeah, for sure.

13:28 - But I'm constantly using my error readings lately.

13:32 - When you're teaching people, and especially younger kids, This is something that's gotta be a little frustrating, but also, you know, something they've gotta get used to right away, and it's not really beginner-friendly, I wouldn't say.

13:44 One of the things that's really nice that Al Swigert 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 them." And 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.

14:03 It kind of trains people to understand how they can solve their own problems when they hit this kind of stuff, which I think was really cool too.

14:11 - That's one of our features as well, is going straight to Google and putting that error in.

14:15 - One of the things I want to pop in is when you're just playing with some code, you might have to deal with one traceback.

14:23 When you're dealing with test suites, there might be lots of failures and lots of tracebacks all together.

14:30 And I've found that people get a little overwhelmed with like these just lots of huge tracebacks.

14:36 So pytest has a feature that you can limit the size of the traceback.

14:40 And so I highly recommend people use short tracebacks.

14:44 It only gives you like 10 lines of code around the failure instead of having a huge traceback.

14:50 And it makes it a little less intimidating.

14:51 - Yeah, you don't need to see the whole call stack all the way into the pytest library, right?

14:56 - Yeah.

14:56 - 'Cause otherwise, yeah, you'll be chasing that down.

14:58 So one more thing to throw in.

15:00 I don't know that this is covered in the article, But it's definitely worth considering.

15:04 To make tracebacks more helpful, to make exception handling better and more specific, you should definitely consider making your own exception type.

15:13 Right, if you're writing a library or you're writing an application, it's super easy to make your own classifications for errors.

15:20 Like if it has some kind of lookup, you can have it derived from key error, but mean something more specific.

15:28 And it's literally like three, two lines, three lines, probably two lines to write that, you know, class exception name derives from the exception you want, colon pass. You're good. You know what I mean? Like, and it really helps communicate errors back and lets you be more specific in your try-except block. 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 flown, 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.

16:13 So I definitely recommend checking out DigitalOcean. Visit them at, sign up, get $50 credit to play around for six months, And yeah, give them a try.

16:23 It's a really good place to be.

16:24 Now, Brian, you did mention plugins and other things or settings at pytest.

16:29 So let's keep going with that.

16:31 Yeah, so we actually--this is a listener contribution from Ray Coate via email.

16:37 And he recommended us cover extension--like mypy extensions to other tools.

16:43 So there's a Flakate-mypy and a pytest-mypy.

16:49 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 - Right, so let me give a quick overview for people who don't know.

17:02 I mean, you sort of did, but Python has optional type hints.

17:07 I could say, here's a function, it has a thing, colon int.

17:11 Now, the runtime of Python does nothing with that.

17:13 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.

17:22 So all the stuff you're talking about is built on top of that.

17:25 Carry on.

17:26 Yeah, there's a couple ideas.

17:27 Flake 8 is a static type checker also.

17:30 Flake 8 mypy just is an extension to that so that you're running mypy while you're running Flake 8.

17:37 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.

17:47 with the plugin Flake 8 mypy, it just worked easier.

17:50 I don't know, it was easier to use.

17:51 So I'm going to try that also.

17:53 I've tried mypy with limited success, so I'll try this as well.

17:57 And this extension to Flake 8 is also, I guess it's Lucas Langoday for me, but this is a project maintained by Lucas.

18:05 And then another project, these are static analysis, but if you want to check to see if you're really using in runtime, whether the types are right or not.

18:15 Actually, I'm not sure if I'm telling this correctly, but as part of the pytest, no, I think I lied.

18:21 I don't think it checks runtime types.

18:24 It is still just a static type checker, but it's triggered by your pytest suite.

18:30 So like pytest can check doc tests, it can check other things as well, and this is just an extension that runs mypy while you're running your tests.

18:39 - Yeah, that's pretty cool, I like it.

18:40 - And it's maintained by our friend Dan Bader and David Tucker.

18:43 - That's a good one.

18:44 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 - No, we're getting into it a little bit.

18:58 We do introduce a little bit of the idea of test in the older grade levels.

19:04 Sean, my colleague, he uses it quite often just to set parameters.

19:08 We use the lingo.

19:10 He's a big fan of TEST and he's been trying to show me all of that.

19:15 So I plan to learn more this year, step by step.

19:19 We have the TEST book signed by somebody famous or something.

19:25 Amazing.

19:26 Got the legit version.

19:28 I'm blushing.

19:30 I know.

19:31 All right.

19:32 Speaking of working with kids, your next one has to do with LEGO Education.

19:37 Tell us about this.

19:38 I don't know if you're familiar with Lego Education.

19:40 We all know the Lego bricks that you buy at the store, but Lego Education launched a series of robots over the years.

19:48 The last robot that they launched was in 2013 called the EV3 Mindstorm.

19:54 And there hasn't been a new robot since.

19:57 The EV3 Mindstorm, you can still code with Python.

20:01 There was a gentleman named Nigel Ward who did this.

20:04 You'll have to dig into it yourself, this kind of convoluted way of getting Python to run on the EV3.

20:11 And it was a Debian Linux-based operating system.

20:15 Oh my goodness.

20:16 EV3 dev.

20:17 So you're going to have to explain that to me.

20:20 But it was a little bit difficult for a person not knowledgeable in Python to run it on Mindstorms.

20:26 We played with it a little bit, but it's kind of convoluted.

20:29 Well, since earlier this year, they're launching a new robot called Spike Prime.

20:35 and spike prime is said that it's going to be running with micro python and this is really huge that lego education is launching this because there's over three hundred thousand kids who compete with lego robotics and now instead of just using the lego programming operating system they're now gonna launch it with any programming system that they want to use and with support of micro python and in 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.

21:12 And it's just a really interesting thing, they even have its own Visual Studio Code extension where you can click on it, install it with Visual Studio Code.

21:20 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.

21:29 And it just seems a lot easier.

21:32 And there were a couple people with their hands 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, it looks like, for Pybricks.

21:47 And then David Lechner, Lorenz Voelk, and Antoine Van Hook are the Lego MicroPython release guys, and they have a lot of really cool programs that they've converted into MicroPython.

21:59 So we're excited.

22:00 This is such exciting news. This is like really a mainstream thing that will probably bring awareness of MicroPython and exposure of Python to a lot of kids and teachers.

22:10 Absolutely. And 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.

22:19 But with using MicroPython, you're pretty much getting down into correct angle and speed. And and you can use the gyroscope to regulate where it is on what GPS kind of coordination on a mat.

22:33 So you're gonna get a little bit more controlled environment.

22:36 So we're excited.

22:37 - I'm still buying that when it comes out.

22:39 (laughing)

22:40 It just sounds so cool.

22:42 - It's really cool.

22:43 Wait till Spike Prime gets released later this year.

22:45 It looks, it's got really a lot of colors.

22:47 So I think it sounds bad, but I think it's going to get more girls involved with robotics.

22:53 It's not the basic gray and white of the EV3.

22:56 There's a lot of colors on Spike Prime, so I'm excited about it.

22:59 - Yeah, it sounds like it's gonna look fun.

23:00 That's cool.

23:01 Yeah, very exciting.

23:02 Thanks for covering that one.

23:03 I think that's great.

23:04 So the last one, I wanna start with a popular saying.

23:08 So 20 years ago was the best time to plant a tree, but the second best time might be like right now.

23:15 And that's kind of the story for Mozilla.

23:17 So Mozilla has tons of Python, and they wrote this sort of, let's look at what we're doing with Python, large at Mozilla and what's the story around Python 3 and converting over to it.

23:32 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.

23:41 And they also have 462 repositories over at the Mozilla or GitHub repo organization." So they've got a lot of stuff going on with Python.

23:53 And they looked and they said, you know, most of this is Python 2 only.

23:57 Boo hoo.

23:58 So we all know that the end of life of Python 2 is quickly approaching.

24:03 Brian, you were talking about Python 2020.

24:06 Like that sounds still to me way in the future.

24:09 I don't know what 2020 is, but that is maybe while flying cars by then.

24:13 I don't know.

24:14 But that's way out there, isn't it?

24:15 This next year.

24:16 I know.

24:17 It's like five months.

24:18 It's crazy.

24:19 How is that possible?

24:22 So that is when Python 2 is going to be end of life.

24:25 So this is an interesting article because I know 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 they're doing their migration.

24:41 So this is kind of a walkthrough of where is Mozilla, where are they going, what's their assessment here.

24:47 And the idea was, first of all, do they actually need to migrate off of Python 2?

24:51 Technically, no, you could still download 2.7, you could still run it, but here's the things we're concerned about at Mozilla.

24:59 Python 2 will no longer receive security fixes.

25:01 That could be a problem.

25:03 More scary, I guess, is all the exciting growth of all the other packages they depend upon may no longer support Python 2.

25:11 And so they will be stuck on old versions of all the other libraries that are great.

25:15 So in a sense, the libraries they can use will be calcified, not just the runtime.

25:21 It also means delaying more code they got to migrate and probably writing new code that is not as easily migrated.

25:26 And it also has an opportunity cost that they can't use the cool features like async and wait and f-strings and all those good things.

25:33 So probably they should migrate to Python 3 is what they decided.

25:37 And their first step was to set up some linters.

25:41 They said one of the linters make sure that Python code at least can be imported into Python 3 without failing.

25:47 Like that's a pretty low bar.

25:49 can I say import this and run that statement under Python 3?

25:54 Yes or no, right?

25:55 But it's like, that's the first step, you know?

25:57 And then the other linter they set up was to make sure that all the Python 2 files had the dunder future import statements.

26:04 So things like print statements and whatnot were working out, right?

26:09 So you write the right print statements at least.

26:11 And then there's, we've talked a lot about pipenv, poetry, managing dependencies, all that kind of stuff.

26:17 And so there's an interesting conversation there about their evaluation of PipMF and Poetry and whether or not that made sense for them.

26:25 And PipMF 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, PipMF install whatever, right, request or something like that.

26:35 But it turns out the way Mozilla works with one huge mega repository, like monolith repository, those tools don't really work for that.

26:44 So they actually created this thing called Jetty, which is based on poetry that is more appropriate for those types of systems and dependencies and stuff.

26:52 So it's a pretty interesting look into some simple steps that Mozilla's taking to move to Python 3.

26:57 - Yeah, Jetty seems interesting.

27:00 Take a project based on another project that removes features.

27:04 - These features-- what did you do?

27:09 Well, I removed these three features, so now we won't use them.

27:12 [LAUGHTER]

27:14 Yeah, the idea of some of the stuff about the way poetry worked, just it assumed that the top level of the project is kind of all of it.

27:21 And at Mozilla, that's like all of their code in entirety, and they want to work in sub-bits.

27:25 Or something to that effect is what I got out of it.

27:28 All right, well--

27:29 No, that was cool.

27:30 Yeah, so--

27:30 I like it.

27:31 Yeah, 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 - One question for you, Michael.

27:45 Wouldn't the second best time to plant a tree be 19 years ago?

27:49 - Yeah, but it makes explaining the thing a long, it takes like 21 statements instead of two, so.

27:57 - Okay, okay, all right.

27:59 - All right, so that's our main topic.

28:01 So Brian, you got anything extra you just wanna throw out there real quick?

28:03 - Yeah, the beta three for Python 3.8 is out and the core Python team is encouraging everybody, especially people that maintain third-party package at third-party Python projects, to heavily test 3.8 because it can be fixed now.

28:21 But if you wait until 3.8 is actually out, it's harder to fix.

28:24 So please test.

28:26 - It seems like we're getting a little bit closer to Python 4.

28:29 Is that in the future?

28:30 - It's such an interesting idea.

28:35 - 2.7, 3.8.

28:37 - Well, I asked, speaking of Lucas Lang, I asked him about it back at PyCon when I did an interview with him and Anthony Shaw around the features of Python 3.8.

28:45 And I think there's hesitation to have a double-digit second number there, like 311 or something like this.

28:54 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 4 anytime soon.

29:02 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 - Yeah, that would be nice, wouldn't it?

29:13 - 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 - That's right, we've been converting for like 10 years, let's just keep going.

29:22 All right, so I've got a quick one I wanna throw out there.

29:25 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.

29:34 Install and manage those separately, kind of like Homebrew, but for Python stuff.

29:38 It now has shell completions, which is pretty cool.

29:40 So you can install this real easy.

29:43 You can say pipx space u tab, and it'll show you all the things that you can send to PipX that starts with u, for like upgrade, upgrade all, things like that.

29:51 Not a huge thing, but I'm a big fan of PipX, so it's a little bit better still.

29:54 - That's good.

29:55 - Yeah, Kelly, how about you?

29:56 - So, you gotta put a plug in for our podcast at

30:00 Sean Tyber and I, we started this podcast because if you haven't heard, I'm a new coder.

30:08 I can't say I'm a newbie anymore.

30:09 I guess I've been around for a year now trying to learn how to code and Sean's a new teacher.

30:13 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.

30:22 And it's just about our pitfalls and what we've learned and it's been a great push for me learning Python.

30:28 So for all those people that listen to you guys, Michael and Brian, I think it's a good in-between.

30:35 We come home and after we listen to you, we start Googling, what is he talking about?

30:40 It's great.

30:41 - Yeah, that's a great podcast.

30:42 I'm happy you all are doing it.

30:43 I think you're doing good work there.

30:45 - I recommend the podcast to anybody that is, has to teach anybody anything Python related, not just teachers or paid instructors.

30:55 If you're acting as a mentor within your organization, I think that you get a lot out of this podcast also.

31:01 - 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, you know, it's not Python, God forbid, it's something else.

31:12 It's just that idea of all the other skills that come along with being a coder.

31:16 - Yeah, it's a good podcast.

31:17 People should definitely check it out, especially, like Brian said, if you're in that role somehow.

31:22 All right, time for a joke, huh?

31:24 This is visual, so I'm gonna set the stage, You have to click that link to open that and see the image here, okay?

31:32 I'm going to describe it to folks.

31:34 We'll see if we can do a visual joke on the air.

31:36 So here's the idea.

31:38 In Python, you just had this phrase, something to the effect of, we're all consenting adults.

31:44 We don't need to be overly protective or overly structured in how we put our data together.

31:50 We can just say, this part of our data is meant to be internal, leave it alone.

31:54 And so there's conventions, but not really enforcement in the language to make that happen.

31:58 So if I have a module and something was an internal implementation, I might have underscore value instead of value, or underscore method for a private method.

32:07 But of course, you could still get to it, right?

32:10 So the joke is, this is a little cartoon.

32:12 And the cartoon is a door and a welcome mat.

32:15 It has a key.

32:16 Sometimes you have a key under the doormat, but the key's half sticking out.

32:20 Kelly, what does it say by a little annotation there?

32:24 It says Python private method.

32:26 It's you know, you're not supposed to pick it up, but it's right there.

32:31 So anyway, we'll put the link in the show notes.

32:33 Y'all can click it, check it out.

32:35 But it's pretty funny.

32:36 That comes to us both from real Python and Nick's spirit.

32:39 So thanks guys for sending that over.

32:40 All right.

32:42 Well, that's it for the show.

32:43 Brian, great to chat with you as always.

32:45 Kelly, thanks for being here.

32:47 It was great to talk to you and get your perspective on all this stuff.

32:49 Thank you for having me.

32:51 It's always fun talking to you guys and listening to you guys.

32:53 Yeah, you bet. See y'all later.

32:55 Thank you for listening to Python Bytes.

32:57 Follow the show on Twitter via @PythonBytes.

32:59 That's Python Bytes as in B-Y-T-E-S.

33:02 And get the full show notes at

33:05 If you have a news item you want featured, just visit and send it our way.

33:10 We're always on the lookout for sharing something cool.

33:12 On behalf of myself and Brian Auchin, this is Michael Kennedy.

33:16 Thank you for listening and sharing this podcast with your friends and colleagues.

Back to show page