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


Transcript #98: Python-Electron as a Python GUI

Return to episode page view on github
Recorded on Friday, Oct 5, 2018.

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

00:05 This is episode 98, recorded October 4th, 2018. I'm Michael Kennedy.

00:09 And I'm Brian Aitken.

00:10 Hey Brian, how you doing?

00:11 I'm doing great.

00:12 Excellent, excellent. Happy to be back with you for another week's worth of news.

00:16 Yeah, it's good to talk to you every week.

00:18 Absolutely. So I also want to say thank you to DigitalOcean for making this possible.

00:23 They're one of the biggest supporters of the show. So thank you to DigitalOcean.

00:27 check them out at pythonbytes.fm/digitalocean.

00:29 Get $100 credit for new users.

00:31 More about that later.

00:32 They have some really cool stuff.

00:33 I was just listening to It's All About the Pendiums.

00:37 Do you remember that song from Weird Al Yankovic?

00:39 No.

00:40 Oh my gosh.

00:41 We might have to put it on the show.

00:42 Oh, it's like this funny, you know, Weird Al Yankovic type song.

00:46 It just popped up for some reason.

00:48 And from the 90s.

00:51 And it's all about like tough rappers.

00:54 And these rappers who are like, But they're like programmers, so they're like insulting each other, right?

00:58 Like how slow their computer is.

01:00 And one of the insults is, "My flat screen monitor is 40 inches wide, and yours says Etch-a-Sketch on the side." That's funny.

01:13 That's awesome, right?

01:15 So here we are, 20 years past then or whatever, and we're still talking about Etch-a-Sketch.

01:21 Yeah, definitely.

01:22 So, okay, so this article is about Etch A Sketch and it's called Make Etch A Sketch Art with Python and it's fabulous. So background, it showed up in Toy Story with like the, and it's shown up other places of like really, really fast Etch A Sketch drawings happening and I'm sure a lot of people, other people have figured this out too or tried to think, man, if I could have, I could hook up some motors to those, the knobs and somehow get my computer to do all of this for me, That would be cool. So that's what this is. It's this great article about how this person put together some motors, a Raspberry Pi, and some software, and a little bit of woodworking to get to keep everything all in one place, and got it to draw pictures. It's so cool because it's one of those, it seems like a fun project you could do with your kids or something. And also it discusses some things like how do you get a picture into line format and he uses something called canny edge detection and then if you've got a line drawing in pixels how do you translate that into like motor control and you have to have a path so he uses a library called networks it's a python library to do path coming up with nice paths and then he has some results there shows some pictures were the starting picture and then the end result of drawing and it's just fun.

02:46 You know what I like about this is it's got this cool IoT aspect with the Raspberry Pis and the motors and it's not just a software project. It seems like it'd be something really fun for people to explore if they're getting into programming. And then it also has like a really advanced thing like you could do a really cool like booth or something where you put up an Etch-a-Sketch And when anybody walks up, it could do like face detection and like draw them.

03:11 Like you could do all sorts of fun stuff with like the, you know, PyTorch, machine learning, and all kinds of fun stuff.

03:16 So yeah, this is a great one for people looking for cool projects.

03:19 Yeah, if you could get that booth thing set up so that we have it ready for PyCon, that would be great.

03:24 Yeah, I'm working on it. We're almost there.

03:26 So one of the things I really like from PyCon 2017 was the keynote by Instagram.

03:33 how they almost magically migrated their entire code to upgrade Django, completely switch from Python 2 to Python 3, and they did all of that without branching continuously in production.

03:47 Which was awesome, right?

03:48 Yeah, that was an incredible talk. Yeah.

03:50 And so, certainly that was one of the major users of Python.

03:54 But if you look at desktop applications, it may be that Dropbox is actually one of the most popular and quite large desktop apps in Python that there is.

04:04 I would venture to say that's true.

04:06 Yeah, so the Python, they have over a million lines of code in Python, a million lines of Python.

04:12 And it's installed, I don't know, hundreds of thousands of desktops at least, right?

04:18 So the big news is Python has had a really big gravitational pull around Dropbox.

04:24 We've had some of the core developers working there.

04:26 Obviously, Guido van Rossum works there.

04:28 That's a big deal.

04:29 So the fact that they were on Python 2, it's kind of a weird juxtaposition of like these two worlds, right?

04:36 So what's really cool is they have now migrated to Python 3.

04:41 And it's not just like they've rolled out a web app on Python 3 where they control the servers, but they have done some really incredible engineering to allow them to ship Python 3 into these more modern operating systems, enabling interesting things like kernel level, smart sync, and all sorts of crazy stuff that's happening.

05:00 And so that's what we got this week.

05:03 That's awesome, huh?

05:04 - Yeah, that's really exciting, actually.

05:05 - It is exciting.

05:06 And what's great about their write-up is it's, it talks a whole lot about the challenges that they faced, why they wanted to switch, all of those kinds of things.

05:15 So they said they've relied on Python 2 for many years, most recently 2.7, and they actually began this transformation from 2.0 to 3.0 in 2015.

05:25 But if you go through and read that article, you'll see like a lot of creation of technology had to be done in order to make this switch.

05:32 So in their previous version, their Python 2 world, they were using freezers.

05:37 So like Py2App, Py2exe, I think it was bbfreeze for Linux.

05:42 And they were also exploring PyInstaller, but they ended up not using PyInstaller for some reason.

05:48 But they were using those types of things to package up Python.

05:51 And now what they're doing is they actually had to build native apps.

05:55 So using Visual Studio for Windows, Xcode for macOS to build like dot app files.

06:01 And what they're actually doing is they're hosting the Python runtime in their native apps to bootstrap up their apps in order to get the deployment story working better.

06:09 - That makes sense, but that doesn't sound easy.

06:12 - No, it doesn't.

06:13 They actually built a way so that they could host either Python 2 or Python 3 and flip a flag so that they could actually do that concurrently, right?

06:22 So they built the Python 2 version and they started shipping that out and got that working.

06:27 And then they slowly, for different sets of users, started turning on the Python 3 version on the same type of code there.

06:33 - Wow, that's cool.

06:35 - But they talk about why they had to do it.

06:36 So for example, SmartSync, which I actually just bought from Dropbox recently, is pretty awesome.

06:41 So I've got like almost a terabyte of stuff in Dropbox with all the core stuff and whatnot, the videos and so on.

06:48 And SmartSync will like let you go to your Finder or your Explorer and show you all of your files.

06:54 And some of them are in your hard drive and some of them are in the cloud.

06:56 and you can just like double click them and they just open, you know, or open some other way.

07:01 And they like Dropbox hooks into that and says, oh, hold on, we got to download that.

07:06 Now you can have it, right?

07:06 So it's really great for like saving drive space and whatnot, but you can't do that.

07:11 You can't install that kernel type of stuff with Python.

07:14 So they needed their native apps anyway.

07:17 They also talked about why they might switch to Python 3.

07:20 They said, there's two major features that we really care about.

07:23 and there's some pains that we're trying to get away from.

07:27 The exciting features were they're really interested in type annotations.

07:31 Remember, mypy is coming out of Dropbox.

07:34 Guido van Rassen is working on that.

07:35 And mypyC that takes type annotated Python code and compiles it to C extensions also is coming from Dropbox.

07:42 So they're really doing a lot with these type annotations, which is interesting.

07:45 And they're also really interested in async and await.

07:48 Apparently that helps a lot for what they're doing.

07:51 - Yeah, asynchronous copying of files, you'd think.

07:53 - You would think a lot of IO happens on the networking on the drive.

07:56 - Definitely.

07:57 - So that was the positive.

07:58 The other problem is, they said that a lot of the tool chains they're using is really old and crusty.

08:04 Like for example, they had to have a separate fork of CPython so they could compile it with a modern C compiler, like Visual Studio 2013, so there's something super old and not supported on Windows.

08:16 And they're like, this is just not cool.

08:18 Like why are we maintaining our own fork of the CPython just so we can compile it.

08:24 Anyway, there's a lot of weird stuff they had to get away from with Python 2, right?

08:27 And that's not getting better.

08:29 Yeah, so they talked about all this stuff, a lot of details, and they also said, "We're planning a bunch of future posts." So we're gonna talk about how they report crashes on Windows and macOS, and how they use that to debug both native and Python code.

08:42 That's one of their posts coming.

08:44 - That's cool.

08:45 - How they maintain a hybrid Python 2 and 3 syntax, and what tools help them do that, another post.

08:51 And then it's sort of a war stories, the very best bugs and stories from their Python 3 migration.

08:57 So I think we have three topics picked for the next couple of Python Bytes.

09:02 - Yeah, if they come out in time, yeah, sure.

09:04 - Yeah, for sure.

09:05 Well, maybe they'll even do a presentation about this at PyCon.

09:08 - Yeah, let's hope.

09:09 - Let's hope.

09:10 Are you speaking at PyCon?

09:11 Are you gonna submit something?

09:12 - I probably am, yeah.

09:13 - Yeah.

09:14 - I haven't yet, but there's time.

09:15 - Sorry, I'm gonna submit something and I'll just put your name on it.

09:18 That'll help.

09:19 (laughing)

09:20 - Yeah, if anybody else wants to do that too, just submit something and put my name on it and I'll just, you know, I'll wing it once I get there.

09:26 - Well, ours might be a joint one.

09:28 - Oh, that makes more sense, yeah.

09:30 - But where would we get the resources?

09:34 - You lined it up for me, thanks.

09:36 So I wanted to talk about some resources for PyCon and it's not just, these are targeted at PyCon, but it really is really any conference, technical conference, I think, and a lot of the regional Python conferences similar things. So we're putting a bunch of links in the show notes. We've got, they have a nice speaker page that's a kind of a top levels what it's like to speak there and stuff. Actually, last year being my first time talking at PyCon, I think that I would encourage really anybody to try it because it's a fun experience. So take a look at the speaking page. And then there's a proposal tips. So the first thing you got to do is you submit a proposal and that can be nerve racking, but it really shouldn't be. So there's a few resources I'd like to poke people to.

10:20 There's a talk proposal resource page on the PyCon 2019 site, and in there there's also some links to some external articles and stuff. And then including some people who have shared past proposals, whether and even failed ones, and why they think they failed.

10:39 And then Marietta, I don't know her last name, but she's the core developer.

10:44 And she recently published her set of proposals, the ones that have been accepted.

10:49 And I really like them, actually.

10:51 I took a look through those and some of these are really nice, clean examples.

10:55 And it makes me think that maybe it doesn't have to be as complicated as I thought it was.

10:59 So there's those. It's nice.

11:01 Yeah, that's really helpful.

11:02 And, you know, like you said, this is helpful to however you want to get started.

11:06 And you don't have to get started at the top level PyCon.

11:09 You could always do something local.

11:10 Yeah.

11:11 And then one of the things I wanted to bring up also is before attending PyCon, I didn't know what poster session was.

11:18 I'd seen it a lot, but I didn't really know what it was.

11:21 Or I'd seen it mentioned.

11:23 And a poster session is, don't dismiss this, this is a pretty cool thing.

11:27 The PyBytes guys did a poster.

11:30 And what happens is in the expo area, where all the, like, where we were and a lot of the companies are, That's really cool, but it isn't on Sunday.

11:40 Those people get out of there and on Sunday, that area is there's a job fair thing going on, but there's also these poster sessions where people have these areas and they get a few feet of backspace and they get their poster put up and a little table for them.

11:57 The people that are there to talk about it, if you have a project or something you want to talk about, that's a good way to get your feet wet and you don't actually have to present to talk, but you can talk with people about whatever you're passionate about.

12:10 >> Yeah, and you can meet some pretty interesting people that way as well.

12:13 You also give a link, a shout out to Jason Wadier's blog post, you don't need to be a pro at Python to crack the code of PyCon, which is great.

12:23 >> That's a really good article about how somebody new to Python went to PyCon and still got a lot out of it even though they weren't an expert.

12:32 One of the things he mentions is that the expo hall, Everybody there is trying to sell you something.

12:37 I just wanted to say that we're not.

12:39 We hang out there and we just want to talk with people and be there so that people can come up and say, "Hey." That's right. It's a great place for us to meet people.

12:47 We typically lose our voice by the end of the second day.

12:51 It's a ton of fun.

12:53 One of the reasons that we get to go there is because of people who support our show and sponsor our show, like DigitalOcean.

13:02 I just want to call out a cool feature that I saw them recently talking about, and I think people might find actually super useful.

13:10 So when you create, normally you create a virtual machine or some form of infrastructure as a service in the cloud, you get like a little drop down like, well, what do you want to Ubuntu?

13:18 You want, you maybe have it pre-configured for this type of service or that.

13:23 But with DigitalOcean, they have this thing called bring your custom image to DigitalOcean.

13:28 So you can, you know, spin up a virtual machine and get it exactly the way you like it to run, perfectly set up on your system with your company, and then you can just upload that and say, now when I create a new thing on DigitalOcean, use that.

13:41 - Oh, wow.

13:42 - Isn't that cool?

13:43 - Yeah.

13:44 - So all you gotta do is make the image, upload it, and then you can just log in and say, I'd like to choose from my custom image and hit start and off it goes.

13:50 So that's pretty cool.

13:51 There are a few simple restrictions on what has to be installed, so they can manage the virtual machine from the outside, but it doesn't seem very restrictive to me.

13:59 Anyway, it looks like a great thing.

14:01 You can check it out on their blog, But if you want to get started and get the credit, pythonbytes.fm/digitalocean.

14:05 Nice.

14:06 This may be a little bit repetitive, but Brian, have we talked about GUIs?

14:09 Yeah. Yeah, we have.

14:13 Actually, this one I want to share with you because I think it's actually super awesome.

14:18 I think we started this whole path long ago when I said I really just would like, what did I call it? I called it Proton.

14:26 I said I want electron.js for Python.

14:28 I said we should call it Proton as well because of the P.

14:31 But someone has come up with a great way to use Electron, which is Electron.js, it's like a Chrome and Node type thing that stuff like GitHub's Atom Editor, Visual Studio Code, Slack, all those things are built upon.

14:47 Those are nice looking systems, right?

14:49 You write HTML, you can use cool JavaScript stuff on the front end, but on the back end, you got to do Node and JavaScript.

14:56 Yeah, I don't want to do that.

14:57 Well, there's things you miss out on, like what if you want to do something with machine learning.

15:02 Like JavaScript doesn't have good machine learning tools to run locally, but if you had Python, you could use like GPU accelerated local stuff.

15:08 That would be awesome.

15:10 So it's not called Proton, but I will point you at something called Electron Python.

15:15 It's basically the same thing without the name.

15:18 So what it is, is it's someone has taken Electron, well, it's not even a new project in that sense, it's more of a way of using two different projects.

15:27 So take ElectronJS and take Python.

15:30 And on Python, there's a thing called zero RPC, which is like a raw sockets communication layer instead of HTTP.

15:40 So this really simple local communication layer, use that as a server, and then use Electron to just show your app with your JavaScript and HTML.

15:50 And instead of talking through Electron to node, you talk through Electron, or just more directly, over to your Python code.

15:58 So it's awesome. You get like exactly the same thing that you're building, say, Visual Studio Code with.

16:04 You could do that but have Python as the implementation on the back end.

16:08 And if you need to pip install anything, you do it.

16:10 It gives you like native access, so native menus, notifications, automatically update your app, all that kind of stuff. It's pretty awesome.

16:17 That is cool.

16:18 Yeah, it's really cool, right?

16:20 The question becomes though still like, how do I get that to somebody?

16:24 Right, great. So I have this Rube Goldbergian contraption that I've created of like, Chrome, a JavaScript node, and this Python code, which then also depends upon Python, everything you pip installed, right?

16:38 Like deployment can be a challenge.

16:40 So one of our listeners, Andy Boka, sent us a really nice message and wrote a super informative blog post of building a deployable Python electron app.

16:50 Takes you through all the steps of how we package it up.

16:53 Python, his dependencies, how he created it for macOS and Windows, all sorts of stuff.

16:59 Yeah.

17:00 That's fun. Actually, that's pretty cool.

17:02 But with the code available, so you can try this out and follow along.

17:06 Yeah, it's got the code and all sorts of stuff.

17:08 So it's a pretty good working example if you would like to try to create this and use this.

17:13 And if people do create an app with this, please, you know, put a comment on the show notes.

17:17 We'd love to see it or shoot us a message somehow.

17:19 Yeah, there's a lot of projects I want to try to do with something like this.

17:23 So, yeah, neat.

17:25 Yeah, so I'll leave you with one final thing, like right, he goes through this long process of here's how you run this script and then that script and then bundle this together, you know, use PyInstaller and then use npm package or something to like suck in the PyInstaller.

17:37 And there's like a lot of stuff going on.

17:39 So he ends the deployment post saying, "Can somebody please wrap electron Python into an IDE so that in the future, all we have to do is click a build button, like we could 20 years ago." Yeah, nice.

17:53 I guess it's doable now, but it's still a question of is this really easier than using like Qt or something like that now.

18:03 Well, he talks a lot about that.

18:04 He says, look, if your choice is to use Qt or say WXPython or TkEnter, in all of those, maybe with slight exception of Qt, there's really like one or two people who are working on it part time.

18:18 And when you use Electron, you're using Chrome and all the JavaScript front-end frameworks you might want to select, right?

18:25 Vue.js.

18:26 And you have Google and all the web developers in the world basically pushing that UI platform forward.

18:32 Okay, well, there's that.

18:34 That was the argument of what the two guys who were building this.

18:40 You can either take that as a good argument or not, but that's what they were saying.

18:44 Yeah, and now that it's doable, it'll get easier as time goes on and people add to it.

18:49 So, yeah.

18:49 All right. Come on, PyCharm folks. Give us that build button.

18:52 Give us a build button.

18:55 Give us the build button. We don't want to know the internals. Come on.

18:58 All right. So, probably enough on that. But that's actually one of the more promising ones.

19:03 And I'm still, I might give it the nickname, Proton. I don't know.

19:06 Yeah. We should just tell them you can use that if you want.

19:09 Yep, they can have it. Awesome. All right. So, what's our next one?

19:13 I just wanted to give a shout out to Pluggy.

19:15 If anybody doesn't know that I'm a fan of pytest.

19:19 >> Really?

19:20 >> Yeah. Part of pytest, so one of the things that pytest, pytest actually grew out of the Py project.

19:26 Another offshoot is Pluggy.

19:28 There's a ton of pytest plugins that you can add on, and I use quite a few of them.

19:33 The way these plugins work is through this plugin system, and it's a plugin management and hook system.

19:41 There's often a problem if you've got an application that has a lot of possible customizations for other people to do.

19:47 But you want to be able to provide plugin or hook capabilities, but you don't want to expose too much internals and you also want to isolate this interface so that you know that you can do refactoring and rewriting stuff and you're not going to break plugins.

20:05 And plug-in is an option and I think it's a really good solid option.

20:09 I have noticed that a few other projects have used this.

20:13 The, I don't have a list of those, but it's, I don't think we've covered it before.

20:17 And if we have, my apologies, but it's kind of neat.

20:20 >> I don't think so.

20:20 >> And my little side project of cards, a lot of people said, well, if we're doing like task management, there's going to be extra little things.

20:28 People want maybe a different list of things.

20:30 You may be not an owner, but you maybe need priority and maybe time estimates should be in points versus hours or things like that.

20:38 a plugin system might be good.

20:39 So I'm actually thinking about trying to put Pluggy into this little side project of mine.

20:45 Oh, yeah, that's really cool.

20:46 Yeah, this is used by pytest, by Tox, by DevPy.

20:50 So certainly it's getting some real-world testing.

20:52 That's great.

20:53 You know, I like these plugins as an idea of saying, I would like to let people change how this works without just letting them actually change the project.

21:01 Yeah.

21:01 Yeah, that's cool.

21:02 Alright, are you ready for something scary, like actually truly scary?

21:06 (laughing)

21:07 - No, but let's talk about it anyway.

21:10 - This was sent over by Eduardo Orchina.

21:13 This is on Bloomberg, so on bloomberg.com.

21:17 So it's Bloomberg Business Week.

21:20 It's a pretty serious article, and it's pretty deep reporting for something that has happened.

21:24 It's called "The Big Hack, How China Used a Tiny Chip to Infiltrate US Companies," and other companies, but they were thinking they were aiming them actually at US companies and defense contractors and stuff like that.

21:38 - Creepy, so tell me more.

21:39 - All right, so first of all, when they say a tiny chip, I don't know, I don't know what you guys are visualizing, but if you hold up, say a US penny, or like a Euro cent, and you look at the lettering on there, the chip was the size of one of the letters.

22:00 Like so, or it says the year the penny was printed, it's like the size of like the two.

22:04 And they decorated it as like a different type of component that goes onto the chip.

22:10 So this is really a long article, like I said, quite deep reporting.

22:14 It says, "This was an attack by Chinese spies that reached almost 30 US companies." How they know that it was 30 and not 37 or something is actually really interesting.

22:23 "Including Amazon and Apple by compromising America's technology supply chain." So what happened was they found out that there was some spies in the Chinese government that threatened the subcontractor of the subcontractor of a company that made motherboards for many data center servers.

22:43 Yeah.

22:45 And they said, well, you have a couple choices.

22:47 One, we can bribe you to install these little tiny chips or we can threaten you with inspections of your factory if you don't install these chips and keep it quiet.

22:57 And pretty much they found out that some of these subcontractors were like, well, we want to keep our business. So chips go in.

23:03 Jeez.

23:04 Yeah. And so this all started when Amazon went to acquire actually a Portland based company called Elemental Technologies, which basically helped with like streaming and video compression.

23:13 Yeah.

23:13 And as part of the purchase process, I said, well, let's do some due diligence on you. And they actually sent off the server hardware that they were using off to some other company.

23:24 I think it was a Canada or somewhere.

23:25 And they said, there was a nested on the servers motherboards, the testers found a microchip not much bigger than a grain of rice that wasn't part of the original motherboards design.

23:36 Like, I don't even know how they found that, right?

23:37 Like, that's insane.

23:39 And so, then they found out that these motherboards were used by the Department of Defense and CIA drones and Navy warships and Apple and Amazon and all sorts of places.

23:50 And they're like, whoa, what's going on here?

23:53 So they did a bunch of like a spy on spy stuff, and they found out kind of like what I told you, and they realized that these chips were basically opening back doors in the network of all of these servers, which would then go down the bigger bits of code would actually take them over and you could just log into them.

24:10 But they were interacting with these other servers somewhere on the internet.

24:14 So they hacked those servers, and they figured out that 30 companies machines were interacting with that server.

24:19 And that's how the number is 30.

24:20 Ah, okay.

24:22 Anyway, the whole supply side chain thing is pretty scary, but this is not technically a software topic, but I think it's something that we in the technology industry need to just be aware of, because this is pretty crazy, right?

24:35 And there's no software that will tell you whether or not this is a problem, right?

24:38 Because this is at the chip level.

24:40 Yeah.

24:41 Jeez.

24:42 Anyway, there, let's leave it with that positive note.

24:43 [Laughter]

24:46 Have a nice day, everyone.

24:47 Have a good day.

24:49 Apparently, the 30 companies who had their servers interacting back with the hacker controller command and control servers have been notified silently.

25:00 Yeah.

25:00 Yeah, but anyway, there's a bunch of inside reporting and stuff.

25:04 It's quite interesting. So check that out.

25:06 Well, that's it for our official items.

25:08 Anything else you want to share, Brian?

25:09 No, I just want to rave about your new course.

25:11 Oh, thank you.

25:12 So...

25:13 The new course is going really well.

25:15 So I, you know, the async course that talks about async I/O, async and await, multiprocessing, all that stuff.

25:22 It needed to exist and I'm so happy I built it.

25:24 Yeah, so what I wanted to bring up is I know async is hot because of a lot of people thinking about the new async stuff that came into the more recent Python 3s.

25:35 But it's not just that.

25:37 So one of the things I like about the course is you do talk about the new async I/O and AIO HTTP.

25:45 Yeah, those.

25:46 But you also, it isn't just that, it's also things like, if you are concerned about that, you're probably concerned about things like, I just want to make stuff run faster.

25:55 There's other options too, like multi-threading and multi-processing, and when and how to use different ones and how to decide that.

26:04 Then even if you want to make it faster, there's things like, I think, do you cover Cython then?

26:09 >> I do cover Cython.

26:10 >> Yeah. It's not just the more recent things, it's a big full picture and it's not even that long.

26:17 It's just like five hours or something.

26:19 >> Yeah, it is. Thank you so much for that.

26:21 That's really nice of you to say so.

26:22 >> Good job.

26:23 >> Yeah. Thank you very much. Happy to do it.

26:25 I'm happy to meet up with you and talk about the news as always.

26:29 >> Yeah, thanks. Talk to you later.

26:31 >> You bet. Bye.

26:31 >> Bye.

26:31 >> Bye.

26:32 >> Thank you for listening to Python Bytes.

26:35 Follow the show on Twitter via @PythonBytes, that's Python Bytes as in B-Y-T-E-S, and get the full show notes at pythonbytes.fm.

26:44 If you have a news item you want featured, just visit pythonbytes.fm and send it our way.

26:48 We're always on the lookout for sharing something cool.

26:51 On behalf of myself and Brian Okken, this is Michael Kennedy.

26:55 Thank you for listening and sharing this podcast with your friends and colleagues.

Back to show page