Python Bytes - #6 Python 3.6 is going to be awesome, Kite: your friendly co-developing AI

Episode Date: December 12, 2016

See the full show notes for this episode on the website at pythonbytes.fm/6...

Transcript
Discussion (0)
Starting point is 00:00:00 This is Python Bytes, Python headlines and news delivered directly to your earbuds. It's episode six, recorded Monday, December 12th. This episode is brought to you by Rollbar. They help take the pain out of errors. Thank you so much, Rollbar, for sponsoring the show. And this is Michael Kennedy, one of your hosts. I'm here with Brian Aukin, my co-host. Hello, Brian.
Starting point is 00:00:18 How's it going, man? Hello. It's going really good. Good, good. This year's gone by quickly, hasn't it? It's gone. It's super fast. Yeah, I feel like everyone was fixated on the election because it was so unique and then kind of nobody knows what to do with the rest of the year so i'm gonna go on vacation how about you
Starting point is 00:00:36 i'm gonna i'm gonna start writing so yeah you gotta fuck to finish man anyway so the point is this is actually our last episode of the year. So I want to say thanks to everybody who subscribed and listened and shared this podcast with their friends. We're taking a break and we will be back first thing in January, first week. We'll have even more news to share, won't we? Yeah, we'll have like three weeks of stuff to catch up on. Yeah, hopefully no drama. Okay, so what's the first item you want to share with everyone?
Starting point is 00:01:07 What did you find? Well, there's an article by Dan Bader, Make Your Python Code More Readable with Custom Exception Classes. This is great. He wrote up a little tutorial along with a five-minute video where he walks through stuff. He talks about including your own exception classes can make your errors more readable in your in within your code and also communicate to the users of your functions or whatever your intent and what the errors are. And also you can add more context. I like it because
Starting point is 00:01:36 it's one of those things that I was afraid to add custom exceptions. And it's really just pretty darn easy. The main points I think is to remember to derive from either exception or one of the other built-in Python exceptions. Like value error or something like that, right? Yeah, whatever sort of makes sense. And it's a good one. I also wanted to add that if you are, there's extra things you should do if you're releasing a package or even within your company, I think it's good to derive from your own. Create a custom exception and then derive all your other exceptions from that one. And I got that tip from another article that we'll link to in the show notes by Julian Danju.
Starting point is 00:02:17 Yeah, yeah, yeah. That's a really great point, actually, because it would be great to do try, accept all of the errors from this package. Like whatever's happening in here, I want to start by handling those. because it would be great to do try, accept all of the errors from this package. Like whatever's happening in here, I want to start by handling those and maybe get more specific ones, maybe not. But yeah, I hadn't really thought about that. The make your own special base exception. Even the reverse, try to do specific first and then do a catch all of those. And then if it isn't one of your package ones,
Starting point is 00:02:46 then you can also still catch the general exception and do something different there. Yeah, that's cool. There's a couple of things about this article I like. One, Dan Bader's doing a bunch of cool videos on YouTube. He really seems to be putting a lot of effort to frequently get those out. And so here's an article that takes like five minutes to read,
Starting point is 00:03:02 but there's also a five minute video screencast to go along with it. So well done on that, Dan. And then more generally, this idea here, it makes it easier for one of my favorite programming patterns, which is also quite Pythonic is in that it's the pattern is it's easier to ask for forgiveness than permission, as opposed to like the C++ style. Look before you leap programming model where you test the heck out of everything and then you try a thing, you just, here you just do it. If there is an exception, you know, you catch it and then accept block and it's all good.
Starting point is 00:03:33 Yeah. Definitely like at a high level, like for instance, if I were, as an example, if I were using requests, I could have a special handler that dealt with exceptions from requests and know that, that I, cause I understand what part of my system is dealing with that, I could handle it in one place. Right. Absolutely. Yeah. Could not contact server. The web server seems to be down. Something like this, right? Beautiful. intelligence could just like sit there and just like help you code. I mean, we all know of AI for like Siri and silly things like that, but I feel like actually 2016 is a little bit where the future kind of intersected with now. Like things became, the future came to us. There are so many things with AI that are really awesome. Like there was several AIs that actually on their own invented encryption, but what I want is an AI to help me as a developer.
Starting point is 00:04:26 How about you? Sounds great. Yeah, that'd be super cool. So I actually ran across this thing. One of the listeners, Gilberto Diaz, was nice enough to send me a link and an email and say, hey, there's this thing that is so cool, you must check it out. It's not technically built in Python, but it really supports Python developers in a crazy good way. So there's this thing called kite at kite.com and it's in private beta. We were lucky enough to get some early access to it. And what it is, is like you install 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 your screen. If you have two screens and you know, stick it on the other one and it watches what you do in all sorts of different programming
Starting point is 00:05:05 environments in Sublime Text, in Visual Studio Code, in PyCharm, even Vim or Emacs has many, many plugins. As you type, it helps you. All right. So if you're writing Python code and you type import space, it'll show you a list of the most popular packages. If you type R, it'll show you the list of the most popular packages that start with R, like request right at the top. Yeah, and then once you import a thing, it'll start showing you documentation about it. Here's some examples on how to use that thing you just imported. As you start to interact with it, like request dot, it'll say, well,
Starting point is 00:05:39 the most commonly called function here is get. You wanna see some examples how to use request.get or like the documentation and it just it just really is quite cool how much it it knows and you know it does auto completion like many editors do it'll it'll like show you on the left like here's the things you can complete but what i like about it is it uses like crowdsourcing for popularity so there's like you know 10 000 uh developers working on this. And you'll say, well, this is the most popular completion
Starting point is 00:06:08 in this situation here. Not just alphabetical or something. So I think it's cool. There's a great video you have to watch if you go check this out at kite.com. It's like right there on the homepage. I'm looking forward to playing with it. Yeah, you'd mentioned it seems like AI pair programming.
Starting point is 00:06:26 And does it sure sound like that it's it's quite interesting i feel like it's more like an artificial intelligence mentor rather than paired programmer like it's there going oh by the way did you know that the you actually can call this function oh that package is really cool because it has this thing you might not know about it's kind of like the wiser wiser version rather than like you know pair programmer but i think it's great. Oh, definitely looking forward to trying that. Yeah, for sure. I hate it when my data gets messy. Yeah, definitely. So there's an article by, I'm going to even try this, Jean-Nicolas Hold,
Starting point is 00:06:57 I think, tidy data in Python. This article is pretty interesting. It caught my attention because I often have data that's in a format that I can't use right away and I need to transform it into something else. And I didn't ever think of it like changing tables around and completely changing things automatically. Anyway, this article gives some attributes of what problems to look at in datasets. He based it on a paper named Tidy Data by Hadley Wickham. He takes the idea of the paper and then transfers it into Python and how to utilize it in Python with the Pandas library.
Starting point is 00:07:37 And so this seems very abstract right now, but he has some examples of data that's really data in the column headers. He has some examples of data that's really data is in the column headers. He has some attributes to look for, like each variable forms a column and contains a value and each observation forms a row and the type of observation units form a table. And it still sounds kind of complex or kind of abstract, but the examples really are pretty easy to follow. And it's just a neat idea of taking a look at your data and making it more useful. I had never really thought about data in this sense.
Starting point is 00:08:14 But it seems to me like this talks about how you put your data together so that you'll be, it's most natural to take advantage of it with things like pandas and the various data science tools in all sorts of languages. But he's focused on Python, which is extra cool. And so he has several examples on, you know, do things this way, not that way, and your life will be much easier. And I just never thought of systemizing that, I guess. Yeah. Yeah, and also looking at the different comparison of before and after tables, you can definitely see how the converted table is easier programmatically, but the from table, the dirty one, it's easier to visualize smaller tables as people, but as computers, we need things a little bit more broken down. Yeah, it's cool. So if you've got a lot of data, especially in tabular form, check that out. We're going on break. I'm actually heading out on vacation somewhere away from home, and I'm still taking my laptop with me,
Starting point is 00:09:22 because that would be kind of insane. But our sponsor, Rollbar, they were going to let me just chill out and not worry about whether the web app is working and not check it all the time. I might not use my computer for a few days. Unless I get notifications on my phone or text messages or Slack or something like that saying, hey, your website's down, there's this problem. Things are going to be good. I'm not going to worry about it. That's because I got Rollbar integrated with all the TalkPython stuff,
Starting point is 00:09:46 which is really cool. So if there's a problem, I can just read what the error is and probably fix it pretty easily. So all the Python Byte listeners, they can have the same peace of mind. They just have to go to rollbar.com slash Python Bytes and sign up for the free tier. Sounds cool, huh? Sounds very good.
Starting point is 00:10:00 Yeah, it's good to be on vacation and not worry about things working. Just set up the error notifications and you're all good. I'm really excited that there's a new version of Python. I think people are starting to move on from legacy Python. And there's just, end of this week, there's going to be one more reason to do so. So we actually have as our next item, a video, a conference presentation at PyCon Canada 2016 by Brett Cannon. He did a talk called What's New in Python 3? And I think it's interesting.
Starting point is 00:10:32 You look at all the peps and all the stuff that's coming and you think, well, okay, they're doing little tweaks here. I guess it has new string formatting, whatever. It turns out there are over 16 peps in Python 3.6. And that's more than any peps that have been in Python 3, other than the actual creation of Python 3.0 itself. That's pretty cool, right? Maybe we should have had another role before now then, maybe. But I'm excited for all these. Yeah, it's going to be great. It's going to be great. The reason I like this video,
Starting point is 00:10:59 and I want to point it out, is we could all go to, you know, what's new in Python 3, and we can read the list like okay well here dictionaries will be ordered uh there's now a private identifier or like a versioning number on dictionaries like okay whatever who cares this gives you the story behind all the changes coming to python 3.6 right why do the core developers of which brett is one think that this is a good idea like how does it help what what really problem what problem are they really trying to solve deep down when they made this change and it really is a cool look inside what's coming with python 3.6 that sounds great i think it's it's good so python 3.6
Starting point is 00:11:37 release candidate it's available right now if you want to download it but you know if you can wait like five days you should have the final version of python 3.6 they did something with virtual environments right yeah this is one of the things i i was stumbled across i think it was in a reddit line somewhere the command command line command of pi venv which i can't remember which version that came in on one of the three o's that's uh being deprecated and the, and they want people to use the dash M V E N V instead. And that's so that you specifically tell the virtual environment system, which Python to use. And it makes the programmer know, need to know how to get to Python first before they create a virtual environment. I think that it totally makes sense. It's just something to point out.
Starting point is 00:12:25 I think it's important. I'm going to have to actually edit my book because of this because I think I recommended PyVNV in mine. Time to un-recommend it? Yeah. That's cool. No, I do think it is good. I mean, you can say Python 3 dash dash version.
Starting point is 00:12:42 You'll see what that is. And then you can say Python 3 dash mvmv, and then that's the thing you're going to get, right? So it is a little more clear, I guess. Very cool. It wouldn't be a week in Python without some form of testing or code coverage, right? Yeah, definitely.
Starting point is 00:12:55 And Ned Batchelder, who we all owe some gratitude for for coming up with or for taking over the coverage package, I interviewed him about that on episode 12 of Testing Code. But he's planning a new feature for coverage.py, which will tell us which, so when you run a coverage report, also what functions cause this, or how did you get this stuff covered? And he covers it in an article he titled, Who Tests What? This is a discussion about kind of how, I like the discussion because those people new
Starting point is 00:13:32 to coverage can kind of peek inside and see the different stages of how coverage works. It goes through measurement and storing the data and then combining the data and reporting because you can't have multiple tests, multiple runs and combine them into one report. This idea of trying to figure out which code was covered by which tests is how it started. But he comes up with some reasons why there may be more uses than just in testing. And it's a good discussion. But part of one of the things why he wrote this article is to try to get some help. He wants some feedback. So some of the questions are he discusses the memory usage and the data model, and he wants to know if there's something we need more sophisticated problem solving on this,
Starting point is 00:14:21 or should we be more conservative with memory. And then the output right now is intended to be in JSON, but he wants to know if somebody could use a different data format. I like the direction he's going with it, and I think I'll use it. And I encourage anybody that has sort of a non-standard usage of coverage to take a look at this article and give Ned some feedback. Yeah, I really like it as well, because a lot of times, unless you're actually a contributor to the project already, you feel like the fate of the thing is already determined. But this was much more like, look, we have this challenging problem.
Starting point is 00:14:54 These are the ways and the trade-offs we're thinking about, the ways we're thinking about solving it, the trade-offs we're contemplating. We're not sure where to go. If you want to help, here's how to help. If you want to give us feedback before we jump in and go the wrong direction do it so this is a really cool article just on philosophy as well yeah i think it's great and being able to know which tests actually triggered the covered line when you run a thousand tests well with these three like that's pretty interesting yeah and you know before i talked to him i didn't realize that there was there were so many features of coverage that i didn't realize like being able to have multiple test runs and combine that data and HTML output and things like that.
Starting point is 00:15:30 It's pretty cool. Yeah. Yeah. Quite cool. Quite cool. So what do you got for us, Michael? All right. I got one final glorious topic for the rest of the year to round out 2016.
Starting point is 00:15:40 So here it is. Threaded asynchronous magic and how to wield it so this is a really cool article by christian medina you know we had talked about the i don't remember exactly the title but that async io tutorial that was like the g event tutorial remade for async io and python 3.4 and we're like well wouldn't it be cool if there's a great one on async and await like the really the the truly new cool features of Python for threading and parallelism. Well, Christian Medina wrote it. Awesome.
Starting point is 00:16:11 He wrote a really nice one, and it has a bunch of byte-sized examples. They're not too large, but they don't seem entirely fake. So he has one example of sending sending email notifications, sort of asynchronously. But it's like, you know, but you realize there's no awaitable asynchronous, like way to send mail in Python. So well, we're just going to block but at least we can use this async IO loop for that. That's cool. And then also talked about the AIO HTTP library, which is an HTTP client server for async IO, and how to do a bunch of parallel web requests. So we often think about requests being the primary way
Starting point is 00:16:49 that we do programming against web services and generally HTTP. But this is another option that's really simple that fits exactly into the async IO so you can easily block on the network calls which will then free up the thread to go do other stuff because it knows it's waiting on the network. That sounds cool.
Starting point is 00:17:07 Yeah, it's really cool. It covers things like tasks, scheduling tasks, scatter, gather styles of programming, and then even moving the async IO loop to a background thread. So you don't block up your main thread, but you kind of have a place to put all the asynchronous work and let it run on that other one thread, which is pretty cool. So yeah, so thanks, Christian, for doing that. Got to meet him at PyCon last year. And so that was fun. And hopefully everyone else is going to PyCon. If you don't have your tickets yet, you need to be getting it. Right, Brian? Definitely. I missed out last year. So
Starting point is 00:17:38 don't be sad. Get tickets before they sell out because this, I'm sure it will sell out. It sold out early last year. Plus it's in Portland and Portland rocks. Portland definitely rocks. It's going to be weird. They're going to be keeping it weird. All right. Well, that's it for me. I don't really have a whole lot of news to share other than just saying thanks to everyone for listening, you know, for our new podcast. It's been fun to do for you and I appreciate all the feedback. I appreciate it too. Speaking of feedback, we did get one person, I think it's Harry J. I hope I didn't pronounce that wrong. On Twitter, it said that he listened to episode three, and I had mentioned that a library called Pianini, that don't know if I'm pronouncing that right, but I assumed that these were, that maybe it was named after the knights who say knee.
Starting point is 00:18:25 We thought that would be fun anyway. Yeah, yeah, definitely. But Harry J. tells me that this is not true. It's named after a Sanskrit grammarian 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 fact-checking.
Starting point is 00:18:41 Yeah, it's great to have fact-checkers. Awesome. I'm still going to call it P-I-N-I-N-I. Ni, ni, ni. Yeah, it's great to have fact-checkers. Awesome. I'm still going to call it Pyneene. Nee, nee, nee. Yeah, definitely. Just know it has a different origin. Okay. Well, thank you, Brian.
Starting point is 00:18:52 Thank you, everyone, for listening. Thank you, Royal Bar, for sponsoring the show. We will see you all in January. Until then, you know, enjoy the winter wonderland. Unless you're down in Australia, then have a nice summer. Yeah, definitely. See you next year. Yeah, see you next year. Bye, everyone have a nice summer. Yeah, definitely. See you next year. Yeah, see you next year.
Starting point is 00:19:05 Bye, everyone. Bye. 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 notes at PythonBytes.fm. 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 Ocken, this is Michael Kennedy.
Starting point is 00:19:29 Thank you for listening and sharing this podcast with your friends and colleagues.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.