WEBVTT 00:00:00.001 --> 00:00:04.600 This is Python Bytes, Python headlines and news delivered directly to your earbuds. 00:00:04.600 --> 00:00:10.040 That's episode 15, recorded Monday, February 27th, 2017. 00:00:10.040 --> 00:00:13.880 This is Michael Kennedy. I'm here with my co-host, Brian Okken. 00:00:13.880 --> 00:00:17.660 Hey, Brian. Happy Monday. Happy Python News Day. 00:00:17.660 --> 00:00:18.520 Yes. 00:00:18.520 --> 00:00:23.220 And today we're going to have a couple of really interesting items, 00:00:23.220 --> 00:00:24.840 and we're going to start off with a theme. 00:00:24.840 --> 00:00:29.980 And the theme is people should probably understand Python packaging and distribution better. 00:00:29.980 --> 00:00:30.280 Right. 00:00:30.280 --> 00:00:31.380 Yes, definitely. 00:00:31.380 --> 00:00:32.640 I come up with this. 00:00:32.640 --> 00:00:39.940 Actually, it jumps up on you as a surprise, I think, as soon as you try to share some Python code with somebody, 00:00:39.940 --> 00:00:44.020 even if you're just sharing it within your own work group of dealing with packages. 00:00:44.020 --> 00:00:52.720 So there's a blog post out on, I think it was on Medium, by Ji Fung, A Simple Guide to Python Packaging. 00:00:52.720 --> 00:00:59.960 And it's actually a really quick read, and it's a really nice introduction to talk about where to put the init file, 00:00:59.960 --> 00:01:07.120 and, you know, just basically what is a package and how to deal with it, even to the extent of pushing something up to PyPI. 00:01:07.120 --> 00:01:08.820 Yeah, it's a good article. 00:01:08.820 --> 00:01:13.460 Yeah, I thought it was really nice, and it's like five minutes or less to read, right? 00:01:13.460 --> 00:01:14.520 So definitely jump in. 00:01:14.520 --> 00:01:15.280 Yeah. 00:01:15.360 --> 00:01:20.880 One of the things that I was reminded of while I was reading it, I knew it, but just, you know, wasn't on the top of my mind, 00:01:20.880 --> 00:01:24.160 is the difference between modules and packages. 00:01:24.160 --> 00:01:29.600 And, you know, many people know the differences, but if you haven't worked with Python packaging, maybe you don't. 00:01:29.600 --> 00:01:34.520 And so people, I feel like people often use module and package interchangeably. 00:01:34.580 --> 00:01:37.500 Like, these are synonyms, and we just swap them, right? 00:01:37.500 --> 00:01:39.900 You import module, import package, whatever. 00:01:39.900 --> 00:01:41.520 There's a difference, right? 00:01:41.520 --> 00:01:53.120 Like, a module is a single Python file, where technically what defines a package is it's a directory with a dunder init.py and one or more Python files in it, right? 00:01:53.120 --> 00:01:54.920 Or I guess it could be empty. 00:01:54.920 --> 00:01:55.940 It just does nothing, right? 00:01:55.940 --> 00:02:00.320 But it's more, Python treats those differently if it finds that dunder init.py. 00:02:00.320 --> 00:02:02.680 Yeah, it's very important with sharing code. 00:02:02.680 --> 00:02:14.920 But one of the nice things, at the bottom of the article, there was a link to another article, actually an entire set of instructions called How to Package Your Python Code by Scott Torborg. 00:02:14.920 --> 00:02:16.500 He's a Portland person. 00:02:16.500 --> 00:02:17.760 Oh, right on. 00:02:17.760 --> 00:02:18.880 Yeah, go Portland. 00:02:18.880 --> 00:02:24.660 It's a longer introduction, but it's still like, I read it in like a half an hour, the entire site. 00:02:24.660 --> 00:02:27.520 It's a fairly detailed look at packaging. 00:02:27.940 --> 00:02:35.460 I think actually that this documentation should be included and incorporated into the PyPI documentation because it's really good. 00:02:35.460 --> 00:02:36.180 You think it's that good? 00:02:36.180 --> 00:02:36.660 That's awesome. 00:02:36.660 --> 00:02:37.000 Yeah. 00:02:37.000 --> 00:02:37.880 All right, way to go, Scott. 00:02:37.880 --> 00:02:42.520 So the next item that I wanted to talk about is also related to this. 00:02:42.520 --> 00:02:44.580 So I feel like this is the next layer up. 00:02:44.580 --> 00:02:52.940 All right, so once you get into packaging and start packaging your code, one of the reasons you might do that is if you're building a package for the world, that's cool, right? 00:02:52.940 --> 00:02:55.420 Submit that to PyPI and everybody can play with it. 00:02:55.720 --> 00:02:58.180 But another reason is you just want to reuse that code. 00:02:58.180 --> 00:03:01.420 And maybe this code is proprietary code and you don't want to reuse it with the world. 00:03:01.420 --> 00:03:03.740 You want to reuse it maybe only within your company, right? 00:03:04.380 --> 00:03:09.020 So one of the cool things you can do is set up your own PyPI server. 00:03:09.020 --> 00:03:13.280 And then that's private behind your firewall with authentication or whatever. 00:03:13.280 --> 00:03:15.800 And you can put your code there. 00:03:15.800 --> 00:03:28.900 And then across your different apps, across your different teams, across continuous integration, as long as it has access to this, you can basically put additional private stuff, including your proprietary libraries in there, which I think that's really cool. 00:03:28.900 --> 00:03:36.140 So the thing I brought up was an interesting take on this idea called Elastic PyPI by Kyle Hornberg. 00:03:36.520 --> 00:03:45.940 So the idea is we're going to take this and we're going to use Elasticsearch and AWS Lambda for a serverless deployment of your own private PyPI. 00:03:45.940 --> 00:03:46.480 Okay. 00:03:46.780 --> 00:03:55.740 So the AWS Lambda stuff is like, here, I can give you a Python function and I'll give it to AWS and it lives at the end of a URL. 00:03:55.740 --> 00:03:58.960 And it's just basically you make a request, it runs it, right? 00:03:58.960 --> 00:04:03.400 You don't have to set up a server or it's even like a little bit less than platform as a service. 00:04:03.400 --> 00:04:04.660 It's like really, really lightweight. 00:04:05.060 --> 00:04:08.460 So it's a combination of this and Elasticsearch, which I thought was kind of cool. 00:04:08.460 --> 00:04:09.840 Yeah, that's pretty neat. 00:04:09.840 --> 00:04:15.620 I'm still looking for the right solution for internal to a company inside of a firewall. 00:04:15.620 --> 00:04:19.160 I haven't quite stumbled upon the right thing yet. 00:04:19.160 --> 00:04:23.860 Yeah, I know there's, so I actually listed three other ones that I know about that are in this realm. 00:04:23.860 --> 00:04:29.080 Like this runs on Elasticsearch and AWS Lambda, which isn't behind your firewall, but is potentially private. 00:04:29.080 --> 00:04:30.920 There's also PyPI server. 00:04:30.920 --> 00:04:32.160 There's DevPy. 00:04:32.160 --> 00:04:38.020 There's, I have this, I guess I have this one here twice just from two locations, but there's PyPI server and DevPy. 00:04:38.020 --> 00:04:39.420 And those are interesting. 00:04:39.420 --> 00:04:43.860 You can basically pip install those and set them up and run them behind the scenes. 00:04:43.860 --> 00:04:48.100 But I still feel like you're, you're onto something that there's something more to do here. 00:04:48.100 --> 00:04:50.440 Oh, there might be something less and I'm just missing it. 00:04:50.540 --> 00:04:54.100 I mean, do I even need a, can I just throw a directory somewhere or something? 00:04:54.100 --> 00:04:55.020 So. 00:04:55.020 --> 00:04:55.840 Yeah, I know. 00:04:55.840 --> 00:04:59.220 I feel like, you know, there's like GitHub Enterprise and things like that. 00:04:59.220 --> 00:05:03.460 Like here's a really cool box that is GitHub for your, for your enterprise. 00:05:03.460 --> 00:05:05.340 Maybe there's something like that for PyPI. 00:05:05.340 --> 00:05:07.540 Maybe this is, these are good enough. 00:05:07.540 --> 00:05:10.180 I don't know, but it seems like that's an interesting area, right? 00:05:10.180 --> 00:05:10.660 Definitely. 00:05:10.660 --> 00:05:11.120 Yeah. 00:05:11.120 --> 00:05:16.900 So I got an email, we got an email from a listener who said, look, I'm really enjoying your podcast. 00:05:17.380 --> 00:05:22.900 All the news that you find is great, but I'm kind of living in an RSS world. 00:05:22.900 --> 00:05:28.060 And I feel like RSS is great, but it's, it's not really where all the news comes from. 00:05:28.060 --> 00:05:29.780 Like, where do you guys get your news from? 00:05:29.780 --> 00:05:31.320 So Brian, where do we get our news from? 00:05:31.320 --> 00:05:37.760 Well, where we get it from, where you guys get it from, I think should be from pythonbytes.fm. 00:05:37.760 --> 00:05:42.200 So this podcast, honestly, I did took a look. 00:05:42.340 --> 00:05:47.360 We, I pay attention to Twitter, I pay attention to newsletters and Planet Python. 00:05:47.360 --> 00:05:49.380 And so let's kind of go through these. 00:05:49.380 --> 00:05:55.940 We put up the, in our show notes, love the links to both mine and Michael's Twitter accounts. 00:05:55.940 --> 00:06:00.160 We don't really put out a lot of news on the Python Bytes, but maybe we should. 00:06:00.160 --> 00:06:00.760 I don't know. 00:06:00.760 --> 00:06:01.520 Yeah, we probably should. 00:06:01.520 --> 00:06:05.620 I feel like we should probably tweet out at least our six items every week, right? 00:06:05.620 --> 00:06:06.640 Yeah, definitely. 00:06:06.640 --> 00:06:07.220 Yeah. 00:06:07.220 --> 00:06:07.540 Yeah. 00:06:07.540 --> 00:06:08.240 We should get on that. 00:06:08.240 --> 00:06:09.280 Yeah, let's do that. 00:06:09.280 --> 00:06:15.160 But there's a feed aggregator called planetpython.org, if you don't know about it already. 00:06:15.160 --> 00:06:21.280 But it has a few different websites and it does sort of everything new that day, or I think 00:06:21.280 --> 00:06:23.660 it's updated several times a day there. 00:06:23.660 --> 00:06:27.760 And you can, so like my RSS reader just points to that. 00:06:27.760 --> 00:06:29.060 I just pay attention to that. 00:06:29.060 --> 00:06:29.280 Yeah. 00:06:29.280 --> 00:06:30.300 There's a lot of great stuff there. 00:06:30.380 --> 00:06:36.000 We didn't really order them in any particular order, but there's a few Python related newsletters. 00:06:36.000 --> 00:06:37.980 There's Awesome Python. 00:06:37.980 --> 00:06:41.900 There's Python Weekly, PyCorders Weekly, and Import Python. 00:06:41.900 --> 00:06:43.240 There's four. 00:06:43.240 --> 00:06:45.840 And I don't really, I don't know if I have a preference. 00:06:45.840 --> 00:06:47.820 I just like scanning through all of them. 00:06:47.820 --> 00:06:49.220 Those guys all have great stuff. 00:06:49.220 --> 00:06:53.800 And every one of them has at least one unique thing each week. 00:06:53.800 --> 00:06:55.360 So they're all worth subscribing to. 00:06:55.360 --> 00:06:55.640 Yeah. 00:06:55.640 --> 00:07:00.320 And I also like the second opinion because I, if one of the articles, if there's an article 00:07:00.320 --> 00:07:04.680 or a new project or something that shows up on all four of them or all, or three out of 00:07:04.680 --> 00:07:06.660 four, I probably should go read it. 00:07:06.660 --> 00:07:07.940 So pay attention to that. 00:07:07.940 --> 00:07:14.800 And then Reddit is, Reddit's used quite a lot by Python people and there's a Python subreddit 00:07:14.800 --> 00:07:15.820 that's pretty good. 00:07:15.820 --> 00:07:16.100 Yep. 00:07:16.100 --> 00:07:18.260 And I threw in trending on GitHub. 00:07:18.260 --> 00:07:23.460 So if you go to github.com/trending question mark L, I think it's L equals Python. 00:07:24.060 --> 00:07:24.460 Yeah. 00:07:24.460 --> 00:07:29.540 For language, it'll actually show you all the trending repositories that are primarily Python. 00:07:29.540 --> 00:07:32.200 So that's pretty trick for things that people haven't discovered yet. 00:07:32.200 --> 00:07:32.580 Yeah. 00:07:32.580 --> 00:07:33.540 I haven't used that. 00:07:33.540 --> 00:07:34.040 That's neat. 00:07:34.040 --> 00:07:35.320 Yeah. 00:07:35.320 --> 00:07:37.340 I'm not really hanging out on Reddit a lot. 00:07:37.340 --> 00:07:41.900 So one of the things that I think is good to know about Reddit is that there's a couple 00:07:41.900 --> 00:07:43.180 of filters at the top. 00:07:43.180 --> 00:07:48.100 Like when you're looking at the interface, you can, it seems like a constant stream of information, 00:07:48.100 --> 00:07:53.680 but there's ways to say, what's the interesting one, the top ones in the last week or the last 00:07:53.680 --> 00:07:56.760 month or something that that's helpful to filter some of the stuff. 00:07:56.760 --> 00:07:57.020 Yep. 00:07:57.020 --> 00:07:57.820 Absolutely. 00:07:57.820 --> 00:08:00.840 Well, let's move off of news and onto news. 00:08:01.900 --> 00:08:02.780 It's very meta. 00:08:02.780 --> 00:08:03.540 Yes. 00:08:03.540 --> 00:08:09.120 So we've talked a lot about asynchronous programming, the concurrency story in Python. 00:08:09.120 --> 00:08:12.820 And as we've said, this is for Python 3.4 and 3.5. 00:08:12.820 --> 00:08:17.380 These are some of the really big changes and advantages to the newer versions of Python. 00:08:17.380 --> 00:08:20.640 So what I wanted to highlight was something done by David Beasley. 00:08:20.640 --> 00:08:24.120 He's done a bunch of great public speaking and teaching and stuff. 00:08:24.120 --> 00:08:29.520 And he's created this project called Curio, the co-routine concurrency library for Python. 00:08:29.520 --> 00:08:37.400 So this is a small little library built for performing concurrent IO and common system things such 00:08:37.400 --> 00:08:40.980 as launching sub processes and farming out work on threads and process pools. 00:08:40.980 --> 00:08:50.200 So it's built from the ground up to basically be taking full advantage of the programming paradigms, 00:08:50.200 --> 00:08:52.280 things like async and await and Python 3.5. 00:08:52.420 --> 00:08:57.160 And it doesn't have a lot of the baggage that comes from, say, like using Tornado or Twisted or something like that. 00:08:57.160 --> 00:08:58.160 Pretty cool. 00:08:58.160 --> 00:08:58.540 Okay. 00:08:58.540 --> 00:09:04.740 I haven't looked at this, but I did want to see some good example of a production library 00:09:04.740 --> 00:09:07.920 that uses async and await to try to understand that better. 00:09:07.920 --> 00:09:08.260 Yeah. 00:09:08.260 --> 00:09:15.820 He's got a really cool example of writing basically a socket-based server that can communicate with people 00:09:15.820 --> 00:09:19.560 and handle thousands and thousands of concurrent requests using a single thread. 00:09:19.560 --> 00:09:24.280 So the mental model for how it works, I think, should probably be a little bit like Node.js, right? 00:09:24.280 --> 00:09:29.500 You sort of subscribe to some work and then you get a callback when that work is done, 00:09:29.500 --> 00:09:31.940 like so when you get a message from a client or something. 00:09:31.940 --> 00:09:39.480 But because it uses async and await, it looks basically like standard procedural non-concurrent code, 00:09:39.480 --> 00:09:41.280 which is the way that code should look, right? 00:09:41.280 --> 00:09:41.580 It's great. 00:09:41.580 --> 00:09:42.300 Okay. 00:09:42.300 --> 00:09:42.720 Cool. 00:09:42.820 --> 00:09:42.940 Yeah. 00:09:42.940 --> 00:09:47.500 So check that out if you are wanting to look at a take on async and await. 00:09:47.500 --> 00:09:47.800 Yeah. 00:09:47.800 --> 00:09:52.980 My last item is actually a – I got this through Reddit just the other day. 00:09:52.980 --> 00:09:56.660 I was looking through the hot things from the last week on Reddit in Python. 00:09:56.660 --> 00:10:03.660 And this item was Pandas is switching to use pytest as its test framework. 00:10:04.600 --> 00:10:09.460 And I thought that was really cool because pytest is kind of something I like. 00:10:09.460 --> 00:10:10.460 You should write a book on it. 00:10:10.460 --> 00:10:11.320 Yeah, I should. 00:10:11.320 --> 00:10:11.740 Yeah. 00:10:11.740 --> 00:10:13.600 Yeah, that's really cool. 00:10:13.600 --> 00:10:18.780 I think it's an interesting look at the challenges of moving like a very large, highly visible, 00:10:18.780 --> 00:10:22.120 highly used project from one testing framework to the other. 00:10:22.540 --> 00:10:28.120 And there was comments like in this GitHub thread, things like, well, pretty much everything moved over okay, 00:10:28.120 --> 00:10:29.740 except for these 69 tests. 00:10:29.740 --> 00:10:31.300 They really are hard. 00:10:31.300 --> 00:10:36.620 And we need somebody to like champion taking on these 69 tests that just won't move. 00:10:36.620 --> 00:10:39.160 That's just 69. 00:10:39.160 --> 00:10:40.420 That seems like a lot of work. 00:10:40.420 --> 00:10:41.360 Yeah. 00:10:41.360 --> 00:10:49.460 They said many of the ones are running into challenges because of external resources like databases or other funky things like that. 00:10:49.460 --> 00:10:49.780 Huh. 00:10:49.780 --> 00:10:50.180 Okay. 00:10:50.180 --> 00:10:50.620 Yeah. 00:10:50.620 --> 00:10:57.040 Actually, external resources is the reason I chose pytest in the first place because I depend heavily on resources. 00:10:57.040 --> 00:10:59.340 And it handles fixtures the best. 00:10:59.340 --> 00:10:59.880 Anyway. 00:10:59.880 --> 00:11:00.200 Yeah. 00:11:00.200 --> 00:11:00.780 Awesome. 00:11:00.780 --> 00:11:01.360 Yeah. 00:11:01.360 --> 00:11:02.340 So very cool example. 00:11:02.340 --> 00:11:03.440 All right. 00:11:03.440 --> 00:11:07.620 So my last one is I kind of cheated and picked something that I did. 00:11:07.620 --> 00:11:13.460 But I think this one is noteworthy given the amount of attention the community gave it. 00:11:13.460 --> 00:11:18.360 So last week I had the honor of having Guido Van Rossum on Talk Python. 00:11:19.120 --> 00:11:23.380 And we spent a little over an hour talking about how he got into programming. 00:11:23.380 --> 00:11:26.620 What were the influences on the Python language? 00:11:26.620 --> 00:11:30.480 There's a language called ABC that he was actually working on before Python. 00:11:30.480 --> 00:11:33.800 Why did ABC fail and go away? 00:11:33.800 --> 00:11:35.020 Why did Python succeed? 00:11:35.020 --> 00:11:37.580 How are we doing on the move to Python 3? 00:11:37.580 --> 00:11:38.800 What are his favorite features? 00:11:39.160 --> 00:11:41.720 And even what he's up to at Dropbox these days. 00:11:41.720 --> 00:11:48.320 So really, really interesting conversation looking backwards and forwards with the creator Python. 00:11:48.320 --> 00:11:50.600 I really enjoyed that conversation, actually. 00:11:50.600 --> 00:11:52.040 It's one of my favorite episodes now. 00:11:52.040 --> 00:11:52.240 Yeah. 00:11:52.240 --> 00:11:52.560 Thanks. 00:11:52.720 --> 00:12:01.520 I really liked the discussion of the two versus three and both the reasons why they did it and also the difficulty. 00:12:01.520 --> 00:12:06.540 And kind of a lot of people dragging their feet and not wanting to switch. 00:12:06.540 --> 00:12:10.080 And there were real world reasons that just sort of hit them. 00:12:10.080 --> 00:12:11.200 They didn't think about those. 00:12:11.360 --> 00:12:13.640 It was a pretty interesting take. 00:12:13.640 --> 00:12:14.260 I liked it. 00:12:14.260 --> 00:12:14.760 Yeah. 00:12:14.760 --> 00:12:17.680 I think people will learn a lot listening to Guido. 00:12:17.940 --> 00:12:25.180 So I wanted to highlight that because I think Guido doesn't do a lot of those kind of open, ask me anything type things. 00:12:25.180 --> 00:12:26.560 He does a lot of public speaking and stuff. 00:12:26.560 --> 00:12:29.040 But I thought this was a great look inside. 00:12:29.040 --> 00:12:31.140 And he was really a great guest. 00:12:31.140 --> 00:12:32.340 And it was a lot of fun to talk with him. 00:12:32.340 --> 00:12:33.240 So check that out. 00:12:33.240 --> 00:12:33.700 Okay. 00:12:33.700 --> 00:12:34.480 Great. 00:12:34.480 --> 00:12:36.680 Well, that's our six picks for today. 00:12:36.680 --> 00:12:37.000 Yeah. 00:12:37.000 --> 00:12:38.340 So that's our six. 00:12:38.340 --> 00:12:38.720 Yeah. 00:12:38.720 --> 00:12:38.960 Yeah. 00:12:38.960 --> 00:12:42.560 So that's the news for Monday, February 27th. 00:12:42.560 --> 00:12:43.660 What else is going on? 00:12:43.660 --> 00:12:47.120 You had a great episode with Mahmoud, a friend of the show, Mahmoud Hashemi. 00:12:47.120 --> 00:12:49.100 That was actually like a month ago. 00:12:49.100 --> 00:12:52.040 And I finally got it all edited and out. 00:12:52.040 --> 00:12:53.920 I put this out last Sunday. 00:12:53.920 --> 00:12:56.540 And so it's episode 27. 00:12:56.540 --> 00:12:58.260 And it's a really good. 00:12:58.260 --> 00:13:00.400 And I really enjoyed the discussion with him. 00:13:00.400 --> 00:13:07.140 We started off with the excuse of talking about the different levels of testing, like unit versus system, stuff like that. 00:13:07.140 --> 00:13:11.900 But we just talked about all sorts of stuff, testing related and Python related. 00:13:12.580 --> 00:13:17.120 And the other excitement is the I released it on a new website. 00:13:17.120 --> 00:13:21.120 So I have testandcode.com now running everything. 00:13:21.120 --> 00:13:25.640 And it'll be on both websites for a while until I get everything switched over. 00:13:25.640 --> 00:13:26.060 Yeah. 00:13:26.060 --> 00:13:26.560 That's great. 00:13:26.560 --> 00:13:30.340 I'm looking forward to listening to that episode with Mahmoud because he has great things to say. 00:13:30.780 --> 00:13:33.520 I had him on to talk about Enterprise Python. 00:13:33.520 --> 00:13:37.320 He works at PayPal and does a bunch of cool stuff with Python there. 00:13:37.320 --> 00:13:39.840 So I'm sure that's really interesting. 00:13:39.840 --> 00:13:40.280 That's great. 00:13:40.280 --> 00:13:42.560 Well, he used to work at PayPal. 00:13:42.560 --> 00:13:43.560 Oh, interesting. 00:13:43.560 --> 00:13:44.000 Okay. 00:13:44.000 --> 00:13:44.560 Well, see. 00:13:44.560 --> 00:13:46.680 So you'll have to listen to episode 27. 00:13:46.680 --> 00:13:47.240 Yeah. 00:13:47.240 --> 00:13:48.680 Now I must listen to it. 00:13:48.680 --> 00:13:48.900 Yeah. 00:13:49.040 --> 00:13:49.980 Oh, my gosh. 00:13:49.980 --> 00:13:50.920 I'm out of date. 00:13:50.920 --> 00:13:51.800 Awesome. 00:13:51.800 --> 00:13:52.100 Okay. 00:13:52.100 --> 00:13:53.800 Well, that sounds very, very exciting. 00:13:53.800 --> 00:14:00.300 And testing code, you finally unified the domain and the rename that you did a few months ago, six months ago, whatever it was. 00:14:00.420 --> 00:14:07.540 Yeah, well, there's so that, yeah, testing code domain and the website now or the podcast and site have the same name. 00:14:07.540 --> 00:14:08.160 So that's good. 00:14:08.160 --> 00:14:08.340 Yeah. 00:14:08.340 --> 00:14:08.740 Excellent. 00:14:08.740 --> 00:14:13.120 And the book, the pytest book is out to reviewers. 00:14:13.120 --> 00:14:19.160 I've got three chapters left to write, but we're chugging to head like a large freight train. 00:14:19.160 --> 00:14:19.800 Yeah. 00:14:19.800 --> 00:14:21.240 It looks like you're, are you ahead? 00:14:21.240 --> 00:14:27.200 I know you were thinking like, geez, can I get this done by PyCon, which was end of May, but it feels like you're making good progress. 00:14:27.200 --> 00:14:37.280 Yeah, we still, to actually get an in-print book would be a miracle at this point, but we are hoping to get a beta, e-book beta out by PyCon. 00:14:37.280 --> 00:14:38.100 Awesome. 00:14:38.100 --> 00:14:38.700 Okay. 00:14:38.700 --> 00:14:39.580 Well, congratulations. 00:14:39.580 --> 00:14:42.860 And I've seen some of the covers and they're both very cool. 00:14:42.860 --> 00:14:44.680 So I'm looking forward to seeing which one you go with. 00:14:44.680 --> 00:14:44.920 Yeah. 00:14:44.920 --> 00:14:46.000 So how about you? 00:14:46.000 --> 00:14:46.580 What's up with you? 00:14:46.580 --> 00:14:49.040 You know, not a whole lot is going on with me right now. 00:14:49.040 --> 00:14:54.760 I released my consuming HTTP services course and I'm just working on like two or three more courses. 00:14:55.000 --> 00:14:57.840 I'm actually writing a Python article for Code Magazine. 00:14:57.840 --> 00:15:00.420 So I'm supposed to submit that this week. 00:15:00.420 --> 00:15:05.780 It's about celebrating the 3000th day birthday. 00:15:05.780 --> 00:15:06.780 Nice. 00:15:06.780 --> 00:15:07.200 Instead of birthday. 00:15:07.200 --> 00:15:08.440 Of Python 3. 00:15:08.440 --> 00:15:11.900 Because, right, just a few days ago, Python 3 was 3000 days old. 00:15:11.900 --> 00:15:12.560 So that's pretty cool. 00:15:12.560 --> 00:15:14.500 So Code Magazine, is that a print thing or? 00:15:14.500 --> 00:15:15.320 Yeah, it's a print thing. 00:15:15.320 --> 00:15:15.720 Cool. 00:15:15.720 --> 00:15:18.220 I didn't know there were print code magazines anymore. 00:15:18.440 --> 00:15:20.120 Some people still read them, I guess. 00:15:20.120 --> 00:15:21.260 We'll see. 00:15:21.260 --> 00:15:21.560 Yeah. 00:15:21.560 --> 00:15:22.360 Okay. 00:15:22.360 --> 00:15:23.100 Well, awesome. 00:15:23.100 --> 00:15:24.380 It was fun talking with you today. 00:15:24.380 --> 00:15:24.760 Yeah. 00:15:24.760 --> 00:15:26.060 Thanks for sharing all the news. 00:15:26.060 --> 00:15:30.620 Now people can go out and package their Python code up and hear Guido talk about it. 00:15:30.620 --> 00:15:30.900 Yeah. 00:15:30.900 --> 00:15:31.880 Great. 00:15:31.880 --> 00:15:32.140 All right. 00:15:32.140 --> 00:15:33.180 Well, good to see you. 00:15:33.180 --> 00:15:34.980 Thanks, everyone, for listening in. 00:15:34.980 --> 00:15:36.300 And we will catch you next week. 00:15:36.300 --> 00:15:36.720 All right. 00:15:36.720 --> 00:15:37.200 Thanks a lot. 00:15:37.200 --> 00:15:37.620 Bye. 00:15:39.620 --> 00:15:41.260 Thank you for listening to Python Bytes. 00:15:41.260 --> 00:15:43.820 Follow the show on Twitter via at Python Bytes. 00:15:43.820 --> 00:15:46.720 That's Python Bytes as in B-Y-T-E-S. 00:15:46.720 --> 00:15:50.160 And get the full show notes at pythonbytes.fm. 00:15:50.160 --> 00:15:54.480 If you have a news item you want featured, just visit pythonbytes.fm and send it our way. 00:15:54.480 --> 00:15:57.180 We're always on the lookout for sharing something cool. 00:15:57.180 --> 00:16:00.580 On behalf of myself and Brian Okken, this is Michael Kennedy. 00:16:00.580 --> 00:16:04.200 Thank you for listening and sharing this podcast with your friends and colleagues.