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


Transcript #60: Don't dismiss SQLite as just a starter DB

Return to episode page view on github
Recorded on Wednesday, Jan 10, 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 60, recorded January 10th, 2018.

00:10 I'm Michael Kennedy.

00:10 And I'm Brian Okken.

00:11 And we've got a bunch of stuff lined up for you as always.

00:14 Before we get to it, I want to say thank you to Datadog.

00:16 Datadog is sponsoring the show at pythonbytes.fm/datadog.

00:19 More to say about that later.

00:21 Brian, I want to know who's at nine.

00:23 Who's at nine? Yes, who is at nine?

00:26 Wouldn't it be awesome if you could actually just utter this question into the air and have it automatically answered for you?

00:32 Yeah, well, that's the promise of Alexa and Google Home and all these home assistants, right?

00:37 That's right.

00:38 This came up, what was it, episode 33 of Python Bytes, actually.

00:42 We talked about you brought up building an Alexa skill.

00:45 And then somebody saw that and we have a link to a Twitter thread.

00:49 Yeah, it was Greg Quinlan who posted that on Twitter. That's cool.

00:53 Okay, well, he ran with it and he looked into programming both skills for Alexa and Google Home.

01:00 And he came up with this Who's at 9 video that we have a link to and it's just I think it's hilarious. It's basically the old Who's on first routine, but done with an Alexa and a Google Home together.

01:16 It's funny.

01:16 Yeah, so he's got like a little dot in a a Google Home, and he activates them both and they talk to each other, right?

01:24 It cracked me up. It's good.

01:26 We should have like had a clip for it or something for the show, but Yeah, we should just play it. Yeah, that'd be fun.

01:31 One of the things that strikes me, first of all, nice work, Greg. That's awesome.

01:35 Flask ask is really pretty interesting to work with and the Flask assistant is the Google Assistant equivalent of Flask ask.

01:42 It's like just ported to that API. But what's really interesting to me is the API here effectively is Flask.

01:49 And I'm noticing this in lots and lots of places, like someone just sent us something that was almost a web API for the command line.

01:56 But I'm noticing Flask being like the de facto API for so many things these days.

02:01 - Yeah, it must just be that people are just having it's easier to set up a small Flask application for something.

02:10 - I guess, I mean, pay attention to number four on our picks as well, we'll come back to this.

02:15 - There's something coming up related to the Who's at Nine that's on Talk Python, right?

02:20 - Yeah, so I have three guys, a panel discussion, who are all involved in building echo assistant type things.

02:29 Some of the people behind Flask Ask and some of the people behind Flask Assistant, those are sometimes the same people, on Talk Python this week.

02:38 So it should come out just about the same time this episode comes out, which is pretty awesome.

02:42 So if you really like this and you wanna dig into it, check out talkpython.fm/146.

02:47 There should be a whole lot there.

02:49 - That's cool.

02:49 I'll check that out.

02:50 - Sounds good?

02:51 Yeah, so I came across an article that I think it's pretty interesting because you and I have been singing the praises of Python, how it's really, really popular.

03:02 It's becoming quite the important language in so many ways, right?

03:06 We talked about the incredible growth of Python, things like that.

03:09 But I guess this struck a chord with me because I feel like one of the places where Python really falls down is this intersection of packaging for delivering an application to non-developers or non-servers, or packaging, and especially in that area around UIs, like native UIs.

03:30 Yeah, definitely. We don't have that really.

03:33 It's not as obvious what to do.

03:35 It's not obvious.

03:37 There's a few like half solutions, they sometimes work, except for when they don't.

03:41 And you know, it's the thing that I ran across that made me sort of bring this up again.

03:46 And it's not that I think Python completely sucks because it doesn't have it.

03:50 Obviously, I don't think that.

03:51 But I see it as a major weakness.

03:53 And if we could solve this challenge, I feel like it would just make Python even stronger and reach even deeper into like big enterprises that have to have desktop UIs and things like that.

04:05 So the article I found is called "Retiring Python as a Teaching Language." So this is by James Hague, and basically he said, for the last 10 years, my advice for someone getting started programming is to say, guys, start with Python, that's awesome.

04:20 But then he wrote this article to say, actually, that's not my belief anymore.

04:25 Yeah.

04:26 That's kind of sad, right?

04:27 It is, and it seems, okay, so his big beef really is part of this not being able to do the user interfaces, like desktop applications, easily with it.

04:37 Yeah, absolutely. And mobile as well.

04:38 I mean, these kind of are sort of cousins.

04:41 Says, "It's all great, people work with Python "when they're getting started and so on, "but then one day the student will innocently ask, "instead of running a poker simulator on the command line, "can I just put it in a window "with like a button and some cards?" Yeah, okay, so what do you do then, right?

04:56 Well, there's Tkinter, but I don't know, that looks like it's from the early 90s, late 80s.

05:03 It definitely doesn't look fresh and exciting like modern applications do.

05:08 we have Pygame, but that's only if you want a game, right?

05:11 What if I want an app that I want to, so suppose I work at, say, a stock trading place, and I want an app that is across three monitors, and it's showing me the status of all my trades running real-time, maybe a web socket back to some server, as fast as it can be to completely show the traders what's going on.

05:33 What's the answer for Python there?

05:34 - Yeah, well, I don't want to diss Pygame too much, because I know some people have done some non-game things with it.

05:39 But I don't really have an answer to that either.

05:42 I think that's a big shortcoming.

05:43 And if we had really good answers for that, like some of the other frameworks, like even JavaScript has really good answers for that, which is kind of bizarre.

05:51 But like Visual Studio Code, Atom, those are all Node.js plus JavaScript front-end apps, right?

05:58 That's Electron.js.

05:59 Yeah.

05:59 I would like to see a modern sort of thing for Python.

06:04 And I think this is just worth considering.

06:07 You know, actually, the Twitter thread, we'll link to the Twitter thread.

06:11 It's pretty interesting.

06:12 If you open up my initial sort of tweet, I don't know if you wanna call it a complaint or warning to the community, but if you open that up, you can scroll down and you can see all the conversations.

06:21 And even Guido gets in there a little bit to talk about some of the history, which is pretty interesting, and thanks for that.

06:27 So I think it's, you know, I just, I don't know that there's a great answer right now, but I'm trying to inspire people.

06:32 I want to play devil's advocate here though a little bit.

06:35 I know that you've said that you have written a lot of desktop applications, but to be honest, I have not.

06:41 I've written a couple little tiny things that I've needed for utilities at work.

06:47 There's a whole bunch of programming that is not writing desktop applications.

06:51 Oh, absolutely.

06:52 And a lot of it's services, a lot of it's on the web, or it's just command line utilities, like you said.

06:58 But here's where I think the actual, this is why I think we're underestimating the importance of this.

07:04 If you could open up your editor, and it was just, you know, here's a few of the widgets, I could just drop them in here.

07:12 And I could just put a dot app or a dot exe somewhere and my entire company could just pick it up and run it locally.

07:21 How often have you not even can entertain that idea because you're just like, well, that doesn't exist.

07:28 I even consider this a weird idea, right?

07:30 Like we'd probably also see a lot less.

07:32 I mean, there's a lot of internal projects that are are there set up as web applications, internal web applications that could definitely be desktop applications with a shared database back end that we don't do it that way because it's not easy to do that.

07:48 Exactly. It's super hard, but it would be really nice to have some sort of ability to take advantage of the local application, local OS, and maybe you talk to a web service for shared data, maybe you just use SQLite locally, that might be interesting.

08:04 But I don't think we do this because it's just like, it's so not working that it's just like, even if you got the UI working, it's like, okay, well, now what do we do for packaging?

08:15 Right? I know there are answers, but they're always kind of tricky, right?

08:17 So if that was like, entirely obvious, the tooling was just like, yeah, of course you do this.

08:23 Like how many stores in the, how many apps in the Mac App Store would be Python apps? Right now I bet it's like, zero percent, you know, like, basically, right, once you round it down to the significant digits, right?

08:35 They don't exist.

08:37 And these things could just open up, right?

08:39 If we could somehow as a community get like a really nice cross-platform UI setup.

08:44 I agree.

08:45 I think some of the stumbling blocks on that are that little thing that you throw in that's cross-platform.

08:51 I know that that's cool, but I don't know if it's necessarily a requirement.

08:55 That's true. Actually, I would say if you had a killer way to build macOS apps, stop.

09:03 That would be a huge benefit for Python. If you had a killer way to build Windows apps, there's still like the majority of, you know, business people sit down and log in on a Windows machine. Like, if you could do that, that would be an amazing advancement for Python. So you're right, it doesn't necessarily have to be. I mean, One model is what the people at Xamarin are doing.

09:23 They basically have cross-platform stuff, but every platform has its own UI a bit, but they have these designer things that help with that.

09:30 I don't know. I just wanted to put that out there and let people know about this conversation and think about it.

09:35 I think we're having an open session at PyCon on it.

09:38 >> That would be good.

09:39 >> Yeah.

09:40 >> I think I'm glad we're bringing it up because we do need to hammer on this until it's fixed.

09:45 >> If I look across all of Python, this is really the place where there's still a weakness.

09:49 And it would be nice to just like fortify that wall and make it like a perfect place to be.

09:53 Definitely.

09:54 And like I said, SQLite as a little database, you don't even need a server, that might be a good choice, right?

09:59 Yeah, definitely.

10:01 So I came across, well, this is an older interview, but somebody recommended to us that we go back and listen to episode 201 of the Change Log.

10:11 It's another podcast, but there's an interview with the, now I should have looked all these names up, but the dude that wrote...

10:18 Richard Hipp, yeah.

10:19 Okay, you're awesome for looking that up.

10:21 He started at, he calls it SQLite, which I've never heard it pronounced that way.

10:27 SQLite, as in like a meteorite or something, yeah.

10:32 Or is that mineral?

10:33 Yes, a very interesting way of pronunciation, none of which I would have guessed.

10:35 Right, so the rest of us know this is SQLite, I think.

10:38 That's how I know it, that's how I'm calling it.

10:40 I didn't quite realize that.

10:41 So this is the database, if you just say, what, SQLite 3 import in Python, and you get a little single file database.

10:50 - This is beautiful because it's built into Python.

10:52 Every instance, every buddy who has Python has this.

10:56 So you can just count on it being there and it runs in process.

10:58 So there's no configuration, right?

11:00 - Yeah, definitely.

11:01 And I didn't realize how dang cool the thing is until I listened to this episode, that this changelog episode, one of the comments from the interviewers was they just assumed it was a starter database that you always eventually have to move over to something else. And that's not true. There's, as long as your application is not like a web application with extreme client server concurrency, you probably can get away with like a lot of desktop applications are small, or the like, if you have a client side part of your application, that could just be a SQL Lite database, and it'll be fine.

11:39 Yeah, that'd be awesome. Yeah. So if you had like some sort of client side thing that periodically wanted to sync with a real database, you could store it all in in SQLite locally and just synchronize that data across some kind of service with your real data.

11:52 And that would be a real nice way to take the load off the server, to have a local offline version, all sorts of stuff.

11:57 - Some things I didn't know about SQLite before I listened to this was that it started its life as a TCL application.

12:06 - Yeah.

12:06 - Which is bizarre.

12:07 - It's very bizarre, but that's what happened.

12:09 - Well, I guess that's where like TK started, right?

12:12 In the TCL world.

12:13 But the, also that one of the things you got to watch out for is that it's not as type safe.

12:19 It's type flexible.

12:20 Yeah, that's what he called it.

12:22 When you are changing over to another database, your other database might be a little pickier than SQLite.

12:27 So be careful of that.

12:28 So an example, you might have a column, which is in the DDL designated as an integer.

12:34 And if you passed, if you tried to assign quote seven to it, it would just convert that to seven.

12:40 Things like that.

12:41 So it's very funky in that regard.

12:43 It's kind of scripty like that.

12:44 He comes from a background of interpretive languages and weekly typed.

12:51 So that makes sense.

12:52 It's kind of cool.

12:53 Yeah, I thought that interview was really interesting.

12:56 Definitely a lot of respect for what he's doing.

12:59 He's got some very different opinions and perspectives on open source, on say version control and editors.

13:07 I mean, I'm not sure I agree with all of them, but they're certainly interesting to think about.

13:11 Couple more things, the SQL, how there's a page of how SQLite is tested.

13:16 And I think it's really cool that they put that out there of like what their checklist is for testing it.

13:21 The amount of tests are huge, right?

13:23 Yeah.

13:24 And then also that the, I didn't realize it was in everything.

13:28 Like every Android phone has a, is using it and things like that.

13:32 I think iOS as well.

13:34 Yeah.

13:34 Yeah.

13:34 So it's quite ubiquitous.

13:36 It's definitely ubiquitous.

13:37 It's very cool.

13:38 and I think it's definitely a good place to start.

13:41 And a lot of times you might not need more than that, which is one fewer server to configure, one fewer thing to patch, one fewer thing to make sure the firewalls are all right.

13:52 It's really nice to just have that simple thing.

13:54 Nice. So speaking of servers, let's talk about Datadog real quick.

13:58 So Datadog is a monitoring solution that provides deep visibility inside of not just your app, but the infrastructure your app works with.

14:08 So within a couple of minutes, you could investigate, like, say, a bottleneck in your code by checking out some flame graphs and dashboards. You can visualize your Python performance.

14:16 And if you go and do their free trial, you'll get a free Datadog t-shirt, which has got a cool little dog on it.

14:23 So check it out for yourself at pythonbytes.fm/datadog.

14:27 And let them know. Thanks for sponsoring our show.

14:29 Yeah, thank you.

14:30 So I told you about Flask being this sort of, like, API that is standing in for all these other places.

14:37 So the next thing I wanted to cover is serverless programming.

14:40 So there was this joke, which I actually don't agree with.

14:44 I kind of slightly disagree with it philosophically, but the sort of making fun of cloud computing saying, well, that's just another person's computer.

14:52 There is no cloud.

14:53 It's just another person's computer, right?

14:54 That you're borrowing.

14:55 - Isn't that true?

14:56 - It's technically true, but it's, my disagreement is like the cloud computing stuff really has to do with a hardware that you can basically create and control through programming.

15:10 So if there's an API, then you can say instantly, I want a machine, I want to scale my machine, I want to replicate my machine.

15:17 That's not the same as just like co-location or like a rented server, 'cause you can't just go and like rent a server and then hit an API and have like another server.

15:25 So anyway, that's my disagreement a little bit, but to some degree, that's true, right?

15:29 Well, we've moved beyond that joke to a farther world of potential ridiculousness, where we have server-based programs that have no servers.

15:39 Right?

15:40 This whole AWS Lambda, Azure Functions, serverless programming, it's kind of funny, right?

15:44 Yes.

15:45 Yes.

15:46 So basically, the idea with this serverless programming, whether it's AWS Lambda or Azure Functions, is you write a single function, preferably in Python, but often they support JavaScript, C#, things like that.

16:00 and that single function is the entry point into some piece of functionality and you're going to host that function on the cloud and it's up to the infrastructure to figure out like what Docker container to create, run that on, make that happen, scale it, etc.

16:18 You just say here's literally a Python function and its dependencies run that.

16:22 So that's pretty interesting.

16:24 And the main reason here that people go for this one is there's no server at all to maintain, not even a virtual one.

16:30 And the scalability is basically infinite and the price is like insanely cheap.

16:35 Because you only pay while your function is literally executing.

16:38 Okay. But I mean, there's still servers, you just don't have to set it up.

16:42 Yeah, and your code is not stuck to one of them, right? Like every function call basically, I think is a new Docker container. I'm not entirely sure about the internals, but basically, every call is like an isolated execution and then it goes away.

16:54 That's part of the appeal also is that you don't really have to care about that.

16:57 Yeah, it's totally the appeal.

16:58 The infrastructure just deals with it.

17:00 Yeah, you do pay for a small latency on every request because it's got to like spin up this bit.

17:04 But that's still for a lot of things that are not super performance critical, at least in the latency, it's totally would be fine.

17:12 So what I wanted to talk about this week is this thing called Chalice, a Python serverless micro framework for AWS.

17:18 So basically, this is a Flask API.

17:22 Another flask API.

17:24 Another flask API. So you implement these functions in Chalice and you decorate them with this flask API.

17:33 But instead of running a flask app, you create a Chalice app.

17:36 And then you can even say like Chalice deploy and run it and then you just go and basically request your thing.

17:45 So what you effectively create is something that looks like a flask app with all the different pieces that are related and so on.

17:51 but then they're hosted as individual individual function calls on the serverless infrastructure.

17:58 So it's pretty cool, right?

17:59 Okay, that's cool.

18:00 So I think this is really interesting.

18:02 So this is just like, we're going to take flask and put it on to AWS Lambda, which is pretty cool.

18:08 Maybe the other counterpart that I know pretty well is Zappa.

18:11 So Zappa is, I believe its own framework. I don't think it has a flask variation.

18:17 I could be wrong. I haven't done that much with it. But Zappa also lets you basically create this API against this website equivalent, scaled out across these different functions.

18:28 Yeah, so pretty cool things to be playing with.

18:30 Like, you don't even need cloud anymore. Now you don't even need servers. It's all serverless.

18:34 Yeah, so you still, I mean, of course, you still have to set up like a AWS account and get your token or whatever to hook into this, I assume.

18:43 Yeah, exactly. You got to get your own token and all those things and yeah.

18:48 You probably are talking to like some sort of hosted database or S3 or some combination thereof to actually do your work, right?

18:55 Right. And actually, so I've never worked with AWS, but these sorts of things make me kind of want to try because it doesn't look scary at all.

19:02 Absolutely. So let's wrap it back to item one.

19:05 When you create your flask skill, your ask flask stuff, and when you work with Alexa, one of the main ways to work with Alexa is to actually tie, see, see, she's speaking to me now.

19:20 To have her, you could tie those two lambda functions, these serverless functions.

19:26 So actually you could put it all together like that.

19:27 - Neat. - Yeah, cool.

19:28 - Definitely. - So I think you can probably help some people with job interviews coming up here.

19:33 Like, first, how do I reverse a string?

19:35 Second, what's the fastest way to unify a list in Python? - Reverse a string?

19:41 - Yes. - This is a short little thing, but there's a blog article called the fastest way to uniquefy a list in Python greater than or equal 3.6.

19:52 So basically 3.6, unless you're running 3.7 already.

19:56 I just appreciated the, instead of having just an article that says, okay, here's the answer.

20:02 There is a discussion of the different ways you might do it and the code for how he timed it.

20:06 So you can reproduce all of, if you don't believe it, you can reproduce all the code and get your results on your machine, it's probably similar.

20:15 The short answer is, if you wanna keep the order in place, you simply do a list of a dict from keys of your sequence.

20:24 And we'll have this in the show notes, of course, and a link to the article.

20:27 And if you don't care about the order, then just convert it to a set and then a list.

20:34 So that's it.

20:35 And I've used the list set before, And I was actually, I mean, it makes sense that from keys works.

20:42 I've never really used that before.

20:44 So that--

20:45 - Yeah, and it's gonna get interesting with the promises of dictionaries being ordered.

20:50 You could actually get some of these to be a little quicker, right?

20:53 But still preserving the order.

20:54 - Well, isn't that the way it is now?

20:57 - Not all, like some of them, there's like two graphs that says not order preserving functions and then order preserving functions.

21:03 And right now they have list of set of list, - Not order preserving.

21:09 - Right, 'cause set isn't an order preserving thing.

21:12 - So yeah, but it's pretty cool though, pretty cool.

21:14 Definitely worth thinking about all the different ways and seeing the trade-offs and so on.

21:19 - Okay.

21:19 - All right, so I wanna wrap up this episode with leaving some people with homework.

21:23 They've got some research and some chilling on the couch, watching some Python videos.

21:28 - Okay.

21:29 - So there's two sets of conference videos that came out, and I'm sure there's some that I've missed, but these are the two that stood out to me recently.

21:37 PyTexas and PyCon Australia both have their videos up.

21:42 And I linked to the playlist on YouTube for both of them, which is pretty cool.

21:46 There's, you know, like always, like 40 or more videos.

21:50 There's tons of really interesting stuff, but I kind of wanted to touch on some that I, these are not necessarily endorsements.

21:57 These are just like, these look really interesting to me and I'd like to go watch them.

22:00 I haven't spent all this time watching all these videos just right now.

22:04 But from PyTexas, there's a talk on MicroPython, which MicroPython is really, really cool, right?

22:10 You can run your Python on like a $5 microchip and hook your Lambda functions, your Python ones, up to like hardware interrupts.

22:18 Like that's just the coolest.

22:20 And then there's so much talk about machine learning and AI and all that stuff.

22:24 So there was a talk given there called, what is machine learning anyway?

22:28 Or something like that.

22:30 So like a foundational background on machine learning, which is cool.

22:34 And then another one is C for yourself, with the letter C, not S-E-E, so like trying to explore the internals of CPython.

22:40 And then there's one on Python and .NET for this thing called Python.net, which is not the Iron Python that's been around for a long time, but like this newer way to try to integrate those things.

22:50 So all the people that work on the big enterprise apps and C#, they can now plug in some sweet Python or vice versa.

22:55 - Yeah, okay.

22:56 Those all look good to me too, especially the MicroPython.

22:59 - Yeah, MicroPython's great.

23:00 So that's in Texas.

23:01 And then Australia, I don't know, those guys were killing it with names down there.

23:05 They just really did a good job.

23:06 And there's so many all kinds, I have more I pulled out, so I'll go a little quicker.

23:09 Gradual typing, right?

23:11 We've talked about that, the type hints and adding them and stuff.

23:13 And I think this is probably a really interesting survey.

23:16 That hot reloading Python web servers at scale.

23:20 - Ooh, that sounds nice.

23:21 - Yeah, that sounds like a lot of cool internals.

23:23 Prototyping Python microservices in production and secrets of a WSGI master, like understanding the base HTTP protocol.

23:31 And then another one, Python 3 for people who have not been paying attention.

23:35 (laughing)

23:37 So that's not anybody that's listening to this.

23:40 Exactly.

23:41 They know about legacy Python. Come on.

23:43 Then identity 2.0, what, why and how of social and federated login.

23:48 So if you got to do anything with like, identity across providers, that's so painful, this would be cool.

23:52 And then here's a sort of a Tesla reference.

23:56 I'm guessing Python ludicrous mode with Django.

23:59 Okay.

23:59 So ludicrous mode in the Tesla is like, you know, like the insane amount of power, like, you know, give you a neck ache if you hit the gas yard sort of thing.

24:07 So something to that effect.

24:09 And then finally, scaling down.

24:13 We often talk about scale up and all this complexity you got to deal with.

24:16 You even talked about how you're not Google, you're not Facebook or any of these things a while back, which is cool.

24:21 But this is if you do have one of these large sites that's got a complicated architecture, let's say a Redis back-end message queue type thing and a database and a whole bunch of other stuff, maybe some of those are hosted in the cloud.

24:34 Like how do you actually develop that locally also?

24:37 That's cool.

24:38 That's definitely a need for everyone, I think.

24:41 I'm sure there's a lot of good lessons in there.

24:42 So the links to both of those playlists are up on the show notes.

24:47 So that should be fun.

24:48 All right, cool.

24:48 - All right, well, how about you?

24:49 Any other news?

24:52 - We're out.

24:53 So that was six, cool.

24:55 You've actually been crushing it lately.

24:58 - I've been so busy.

24:59 It's been so fun though.

25:01 Yeah, so last week I released my everything bundle where people can get all the courses, right?

25:05 And so I shipped my first course for that everything bundle called Mastering PyCharm, which yes, it covers PyCharm, but it's also basically like a little mini course on like 16 different parts of software development.

25:19 So there's like a little tiny 20 minute thing on refactoring and a 15 minute thing on unit testing and pytest.

25:25 30 minute thing on Git and stuff.

25:27 So it's like sort of all those little pieces put together, but through the lens of working with PyCharm.

25:31 So I'll link to that and yeah, people can check that out if they want.

25:37 And I'm also doing a webcast with the JetBrains people, but on MongoDB.

25:40 So if they wanna, people wanna drop in on that on January 30th, I'm doing a live event with JetBrains and the link for that registration will be there.

25:48 It's free, you can come check it out.

25:49 - Cool, I'll come watch.

25:51 - All right, awesome.

25:52 Well, yeah, that's all I've been doing this week.

25:54 - Nice.

25:55 - Great, all right, well, thank you, Brian.

25:57 - Thank you.

25:58 - A lot of good stuff this week, yeah.

26:00 And looking forward to more next.

26:02 - Talk to you next week.

26:03 - All right, bye.

26:04 Thank you for listening to Python Bytes.

26:06 Follow the show on Twitter via @pythonbytes.

26:08 That's Python Bytes as in B-Y-T-E-S.

26:11 and get the full show notes at pythonbytes.fm.

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

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

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

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

Back to show page