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


Transcript #127: That Python code is on fire!

Return to episode page view on github
Recorded on Wednesday, Apr 24, 2019.

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

00:05 This is episode 127, recorded April 24th, 2019. I'm Michael Kennedy.

00:11 And I'm Brian Okken.

00:12 And we have a special guest this week as well. Kenneth Wrights. Welcome to the show, man.

00:17 Hi, thanks for having me.

00:18 It's great to have you here. I wonder if requests will come up as a topic during the show. What do you think?

00:23 Request three, might.

00:25 The future of requests. How exciting. Awesome. Well, thanks for being here. It's great to have Before we get any further, I want to say thank you to Datadog for sponsoring this show.

00:33 Check them out at pythonbytes.fm/datadog.

00:35 More on why they're cool later.

00:37 Brian, I feel like WebAssembly, Rust, all these things are just – there's so many cool things going on around it.

00:43 And that's something you found us – for us to start off with, right?

00:46 Yeah, I saw this from a cool – actually a Twitter post from Mara Boss.

00:50 I think it's Boss, B-O-S.

00:52 And it's an extension to Rust that's inline Python.

00:57 So if you're a Rust person and you need a little Python in there, you can just inline it as a, I think it's as a macro or something.

01:04 I'm not a Rust person, so I'm not sure how this works, but you can inline Python code, including things like embedding a matplotlib call to pop up a window.

01:15 So it's pretty neat.

01:16 I don't really have much more to say about it other than neat.

01:19 You can run Python within Rust.

01:21 I think that's pretty awesome. Yeah, quite cool.

01:23 I wrote something like this this week, actually, for Bash and Python.

01:27 So you can do inline bash in Python.

01:29 So it seems to be a trend.

01:30 People want to embed other languages in other languages.

01:33 That's cool.

01:34 Can people get to your bash thing?

01:35 Is that a public thing?

01:36 Yeah, it's just import bash or pip install bash.

01:38 That's pretty cool.

01:40 There's a lot of interesting interplays here.

01:42 Brian, have I talked about Wasmr, as in WebAssembly-mer, before on the show?

01:48 I'm not sure.

01:49 I think that's going to have to be a topic.

01:51 So there's all sorts of cool interplays between Rust and Python these days.

01:56 Rust, obviously, is big for generating WebAssembly.

01:58 And so there's now a project called Wasmr, which lets you--

02:02 I think I talked about it last week.

02:03 I did, yeah.

02:04 So lets you basically run WebAssembly in Python.

02:07 And this is kind of like the opposite.

02:09 Oh, really?

02:09 It's an interesting way.

02:10 Yeah, yeah.

02:11 So kind of like Node.js is the platform for running JavaScript outside of the browser, Wasmr kind of does similar stuff.

02:17 Lets you take any WebAssembly thing and run it in your Python code.

02:21 You basically import the functions from it, and then you call them in straight Python.

02:24 >> So do you have to do reflecting where like you know what the structure of the code looks like when you import it?

02:30 >> I don't know.

02:31 I doubt it gives you any help, but the way you interact with it looks like Python.

02:35 You don't have to do anything special beyond an import statement.

02:38 >> Okay, so you don't have to write C or anything?

02:40 >> Like a load statement.

02:41 No, nothing like that.

02:42 It's pretty much straight Python.

02:44 This is really cool, Brian.

02:44 Yeah, I like this.

02:45 Very, very nice find.

02:46 Cool.

02:47 All right, Kenneth, what's your next one?

02:49 You want to tell us about the future with your back from the past microphone?

02:52 >> Yeah, sure.

02:53 I wanted to announce that request three is underway right now.

02:56 This we're doing a development cycle at the moment, and I wanted to announce just some information about that basically.

03:02 So request two, which is the thing that you know and love is going to go into CVE only mode, which is basically been for a long time.

03:10 That's kind of the way things have been for a couple of years now.

03:13 Does that mean like security fixes only or security fixes and bug fixes?

03:17 It means that if there's a CVE, like if there's a true security vulnerability, we'll fix that as soon as possible.

03:26 And if there's a, you know, any security conscious bugs that will, will address those as well.

03:30 But you know, things like people, a lot of suggest UI changes a lot and it's just not going to happen at this point.

03:35 It's going to happen in request three, if you're going to.

03:38 Awesome.

03:38 So what's the story with request three?

03:40 What are you guys, what are the major features?

03:41 Yeah.

03:42 So the major features are there's going to have asynchronous await keywords.

03:45 So you're going to be able to do asynchronous calls.

03:47 We're ripping out URL of three, which is unfortunate because there's different Approaches on how the future of the project could unfold and it's this needs to start happening now so we're just taking action and making our own library for making these low-level requests and We'll see how far along we get with that But there's we don't see any blockers that we can foresee at this point So we'll have a new a new core if you will and it'll be as a new namespace for quest 3 So everything that you know that depends on requests. This is gonna have backwards and compatible changes But it'll be under a new namespace.

04:22 So you won't have to worry about that.

04:23 You can have both installed at the same time.

04:25 - Nice, and it's modern Python only, right?

04:27 - Yeah, it's only Python 3.6, and it has type annotations and all the public functions so your IDEs can get some nice code completion and stuff like that.

04:35 I'm pretty excited about it.

04:36 So I don't wanna take up too much time now, so I guess we gotta keep moving.

04:39 - Well, we do, and I'm pretty excited.

04:41 So I have one more question.

04:42 So why 3.6 and not 3.5?

04:44 Like 3.5 is fine for async and await.

04:46 Did you do like different type annotations?

04:48 What was the three six maybe f-strings?

04:51 - f-strings.

04:52 - Okay, F yes, right on.

04:53 Brian, I still owe you a sticker.

04:54 - They're really useful when you're writing a low level library or something that deals with a lot of URLs.

04:59 It's really nice to have f-strings.

05:00 - Yeah, that's pretty cool.

05:01 That's interesting.

05:02 - And I don't find it acceptable to use three five.

05:04 Like if you have three six, even three six doesn't seem to be acceptable.

05:08 I'd like to, it's gonna be documented as three seven only because like if you're gonna be on latest Python, you might as well be on latest latest Python.

05:16 - Yeah. - Yeah.

05:16 - Right on, and by the time that that comes out, 3.7 will definitely be easy, easy, right?

05:21 What's the time frame?

05:22 - Yeah, I think it'll secretly work at 3.6 and secretly work at 3.7, but I'll just say it works at 3.8.

05:27 - I love it, Brian, you excited?

05:31 - Yeah, actually I think that'll be fun.

05:33 - Yeah, I'm thinking of also ripping out the .get keyword.

05:38 That's the thing I'm torn about at the moment.

05:40 Like the request.get that everyone uses.

05:42 - What would it, what it's--

05:43 - To force everyone to use session.

05:45 - Interesting, okay.

05:46 - So you create a session and then you call get on the session, right?

05:48 - Yeah, so it would be, it's called HTTP session now.

05:51 So it'd be http.request is what I want people to do.

05:55 But I'm still playing with the idea.

05:57 So it might be not changed, we'll see.

05:59 - Yeah, you could face some backlash.

06:01 But yeah, it sounds good.

06:03 - I'm willing to take it.

06:04 (laughing)

06:04 - You got some tough skin, you've been on the internet for a while, right?

06:07 (laughing)

06:08 Yeah, let's not go down that path.

06:09 All right, so maybe you could even say that you've been in some flame wars.

06:14 So the next item I have is called Pyflame.

06:18 And Pyflame is pretty cool.

06:19 Like, if you want to know how the performance of your program or certain libraries going, you can generate what's called a flame graph for Python.

06:28 And what's really nice about this is it's super low overhead enough that you can even run it in production without like hurting your program.

06:37 So you could say, oh, there's something going wrong with the website.

06:40 Let me log in and attach Pyflame to it and see what's happening, and then just break loose and go analyze that, rather than try to simulate what's happening.

06:50 So I think that's pretty cool.

06:51 - We actually used this on the PipM team at one point to determine where our slow points were and how fast our boot up time is.

06:58 - Yeah, and was it useful?

06:59 - It was very useful.

07:00 It shows you every single call in your stack and just shows you a graph over time of how much time was spent on each call and all the sub calls.

07:09 So it's great.

07:10 I really like it.

07:11 Yeah, the graphs are nice as well.

07:12 They're pretty obvious, not just like a grid of numbers like a spreadsheet, but graphs.

07:17 Yeah, usually when you hear someone talk about graphs that are generated from Python, it's like you have to work with them a lot to make them useful.

07:24 But these ones are useful out of the box, which I really like.

07:28 Yeah, cool.

07:29 Another thing that it said that it does, which is nice, has nothing to do with bitbump in this feature, but it's capable of profiling embedded Python interpreters.

07:38 So like for example, in micro whiskey or gene or corn or some of these, you know, back end worker processes for web servers, so you can get in there and get that in multi-threaded stuff.

07:46 So I think it's pretty awesome.

07:47 Brian, do you guys care about performance where you are?

07:50 I mean, you're doing testing hardware, so it's not like users are directly interacting with it.

07:55 Is it, is it, I guess not, do you care about it, but is it something you have to like worry about?

07:59 Hey, in my production stuff, the Python is not the bottleneck.

08:04 It's the communication.

08:05 So yeah, that's a great response.

08:08 It's on the wire, it's not our fault.

08:11 Well, it usually is our fault, but it's usually an optimization of doing too many calls and reducing the communication latencies.

08:19 Right, having a chatty API versus trying to bulk up the thing you want to ask it or whatever, right?

08:24 Are you working with a lot of microservices?

08:26 Working with test equipment, so communicating commands and retrieving data.

08:32 Yeah, that would take a lot of time.

08:34 - Yeah, Brian tests actual devices with Python.

08:38 - That's awesome.

08:39 Oh, that's right, I knew about this.

08:40 Yeah, you test like phones and stuff, don't you?

08:44 - Yep.

08:45 - That's awesome.

08:45 - Yeah, pretty cool.

08:46 All right, before we get on to the next one, which looks pretty interesting, let me just tell you about Datadog.

08:51 So they've been sponsoring Python Bytes for quite a while and we definitely appreciate them.

08:55 So they're a monitoring and analytics service that lets you take all of your metrics and logs and tracing and whatnot across your services, like microservices, like Ken just said, and put them all in one place, and it automatically instruments async libraries like asyncio and Django and Tornado, and helps you visualize all that stuff across the boundaries to find your bottlenecks.

09:15 Super cool, so check them out.

09:16 Get a free 14-day trial and a cool Datadog T-shirt over at pythonbytes.fm/datadog.

09:22 All right, thanks Datadog.

09:23 Brian, what do you got next?

09:25 - This was gonna be one of my extras, but I thought I'd just discuss it 'cause I was curious what you guys thought.

09:29 So Flit is, I really like it.

09:31 It's a little package that allows you to quickly build a pyproject.toml file and a license file.

09:39 Basically, if you've got a module that you want to share with somebody, or a package that's just a source package, it's just a few commands to try to get it into a wheel form so you can share it.

09:50 And it even does publishing within it.

09:53 The one thing I didn't like about it is it didn't support source directories.

09:57 And I like source directories in my packages.

10:00 So I did what you can do with open source projects is I submitted a pull request.

10:05 So just submitted this last night.

10:08 I've been playing with the corner cases today, and there's still some, I'm listing it as a work in progress because there's some corner cases that still need tested and probably ironed out.

10:18 But I don't know, we'll see.

10:20 We'll see where this goes.

10:22 >> Did you make it so it's configurable to any directory or specifically SRC?

10:26 >> Specifically SRC.

10:28 >> Okay, cool.

10:29 It doesn't break any of the other.

10:31 So really right now it used to have two kinds of projects, just a module or a package with a name.

10:38 And now I'm just adding those two within a source directory.

10:42 The old mechanism all works.

10:44 It's just extending it.

10:45 Yeah.

10:45 Played us a little bit like a combination between twine and cookie cutter a little bit.

10:50 Like it's far reduced in scope from cookie cutter and in twine, all it does is, is publish things, publish wheels for you.

10:59 And that's the tool I typically use in my workflow.

11:01 But flit is a great alternative.

11:03 If you don't already have your setup stuff built out, I think flit is like a great first tool to go for, especially if you don't have those files already written.

11:12 Yeah, that's awesome.

11:12 Yeah.

11:13 Well, hopefully people like it.

11:14 I mean, it's out there, the PR, right?

11:16 They could merge it.

11:16 That's pretty cool.

11:17 Yeah.

11:17 So hopefully, hopefully they'll put it in.

11:19 Otherwise you can't use it on your project.

11:21 You'll have to succumb to our side where without, where you don't use source.

11:25 Well, I could fork it.

11:27 Yeah, you could.

11:28 But I don't really want to support it.

11:31 So I'm hoping that...

11:32 Call it split.

11:33 Yeah, you don't want that puppy.

11:34 You don't need another thing to take care of, right?

11:39 Yeah, that's a good name though.

11:41 Just going to do it.

11:44 Awesome.

11:45 All right.

11:46 So speaking of packaging and things that we've talked about and things we like, I'm a huge fan of PipX.

11:52 I think PipX is really killer.

11:54 The way it works.

11:55 issues with homebrew in it, but I'm going to put those aside for a minute.

11:58 Also, Pipin, tell us the story here.

12:01 My endorsement is also with this flag, which is I've run into some issues and I'm not sure what they are yet.

12:06 So, it appears as though PipX is great.

12:09 And what it does is it just creates a virtual environment and installs binaries for you.

12:14 So, it's like a PIPC replacement or a virtual amp wrapper if you have like, sometimes people will have like a system virtual amp where they install their system utilities, or they'll just keep their system utilities in the system installation of Python, and then they'll isolate their different projects into virtual labs.

12:32 This makes it so every single tool has its own virtual lab, which is really best practice.

12:37 So if you're using pipav, if you're using HTTP IE, if you're using anything pip itself, anything that's pip installable from the command line, you can install easily with pipx.

12:48 And it does appear as though it has Chimp, so I'm not sure that it's fantastic, but it appears as though it works pretty well so far.

12:57 And I really like that it supports multiple binaries.

12:59 Yeah, I do too. It's quite nice.

13:01 And to me, it feels like homebrew, but for Python executables.

13:05 Like, it's not necessarily for managing stuff for your project, but for stuff that is Python-based that you just want to run, right?

13:12 Like, I want to, I don't know, run Glances or Cookie Cutter or something like that, right? Or PipMF.

13:17 Exactly. And it gives you a nice isolated environment in which to install that.

13:21 And some of these, like PipM has like some 50 dependencies or something crazy.

13:25 So it's really good to have an isolated virtual environment for that.

13:29 Because in Python you can't install multiple versions of a dependency like you can in Ruby. So that's why we need to do this, basically.

13:37 Yeah, cool. Well, I definitely like it.

13:40 That's the end of my endorsement with the asterisks afterwards.

13:43 afterwards. Yeah, I love it. The problem that I ran into the only problem I ran into was when I installed Python three through homebrew and then Python three got upgraded by homebrew, it had lost like the sim link to where Python was in all of the virtual environments that it had created. Oh, interesting. Yeah. Yeah.

14:02 So when I basically when I upgraded Python, it like lost track of what it was up to. So I just had to like re pip X install everything. There's maybe another way to fix it. But that that was what I did because all the virtual environments it manages seem to have gotten whacked.

14:16 - Yeah, PipM does that too, where it'll break, all your virtual homes just break if you upgrade your Python underneath it, so.

14:22 - Yeah, what do you do to fix it?

14:23 You know better than I do.

14:24 - I just delete them all.

14:26 - Okay, so even you have the same fix as I do.

14:29 Did you try turning it off and on?

14:31 How many times?

14:32 Three times, I always do it three times.

14:34 - I would like to automate that so it does it for you.

14:37 Like, you know, it has a message like, oh, you appear to have upgraded your Python.

14:40 We're gonna clean it up for you.

14:42 but it is limited time.

14:44 - Exactly, quite cool.

14:45 All right, the last one, Kenneth, I think you'll like this one because it has to do with requesting things on the internet.

14:51 And I don't know how to say this, I'm guessing cheat sheet, cheat.sh as a domain, okay?

14:58 So this is an interesting cheat sheet for getting started with Python or Bash or whatever.

15:08 And the way it works is you send it curl requests or send it HTTP pi request on the command line to ask it questions, okay?

15:19 So you can go over there and say, like if you have HTTP pi installed, you could say, HTTP space cht.sh/python that tells you you're talking about Python, then you could say /sort+list.

15:31 And if you run that, it will tell you, oh, here's a Python example of how you sort a list.

15:37 You create the list, you say mylist.sort, you set the key to like string.lower, or whatever you wanna sort, if you say you wanna sort alphabetically, but without concern of casing, things like that.

15:48 So you can ask it arbitrary questions, like cheat.sheet./python/connect-to-database, or something like that, with a pluses in there.

15:57 And it'll tell you, oh, here's some ways you can do it, like with SQLite, let's see what it says for this one.

16:02 Oh yeah, here's a little example of how I use PeeWee to open up a cute little class and do ORM stuff to it.

16:08 And just, it's pretty, pretty funky, pretty interesting.

16:11 And then you can ask it questions like how to get started with a colon learn on any project.

16:16 Like how do I get started with Python?

16:17 And it'll tell you in its little way.

16:20 It's, it's pretty sweet.

16:21 I think funky is the right word for this.

16:22 It's different, right?

16:24 So it's like Google, but harder.

16:26 Basically it's slightly more deterministic.

16:31 Yes, but it has integration into Visual Studio Code and VIM.

16:34 Oh, nice.

16:34 Which is interesting.

16:36 And then you can also, like you can install a client and put it into stealth mode.

16:41 So like if you're doing an interview, anything that you select in a text box, it will start like on the side, printing out its response to that.

16:50 Okay, so if like you're in a chat window.

16:54 - I'm looking at the readme and he really takes this very seriously.

16:58 - It is.

16:59 - He says ultra fast returns answers within 100 milliseconds as a rule.

17:02 So like he's definitely making scalability a concern.

17:05 So I think this is a really fun production project.

17:08 - I think so too.

17:08 And it doesn't use its own data sources, it uses other community driven repos for different topics and it tries to pull those in.

17:16 So it's not like it tries to be the answer, it tries to be a facade from an API to the answers.

17:23 - So it has sources that it gets them from.

17:25 I'm interested in seeing that part.

17:27 - Yeah, yeah, it's pretty interesting.

17:28 So I just wanna give a shout out to John Boltmeyer.

17:31 He sent this in a while ago and I thought it was fun, so I thought I'd throw it out there.

17:34 - And he also has clipboard integration and tab completion support for Bash, Phish, and ZSH.

17:39 - I know, I mean, this is in depth, right?

17:41 - (laughs) Like, you can really go all out with this.

17:44 - (laughs) Yes, you can.

17:46 All right, well, that's it for our full major topics.

17:49 But I'm sure we'll have a couple extra things to throw out here real quick.

17:52 Brian, you wanna start us off?

17:53 - So you guys were giving me a bad time about being a VI person last week, so I thought I'd throw in an article about VI is good for beginners.

18:01 It's just a fun read for anybody that thinks that VI is terrible.

18:06 - You used Vim, not VI?

18:07 - Actually, I used PyCharm right now with the idea of Vim.

18:10 - Yeah, this is an interesting contrarian sort of take on the simplicity is good for you.

18:15 - Yeah.

18:16 - Yeah, I myself, I think it's a good thing to learn.

18:19 - I did a presentation last week with a Jupyter notebook, and one of the things I needed to do was to quickly make sure I cleaned out all the output of a bunch of notebooks, and I found this tool called nbstripout, And so I wanted to drop a link to that.

18:34 It's pretty helpful.

18:35 - Yeah, it's nice. - It's just a command line thing.

18:37 And then we had a bunch of people, a couple people including Cecil mentioned PioDyed, but we did cover that in episode 93, but there was a recent article written up about PioDyed that's kind of neat, so I'll drop a link to that in the show notes as well.

18:51 - I'm super excited about PioDyed.

18:54 I actually just yesterday interviewed Michael Dropboom, who wrote that article you're referencing here worked on the project on Talk Python going deep into WebAssembly and what Mozilla's doing with PyOdied stuff.

19:06 So it's, yeah, it's super cool.

19:07 Kenneth, have you seen this PyOdied?

19:08 I'm looking at it now.

19:09 It's like all of the scientific Python stack in WebAssembly.

19:15 Yes, including the libraries like NumPy and Matplotlib and stuff like that.

19:20 That's awesome.

19:21 Not just like CPython.

19:22 That is not unimpressive.

19:24 No, it's not.

19:27 It's quite something.

19:28 That's awesome.

19:29 Let's see.

19:30 I got some quick conference announcements.

19:32 Kenneth, I see you do as well.

19:33 So PyCon Australia just opened their call for proposals.

19:37 So Australia is a beautiful place to be.

19:39 Either maybe you're already there and you just want to go to the conference, or you want an excuse to go to Australia, submit a talk.

19:44 That's awesome.

19:45 And then last time I had used about whether the gravitational waves of black holes colliding, that research was also done with Python.

19:56 So remember we talked about the black hole picture and all that stuff, Brian?

20:00 - Yeah.

20:01 - Well, our listeners are awesome because they're like, "Oh, Michael, did you wonder about this?" Yes, here's the package they use to discover gravitational waves and do all this amazing science.

20:09 So actually, there's some really cool projects out there, and I'll link to a video of someone talking about it.

20:15 So thanks to Dave Kirby and Matthew Fikert both for that, and I think it's gwpi?

20:21 Yeah, gwpi.github.io is a Python package for gravitational wave astrophysics, So detecting when black holes collide and the ripple in space time they make with Python is pretty awesome.

20:32 - Yeah, I was really surprised to find out that when that code was made available, that a request was used for it.

20:38 - That's so awesome.

20:39 - I have no idea how or why.

20:42 - It doesn't matter.

20:43 It's awesome.

20:44 - But it's in there, so I was like, yes.

20:46 - That is super cool.

20:47 Congrats, man.

20:48 And then finally, another thing that's awesome about our listeners is anytime we mention something we think it's unique, they're like, there's four other ones.

20:54 Here's another one.

20:55 So bullet we talked about, cooked input we talked about is awesome.

20:59 Bullets is super cool for like drop downs inside terminal windows and like nice selections, but it doesn't work on Windows.

21:05 So someone else, Sander Tunison, sent over Questionnaire, which is one that is also compatible for Windows, for our Windows folks.

21:12 - Thanks for putting that in, 'cause I need that.

21:15 - See, you were like the first, one of the very first people to benefit from this podcast.

21:19 I feel the same way, like people are like, oh, you finally, I mean, like I benefit from this just like you guys do.

21:24 It's just I have to get there first before we publish it.

21:27 - Yeah. - Awesome, awesome.

21:28 Okay, Kenneth, what do you got?

21:29 - Honestly, I have a few CFPs I wanted to announce.

21:31 One of them is for Pi Colorado.

21:33 It's a great conference.

21:34 It's gonna be their first year.

21:35 It's run by a great team, at least.

21:37 It should be a great conference.

21:38 If they are actively looking for people to submit to their CFP, they have not had as many submissions as they would like to so far.

21:44 They, you know, bad timing with the conference year, that type of thing.

21:48 So if anyone has any talks that they think could be applicable to that event, please submit.

21:54 Pi Ohio also has their CFP open at the moment, they're looking for people to submit, but they never have a problem with getting too many submissions.

22:01 So I wouldn't rush to that one if you're, you know, if you're feeling iffy about it.

22:06 And then the last one is a PyCon remote, which is something that I'm going to be putting on.

22:11 If all goes according to plan, with Calvin, Spellman, I believe is how you say his last name, who is from the PI Tennessee organizers group.

22:19 him and I are co-chairing.

22:21 That's cool.

22:22 What's that about?

22:22 It's basically a PyCon, but it'll be accessible to people who can't attend PyCon or who can't normally speak at PyCon.

22:29 Is it also virtual or only virtual?

22:31 Only virtual.

22:32 Okay, sweet.

22:33 That's awesome.

22:34 Yeah.

22:34 We're still figuring out what the feasibility of different approaches are, but it'll most likely be live streamed and people will send in videos ahead of time of their talks.

22:43 Okay.

22:44 And unless they're like a keynote speaker or something like that.

22:46 So we're still figuring out the details, but it'll be, it should be good.

22:50 We have a mailing list with like 700 people who have signed up so far.

22:53 So it should be something we can pull off.

22:57 So if you're interested and want to learn more, you can go to do/co/pycon-remote.

23:04 I know it's not the best URL, but that's the best I can give you right now.

23:07 Awesome.

23:07 Yeah, we'll put the link in the show notes.

23:08 People can just click it in their player.

23:10 That's awesome.

23:11 All right, well, let's round it out with some jokes here.

23:17 Brian, you want to go first?

23:19 We're not doing all the jokes, are we?

23:21 We've got to go fast.

23:21 We've got to go fast.

23:22 OK.

23:23 So yeah, I'll just pick one.

23:25 I don't know how tasteful this is.

23:27 We'll let it land anyway.

23:29 So Python used to be directed by the BDFL, Guido.

23:32 Now it's directed by a steering council, GUIDs zero through four.

23:36 Love it.

23:39 Kenneth, you want to do one?

23:40 You got any?

23:41 What's the difference between a musician and a pizza?

23:43 I don't know.

23:43 You can eat a pizza.

23:44 Pizza can feed a family of four.

23:46 Oh, that hurts.

23:47 I can say that because I've made $25 off of my music so far.

23:50 Beautiful.

23:51 All right.

23:52 I got two, but they're related, so I'm gonna put them together real quick.

23:55 I think first to kick it off that Ubuntu users are apt to get this joke that I'm about to tell, okay?

24:01 And then the second one.

24:02 (laughing)

24:05 The second one, this is fun.

24:07 I actually, I know Kenneth, you switched over to Windows recently, and I'm also kind of a fan of it, even though I spend a lot of time on Mac.

24:13 Still, I like the joke.

24:15 How many programmers does it take to kill a cockroach?

24:18 Two.

24:18 One holds, the other installs Windows on it.

24:21 (laughter)

24:24 - All right, beautiful.

24:24 Well, I think that's probably about it for our show today.

24:27 Kenneth, thank you for coming.

24:28 Brian, thank you as always for being here.

24:30 - Yeah, thank you.

24:31 - Thank you for listening to Python Bytes.

24:32 Follow the show on Twitter via @PythonBytes.

24:35 That's Python Bytes as in B-Y-T-E-S.

24:38 And get the full show notes at PythonBytes.fm.

24:41 If you have a news item you want featured, just visit PythonBytes.fm and send it our way.

24:45 We're always on the lookout for sharing something cool.

24:48 On behalf of myself and Brian Aukin, This is Michael Kennedy. Thank you for listening and sharing this podcast with your friends and colleagues.

Back to show page