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


Transcript #42: Behold: The Python 2 death clock

Return to episode page view on github
Recorded on Wednesday, Sep 6, 2017.

00: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.

Back to show page