Transcript #78: Setting Expectations for Open Source Participation
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:04 This is episode 78, recorded May 17th, 2018. I'm Michael Kennedy.
00:10 And I'm Brian Okken.
00:11 And we have a special guest with us here, don't we, Brian?
00:13 Yeah.
00:13 Yeah, hey, Kojo.
00:14 Hello, hello.
00:15 Yeah, we have Kojo Iterisa here on the show. Thank you for coming and joining us.
00:20 No problem. Thank you for having me.
00:21 Yeah, it's really great. All three of us got to have a wonderful time at PyCon, didn't we?
00:26 Yes, we did.
00:26 Oh my goodness. So I'm totally going to recap on that first.
00:30 But let's just say thanks to Datadog. This episode is brought to you by Datadog.
00:33 Check them out at pythonbytes.fm/Datadog.
00:36 They were at PyCon. And so we're all we, all of us.
00:40 In fact, Kojo, you and I, we kind of jumped into the deep end, like right at the beginning.
00:44 I was sort of standing around outside and you were, you walked in this room and, you know, just, it was like, hey, we don't have enough people to,
00:53 or enough room to give this welcome speech to all the newcomers.
00:56 So you and I ended up giving the welcome speech, right, to a second group.
00:59 Yep. You and I and Trey Hunter ended up sort of as the impromptu host of that.
01:03 Yeah. At first it was Trey Hunter.
01:05 I mean, I saw you walking.
01:06 I'm like, hey, you need to come up to the front and be part of this.
01:08 So that was really awesome.
01:09 Thanks for doing that with me.
01:11 Brian, what was your favorite thing about PyCon?
01:12 I guess seeing everybody that I only know from their little tiny circle icon on Twitter and being able to see them in person and chat.
01:21 I was actually often surprised because I didn't recognize somebody, even though I see their little picture all the time.
01:27 Well, you know, how many tiny pixels?
01:30 It's like a 64 by 64 sort of thing, right?
01:33 Yeah.
01:34 Yeah.
01:34 Pretty funny.
01:35 Pretty funny.
01:36 So, Kojo, how about you?
01:37 Favorite thing at PyCon?
01:38 I think for me, my favorite thing about PyCon was maybe just getting a chance to get caught up with folks.
01:43 Getting a chance to get caught up with people that I already know.
01:46 Then also getting a chance to meet new people.
01:48 And I think the sort of the impromptu leading of the new intenti session was nice because it made it easier to meet new people.
01:56 Yeah, that was really nice because the people felt more comfortable coming up and speaking to you and me after that.
02:02 I think my favorite thing was actually the live Python bytes recording.
02:05 That was fun, right, Brian?
02:06 Oh, that was a blast.
02:07 Yeah, it was really good.
02:08 We need to do that every year.
02:09 I think I'm definitely planning on doing that again every year.
02:12 I'm thinking about trying to actually propose that.
02:14 It's like an official part, an official activity that is part of some of these conferences like PyCascades or maybe PyCon or something.
02:21 But if nothing else, certainly the open session was awesome.
02:24 And we'll talk more about that later.
02:27 But let's get to your first item, Brian.
02:28 Somebody forgot an else statement.
02:30 Is that what happened?
02:30 Yeah, well, there's more else statements in Python that you might not know about.
02:36 I read this and I'm like, oh, yeah, I forgot about these.
02:39 Anyway, so both for, I mean, you can use else clauses for if statements.
02:44 Everybody knows that.
02:45 But for and while loops also have if statement or else clauses.
02:49 They're while and for loops are loops.
02:52 And if they complete all the way through, then the else clause gets run.
02:57 And there's a little article to describe that that we've linked to called the forgotten optional else in Python loops.
03:04 But I wanted to highlight it because often I forget about it.
03:08 The thinking around this is if you're using a loop to search for something or search for different things and you want to bail out if you find something, one of the ways is to mark a flag to say, hey, I found this thing.
03:20 But you don't need a flag if you take advantage of the else clause.
03:24 So I just wanted to highlight that and remind everybody.
03:27 Yeah.
03:27 So both the for and while loops.
03:29 And these definitely seemed a little bit funky to me when I learned about it.
03:34 I'm like, wait, the while loop has an else clause?
03:36 My mind is melting.
03:37 Kojo, did you interact with these?
03:39 Have you ever used an else clause on a loop?
03:41 On a for loop?
03:42 I don't know that I have, actually.
03:44 Yeah, I always look at them and wonder why they're there.
03:48 I mean, it's pretty cool to know about them.
03:50 I feel like this is one of those things that you could get asked in a job interview, right?
03:55 Like, oh, what does the else clause do?
03:56 Like, wait, there's an else clause?
03:58 How interesting.
03:58 So this is, I would say this is one of the less used part, major pieces of syntax in the language, for sure.
04:04 I would definitely, since I know a lot of people don't know about them, if I was going to use them, I'd probably add a comment there to say, hey, if we don't find the things, then we do this stuff.
04:14 It's interesting.
04:14 It's definitely like one of these sort of Pythonic things that is not necessarily obvious, right?
04:19 It's kind of like self-contradictory in that sense.
04:22 Yeah, yeah, pretty interesting.
04:23 All right, Kojo, you found some pretty cool stuff with some libraries and dependencies, right?
04:28 Tell us about those.
04:29 I got exposed to this, really, I think on the last day of PyCon.
04:32 There's a website called libraries.io.
04:35 And what it does is it lets you not only find different packages, so like PyPy will let you find a number of different packages.
04:42 But what libraries.io does is it will let you find dependencies based on packages.
04:47 So you go to libraries.io and you search for a certain package, and then you can see what other packages that that package depends on.
04:55 And so it's an interesting way to sort of see, to find out, like if you're building a project, what things are you depending on?
05:02 And then maybe what things are those things depending on that you might not have been aware of?
05:06 And it will also point out, like, versions and that sort of thing.
05:08 So you can drill down fairly deep into it.
05:10 I think the person who introduced it to me was pointing out that I can't remember the package now, but there's a certain package that depends on Twine, which is the packaging tool.
05:19 But it depends on an older version of Twine.
05:21 And so on a version of Twine that's, like, say, maybe like a year or so old.
05:25 And so you can find that kind of information.
05:27 And so I thought that was interesting.
05:29 And then along with that, libraries.io is run by a site that is called Tidelift that is looking to try to help bring some financial support into open source software.
05:40 I haven't had a chance to look into that in great detail, but it's interesting how the two are connected.
05:43 That's pretty interesting.
05:45 So it's almost like you can get consulting support agreements for a package that you might want to use.
05:54 It's kind of what it sounds like.
05:55 Yeah, it seems that way.
05:56 Like I said, I haven't had a chance to dig into it in a lot of detail.
05:59 So I focus a little more on libraries.io.
06:01 But I think with libraries.io, you can help determine, okay, well, what packages might I need or want consulting support on?
06:10 So what are the packages that my project depends on heavily and at the same time might not be getting as much support as I might want?
06:17 And so maybe I want to focus my support dollars on that particular package.
06:22 Just maybe two or three levels down in the stack.
06:25 Yeah, how interesting.
06:26 So it says they give maintainers and core teams a platform and marketplace for building sustainable business around the project.
06:36 I bet that resonates with a lot of folks who are out there listening to the show.
06:39 I know there's been a lot of work done.
06:41 A lot of people who have been looking into how do we make open source projects sustainable instead of just having to depend on volunteer work.
06:47 I think the most straightforward way that this has worked traditionally is either a very small amount of donations or consulting.
06:56 If I work on, say, Flask, then maybe I could consult on help people out who are doing large Flask things.
07:03 But this looks like a nicer sort of more formal arrangement.
07:06 So, yeah, I really hopefully that that takes off.
07:09 That'd be great for people.
07:10 I think one of the things I was just playing with it, one of the fun things about libraries.io is to look up a, if you're trying to use a new package that you haven't used before, new library, you can look to see who else is using it.
07:23 So you can maybe look at their source code and see how they're using it.
07:27 It's true.
07:27 That's interesting.
07:27 Oh, I see.
07:28 Other projects, right?
07:29 Like, here's some library.
07:30 Who else uses it?
07:31 Oh, look.
07:31 Request uses it.
07:32 So that must mean it's pretty stable or something like that.
07:35 Or even just to look at code examples of how they're using it.
07:39 Yeah, very cool.
07:39 That's a good find, Joe.
07:40 Thanks.
07:41 So either of you guys out there, are you using type annotations and typends in your Python code?
07:46 I am not.
07:47 But I had a brief discussion about them when I was in Chicago a couple of weeks ago.
07:51 So.
07:52 Yeah.
07:52 Okay.
07:52 Brian?
07:53 Yeah, I'm starting to.
07:54 Yeah.
07:54 I think it's interesting.
07:55 Like, I certainly don't go type crazy on the code that I write.
07:59 There's some obvious benefits for like really large organizations.
08:02 And there's a great article I want to link to called The Other Great Benefit of Python Type Annotations.
08:08 So they talk about things that are fairly straightforward.
08:11 You know, it's like we've had these type annotations for a while, but maybe it's a little unclear when to use them.
08:17 It's good if you have some big project.
08:19 You want to somehow verify that things are working.
08:22 Right.
08:22 So you can employ like static code analysis, right?
08:25 With like mypy or a lot of things.
08:27 We've talked about some of the tooling previously, Brian, that you could run across your code and will like generate these and then you can decide to incorporate them.
08:35 One idea I really like is sort of a twist on an Uncle Bob quote who's sort of a software architect guy.
08:43 It says cleaner code or the code that is self-documented is really great.
08:48 And traditionally people said, well, we don't need a comment when you can use a function or a variable that's like well named.
08:55 So maybe another way to look at it, another thing to say is like we don't need a comment when you can specify to talk about the types when you could say specify type annotation.
09:03 So instead of having a comment saying, hey, this variable is such and such like a type annotation makes that sort of readability super, super easy.
09:11 That's great.
09:11 And then obviously they're sort of optional, right?
09:14 This whole progressive typing or gradual typing thing that they're doing is great.
09:19 So you can add it and won't break your code, but it also won't make it any faster.
09:22 Right.
09:23 Just use it where it's useful for you.
09:24 But this article says the final sort of straw that was like the massive benefit for this guy.
09:30 And I agree with him, which is why I brought this in is around code completion.
09:35 Yeah, definitely.
09:36 Right.
09:36 So like I've got some big application and I typically put this sort of stuff on the boundaries of one layer talking to another layer.
09:44 So I have the web app.
09:44 The web app consumes some sort of data access layer, logic layer that deals with services and data.
09:50 Like if you annotate just the stuff that is like public from that data layer, it just flows through the rest of your application and makes it super, super obvious, which I think that's pretty nice.
10:00 I was actually looking at an example of this last week of, for instance, like if you've got a class that's like a new data class that has type annotations and you assign that to a variable and then you try to access elements of the variable, like PyCharm can like help you, for instance, other editors as well.
10:19 But PyCharm does those hints and will tell you the types of the different elements that you have access to.
10:25 Right. Or if you were to return some object from a method, it might just have no completion because who knows what that could be.
10:31 But if you annotate the return type, all of a sudden it like comes back to life.
10:34 Yeah.
10:34 What editor do you use?
10:35 Primarily Sublime, but my coworkers, I've got some coworkers who use Sublime and some who use PyCharm.
10:42 So I've started using PyCharm more on the QA team where I work.
10:45 And so the other QA person tends to use PyCharm.
10:49 So I sort of go back and forth between the two, like on my personal machines, I've got Sublime and then on my work machine, I've got both.
10:56 And so I use them both in slightly different ways.
10:58 You're getting sucked into the PyCharm.
11:00 Exactly.
11:00 Orbit.
11:01 And I remember, I've also good things about it.
11:04 I also remember reading an article that you wrote about the benefit, I think what the nine benefits of PyCharm.
11:08 So.
11:08 Yeah, that was quite a while.
11:10 That really lays it out.
11:11 Right.
11:11 And this code completion to one of them and these type annotations makes that better, which I think is pretty awesome.
11:17 So, yeah, I just wanted to throw that out there.
11:18 Like there's a whole sort of static code analysis stuff, but this code completion, pretty, pretty major.
11:23 All right.
11:24 Before we get to the next one, let me tell you all about Datadog because they are major supporters of the show and they really are helping keep it going.
11:31 So be sure to check them out.
11:32 So it's a monitoring solution that provides deep visibility into distributed applications.
11:38 So you're maybe you've got some microservices or got different Python applications and you want to see how the database and the Python app and Linux itself are interacting.
11:47 Go check out Datadog.
11:49 So just a few minutes, you can investigate some bottlenecks in your code, figure out where it's slow and make it better.
11:54 Just reading a few dashboards.
11:56 So pretty cool.
11:56 So visualize your Python performance today.
11:58 Get started with a free trial of Datadog and they'll send you a cool Datadog t-shirt, which is awesome.
12:04 So just go to pythonbytes.fm/Datadog.
12:07 Brian, when people create open source projects, like they usually do it because it's something that they love.
12:13 But then people start to depend on these projects and that can create some sort of animosity, right?
12:20 There's a lot of burnout in the open source space because of it, I think.
12:23 Definitely.
12:23 We've seen a lot in the last couple of years of people, you know, even taking a month off or six months off to try to get away from some of it or dropping projects, trying to find other maintainers because maintenance is kind of a hard problem.
12:39 This was something that was brought up and you said that from Brett Cannon, I saw this talk Sunday morning for the Sunday morning keynote at PyCon.
12:47 And you said that he also gave it at PyCascades.
12:51 I don't know if it's exactly the same, but this general message, yes.
12:54 Yeah.
12:54 So the talk was called Setting Expectations for Open Source Participation.
12:59 But it really is a discussion about kindness and paying for open source with kindness.
13:05 And he really talked about some, he gave some examples of basically every communication you have with an open source project, even like a bug report.
13:15 You need to realize that you're taking somebody else's time out of their free time, the free time they could be spending with their, on their own projects or with their family.
13:25 And so be aware of that.
13:27 And he gave some examples of some good interactions and some bad interactions.
13:31 And then also some guidelines for how to communicate online.
13:36 It was pretty good.
13:37 I think the major, sort of the main takeaway was most of these interactions are you asking for a favor.
13:45 And it sometimes doesn't seem that way, right?
13:47 Like, so if I go to a project and say, here's a pull request.
13:50 It's super small.
13:51 All it does is add this one feature.
13:53 It's like 10 lines.
13:54 You can just read that and it's no problem.
13:56 But if the person decides to accept that, right?
13:59 They're not you.
14:01 They are responsible now for maintaining it, but also documenting it, potentially testing it, evolving it.
14:09 Right?
14:09 There's just so many layers.
14:10 It's like, hey, I did you such a nice favor.
14:13 Here's a puppy.
14:14 I got you a puppy.
14:15 And then, you know, the person doesn't like it.
14:17 It's like, why don't they like the puppy?
14:18 I got them.
14:18 That's so nice to give a puppy.
14:20 Right?
14:21 But you're really giving this thing that you have to care for for a long time, even if it's something as helpful as actually here's a pull request.
14:29 Yeah.
14:29 It's you're asking for work for somebody else's work.
14:32 And we forget about that because we're used to like products where we can like complain about the Apple laptop keyboards.
14:39 And it's just OK.
14:40 But we probably ought to be nicer about that.
14:43 But when you like even complain about or tweet a negative thing about an open source project or have a bug report where it's just like I needed this to do this thing and it's broken.
14:56 You're really hitting somebody.
14:59 This is somebody's like somebody's passion.
15:02 Somebody's spent a lot of time on and you're saying to them, this is garbage.
15:06 So, yes, do bug reports, but do it in it's open source.
15:10 It's volunteer effort.
15:11 So do it kindly.
15:13 Do it like you were asking your mother to do it or something like that.
15:16 And he presented it so well that I think this sort of topic needs to be talked about more, even even within groups.
15:25 Like I realized after watching, listening to this and watching it, that I think it will help me even interact with my own team at work when it isn't volunteer.
15:33 It's people getting paid.
15:35 But you still need to be respectful and considerate.
15:37 It's still basically a zero sum game for their time and energy.
15:40 So by doing something, you were sort of taking a slice of that that, you know, maybe they didn't ask you to take.
15:45 Right.
15:45 Yeah.
15:46 Yeah, yeah, for sure.
15:47 Kojo, did you get to see this talk either in Vancouver or at the conference?
15:52 No, I saw there was a similar talk at PyCon Canada in Montreal, but I saw it in Vancouver.
15:58 Yeah.
15:58 So have you had any interactions with folks where you see people like giving up on open source projects or other folks being unkind?
16:06 I've seen a little bit of that, maybe a little more than I would like.
16:08 I have seen people sort of complaining about open source projects, maybe not meeting their standards or not being updated as quickly or as well as they would like.
16:18 I tend to be a little bit prickly about that kind of thing because I think so I'm relatively new to software engineering.
16:24 And a lot of my exposure to software engineering practices have been through the open source community and through some of the larger open source projects.
16:32 And so I have an understanding that a lot of these things that people depend on are being built by volunteers who are doing it in their spare time.
16:40 And I've been fortunate enough to meet a number of these people.
16:43 And so, you know, I know some of these people personally.
16:46 And so, yeah, I guess it sort of helps humanize it for me a little more.
16:49 So I try to sort of push back on those things like, hey, you know what?
16:53 How much did you pay for this or how much are you paying for this?
16:55 And also, you know, you can if you want a problem fixed, there is a well-documented process for you to make a contribution to help fix some of the problems for yourself.
17:04 And if you're someone who's a more experienced developer, it's not that difficult for you to do.
17:08 I think that's a really good point.
17:10 I guess the thing is don't take it out on people.
17:13 Just vote with your feet.
17:14 If you see a project that has 100 unresponded to PRs, maybe that's not a real healthy project.
17:19 And your choices are don't be part of it or become a contributor, but don't abuse the person who's already overwhelmed and already has too much going on, right?
17:30 Exactly.
17:31 Yeah, yeah.
17:32 All right.
17:32 So what's your next pick, Kojo?
17:34 My pick sort of ties into that, the idea of, you know, you've got these expectations for open source participation.
17:39 My thing is sort of focusing on different Python community events.
17:43 And so, of course, you know, we all just came from PyCon and one of the nice things about it, so there's PyCon itself.
17:49 But then for me, one of the nice things about it was a chance to meet some of my, say, get back together with some of my friends from the Python community.
17:54 Of course, we started off with, you know, actually spending some time with you and with Trey to help sort of welcome the first time attendees to PyCon, sort of welcoming them into more active participation in the Python community.
18:06 Yeah, that was fun.
18:07 So let me ask you really quick about that while you're on the topic.
18:09 Give me three really quick things people should know to have, like, a better experience at PyCon or local ones, maybe.
18:15 So I would say, one, try to have some idea of why you're there.
18:19 Like, why are you attending PyCon?
18:21 Are you looking for a job?
18:22 Are you looking to hire people?
18:23 Are you looking to learn new things?
18:25 Are you looking to meet new folks?
18:26 That sort of thing.
18:27 And I think whether it's PyCon or your local Python meetup, it's sort of the same thing.
18:32 Like, you know, what are you going for just to learn or just to meet other developers who work in Python just like you do that kind of thing?
18:38 I think that's sort of the big thing.
18:40 And the other thing is to maybe with something like PyCon, try to manage your energy because there are a lot of people at PyCon.
18:46 There's a lot going on.
18:48 You probably won't be able to go to every talk.
18:51 There's a temptation to try to consume as much information as you can.
18:54 And then I think along with that managing your energy, something that we pointed out to people is to try to sort of – it's something like PyCon.
19:01 Try to optimize for the human interactions like the open spaces and sort of the hallway track because the talks are awesome, but they're all going to be recorded.
19:08 And then the videos will be available fairly quickly.
19:11 But the people that you meet and the human interactions that you have or the cool things that happen in the open spaces, those aren't going to be recorded.
19:18 So one of the things that I did at PyCon, one of the open spaces I was in was hosted by Adafruit.
19:23 And so we got to sit down with some of the circuit boards that were in our swag bags and write some code and make LEDs light up and that sort of thing and sit with people.
19:32 And so that's the thing that's – I can't watch a video of that later.
19:36 I can't do that again later.
19:37 So I actually had that sort of direct interaction with people.
19:41 So I think those would be sort of three things to help guide people.
19:44 I really like to manage the energy because I was done at the end.
19:47 Brian, how about you?
19:48 Wiped out at the end of PyCon?
19:49 Very wiped out, yeah.
19:51 And I think that contributed to some of my – kind of my funk and tiredness in the last few days.
19:57 I'm still feeling it as well.
19:59 I'm still – it was totally worth it, but I am wiped out.
20:01 All right.
20:02 So the last one, I want to share a personal story with you because we find all these things on the internet, and I think they're great.
20:07 But like every now and then, it's like I just found this thing, and it so helped me with this problem that I was running into, and I think it'll help a lot of people out there.
20:16 So I want to tell everyone about Ngrok, N-G-R-O-K.
20:21 And that is a free with a premium upgrade sort of thing service that you can go and basically ignoring all firewalls and all sorts of stuff, expose basically local ports or local servers on your computer.
20:35 So if I have, say, like a mobile device, and I have an app running on the mobile device, and I want to test the services, but I'm like developing it, maybe I want to even debug like how that's working.
20:47 I could actually open – I could run this Ngrok command.
20:50 It'll do an SSH tunnel that exposes, say, my local dev port back to port 80 on the internet.
20:55 Then I go to that URL and hit something on my phone app maybe, and it like – I can step through it in PyCharm on my local machine.
21:04 I think that that is pretty darn awesome.
21:07 Or if you want to make, say, give access to your Raspberry Pi so you can get into it and call operations on it, test your chatbot.
21:16 The reason I was using it is I'm building a set of applications, like proper compiled applications that are offline for my courses.
21:26 So people can basically have offline access to the videos and like sync up their account and then not depend upon being on the web or on the internet, right?
21:33 So that's what I've been doing since I got back from PyCon.
21:35 It's building that.
21:36 And I had been deploying stuff out to the internet, and I'd connect to it and test.
21:40 I'm like, oh, that service isn't quite working.
21:41 And it was getting a little painful.
21:43 I'm like, why am I doing this?
21:44 Because one is on the Windows machine and one is on my Mac, and it was easier to just do that, right?
21:48 Instead of – it wasn't on the same machine.
21:50 And so I'm like, I'm just going to fire up Ngrok, and then I can actually do the same thing I told you about.
21:54 I can actually step through as the Windows app is interacting with the service that ultimately makes its way back over HTTPS onto my local machine.
22:02 Isn't that cool?
22:03 Yeah, that's very cool.
22:04 I got exposed to Ngrok by a coworker, and I hadn't seen it before, and I was like, oh, well, that's pretty awesome.
22:09 Yeah, the thing that I think is most useful is so often – like, I work in the web world, right?
22:14 So traditionally, I had maybe made some changes to the web app, and then we might have like a scrum meeting or like a quick sync-up meeting.
22:23 Like, hey, how's everybody doing?
22:24 And I'm not ready to publish what I've done to the internet, to staging and mess everyone else up.
22:29 But I would still like to show people and let them interact with it.
22:32 Instead of just doing like a screen share, you can go, well, just go to this URL, and you can run it on my machine, which is incredible for a quick iteration of design and development.
22:43 I just saw an interesting application for Ngrok.
22:44 Maybe like the weekend right before PyCon, some friends who run a group here in town called Girls Coding Club, they were doing sort of a tutorial session.
22:53 And so you've got people sort of learning how to build basic web applications.
22:56 I think they were using Rails.
22:57 But then you can use Ngrok and then expose that to the wider internet so that other people in the – so people in the class can sort of – can see each other's applications, or you can send a link to a friend or what have you.
23:08 So it's also really good for tutorials, yeah.
23:10 That is awesome.
23:11 Yeah, for – right, for classes, right?
23:13 So I've got a Slack channel for that group.
23:14 Everybody could Ngrok their stuff and throw it in.
23:17 Say, hey, mine's at, you know, randomaddress.ngrok.io.
23:21 Click on it and have a look.
23:22 And you could like – without having to like reconfigure that on different people's servers.
23:26 I love it.
23:27 And there's like a totally reasonable free tier, which is pretty awesome.
23:30 All right.
23:31 Well, that's it for our items this week.
23:33 I just have a few extra things I want to share.
23:35 Brian, anything else you want to throw out there?
23:36 I did on the plane coming back from PyCon, I finally finished editing the interview with Trey Hunter.
23:43 So soon there will be a Test and Code podcast with interview with Trey Hunter.
23:48 So that should be out soon.
23:49 I saw that you're starting to publish a little more frequently, which is great.
23:53 Thank you.
23:53 Yeah, I'm glad you're doing that.
23:54 So one of our listeners out there, Stephen, Stephen Howell.
23:58 Hello, Stephen.
23:59 Was kind enough to actually be live streaming our live, well, semi-live, in-audience recording of Python Bytes last week.
24:08 That's pretty cool, right, Brian?
24:10 That is neat.
24:10 Have you watched it?
24:11 No.
24:11 Well, I watched some of it.
24:12 So he actually took the video and it starts a little bit of a ways in, but he put it up on the internet on YouTube.
24:18 So if you guys were listening to the live episode last week and you're like, well, what was that actually like?
24:23 Well, click the link at the bottom and you'll be able to watch a pretty high quality version of it, actually.
24:27 So that's pretty cool.
24:28 And then, you know, another thing I'd like to come back to just really quick is, remember when we talked about how easy it is to have a systemd daemon as a Python application?
24:40 To basically implement a systemd daemon in Python?
24:43 We talked about that in episode 54.
24:45 Oh, yeah, totally.
24:46 No, I don't remember that.
24:47 So it turns out you basically have like six or seven lines of configuration and then just an app with like a while true loop.
24:53 It's insane.
24:54 And that's all you have to do to create like a system start run forever sort of application in Python.
25:00 And it's really beautiful.
25:01 So I recently used that technique from episode 54 to build a global series of video servers throughout the world to do like geolocated video serving for all my courses to make that really much nicer.
25:15 So added one in Japan, Sao Paulo and Mumbai this week.
25:19 So that'll make it a little better for people out there listening.
25:22 But it's also a cool application of what we talked about in episode 54.
25:25 Nice.
25:26 Very interesting.
25:26 Yeah, very interesting.
25:27 Incredibly simple.
25:28 I think more people probably would want to do it if they knew how easy it was.
25:32 All right, guys.
25:32 Well, that's all I got.
25:33 Thank you, Kojo, for being here.
25:35 And Brian, thank you as always for making the show happen.
25:38 Thank you.
25:38 Thank you for inviting me.
25:39 Yep, you bet.
25:40 Bye, guys.
25:40 Thank you for listening to Python Bytes.
25:44 Follow the show on Twitter via at Python Bytes.
25:46 That's Python Bytes as in B-Y-T-E-S.
25:49 And get the full show notes at pythonbytes.fm.
25:53 If you have a news item you want featured, just visit pythonbytes.fm and send it our way.
25:57 We're always on the lookout for sharing something cool.
26:00 On behalf of myself and Brian Okken, this is Michael Kennedy.
26:03 Thank you for listening and sharing this podcast with your friends and colleagues.