Transcript #42: Behold: The Python 2 death clock
Return to episode page view on github00:00 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
00:05 This is episode 42, recorded September 6, 2017.
00:09 I'm Michael Kennedy.
00:11 And I'm Brian Okken.
00:12 And we have the band back together again.
00:14 How about that, Brian?
00:15 Thank you so much for carrying the Python Bytes news banner while I was gone.
00:20 And then I get to pay you back straight away a little bit.
00:22 Yeah, it was fun listening to one with you and I'm blanking right now.
00:28 Yeah, Miguel.
00:29 Yeah, Miguel.
00:29 It was great.
00:30 And then it was kind of fun to talk with some new people.
00:33 But I'm not ready to replace you yet.
00:35 Yeah, no, no.
00:35 I think this idea of maybe every now and then having someone else drop in and give it a fresh set of topics might be cool.
00:41 But yeah, no, it's great to be back together.
00:43 So before we get started, I just want to say thanks to Datadog for sponsoring this show.
00:47 You can check out their special offer at pythonbytes.fm/Datadog, which is actually really cool.
00:52 You get something out of it.
00:53 So that's sweet.
00:55 But let's talk about what a couple of the one of the prolific Python developers out there.
01:00 Just in one week, what he's been up to.
01:03 Yeah, I think it was the last week.
01:05 Kenneth Reitz has been very prolific.
01:08 And I don't know if he's got insomnia and he's not sleeping lately.
01:14 But he's put out a bunch of stuff recently.
01:17 And instead of spreading it out entirely for our entire episode, we're just going to lump it all together.
01:23 This basically could be an entire episode.
01:25 Yeah, it could.
01:26 But, you know.
01:26 That would be wrong.
01:27 That would be wrong.
01:28 So first off, I think this is cool.
01:30 So if you're a Mac user, maybe you use Homebrew to install stuff.
01:36 And one of the things he's put together is Homebrew Pythons, which is a tap.
01:41 I didn't know there was a thing called Homebrew Taps.
01:44 But it's a way you can get all Python 2.5 through 3.6 installed easily with just a couple of command lines.
01:52 Yeah, it's beautiful.
01:53 You just basically register Kenneth's tap.
01:56 And then you just say, brew install Python dash 3.6 or 2.7 or whatever.
02:02 I really like brew.
02:05 And I've been starting to use it more and more for my Mac.
02:07 The next time I set up a fresh operating system, which seems to be about like yearly, I get frustrated and format the thing.
02:14 So next time I'm going to just brew install as much as I can, like MongoDB, Python, Node.js, all the things that you need.
02:21 It's beautiful.
02:22 Yeah.
02:22 Okay.
02:23 Well, moving on.
02:24 Next up, we've got a request threads, which is a, I think it's something built on top of requests that uses Twisted's deferred objects as a return object for requests.
02:40 And so you can use it with either async and await or with Twisted to have asynchronous reading through requests easily.
02:48 Yeah, it's really, really cool.
02:49 So basically you create this async session and you just say await session dot get.
02:55 So you have actually two ways.
02:56 You can do async await Python 3.6 style, which is really cool.
03:00 Or you can use Twisted's deferreds, which work in basically every version of Python.
03:06 So you actually can pick and it's really, really cool.
03:10 So I'm looking forward to seeing that rock.
03:12 And it basically looks like the last activity on everything was a couple days ago.
03:16 So yeah, this is kind of new.
03:17 It's kind of cool.
03:18 And also, before we move on, I really enjoyed your, you interviewed somebody about Twisted recently.
03:23 Oh, yeah, yeah.
03:24 That was Glyph.
03:24 That was the most recent episode that's out, but probably not by the time.
03:28 That was 127 on Talk Python.
03:29 Thanks.
03:29 Yeah, he's doing amazing stuff.
03:31 So that kind of riffs on this as well, for sure.
03:33 Okay.
03:33 Now thinking about instead of threads, you might want to just have a background task.
03:38 And Kenneth has that too.
03:40 He's got a repo called background, which just runs stuff in the background.
03:45 Yeah, it's beautiful.
03:45 You basically put like a decorator on a function and then it becomes this async background thing
03:50 that you just kick off like fire and forget style.
03:52 It's really, really cool.
03:54 Like you can do it for CLIs.
03:56 You can do it for web apps.
03:57 I use this in the Talk Python training site, this type of stuff.
04:00 I don't use this because it's new.
04:02 But like when I first built it and, you know, gave it the capability to like email thousands
04:08 of people and update.
04:09 It turns out that that's really bad to do in a serial way on the main thread.
04:13 So you got to kick that kind of stuff off the background threads or things like Celery.
04:17 And this is a really cool way to do it.
04:19 I know that there's Celery and other things, but having some simple way to just ease into
04:24 multi-process programming and it's really hardly any code at all.
04:28 Right.
04:28 There's no extra service.
04:29 It just runs in process.
04:31 It's simple and easy.
04:32 Yeah.
04:32 Last up from Kenneth, although I'm sure I'm missing something that he's been doing recently,
04:36 is setup.py for humans.
04:39 And this isn't something you run.
04:42 It's just he's got a repo that's an example setup file, which he directly off of it, this
04:49 repo exists to provide an example setup.py file that can be used to bootstrap your next Python
04:55 project.
04:55 It includes some advanced patterns and best practices, as well as some commented out nice
05:00 to haves.
05:01 And it had a quick look through it and it looks actually, I like it.
05:05 Yeah.
05:06 So get out there and make that module package, right?
05:08 Very, very cool.
05:09 Okay.
05:09 And so Kenneth, either slow down or we're going to have to have another podcast just to talk
05:13 about your stuff.
05:14 And he has his own podcast, which is pretty long form.
05:18 So maybe he covers this stuff there as well.
05:20 Yeah, maybe.
05:20 I'm not sure, but yeah, definitely.
05:22 All right.
05:23 So up next is a really positive thing, but it sounds kind of negative.
05:28 I want to talk about the Python death clock.
05:30 Dun, dun, dun.
05:30 Dun, dun, dun.
05:32 So I'm over here on pythonclock.org.
05:37 And it says, Python 2.7 will retire in two years, seven months, five days, seven hours,
05:42 33 minutes, and 35 seconds.
05:44 So that's pretty neat, right?
05:47 So here's this clock.
05:48 There's just a running animated countdown till the 2020 timeframe when Python 2.7 is going
05:56 to be no longer maintained when it goes out of support and things like that.
06:00 Yeah.
06:00 And so this is the get, it's counting to what a best guess for when PyCon in 2020 is.
06:06 Yeah.
06:06 Isn't that interesting?
06:07 There's no, when they said they're going to retire Python 2.7, they didn't say we're going
06:12 to retire it on June 1st, 2020, or we're going to retire it on December 31st, 2020.
06:17 It's just, you know, within that year, kind of.
06:20 So there's a couple of interesting things here.
06:22 This guy's like, all right, so when would be the ideal date to retire this?
06:26 It would be PyCon 2020, of course.
06:28 So he says, I hereby suggest we make PyCon 2020 the official end of life date.
06:34 And we throw a massive party to celebrate all that Python 2 has done for us.
06:37 Python 2, thank you for your years of faithful service.
06:40 Python 3, your time is now.
06:42 Sorry.
06:43 So yeah, I think this is a really cool idea to sort of encourage people to move from legacy
06:53 Python over to modern Python.
06:55 And it's fun to just, you know, have up if you're, when you're leaving your desktop open,
07:01 going to have some coffee, you can just remind everybody around you that Python 2 is dying.
07:06 That's right.
07:06 Or if your non-technical manager says, we can't really afford to upgrade that old Python 2 code,
07:12 you can say, well, here's the Python 2 death clock.
07:15 So this is our timeframe.
07:16 This is an upper bound for when we should get to this.
07:19 Yeah.
07:20 So this other one that you want to talk about is pretty interesting.
07:22 It's kind of a design pattern, almost a pushback on some of the more intense design patterns,
07:28 I would say.
07:28 Yeah.
07:29 So one of the things that I always push, I don't always, but I, my red flag goes up when
07:35 everybody, whenever anybody follows something dogmatically, like just this is a best practice,
07:41 follow it or else.
07:42 I don't, I don't like that.
07:44 This is a article called small functions considered harmful.
07:48 And it just takes a look, it takes a look at, there's a quote from here, general programming
07:54 advice doled out invariably seems to extol the elegance and efficacy of small functions.
08:00 And I have seen, I've seen that like this, the author has to an extreme where sometimes people
08:06 will go to the point where they're writing very small functions, like one line functions.
08:12 And that, and I think that's okay for some cases, like complicated math, maybe it makes
08:18 sense, but small functions that are only used in one place, it actually doesn't help.
08:23 And so there's, she goes through and talks about quite a few problems with small functions,
08:28 including like just making your, there's a lot of fun things that she talks about, but
08:32 I think that just makes it code harder to read to me and especially to newcomers.
08:37 One thing I didn't think about was if you're using classes a lot, adding more class functions,
08:43 just a kind of a litters up your class namespace, your interface.
08:47 So you, it's harder to tell what the class is supposed to be doing.
08:51 Yeah.
08:51 I mean, you almost, you almost got to go to the level of like using double underscores to
08:55 make that stuff not show up.
08:57 Right.
08:57 Yeah.
08:58 Right.
08:58 Sort of hide it.
08:59 So, okay, these are the internal things.
09:00 These are little stuff I broke it into.
09:01 I have mixed feelings about this.
09:04 I am sympathetic to what Cindy says.
09:07 I feel like she has a really good point.
09:09 And certainly some of these like dry principles, some of the design patterns taken too much to
09:16 an extreme are really painful.
09:19 Like I would say one of the hardest applications I've ever worked on is this like 50 to a hundred
09:26 thousand lines of code that was just fully abstract everything.
09:32 design pattern, this dependency injection that, and just every time I wanted to do something
09:37 like, where does this live?
09:39 How can I tell what it does?
09:40 I know like somehow it's assembled at runtime.
09:43 So this thing happens, but like there's so many pieces and patterns contributing to it.
09:47 It was really, really not good.
09:49 And I think that's what she's kind of riffing on.
09:51 But I also think there's, it doesn't hurt to necessarily encourage people to write small
09:57 functions, but if they get too small, it is certainly a problem.
10:00 My, my rule of thumb that I use is does the function need documentation to tell what it
10:06 does?
10:07 If it does, it's probably wrong.
10:09 Now that, that doesn't necessarily apply to like, it's an API in a public package and you've
10:14 never seen it.
10:15 Right.
10:15 But in your own code, like do you need comments to tell you what that function does?
10:19 Or does a short, simple name tell you what it does?
10:21 Like that, I feel like anytime I'm about to write a comment and Martin Fowler, I think it's
10:27 Martin Fowler has a really interesting way of talking about comments.
10:29 He says comments are deodorant for bad code.
10:32 So I feel like if I'm about to write a comment about a function, I'm like, oh, this probably
10:37 just should be rewritten.
10:38 So it's really clear what it does.
10:40 It's certainly a tension, but I guess maybe the warning is don't take it too much to the
10:44 extreme.
10:45 It makes it at least as bad or as bad.
10:48 And I want to touch on one more thing because I've been thinking about agile and agility
10:52 a lot lately, especially with refactoring code.
10:56 And one of the comments she brings up is that breaking up your code into small pieces can create premature
11:03 abstractions.
11:04 So you're breaking it up into multiple pieces and that makes it harder to, it might make it
11:11 harder to refactor once you completely understand the problem space.
11:15 So I think the time to break up things is after you've completely mostly solved the problem
11:22 and you're just making it maintainable for the future.
11:25 Yeah.
11:25 That's an interesting point.
11:26 Like once you fully understand and have solved the problem, like apply some refactoring tooling
11:30 or concepts against it.
11:32 And then it's much more likely to be stable and you've got the big picture and then you
11:36 break it up.
11:36 Sure.
11:36 I agree.
11:37 Nice.
11:39 You know what I've been thinking about lately?
11:40 What?
11:40 Datadog.
11:41 Oh yeah.
11:41 Yeah.
11:42 So Datadog, they're sponsoring this episode.
11:44 Thank you guys.
11:45 What they do is basically they let you have an entire view of your entire system, not just
11:52 your application.
11:52 So you've got your Python code, but maybe your Python code is running on a web server.
11:57 It's built on Flask.
11:58 It's talking to MongoDB.
11:59 It's hosted on a set of scaled out Ubuntu servers or Nginx and MicroWSGI.
12:04 You can actually integrate Datadog into all those things that I've mentioned and get an
12:08 entire view of how your overall system, those things all taken as a whole work, not just
12:15 logs or performance monitoring for your Python app, which is pretty awesome if you have a
12:20 big distributed system.
12:21 Yeah.
12:21 Yeah.
12:21 So they actually have a cool little tutorial you can take at pythonbytes.fm/Datadog
12:27 and it takes just a few minutes and they'll even send you a cool Datadog t-shirt if you
12:31 do the tutorial.
12:32 So check it out at pythonbytes.fm/Datadog.
12:35 It helps support the show.
12:36 Yeah.
12:37 Yeah.
12:37 If I do the tutorial, can I get a t-shirt even?
12:40 You can get a t-shirt.
12:40 I don't think you've been excluded.
12:41 Okay.
12:42 Great.
12:42 Awesome.
12:43 Yeah.
12:43 We could both go get a t-shirt.
12:44 Awesome.
12:44 So we talked about the death clock a little bit.
12:48 Let's talk about more sugar, less of a stick type of a thing to encourage people to use
12:54 modern Python.
12:54 I ran across this site.
12:56 I can't remember where I found it, but it's really cool.
12:58 It's called Y-Python 3.
13:00 And what it is, is if you pull it up, there's a simple little code sample of some Python 3
13:06 feature that's awesome that you can't use.
13:08 And there's a button like, show me another cool feature.
13:10 And it'll randomly generate another code sample of something that you could do.
13:15 And so I hit it a few, isn't that cool?
13:17 So I hit it, it's really simple and quick.
13:18 So I hit it a few times.
13:19 I got annotations.
13:20 So type annotations like functions, say it takes two integers and returns a string or something
13:25 like that.
13:25 Keyword only arguments, which is pretty cool.
13:30 So a way to say like, you're only allowed, you can basically say like, you must pass these
13:35 certain arguments as keywords, which was not a thing in Python 2.
13:38 Yield from for basically consuming generators and turning them into generators, enums, and
13:44 a bunch more.
13:45 You can sit there and keep clicking, give me another random sample.
13:48 It's fun, right?
13:48 That is nice.
13:49 Yeah, cool.
13:50 So just go play around with that.
13:51 Actually, there was a few things that I learned about that I didn't know, like the secrets.
13:55 I just have no reason to really play with the cryptographic secret stuff, but that's
13:58 apparently new in Python 3 and pretty nice.
14:00 Yeah.
14:00 Nice.
14:01 So let's talk about something a little above the code, but something happens a lot in technical
14:06 spaces.
14:06 Yeah.
14:07 Drinking.
14:07 Drinking, definitely.
14:09 And speaking of secrets as well, there's a secret that is not so much as a secret that
14:14 not everybody drinks alcohol.
14:16 So I actually got, I thought about this a lot because Trey Hunter brought it up recently on
14:22 Twitter and he said that a lot of the conferences and tech events that he goes to, he, and I'll
14:28 quote him.
14:28 I feel, I sometimes feel excluded when events include nice alcohol, but cheap soda.
14:34 And I've never really thought about that before.
14:36 And I want everybody else to think about it.
14:38 And so there's this acronym called ENAB, E-A-N-A-B, which is equally attractive, non-alcoholic
14:45 beverage.
14:46 And I think it's a cool idea.
14:48 Yeah.
14:49 So there's a, Trey also linked to us to, got us onto a Stanford site because there is like
14:56 an alcohol.stanford site, which is cool.
14:59 ENABs are required for all Stanford parties and it's a, it's a cool idea.
15:04 So if you're going to have like, like, let's say we have a get together and you got like
15:08 some specialty beers, we'll go out and try to find some specialty local sodas also, or
15:13 make sure that you have a nice, if you've got a spiked punch, make a non-alcoholic version.
15:18 And then the Stanford site also has quite a few mocktail recipes that look easy and delicious.
15:24 Yeah, that's cool.
15:25 And those are pretty easy to do, right?
15:27 Like here in Portland, I know we have a bunch of like locally brewed root beers, for example,
15:31 and things like that.
15:32 Yeah.
15:32 So yeah.
15:33 Hot lip sodas.
15:34 Yum.
15:34 Yeah.
15:35 Hot lip sodas.
15:35 Those are really nice and not alcoholic unless you spike them.
15:39 And I think most events now think about having non-alcoholic stuff too, but it's the equally
15:44 attractive part of make sure that you're not getting cheap stuff if you're going all out
15:49 on the alcohol.
15:50 You could have either that really cool minty cocktail or RC Cola.
15:55 Yeah.
15:56 And if you're in the Portland area and you are serving cocktails, let me know and I'll show
16:00 up.
16:01 Yeah, yeah, exactly.
16:02 I'll be there with you guys.
16:03 Yeah.
16:03 Awesome.
16:04 So there's probably a theme.
16:06 I don't know, maybe I was just in a particular mood today or something because I've kind of
16:09 chosen a related type of topics, but we've touched a few times on the podcast.
16:14 And I keep coming back to this, not just to like be a cheerleader and rah, rah, rah,
16:20 things are great, but you know, people bet their careers at least short term on studying
16:25 certain technologies and pursuing one thing over the other, show Node.js over, you know,
16:30 Python and web apps or something like this, right?
16:33 So there's a really interesting article from Stack Overflow and Stack Overflow, I think is
16:38 killing it in terms of deep insight into the developer community.
16:42 And the title is not so bad here.
16:44 It's The Incredible Growth of Python.
16:46 How about that?
16:47 Yeah, this is actually a fascinating article.
16:49 So I'm glad that you brought it up.
16:50 Yeah.
16:50 So I just, it came out today, like just a few hours ago.
16:53 I'm like, we have to cover this today.
16:55 So the idea is they recently wrote it.
16:58 This is not this article.
16:59 Previously, they wrote an article exploring how wealthy countries, those that are defined
17:03 by high, as high income countries by the World Bank tend to visit a slightly different set
17:08 of technologies than the counterpart of developers in the world.
17:13 And they said, well, if we actually look at that set, the largest difference we saw was among
17:19 a Python programmers and the Python programming language.
17:23 And in high countries, Python is even more popular, more extreme in its popularity than things
17:30 like Stack Overflow trends, Google trends, and other Python, other language rankings would
17:35 make it out to be.
17:36 So they basically said, in this article, we're going to make a case that Python has a solid
17:41 claim to being the fastest growing major programming language, period.
17:45 Yeah.
17:46 So did you look through some of the graphs in there?
17:48 Yeah.
17:48 Well, the one that I didn't understand, hoping you can explain to me, is the predicting future
17:53 growth looks like an even larger gap between Python and everything else.
17:57 Yeah.
17:57 Yeah.
17:57 So they started out by saying in June 2017 was the first month that Python was the most visited
18:05 tag on Stack Overflow, period.
18:07 That's, of course, all those conversations restricted to these high income nations, right?
18:12 US, Europe, Canada, Australia, those types of places.
18:16 But if you restrict your attention to those areas, Python is by far the most visited.
18:23 It's actually grown two and a half times in popularity since 2012.
18:27 And there's one that compares it to, there's a graph called Python compared to smaller growing
18:34 technologies.
18:35 But what was the first one?
18:37 You asked me about which one?
18:38 Looking at future growth.
18:39 Oh, right, right.
18:40 The prediction of future growth.
18:41 So they said, look, if we're going to look at these graphs over from 2012 until now.
18:47 And then the guy who wrote this article is actually a data scientist.
18:50 And he said he used to do a little Python, but he only does R. So he doesn't really have
18:54 much of a horse in this race.
18:56 But he said, let's apply statistical modeling to the growth curve out to 2020.
19:02 And if you look at that, it's just like crazy.
19:05 So they say, well, maybe there's going to be a back and forth with Java as students go
19:09 back to school this month.
19:10 And they're going to look up issues for their homework because Java's taught a lot of the
19:15 first year computer science.
19:16 But if you follow this trend, it's like, it's domination.
19:19 It's basically what he said.
19:21 There's another one that's really interesting because I feel like people compare this a lot.
19:25 It says Python compared to smaller growing technologies.
19:27 So Python often gets compared to things like Go and Rust in the data science world, it gets
19:32 compared to R and so on.
19:34 And there's a graph showing it just like 10, 20 times more popular and steeper growth curves
19:42 than all of those languages, which I think is really interesting because people kind of see
19:46 these shiny new languages and go, oh my gosh, this is, I should just abandon Python and go
19:51 write Go or whatever.
19:52 And that may be true for some particular case, but not in general.
19:56 Yeah.
19:56 And some of the strong languages that we have been around for a while, like PHP, C++, Java,
20:04 it's interesting to see that those charts are, they've been relatively, either relatively
20:10 flat or slightly declining for the last few years.
20:13 Yeah.
20:14 A lot of the standard well-known ones, the ones you named, right?
20:17 They are definitely slowly, slowly trending down, which is not amazing for them.
20:22 Yeah.
20:22 Yeah.
20:22 So also related, there's another article.
20:24 I almost covered this one, but in fact, this one was just so, so neat and had so much data
20:30 behind it that I thought I'd rather cover this.
20:32 But there's another one that says Python overtakes R to become the leader in data science and machine
20:36 learning platforms.
20:37 So these are all of course related.
20:38 So I linked to that one in there as well.
20:41 Yeah.
20:41 And finally, one, one wrap up is this was applied to high income countries.
20:44 If you apply to countries that are not in that group, they said Python has the exact same
20:49 growth curve.
20:51 It's just, it's starting at a lower point.
20:53 So they expect in the future in a few years that to also be able to make these kinds of
20:57 statements there, but there's like a lag and they talk a little bit about that.
21:00 It's kind of interesting.
21:00 Yeah.
21:00 I'll have to go back and read those other article because I don't understand why the difference
21:05 between different countries.
21:06 I didn't get a good solid answer there either.
21:09 Okay.
21:09 Cool.
21:10 But worth definitely worth checking out.
21:11 Hey, that's our six, man.
21:13 So that is our six.
21:15 That was fun.
21:15 What's up with you?
21:16 What's any news?
21:17 Well, I've been doing a couple of things.
21:20 I've been learning the joyful bit of the decay of online courses and been re-recording some
21:27 of my online courses, sections of them as the web properties they depended upon, like web
21:32 services or something, change their model or went away.
21:35 So that was fun.
21:36 But it's all good to be able to keep that stuff fresh.
21:41 Also, I'm going to pie cascades.
21:44 So this is a new pie con in Vancouver, British Columbia, beautiful place of the world in
21:49 January 2018.
21:50 So I already booked my flight and I'm trying to get you to go and you're on the fence, man.
21:54 Yeah, I really want to go.
21:56 I don't know what my January is going to look like yet, but I should decide soon so I can
22:01 get a flight.
22:01 Yeah, you definitely should.
22:02 Awesome.
22:03 How about you?
22:03 What else is new?
22:04 Well, I just got back from Germany.
22:08 And one of the things I did there was I met up with the...
22:11 I want to shout out to everybody at the Munich Python user group that like less than a week's
22:18 notice decided to come together and hang out with me for an evening, which is like totally
22:22 awesome.
22:23 And it was a lot of fun.
22:23 We talked about pytest, of course, but we talked about quite a few other things as well.
22:27 Yeah.
22:28 That's awesome.
22:28 They were able to put that together on a short notice for you.
22:31 Yeah.
22:31 And then something happened just today and I didn't even know it was going to happen.
22:34 So the pytest book I'm now no longer working on.
22:37 The last beta was beta 5, but beta 6 just came out today, which is the...
22:43 I wasn't involved at all, but it's all the copy editing changes.
22:46 They fixed all my typos.
22:48 Oh, nice.
22:48 So this stuff has been pushed off to the editors and they're rolling it back out to the readers,
22:53 huh?
22:53 Yeah.
22:53 And so it's just a...
22:56 There's some magic machine now that turns it into a book, a physical book.
23:00 Does your book have a version number, like 1.3, 0.7, 0.6?
23:05 No.
23:06 It should.
23:07 Well, I mean, all of it's stored in revision control, so it has versions that way.
23:12 Yeah.
23:13 It just has a SHA, really long, hard to make any sense of.
23:16 Awesome.
23:17 All right.
23:17 Well, it's good to be back together with you, Brian.
23:19 I think we're both going to be relatively stable for next few episodes probably, so that'll
23:24 be good.
23:24 Yeah, definitely.
23:25 So thanks a lot.
23:26 Thank you for listening to Python Bytes.
23:28 Follow the show on Twitter via at Python Bytes.
23:31 That's Python Bytes as in B-Y-T-E-S.
23:34 And get the full show notes at pythonbytes.fm.
23:37 If you have a news item you want featured, just visit pythonbytes.fm and send it our way.
23:42 We're always on the lookout for sharing something cool.
23:44 On behalf of myself and Brian Okken, this is Michael Kennedy.
23:48 Thank you for listening and sharing this podcast with your friends and colleagues.