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

#42: Behold: The Python 2 death clock

Published Fri, Sep 8, 2017, recorded Wed, Sep 6, 2017

Sponsored by DataDog! pythonbytes.fm/datadog

Brian #1: What Kenneth Did Last Week (well, recently)

Michael #2: Python 2 Death Clock

  • Python 2.7 will not be maintained past 2020.
  • No official date has been given, so this clock counts down until April 12th, 2020, which will be roughly the time of the 2020 PyCon.
  • I am hereby suggesting we make PyCon 2020 the official end-of-life date, and we throw a massive party to celebrate all that Python 2 has done for us.
  • Python 2, thank you for your years of faithful service.
  • Python 3, your time is now.

Brian #3: Small Functions considered Harmful

  • Cindy Sridharan
  • "General programming advice doled out invariably seems to extoll the elegance and efficacy of small functions."
  • This is sometimes pushed to the extreme of having one line functions that are only called from one place. Understand that doing this increases your code size by 4 lines every time you do it.
    • 1 line for the function call isn't removed because you moved the guts into a function.
    • 2 lines for function definition and guts
    • 2 lines to properly space your new function around other functions.
  • Supposed Benefit: Do one thing; a function should only ever do one thing and do it well.
  • Problems:
    • "Instead of a reasonably airtight abstraction that can be understood (and tested) as a single unit, we now end up with even smaller units that’ve been carved out to delineate each and every component of “the one thing” until it’s fully modular and entirely DRY."
    • "...pragmatism and reason are sacrificed at the altar of a dogmatic adherence to DRY, ..."
    • premature abstractions. breaking up the code into smaller functions before you really understand the problem space can make it harder to refactor later.
    • micro-functions tend to have longer names because you need more names. Longer names aren't always a good thing when you have many long names on a page.
    • loss of locality: One bit of functionality that used to be in one function is now spread across many functions and possibly moved far away from use.
    • class pollution: class interfaces grow with smaller functions and hide the real intended interface.
    • harder to read, especially for newcomers.
  • There is still a place for small functions. But use it in moderation. Communicating with future developers clearly is more important than following dogmatic rules about function size.

Michael #4: Why Python 3

  • All the cool Python 3 features that'll make you switch today!
  • Presented as a random code sample surprise
  • Examples:
    • Annotations: def my_add(a: int, b: int) -> int
    • Keyword only arguments: def f(a, b, *args, option=True)
    • Yield from: yield from range(5)
    • Enums: class Color(Enum)

Brian #5: EANABs

  • Equally Attractive Non-Alcoholic Beverage
  • There is drinking that happens often when you get a bunch of adults together. Often with work or tech gatherings. That’s fine. But make sure you emphasize that drinking is not required.
  • @treyhunner brought it up recently and suggested that all conferences and tech events should have this.
    • "I sometimes feel excluded when events include nice alcohol but only cheap soda"
    • “EANABS are required at all Stanford parties, …”
      • If you have specialty local beers, try to find specialty local sodas.
      • If you have nice spiked punch, have a NA version also.
      • If you have cocktails, advertise your ability to serve mocktails.

Michael #6: The Incredible Growth of Python

  • via StackOverflow
  • Recently explored how wealthy countries (those defined as high-income by the World Bank) tend to visit a different set of technologies than the rest of the world.
  • Largest differences we saw was in the programming language Python.
  • High-income countries, the growth of Python is even larger than it might appear from tools like Stack Overflow Trends, or in other rankings.
  • [StackOverflow] makes the case that Python has a solid claim to being the fastest-growing major programming language.
  • June 2017 was the first month that Python was the most visited tag on Stack Overflow within high-income nations. (Grown has grown by 2.5-fold since 2012)
  • Python compared to smaller, growing technologies graph is incredible.
  • Also: Python overtakes R, becomes the leader in Data Science, Machine Learning platforms

Episode Transcript

Collapse transcript

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.


Want to go deeper? Check our projects