Learn Python with Talk Python's 270 hours of courses

#92: Bonus: Python Bytes Crossover: Python 3.6 is going to be awesome, Kite: your friendly co-developing AI Transcript

Recorded on Monday, Dec 12, 2016.

00:00 Hey everyone, Michael here. It's just about time to close out 2016, isn't it? Well, I have a few

00:06 comments and a bonus episode for you. So first of all, thank you so much for listening to Talk

00:11 Python, helping make it a success. It really means a lot to me and I love all the listeners. I love

00:17 the community around it and just want to say thanks for taking the time and subscribing and

00:22 listening. I've had so much fun that I decided to start a second podcast. You may have heard of it.

00:26 It's called Python Bytes and I launched this podcast with Brian Okken. The whole idea behind

00:31 it is that we're going to bring Python headlines and news and kind of just new cool items to your

00:37 earbuds, right? So every week we'll try to cover some timely news and maybe just something cool that

00:42 we found. It's much shorter. It's not really an interview format or long form format as I think

00:46 of Talk Python. So I've decided to post this single episode of Python Bytes to the Talk Python listeners

00:53 so everyone gets a chance to check it out. I know many of you have extra time around New Year's.

00:57 So here's one more episode for you to listen to while you're driving to and from relative's house.

01:03 If you like what you hear, just visit pythonbytes.fm and subscribe to get episodes like this weekly.

01:08 So I want to wish you all a happy holiday season and happy New Year. And I'll be back on Talk

01:14 Python in a few days with Software Carpentry and the Sciences with Jonah from software-carpentry.org.

01:21 Until then, enjoy this episode with Brian and myself and have a great break.

01:25 This is Python Bytes. Python headlines and news delivered directly to your earbuds. It's episode 6,

01:32 recorded Monday, December 12th. This episode is brought to you by Rollbar. They help take the pain

01:37 out of errors. Thank you so much, Rollbar, for sponsoring the show. And this is Michael Kennedy,

01:41 one of your hosts. I'm here with Brian Okken, my co-host. Hello, Brian. How's it going, man?

01:45 Hello. It's going really good.

01:47 Good, good. This year's gone by quickly, hasn't it?

01:50 It's gone. It's super fast.

01:52 Yeah. I feel like everyone was fixated on the election because it was so unique. And then

01:58 kind of nobody knows what to do with the rest of the year. So I'm going to go on vacation. How about

02:03 you?

02:03 I'm going to start writing. So yeah, you got a book to finish, man. Anyway, so the point is,

02:10 this is actually our last episode of the year. So I want to say thanks to everybody who subscribed and

02:15 listened and shared this podcast with their friends. We're taking a break and we will be back first

02:22 thing in January, first week. We'll have even more news to share, won't we?

02:26 Yeah. That'll be, I have like three weeks of stuff to catch up on.

02:29 Yeah. Hopefully no drama. Okay. So what's the first item you want to share with everyone? What

02:34 do you find?

02:34 Well, there's an article by Dan Bader, make your Python code more readable with custom exception

02:40 classes. This is great. He wrote up a little tutorial along with a five minute video where he

02:46 walks through stuff. He talks about the, including your own exception classes can make your errors

02:51 more readable within your code and also communicate to the users of your functions or whatever your

02:58 intent and what the errors are. And also you can add more context. I like it because it's one of

03:03 those things that I was afraid to add custom exceptions and it's really just pretty darn easy.

03:08 The main points I think is to remember to derive from either exception or one of the other built-in

03:14 Python exceptions.

03:15 Like value error or something like that, right?

03:17 Yeah. Whatever sort of makes sense. And, and it's a, it's a good one. I also wanted to add that if you

03:25 are, there's extra things you should do if you're releasing a package and, or even within, within your

03:31 company, I think it's good to derive from your own, create a custom exception and then derive all your

03:37 other exceptions from that one. And I got that tip from another article that we'll link to in the show

03:42 notes by Julian Danju.

03:44 Yeah. Yeah. Yeah. Yeah. That's a really great point actually, because it would be great to do try

03:49 except all of the errors from this package. Like whatever's happening in here, I want to start by

03:54 handling those and maybe get more specific ones. Maybe not, but yeah, I hadn't really thought about

04:01 that. The make your own special base exception.

04:04 even the reverse try to do specific first and then, and then do a catch all of those. And then

04:10 if it isn't one of your package ones, then you can also still catch the general exception and do

04:16 something different there.

04:17 Yeah. That's cool. There's two, there's a couple of things about this article. I like

04:20 when Dan Bader is doing a bunch of cool videos on YouTube, he really seems to be putting a lot of

04:25 effort to frequently get those out. And so here's an article that takes like five minutes to read,

04:29 but there's also a five minute video screencast to go along with it. So well done on that, Dan.

04:34 And then more generally, this idea here, it makes it easier for one of my favorite programming

04:40 patterns, which is also quite Pythonic is in that it's the pattern is it's easier to ask for

04:45 forgiveness than permission, as opposed to like the C++ style. Look before you leap programming

04:51 model where you test the heck out of everything that you try thing. You just here, you just do it.

04:55 If there was an exception, you know, you catch it and then accept block and it's all good.

05:00 Yeah. I definitely like a, at a high level, like for instance, if I were, as an example,

05:05 if I were using requests, I could have a special handler that dealt with exceptions from requests

05:11 and know that, that I, cause I understand what part of my system's dealing with that. I could

05:16 handle it in one place. right. Absolutely. Yeah. Could not contact server. The web service

05:21 seems to be down something like this, right? Beautiful. Wouldn't it be awesome if like artificial

05:26 intelligence could just like sit there and just like help you code? I mean, we all know of AI for

05:33 like Siri and silly things like that, but I feel like actually 2016 is a little bit where the future

05:39 kind of intersected with now it like things became the future came to us. There are so many things

05:44 with AI that are really awesome. Like there was several AIs that actually on their own invented

05:49 encryption. But what I want is an AI to help me as a developer. How about you? Sounds great. Yeah.

05:55 That'd be super cool. So, so I actually ran across this thing. one of the listeners,

05:59 Gilberto Diaz was nice enough to send me a link and, an email and say, Hey, there's this thing

06:04 that is so cool. You must check it out. It's not technically built in Python, but it really supports

06:10 Python developers in a crazy good way. So there's this thing called kite at kite.com and it's in

06:15 private beta. We were lucky enough to get some early access to it. And what it is, is like you install

06:20 it in your OS and it sits in kind of like a sidebar and it takes up maybe like, I don't know, a fifth of

06:25 your screen. If you have two screens and you know, stick it on the other one and it watches what you do

06:30 in all sorts of different programming environments in sublime text and Visual Studio Code in pycharm,

06:36 even Vim or Emacs has many, many plugins. As you type, it helps you. All right. So, if you're

06:45 writing Python code and you type import space, it'll show you a list of the most popular packages. If you

06:51 type R, it'll show you the list of the most popular packages that start with R like request right at the

06:55 top. Yeah. And then once you import a thing, it'll start showing you documentation about it. Here's

07:00 some examples on how to use that thing you just imported. As you start to like, you know, interact

07:04 with it, like request dot, it'll say, well, the most commonly called function here is get, you want to

07:08 see some examples, how to use request dot get or like the documentation. And it just, it just really

07:14 is quite cool how much it knows. And you know, it does auto completion. Like many editors do it'll,

07:21 it'll like show you on the left, like, here's the things you can complete. But what I like about it is

07:25 it uses like crowdsourcing for popularity. So there's like, you know, 10,000, developers

07:32 working on this and they'll say, well, this is the most popular completion in this situation here.

07:37 Base, not just alphabetical or something. So I think it's cool. There's, there's a great video.

07:41 You have to watch if you go check this out at kite.com. It's like right there in the homepage.

07:45 I'm, I'm looking forward to playing with it. Yeah. You, you'd mentioned it seems like AI pair

07:50 programming and, does sure sound like that. It's, it's quite interesting. I feel like it's

07:55 more like an artificial intelligence mentor rather than paired programmer. Like it's going,

08:00 Oh, by the way, did you know that the, you actually can call this function? Oh,

08:03 that package is really cool. Cause it has this thing you might not know about. It's kind of like

08:07 the wiser, wiser version rather than like, you know, pair programmer, but I think it's great.

08:12 Oh, definitely looking forward to trying that. Yeah, for sure.

08:14 I hate it when my data gets messy. Yeah, definitely. so there, there's an article,

08:20 by, I'm going to even try this John Nicholas hold, I think tidy data in Python. This article

08:28 was pretty interesting. It caught my attention because I often have data that's in a format that

08:33 I can't use right away and I need to transform it into something else. And I didn't ever think of it

08:39 like, changing tables around and, and completely changing things automatically. Anyway,

08:44 this article gives some, some attributes of what problems to look at and data sets. He based it on

08:50 a paper named tidy data by Hadley Wickham. He takes the idea of the paper and then transfers it to,

08:59 into Python and how to, how to utilize it in Python with the pandas library. And like, so this seems

09:06 very abstract right now, but he has some examples of, data that's, that's really data is in the,

09:12 the column headers. He has some attributes to look for, like each variable forms a column and contains a

09:19 value and each observation forms a row and the type of observation units form a table. And it still sounds

09:28 kind of complex or kind of abstract, but the examples really are pretty easy to follow. And I, it's just a,

09:34 a neat idea of, of taking a look at your data and making it more useful.

09:38 I had never really thought about data in this sense, but it seems to me like this talks about how you put

09:44 your data together so that you'll be, it's most natural to take advantage of it with things like

09:49 pandas and the various, data science tools and all sorts of languages, but he's focused on Python,

09:56 which is extra cool. And so he's, he has several examples on, on, you know, do things this way,

10:01 not that way. And your life will be much easier. And I just never thought of systemizing that, I guess.

10:06 Yeah. And also, looking at the different comparison of before and after tables, you can

10:12 definitely see how it's definitely the, the converted table is easier programmatically, but the from table,

10:19 the, the dirty one is, it's, it's more broken up, like how people look at stuff. I,

10:26 I didn't think there would be a difference, but it does appear to be it's, it's easier for,

10:30 to visualize smaller tables as people, but, as computers, we need things a little bit more

10:36 broken down.

10:37 Yeah, it's cool. So if you've got a lot of data, especially in tabular form, check that out.

10:40 We're going on break. Like I'm actually heading out on vacation somewhere away from home and,

10:46 you know, I'm still taking my laptop with me because that would be kind of insane, but you know,

10:50 our sponsor roll bar, they, they were going to let me just chill out and not worry about

10:55 whether the web app is working and not check it all the time. Like I might not use my computer for

10:59 a few days unless I get notifications on my phone or, you know, text messages or Slack or something

11:05 like that saying, Hey, your website's down. There's this problem. You know, things are going to be good.

11:09 I'm not going to worry about it. That's because I got roll bar integrated with all the talk Python

11:12 stuff, which is really cool. So if there's a problem, you know, I can just read what the error

11:16 is and probably fix it pretty easily. So all the Python byte listeners, they can have the same

11:20 peace of mind. They just have to go to rollbar.com slash Python bytes and sign up for the free tier.

11:24 Sounds cool, huh?

11:25 Sounds very good.

11:26 Yeah. Yeah. It's good. It's good to be on vacation and you'll not worry about things working. Just

11:31 set up the error notifications and you're all good. I'm really excited that there's a new version of

11:37 Python. I'm, I think people are starting to move on from legacy Python and there's just end of this

11:42 week. There's going to be one more reason to do so. So we actually have as our next item, a video,

11:48 a conference presentation at PyCon Canada, 2016 by Brett Cannon. He did a talk called what's new in

11:55 Python three. And I think it's interesting. You look at all the peps and all the stuff that's coming

12:01 and you think, well, okay, they're doing little tweaks here. I guess it has new string formatting,

12:04 whatever. It turns out there are over 16 peps in Python three six. And that's more than any peps

12:11 that have been in Python three other than the actual creation of Python 3.0 itself. That's pretty cool,

12:16 right?

12:17 Maybe we should have had another role before now then maybe, but I'm excited for all of these.

12:22 Yeah. It's going to be great. It's going to be great. The reason I like this video and I want to

12:26 point it out is we could all go to, you know, what's new in Python three and we can read the list.

12:32 Like, okay, well here dictionaries will be ordered. there's now a private identifier or like a

12:37 versioning number on dictionaries. Like, okay, whatever, who cares? This gives you the story

12:41 behind all the changes coming to Python three six, right? Why did the core developers of which Brett

12:47 is one think that this is a good idea? Like, how does it help? What, what really problem,

12:52 what problem are they really trying to solve deep down when they made this change? And it really is

12:57 a cool look inside what's coming with Python three six. that sounds great.

13:02 I think it's, it's good. So Python three six release candidates available right now if you want to

13:07 download it, but you know, if you can wait like five days, you should have the final version of Python

13:11 three six. They did something with virtual environments, right?

13:14 Yeah. This is one of the things I, I was stumbled across. I think it was in a Reddit line somewhere.

13:19 The command command line command of pyvenv, which I can't remember which version that came in on one

13:26 of the three O's that's being deprecated. And the reason, and they want people to use the dash

13:32 M V E N V instead. And that's so that you specifically tell the virtual environment system,

13:40 which Python to use. And it makes the programmer know, need to know how to get to Python first before

13:47 they create a virtual environment. I think that it totally makes sense. It's just something to point

13:52 out. I think it's important. It, I'm going to have to actually edit my book because of this,

13:57 because, I think I, I recommended pyvenv in mine. So time to un-recommend it.

14:03 Yeah. That's cool. No, I do think it is good. I mean, you can say Python three --version. You'll see what that is. And then you can say

14:10 Python three dash M V and V, and then that's the thing you're going to get. Right. So it is a little

14:14 more clear, I guess. Very cool. Yeah. It wouldn't be a week in Python without some form of testing or

14:20 code coverage, right? Yeah, definitely. And, Ned Batchelder, who we all owe some gratitude for,

14:26 for coming up with, or for taking over the coverage package. He's, I interviewed him,

14:32 about that on episode 12 of testing code, but, he's planning a new feature for coverage up high,

14:38 which will tell us which, so when you, when you run a coverage report, also what functions

14:45 caused this or how did you get this stuff covered? And, he covers it in an article. He taught,

14:51 he titled, who tests what this is a discussion about kind of, how I like the discussion because

14:58 those, those, those people new to coverage can kind of peek inside and see the different stages

15:03 of how coverage works. It goes through measurement and storing the data and then combining the data

15:08 and reporting because you can't have multiple tests, most multiple runs and combine them into,

15:14 to one report. This idea of, trying to figure out which code was covered by which tests

15:20 is how it started, but he comes up with some, some reasons why there may be more,

15:25 more uses than just in testing. And it's a, it's a good discussion, but part of one of the things he,

15:32 why he wrote this article is, is to try to get some help. He wants some feedback.

15:36 So some of the questions are, he discusses the memory, memory usage and, and the data model.

15:42 And he wants to know if there's something we need more sophisticated problem solving on this,

15:48 or should we be more conservative with memory? And then the output, the output right now is intended

15:53 to be in Jason, but he wants to know if somebody could use a different data format. I like the

15:59 direction he's going with it. And I think I'll use it. And I encourage anybody that has sort of a

16:04 non-standard usage of coverage to take a look at this article and give Ned some feedback.

16:08 Yeah. I really like it as well, because a lot of times, unless you're actually a contributor to the

16:13 project already, you feel like the fate of the thing has already determined, but this was much more like,

16:19 look, we have this challenging problem. these are the ways and the trade-offs were

16:23 thinking about the ways we're thinking about solving it. The trade-offs were contemplating.

16:26 We're not sure where to go. If you want to help, here's how to help. If you want to give us feedback

16:31 before we jump in and go the wrong direction, do it. So this is a really cool article just on philosophy

16:36 as well.

16:37 Yeah. I think it's great.

16:38 And being able to know which tests actually triggered the covered line when you run a thousand

16:43 tests. Well, with these three, like, that's pretty interesting.

16:46 Yeah. And you know, before I talked to him, I didn't realize that there was,

16:49 there were so many features of coverage that I didn't realize, like being able to have multiple

16:53 test runs and combine that data and HTML output and things like that. It's pretty cool.

16:58 Yeah. Yeah. Quite cool. Quite cool.

16:59 So what do you got for us, Michael?

17:01 All right. I got one, one final glorious topic for the rest of the year to round out 2016. So

17:07 here it is. Threaded asynchronous magic and how to wield it. So this is a really cool article by

17:14 Christian Medina. You know, we had talked about the, I don't remember exactly the title,

17:19 but that asyncio tutorial that was like the G event tutorial remade for asyncio and Python 3.4.

17:26 And we're like, well, wouldn't it be cool if there's a great one on async and await, like the really,

17:30 the truly new cool features of Python for threading and parallelism. Well, Christian Medina wrote it.

17:37 Awesome.

17:38 He wrote a really nice one and it has a bunch of bite-sized examples. You can, you know,

17:43 they're not too, they're not too large, but they don't seem entirely fake. So he has one example of

17:48 like sending email notifications, sort of asynchronously, but it's like, you know, but you

17:54 realize there's no awaitable asynchronous, like way to send mail in Python. So, well, we're just going to

17:59 block, but at least we can use this asyncio loop for that. That's cool. And then also talked about the

18:04 AIO HTTP library, which is an HTTP client server for asyncio and how to do a bunch of parallel web

18:12 requests. So we often think about requests being the primary way that we do programming against web

18:19 services and generally HTTP, but this is another option that's really simple that fits exactly into

18:25 the asyncio. So you can easily block on the network calls, which will then free up the thread to go do

18:31 other stuff because it knows it's waiting on the network. That sounds cool. Yeah.

18:34 Yeah. It's really cool. It covers things like tasks, scheduling tasks, scatter, gather styles of

18:39 programming, and then even moving the asyncio loop to a background thread. So you don't block up your

18:44 main thread, but you kind of have a place to put all the asynchronous work and let it run on that other

18:48 one thread, which is pretty cool. So yeah. So thanks Christian for doing that. Got to meet him at

18:54 PyCon last year. And so that was fun. And hopefully everyone else is going to PyCon. If you don't have

19:00 your tickets yet, you need to be getting it right, Brian. Definitely. I missed out last year. So

19:05 don't be sad. Get tickets before they sell out because this I'm sure it will sell out. It sold

19:10 out early last year. And plus it's in Portland and Portland rocks. Portland definitely rocks. It's

19:15 going to be weird. They're going to be keeping it weird. All right. Well, that's it for me. I don't

19:21 really have a whole lot of news to share other than just saying thanks to everyone for listening,

19:24 you know, for our new podcast. It's been fun to do for you and I appreciate all the feedback.

19:29 I appreciate it too. Speaking of feedback, we did get one person. I think it's Harry J. I hope I

19:36 didn't pronounce that wrong on Twitter said that he listened to episode three and I had mentioned that

19:42 a library called Pianini that don't know if I'm pronouncing that right, but I assumed that these were

19:48 that maybe it was named after the Knights who say knee. We thought that would be fun anyway. Yeah,

19:53 definitely. But Harry J. tells me that this is not true. It's named after a Sanskrit grammarian

20:01 with a P-A. I don't know how to pronounce that either. It's P-A-N-I-N-I. Anyway, thanks. I like

20:07 fact checking. Yeah, it's great to have fact checkers. Awesome. I'm still going to call it Pianini.

20:11 Knee, knee, knee. Yeah, definitely. Just know it has a different origin. Okay. Well, thank you,

20:19 Brian. Thank you everyone for listening. Thank you, Royal Bar for sponsoring the show. We will

20:23 see you all in January. Until then, you know, enjoy the winter wonderland unless you're down

20:28 in Australia, then have a nice summer. Yeah, definitely. See you next year.

20:32 Yeah. See you next year. Bye everyone. Bye.

20:34 Thank you for listening to Python Bytes. Follow the show on Twitter via at Python Bytes. That's

20:39 Python Bytes as in B-Y-T-E-S. And get the full show notes at pythonbytes.fm. If you have a news item

20:46 you want featured, just visit pythonbytes.fm and send it our way. We're always on the lookout for

20:51 sharing something cool. On behalf of myself and Brian Okken, this is Michael Kennedy. Thank you for

20:56 listening and sharing this podcast with your friends and colleagues.

Back to show page
Talk Python's Mastodon Michael Kennedy's Mastodon