#92: Bonus: Python Bytes Crossover: Python 3.6 is going to be awesome, Kite: your friendly co-developing AI Transcript
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.