Transcript #360: Happy Birthday!
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 360, recorded November 7th, 2023.
00:08 I'm Michael Kennedy.
00:10 And I am Brian Okken.
00:11 This episode is brought to you by Scout APM.
00:14 Once again, we'll tell you more about them later.
00:17 Thank you, Scout APM, for sponsoring the show.
00:19 Connect with us on Mastodon.
00:21 All three of our entities are on fosstodon.org, at M. Kennedy, at Brian Okken, and at Python Bytes.
00:28 Want to be part of the live show?
00:30 It's open to everyone.
00:31 We typically record on Tuesdays.
00:33 More on that in just a second.
00:35 Tuesdays at 11 Pacific Time, pythonbytes.fm/live.
00:39 Click on the banner, the image there, and it'll take you over and get notified about when we're doing the live show
00:45 or just find the one going right there.
00:46 Speaking of that, next Tuesday, Brian, there will not be a Python Bytes.
00:51 Oh, no.
00:52 I am going straight from a vacation directly to a conference.
00:57 Somehow, with all that mayhem, I think it's just going to be too much to try to make it happen.
01:03 It'll give people a chance to catch up.
01:05 If anyone's behind, they can catch up on all the things.
01:08 If not, it'll give them more time to gather up ideas to send to us to say,
01:14 you know, you all didn't cover it last week, which would be true even.
01:17 I can tell you that even now, no matter what it is.
01:19 And they sit in and say you should check this out.
01:22 We always appreciate when cool things we didn't quite know were out there that got sent in to us.
01:28 Yes.
01:28 Indeed.
01:29 Happy birthday.
01:30 Happy birthday, Brian.
01:31 Happy birthday?
01:32 Yes.
01:33 Happy birthday.
01:33 Look at this.
01:34 I go to Python Bytes and I go to episodes.
01:37 I go way to the end.
01:38 2016, November 7th.
01:41 Oh, nice.
01:43 Yeah.
01:43 We are seven years old today.
01:46 Wow.
01:47 How awesome is that?
01:49 Yeah.
01:49 We'd be like in second grade if we were a child.
01:51 I know.
01:52 We're working on our writing.
01:54 We're doing basic arithmetic.
01:55 No, this is really awesome.
01:56 I mean, I don't know what my expectations were when we started the show.
01:59 I thought it would be a cool format.
02:01 I thought people would enjoy it.
02:02 But seven years together, that's a long time.
02:05 It doesn't seem like that long.
02:06 This has just been a blast.
02:08 Yeah, it sure has.
02:09 Yeah.
02:09 So thank you to everyone for listening and encouraging us and so on.
02:14 If you didn't, obviously, it would make a lot of sense to keep going.
02:17 No, would it?
02:17 No.
02:18 No.
02:18 All right.
02:19 Great.
02:19 Take it away.
02:20 Well, this is a story about coverage.
02:24 So Python coverage, we're covering, trying to see if your test suite hits all of your code.
02:29 So this story comes from a thread on Mastodon.
02:35 So Pamela Fox, we've had her on, a great person.
02:39 She just asked about coverage testing and covering stuff.
02:45 Apparently, with abstract-based classes, there's a weird thing where the normal
02:48 thing is to say if false.
02:50 Now, whatever.
02:52 That's not what this topic is about.
02:53 But how do we, that's clearly never going to run within your code.
02:58 So how do you tell coverage to not worry about that?
03:02 She said, normally, this is a way to do it.
03:06 You can add a lot of code.
03:07 I'm going to add a lot of code.
03:07 I'm going to add a lot of code.
03:07 I'm going to add a lot of code.
03:08 I'm going to add a lot of code.
03:09 I'm going to add a lot of code.
03:10 I'm going to add a lot of code.
03:11 I'm going to add a lot of code.
03:12 So Hugo, I can't remember his last name.
03:16 Hugo mentions, Hugo VK on Mastodon said, hey, look at the configuration docs.
03:23 You can hide it away in a config file.
03:26 So I went and looked at that because I knew you could do that.
03:29 But I was curious what he recommended.
03:31 And it points right to this coverage RC example with a exclude also.
03:39 Now, this was a new thing to me.
03:41 I hadn't noticed this.
03:43 Apparently, it came out in February.
03:45 And I somehow missed it.
03:47 But February of 2023.
03:48 So it hasn't been out forever.
03:50 I've been using coverage for many years.
03:51 And it lists, there was a exclude lines.
03:56 But it also, it like overrode other stuff.
03:59 So the recommendation now is to use exclude also.
04:02 And the example for her would have been, well, there's an example of if zero.
04:08 You just say if false instead.
04:10 But I often have like, if I've got like some debug stuff at the bottom of the library,
04:16 I might have an if name equals main just for the heck of it.
04:19 Just to run some test code or some debugging code.
04:23 That's not really, I don't care if that's covered by my tests.
04:27 So and it's not going to be.
04:29 So excluding that is cool.
04:31 So I'm using this in a bunch of projects now.
04:33 So anyway, the exclude also going on the story.
04:36 This is neat.
04:37 And I said, oh my god, nice.
04:41 The exclude also seems brilliant.
04:43 And apparently, Hugo was pointing to that coverage doc, but didn't know about.
04:48 No about exclude also yet.
04:50 Even though that's what that's how I learned.
04:52 It was from him.
04:53 And so anyway, a couple of the reminders of, you know, it the exclude tells you what line,
05:02 but it's really the top of a like a if block.
05:05 Like an if statement.
05:05 It's going to it's going to exclude the entire block that comes after it.
05:09 That's how you do that.
05:10 Nice.
05:10 That's cool.
05:11 And so Hugo went off and went ahead and just wrote an article saying, hey, exclude also with coverage.py is pretty cool.
05:18 And so he shows an example of how to use that.
05:21 So we're linking to all of that.
05:23 It's kind of just a fun story how we all like lined up with that.
05:27 So anyway.
05:28 That's excellent.
05:29 And again, happened on Mastodon.
05:32 Everyone come join us.
05:33 Yeah.
05:33 All right.
05:34 Great.
05:34 Yeah.
05:35 Very cool.
05:36 Very cool.
05:36 All right.
05:38 On to the next one.
05:39 And for me, this is a bit of a JetBrains type of episode.
05:42 I got a couple of topics on there.
05:44 Not sponsored by JetBrains.
05:46 Just a fan.
05:47 Things I think you would like.
05:48 This one is really unique.
05:50 So, Brian, have you heard of WriterSide?
05:52 No.
05:53 I bet you've heard of PyCharm.
05:54 Yeah.
05:55 I use it every day.
05:56 Yeah.
05:56 Same.
05:57 And WebStorm.
05:58 Yeah.
05:58 Right.
05:59 WebStorm.
05:59 And I use the full on IntelliJ to build the Flutter stuff and Android Studio.
06:05 All these are like variations of basically the same foundational IDE core.
06:09 And then they have, you know, focuses, a bunch of plugins and other features built in.
06:13 Right.
06:13 PyCharm's about PyCharm.
06:14 So WriterSide is something that's really new to me in terms of a concept.
06:19 So I wanted to cover it.
06:21 It's in early access.
06:22 Right now it's free.
06:23 Eventually there'll be a free plus paid version like PyCharm Community, PyCharm Pro.
06:27 And WriterSide says write, test, build, and publish the best tutorials, API documentation,
06:34 API references.
06:35 Basically it's an IDE for documentation.
06:38 Ooh.
06:38 Cool, huh?
06:39 And then look at this.
06:40 Test.
06:40 You can even test your docs.
06:42 Okay.
06:42 That's cool.
06:43 Okay.
06:43 So the way it works is you come in and it says, I want a new project.
06:46 You can go and create a new write side project.
06:49 And let me see if I can quick get it to say what.
06:53 Oh, I don't have it installed on this computer.
06:57 Anyway, so you get different kinds.
06:58 It supports Markdown.
06:59 And it also has this cool like semantic concept.
07:03 So clean Markdown is I just write, you know, bracket, URL name, parentheses, URL link, so on.
07:13 But if you have a section like table of contents or some other section you want to put in multiple places, it has a way to import those.
07:22 So you can write them in certain areas and make sure you pull them in.
07:26 It has supports for diagrams, LaTeX, a bunch of cool things, right?
07:31 Even gives you like drop downs out of like existing stuff in there.
07:34 So super cool.
07:36 100 plus on the fly inspections.
07:38 I think this is cool.
07:39 It has the whole docs as code pipeline.
07:42 That's a word I've not heard or as a thing I've not heard.
07:46 But yeah, pretty cool.
07:47 It does rest API docs generation, et cetera.
07:50 What do you think?
07:51 I think I want to try it out.
07:53 That's pretty cool.
07:53 So here's the thing.
07:54 If you use PyCharm, you can just go and install it as a plugin into PyCharm.
07:59 And you don't even have to have a separate ID.
08:01 It just becomes a new feature and so on.
08:03 Okay.
08:04 I'll try to resist thurge to go do that right now.
08:06 But you should.
08:08 Yeah.
08:09 So installs all those different things.
08:10 It's like I said, it's free, free for now, even the premium features.
08:15 But eventually the premium features will go paid.
08:17 I don't know what constitutes premium or not.
08:19 It has Markdown and XML support.
08:23 How do you build and publish your docs?
08:26 It lets you build your documentation locally, produce a zip file, and upload it to GitHub
08:30 pages, AWS, Netlify, and other hosting services.
08:33 If you're using a CI CD server, you can provide a builder script as a Docker container.
08:38 Okay.
08:39 That really is docs as code.
08:42 So anyway, I think this is pretty interesting.
08:44 It'll be cool to see where it goes.
08:45 Yeah.
08:46 Nice.
08:47 Well, I'm currently using PyCharm for writing my blog.
08:50 Okay.
08:51 Yeah.
08:51 And maybe.
08:52 Yeah.
08:53 It already had like some like Markdown preview support and it would launch Hugo before me.
08:58 So yeah.
08:59 Okay.
09:00 It'll be fun to try this out.
09:02 Nice.
09:02 Yeah.
09:02 We both have our blogs on Hugo.
09:05 What's the extension there?
09:07 Dot IO.
09:08 GoHugo.io.
09:09 Super, super good.
09:10 I used Hypora for writing it online, which is a really nice Markdown editor.
09:15 Super clean, but really, really good.
09:17 So either, either of those work, but yeah.
09:20 Yeah.
09:20 Well, I think this documentation thing is cool.
09:22 I can't use anything that doesn't allow Vim syntax.
09:25 So.
09:25 I see you're, you're partly broken.
09:27 I'm partly broken.
09:29 I can appreciate that.
09:30 I can appreciate that.
09:32 All right.
09:33 How about we take a moment and thank our sponsor and tell everyone about Scout APM.
09:37 Yes, let's.
09:38 Let's do it.
09:40 So yeah.
09:41 Thank you to them for supporting this episode.
09:43 They're supporting a good chunk of them.
09:45 So please check them out because supporting them supports us as one of the major ways.
09:50 So if you're tired of spending hours to find the root cause of issues impacting your performance,
09:54 then you owe it to yourself to check out our sponsor, Scout APM.
09:58 Scout APM is the leading, a leading Python application performance monitor tool that helps you identify
10:04 and solve performance abnormalities faster and easier.
10:07 It ties bottlenecks such as memory leaks, slow database queries, background jobs, and the dreaded N plus one query problem that is common in ORMs with lazy loading and more directly to source code.
10:19 So you can spend less time debugging and more time building, especially when it's not errors.
10:22 It's just slow, right?
10:23 That's extra tricky.
10:24 You'll love Scout APM because it's built for developers by developers.
10:29 It makes it easy to set up and deliver insights in less than four minutes.
10:32 Just pause this episode, pop over there, set it up real quick, and you'll be right back.
10:36 And it'll be like you barely miss a beat.
10:39 So start your free trial and get instant insights today.
10:42 Visit pythonbytes.fm/scout.
10:45 And please use the link because that lets them know you came from us and not from the Google.
10:50 More about Google later, actually.
10:52 Yeah.
10:52 So pythonbytes.fm/scout.
10:54 Links in your podcast player show notes.
10:55 Thank you to Scout APM for supporting the show.
10:59 Awesome.
10:59 Thank you.
11:00 Yeah.
11:00 Yep.
11:01 Off to you.
11:01 Brian, what's what you got for your final one?
11:04 I've got actually multiple final ones.
11:06 I've got extra, extra, extra.
11:08 Yeah.
11:09 I love extra, extra, extra.
11:10 Okay.
11:10 So a few little-ish topics.
11:14 Not little-ish to the people involved, of course.
11:17 PSF has announced on October 27th a new community communications manager.
11:24 And what was her name again?
11:26 Marie Norton.
11:28 So congrats, Marie.
11:29 And we look forward to seeing what you're up to as a communication manager.
11:34 So kind of neat.
11:35 I liked it.
11:36 I'm liking that the, I don't know.
11:38 I just like to pay attention to what's going on with the PSF.
11:41 And all those people involved with Python help out a lot.
11:45 So thank you.
11:46 The next extra is there's another podcast.
11:51 We love podcasts.
11:53 We have a few ourselves.
11:55 And the new one that I want to talk about is core.py.
11:59 This, I've listened, it has two episodes out so far.
12:02 And it's two of our favorite people.
12:04 Pablo.
12:04 Okay.
12:05 I'm not going to try to pronounce.
12:06 Do you know how to pronounce that name?
12:07 Pablo.
12:08 Pablo Galindo.
12:09 Okay.
12:10 Pablo.
12:11 And Lucas Lenga.
12:12 Or Luke, Luke Cash.
12:14 Lucas.
12:14 Okay.
12:15 I'm doing bad today.
12:16 So very core contributors and really doing a lot of great work for the Python community.
12:24 So hearing from them is nice.
12:27 The first two episodes.
12:27 The first one was talking about what the first core sprint was in, in Burno.
12:34 Burnio.
12:34 Burno.
12:35 Okay.
12:36 Names.
12:36 Names hard.
12:37 Talking about the first sprint for 313.
12:41 So that was kind of interesting.
12:42 All the, all the neat stuff they're working on for 313.
12:45 And then the, the second episode is a complete episode dedicated to talking about the PEP 703,
12:51 removing the GIL.
12:52 I think we talked about this last week.
12:54 It was either last week or the week before, but, removing the gill, kind of going
12:59 on as a flag.
13:01 so an optional thing for 313, but, there's a lot of, there's a lot of information around
13:07 there.
13:07 There's a, and it's kind of neat that these, these are long.
13:11 So these, the first one's an hour and 11 minutes.
13:13 The second one's an hour and 14 minutes.
13:15 Kind of a deep dive into some core nitty gritty Python topics.
13:19 And it's kind of, it's, it's nice to hear right from, right from the horse's mouth sort
13:24 of a thing.
13:24 So.
13:24 Yeah, it's awesome.
13:25 Pablo and Lucas are both awesome developers, massive contributors.
13:29 So they'll have good insights.
13:30 Yeah.
13:31 This is news to me as well, but, yeah.
13:33 Very, very cool.
13:34 It's fun.
13:34 the, the, the last one we talked about, I talked about, a, or I showed a regular expression crossword puzzle last week.
13:43 and, Kim, I'm going to, I practiced his name cause it's cool.
13:48 Kim fun week.
13:49 No, I did it wrong.
13:50 Kim fun week there.
13:52 Kim, pass this in.
13:55 It's at reg regex crossword.com.
13:58 And, it's kind of awesome.
14:00 So, I played with it for a while and it actually is, it's serious.
14:06 It's not a joke.
14:07 It's trying to teach you how to do regular expressions through starting with simple and
14:11 then complicated, crossword puzzles around regular expressions.
14:15 And it's, it's like actually kind of fun.
14:18 So I, I was, I wasted like 20 minutes the other day playing with this.
14:22 So nice.
14:25 And Kim is in the audience.
14:27 Have to say spot on Brian.
14:28 Nicely said.
14:28 Well done.
14:29 Awesome.
14:30 that's, those are my extra, extra, extras.
14:33 Can we go back to the PSF one real quick?
14:35 Yeah.
14:36 PSF.
14:37 Okay.
14:37 Yeah.
14:38 So I also want to say welcome Marie.
14:40 That's awesome.
14:41 Very cool to have you here.
14:42 I think, building out the communications is a big deal.
14:46 We pointed out that the PSF, is now on Mastodon with actually a huge number of followers
14:53 straight away.
14:53 So that's really, really cool.
14:54 And probably, probably something to do, with her work.
14:58 Maybe, you know, the timing lines up anyway.
15:01 If she's looking for a project, Brian, what's your domain name?
15:04 What's your, for your blog?
15:06 python test.com.
15:08 Mine's mkennedy.codes.
15:10 Which is cool.
15:11 What do you think the PSF should be blogspot.com?
15:16 Like as in Google?
15:17 Oh, maybe they should, maybe you should like look at getting that a little more like, you
15:22 know, python.org slash blog or blog.python.org.
15:26 I don't know.
15:26 Like just seems like it would give it some more.
15:28 Blogspot.
15:29 Yeah.
15:29 I mean, that's a blast from the past.
15:31 I do appreciate the blast from the past.
15:33 Like it's that and the geocities.
15:35 Pretty awesome.
15:36 Got my blog roll.
15:37 You're just making all kinds of friends.
15:39 I know.
15:41 No, I mean, I'm serious.
15:42 I think it would be like if, if she's looking, she's going to be busy, of course.
15:45 But if like, one of the things I think would be nice is to have like a more like focused,
15:50 proper at home on Python somewhere, somehow blog domain.
15:54 But yeah, maybe not.
15:55 Like blog.psf.org or something.
15:57 Yeah, exactly.
15:58 Something like that.
15:59 Right.
15:59 You probably could set up the custom domains in blogspot.
16:01 Like I know you can't have WordPress.
16:02 Yeah.
16:03 So pretty small, but I think it would be cool.
16:05 I've always thought it should be something like that to learn.
16:07 Just like when you see this stuff posted, it's not always some random blog.
16:10 It's like, this is the official PSF blog.
16:12 I don't mean that as a criticism.
16:14 I mean, it's like, Hey, this is encouragement.
16:15 Like maybe something that shouldn't be too hard.
16:18 Yeah.
16:18 All right.
16:18 You ready for it?
16:19 Now I'm back to criticism.
16:20 You ready for my next one?
16:21 Yeah.
16:22 All right.
16:23 All right.
16:23 So I've said this before, but Google seems to just have, especially the Chrome team in particular,
16:30 but I know this is like intertwined deeply with their ad team.
16:34 And you know, those two things largely make up Google.
16:36 So they have this premise that I think is really just not the right way to think about the internet.
16:42 And the premise is the internet should be constructed so that users can be identified, tracked and retargeted and hence resold.
16:50 That is the, that is how the internet should be.
16:52 But you know what?
16:53 Privacy is important.
16:54 So how do we make those two things congruent?
16:56 And I just strongly disagree with the fact that the internet should be constructed in a way to sell people on purpose to, to resell information about people, to retarget them, to track them, to create like shadow profiles of them.
17:10 All right.
17:11 But there's now been three separate ways in which the web team have tried to reimagine how the web fundamentally works so that that premise holds so that that holds true.
17:23 Right.
17:23 So they started out with, we talked about it way back when was flock federated learning of cohorts, which went nowhere.
17:32 Cause people are like, do I really want to be grouped into these?
17:35 Be told that I'm in this, this group or that group, like, Hey, here comes the divorced guys.
17:40 Let's see what they can do.
17:41 Or, you know, right.
17:42 You name it, whatever a group it is.
17:44 That's not ideal.
17:45 Right.
17:45 And then they came up with something called privacy sandbox, which also went nowhere, but it was based on the same basic premise.
17:52 Like we're going to get rid of cookies, but how do we set up things when cookies are gone so that we can still retarget and track you.
17:58 Now, the last attempt was this thing called web integrity, and it's been kind of sold as DRM for the web.
18:06 So what they can do is they can say, we only are going to this website will only allow browsers that like integrate with this web integrity thing and can prove who they are.
18:17 And we accept that browser to visit our website to show the HTML.
18:21 Otherwise it'll say, no, you're using Vivaldi and we don't think Vivaldi belongs on your page or you're using this phone browser or whatever.
18:29 Right.
18:30 And the idea was, it was not terrible.
18:34 It was like trying to prevent people from, scraping sites illegally.
18:38 It was trying to prevent them, like robots from doing other bad things, phishing scams and, and so on.
18:44 But it also was like, we need to individually fingerprint and identify every single user with like a unique ID.
18:53 That'd be nice.
18:54 Wouldn't it?
18:55 We can just have that.
18:55 I mean, other companies don't get the third party cookie, but we get this global one.
19:00 Right.
19:00 And so guess what?
19:02 The third attempt has been like fought off and defended and it's no.
19:08 So Chrome, the news is Chrome will not be proceeding with web integrity, integrity API being by many to be or a DRM.
19:16 And if you go and check out, like, sort of not the cancellation announcement, but just the analysis of this over on Ars Technica, it's, not ideal.
19:27 Like some of the quotes are, user, one user calls the idea absolutely unethical and against the open web.
19:34 Another one says they cannot believe this is even being proposed.
19:37 A third still says, have you ever stopped to consider speaking to Google or Chrome team that you're the bad guys?
19:43 Like it's crazy.
19:45 So anyway, three strikes.
19:48 Are they out at Google?
19:49 Will they, will they stop?
19:50 Come up with something else.
19:51 Yeah.
19:51 But all of these attempts are because of that, that core assumption of the web.
19:55 You must be able to track and target people.
19:58 So now how can we make privacy?
20:00 Like, wait, wait, wait, let's, can we just not like, let's not do that.
20:04 Yeah.
20:04 Like the way we sell ads is we have, we have content and we sell ads that are related to that content.
20:10 We don't track people.
20:11 We don't retarget them.
20:12 And Google could just as they know what is on pages.
20:16 They have like the biggest search index in the world.
20:18 They could sell ads based on the content of the videos of the, of what's on the page.
20:25 But instead they keep trying to like take their biggest browser and turn them into like super spy machines so that they can get like, you know, a few more percent ad revenue by retargeting and selling that stuff.
20:36 So it's, I, for one, like it.
20:39 Now, as a content creator myself, the, there is some stuff that I kind of get, I don't want to track people, but I do want to know like which pages are popular and which ones are not.
20:50 If a, if a blog post is does well or does not do well, which ones do better.
20:55 And I'd like those numbers to be kind of valid.
20:57 It would be great if there weren't bots and stuff like that.
21:00 if there's a way to do that.
21:03 So that, that premise of, can we figure out what's popular and what's not?
21:08 That's, I think that's fine, but we don't need to track individual people.
21:12 I mean, I was starting to imagine if, if this was in the rest of your life, like you're just walking down the street and you think about something.
21:18 So you look up and, and then you get home and Google says, Hey, I noticed that you were looking at flags the other day.
21:25 So here's a bunch of flags that you could buy.
21:27 I'm like, I wasn't looking at it.
21:28 I was just glancing in that direction.
21:30 It was colorful.
21:31 I'm sorry.
21:32 You know?
21:34 Yes, exactly.
21:35 Exactly.
21:36 It's yeah.
21:37 That's a lot like that.
21:38 And, Christian also out there points out in a pretty interesting angle from blogspot that, Google may kill it off at any time.
21:45 Right.
21:46 That's like one of, one of the Google things like reader it's out Gmail, old Gmail.
21:50 It's out.
21:51 We're going to give you our inbox.
21:52 We're going to cancel that.
21:53 Give you the new one.
21:53 Right.
21:54 There's just like, there's not a lot of long-term support to a lot of the Google projects.
21:58 And so they might decide it.
22:00 Yeah.
22:00 It's not worth us to focus on anymore.
22:02 So yeah.
22:02 Proactive.
22:03 It would be better.
22:04 I'm sure they would give a pretty good runway, but still.
22:07 Yeah.
22:08 That's a good point.
22:08 It is a good point.
22:10 All right.
22:11 You had your extra, extra, extra moment.
22:13 Do you have more extras?
22:15 I do have more extras.
22:16 All right.
22:16 Just a couple.
22:17 Okay.
22:17 So, I am working on the second phase of the complete pytest course, working with
22:24 projects and I'm just, I just recorded all of the mocking, chapter and I should get
22:29 have that, up, I'm going to edit it tonight.
22:32 So it should be up shortly, either today or tomorrow.
22:35 I'll have the mocking.
22:36 And I know mocking is a hard thing to get your head around.
22:39 So this was a fun one to record.
22:41 So that'll be cool.
22:42 I also wanted to, shout out to PyCharm.
22:45 we talked about JetBrains.
22:47 PyCharm is, helping promote this course by, giving me a whole bunch of, coupon
22:52 codes so that people can try out PyCharm Pro.
22:55 so if you're in the course, send me a note to say, Hey, I want to try PyCharm Pro
22:59 and I'll send you a, a free code to try it out for a few months.
23:04 Yeah, that's cool.
23:04 the other thing with PyCharm is they're going to do, they invited me on their
23:09 webinar series.
23:10 I'm going to do, do, do enough testing by test to the rescue webinar on November 21st.
23:17 So if you'd like to hang out with me even more than you do on Tuesdays, Hey, it's a Tuesday
23:22 also, next Tuesday, you can hang out with me twice.
23:25 so, or actually the Tuesday after the two Tuesdays, next Tuesday, hanging out with you
23:30 zero times.
23:31 Yeah.
23:31 Zero times.
23:32 And then we'll make up for it.
23:33 So exactly.
23:34 That's awesome.
23:34 That's, it looks like a really good webcast.
23:36 and Steven got my picture on it somewhere.
23:38 There it is.
23:39 Neat.
23:40 Anyway.
23:41 how about you?
23:42 Do you have any extras?
23:43 I do have some extras.
23:45 Let's see.
23:46 So just real time follow up, by the way, check out killed by google.com.
23:50 Oh God.
23:51 Google podcast was just killed.
23:54 Google domains was killed.
23:55 pixel pass was killed.
23:57 let's see what else we got.
24:00 YouTube stories, et cetera, et cetera.
24:02 So there's just, you know, there's a, like, look at the size of that scroll bar, Brian.
24:05 I mean, to be fair, they try out a lot of stuff, but some of the stuff like, like was going for a long time.
24:12 Like Google bookmarks 2005 to 2021.
24:15 And they're just like, yeah, we don't want to do it anymore.
24:17 yeah, well, exactly.
24:19 And I think it's, it's fair.
24:22 there's a really interesting blog post by, the, somebody who was on the Google docs team who talked about how a lot of, a lot of big tech companies and being on the Google docs team was clearly inside Google.
24:37 Said that, look, a lot of this stuff happens because the culture is about like value promoting and sort of giving raises and advances to folks when they create something new and powerful, not just maintaining and polishing something that's around.
24:55 So there, apparently there's something about how, how credit is given for say maintaining Google inbox versus building some new other thing that would replace it.
25:07 Right.
25:07 that seems to be a little bit more value according to the guy from the inside, not me.
25:12 Hmm.
25:12 All right.
25:12 But that's just, throwing that out there.
25:14 Oh, what's up.
25:15 Okay.
25:15 So I got a bunch of small ones here.
25:17 Let's talk about them real quick.
25:18 This is just a shout out to century.
25:20 You know, century, it's been a sponsor for on the show.
25:23 He said, we just gave $500,000 to open source maintainers.
25:27 So I just wanted to give them a little bit of a shout out and a little bit of credit.
25:30 Say, awesome.
25:32 Well done century century itself being open source.
25:34 And then I'm also paying it for like this.
25:36 So I think that's pretty cool.
25:37 Yeah.
25:38 That is neat.
25:38 Yeah.
25:39 That is quite neat.
25:39 we talked about, you talked about, rough and the integration, the basically Ruff format and it being near, near ready.
25:48 And I said, okay, well, what are the settings that actually give you all the features of reformat
25:54 code and those types of things, but based on rough instead of what's just kind of built into
25:59 PyCharm, which is fine, but it doesn't do Ruff formatting.
26:01 So I'm going to share a link to a picture that shows you all the settings.
26:06 So in PyCharm, if you get the rough extension and you say run rough when code is reformatted,
26:12 that is command alt L or control alt L. Like you hit that, that used to run PyCharm's
26:16 formatter. Now it just runs rough slash space format on the file. Cool. Right.
26:21 Yeah.
26:21 Yeah. And you can also say show rule on code inspection, which like you hover over, it'll
26:25 show you the rough rule that's violated. use Ruff format that when you have to check
26:30 or it, it only inspects it, it doesn't actually do anything. And then you can specify the rough
26:34 executable. it'll prefer to use the one in your virtual environment if you have one,
26:38 but you can also like, you can see I have a global pip X rough installed. So if I don't
26:42 have it in the project, I don't really care. It's just a format, you know? So anyway, if
26:46 people want to get it going, that's the, that's the magic right there. Get the rough plugin and
26:50 then check those boxes.
26:51 How have I not thought to do a pip X on that yet? That's okay.
26:55 Right. Cause you never import rough, right?
26:57 No. Right. Yeah. Yeah. It's not a tight, like py test, you could pip exit, but you end
27:03 up a lot of times wanting some feature of the actual library in yours, in your code. Right.
27:08 But with rough, you just want to run it. So yeah. The only reason I can see to keep it in
27:13 your virtual environment is if you want to maybe pin it to a lower version, like when it did
27:17 not change at all for some reason, but other than that. Yeah. All right. What else we got?
27:21 Back to PyCharm one more time. I told you this kind of the JetBrains episode, but in the pro
27:27 version, have you ever noticed now that they have that little, like three stars AI helper thing,
27:33 Brian? Yeah. Played with it. Played with it a little bit. One of the things I don't use it very
27:37 much for coding. Surprisingly, it's like, I don't know. It seems like it should be awesome. And I just
27:41 don't use it. But what I started, I noticed that there's one by the get commit message. So when you go,
27:47 you make a bunch of changes and you could go type out what those changes were, or you just press that little
27:50 button. It's kidding. It used to be like, we have changed these files. I'm like, okay, great. Well,
27:55 I could, I could tell you that, like, that's not that useful, but it's getting really good. I'll
27:59 give you two examples. I'm working on this project. That's doing some text to speech, sorry, speech to
28:05 text processing. It's got like a background service thing. It's using assembly AI. And it was, it also has
28:11 rough working on it. So two different commits. One, I made some changes to this background service thing
28:16 that like just runs jobs because he's like creating transcript can take a while and other
28:20 stuff. Right. Yeah. Which this background service, I should talk about it at some point. It's awesome.
28:25 It's like a infinite loop that runs in the background on an asyncio event loop. So while true,
28:30 but it's processing just async and await, not like threads or other processes or stuff. It's super cool.
28:34 But anyway, the part where it was actually doing all the work, like get me a job, run the job and
28:39 realize, oh, there's no really try accept on that. And if it crashes, it'll like take that event loop down.
28:44 So I just put try accept around those and a few other pieces. And so I just hit, what did I do? And it said,
28:49 the core commit message was add exception handling in the background service.py.
28:54 And then it explained in a detailed message, part of the commit, introduce, try accept blocks to handle
28:59 potential exceptions and pending jobs, start jobs processing and run pending job methods in the
29:04 background service. This change enhances error handling and makes the service more robust by
29:08 preventing crashes. If a job or episode cannot be fetched or if an unknown job action is encountered,
29:13 job action is an, it's an enumeration that it has a match clause on. Wow. And the default case
29:19 raises an exception. That's nuts, right? Yeah. Then another one, I added assembly AI to the
29:25 requirements via pip-tools. And then pip-tools also updated rough while it did it back to that.
29:30 And so that's what it says. That's the commit message basically. And then it says this commit
29:35 includes the addition of assembly AI package as part of the requirements.txt file required to introduce
29:41 new speech to text features in our application. Okay. I didn't tell it that that's awesome. Right.
29:46 And then rough, the rough version is also updated from a 0.1.3 to 0.4 due to bug fixes and
29:53 still building improvements in the new version. I'm guessing it's getting that from the change log
29:57 and it also adds, added new dependencies based on assembly AI that that's all just, I did work for
30:02 half an hour and I pushed the button. Okay. So this is really pretty cool, but it reminds me of that comic
30:08 where like there's one person that says I've got three bullet points and it expands it into these
30:14 three paragraphs. Yes. And then you do it. The other, and then the person on the other end is like,
30:19 saying this is so cool. I can take this, this long text and I can make it into three bullet points.
30:23 Yeah. What you see on the screen, the, the bolded text, the short versions, that's what shows up in
30:28 the get commit message. And then it has like, this is the, if you expand the commit for more details,
30:33 this is what it says. Okay. Okay. That's pretty cool. It's not as in your face as it could have been,
30:38 but I was super impressed. I'm like, dang, that's, that's pretty good. Yeah. Right. The fact
30:43 that it knew there's going to be an exception raised if the enumeration called job action,
30:48 a string is passed wrong. And then it says, that's why I added the exception block. Like that's,
30:52 that's pretty good. And actually this is the part where I really am looking forward to playing with.
30:56 I, I, I'm a lot of my work. I already know what I'm doing. I don't need to look up how to do stuff
31:02 too much. I mean, yes. Yeah. I'm kind of with you on that, but yeah, but, but the,
31:07 what did I do in the last day? What all did I do for, for like a, a commit message? That's,
31:13 that's a great thing. I got, I got, can't wait to play with this.
31:16 Yeah. That's a pretty cool. I just hit the thing by the commit message. All right. Carrying on with,
31:21 carrying on with the LLM type stuff. So I talked about GPT for all, and I said, it's a really cool
31:28 app that you can run. I already talked about it, but like, you know, run locally, it doesn't cost
31:32 money. And also it doesn't share your data off your machine. All those things are cool. I miss this.
31:38 And it's cool enough that I want to point it out because it's just pretty neat. So with GPT for all,
31:44 one of the things that comes with that is not like in your face from the UI, it's barely visible from
31:49 the UI is it comes with a, a, a rest API. So what you can do is it shows you how to create a fast
31:57 API server and a Docker image that will run the selected model that you want in a Docker image
32:05 and then become an API. So you can program against, if you wanted to use the GPT for all as an API for
32:11 your code or your project or your home server or whatever, just run, create this and run the Docker
32:16 container. And then you have a open AI compatible API, but it is running like locally on your system.
32:23 That's pretty neat.
32:24 Using this in that name.
32:25 Yeah.
32:26 So yeah, I won't say more than that, but I'll link to it. People can check it out. All right.
32:30 I have some follow-up from last week on my comments about PyCon requiring masks. And I just, the more I've
32:37 been thinking about this, Brian, you don't have to chime in if you don't want, I totally understand,
32:40 but it just seems really incongruent with the way that things are kind of around us in general.
32:47 And I'm just super disappointed because I've, I don't know. I already spelled out why I think it's
32:50 tricky to go trying to do all the podcast stuff and networking. But you know, I, as I was thinking about
32:57 like what other thing in, in day-to-day life these days requires you'd have a mask. And I couldn't think
33:02 of one, not going to the doctor, not going to schools, not going to shopping. So I thought,
33:09 well, okay, well maybe, maybe I'm, maybe I'm being silly. Maybe it's just like conferences and stuff
33:13 were different. Right. So I Googled as many conferences as I could think of. You have universes
33:18 running right now with some thousand number of attendees, no mask requirement. CES has, you know,
33:23 people say, well, there's 2000 people coming. That's like a lot, right? That could be like a super
33:27 spreader event. You got to not, we got to keep this in mind, Michael, right? CES, 180,000 attendees,
33:33 no mask mandate. South by Southwest, 150,000, none. KubeCon just ran or is running now, 12,000,
33:40 none. Adobe Summit, 10,000 attendees, none. Mobile World Conference in Barcelona, 110,000. Dev Week,
33:48 developer week rather, 2000. Microsoft Ignite next week, 4,000. WWDC, not sure how many people went,
33:55 but this is a many conferences as I could find that I Googled when I thought about this. Not one of them
34:01 has the same policy. So it's worth considering. Again, I think it's, I think it's going to hurt
34:08 attendance and by way of that hurt the support for the PSF. All right. Shall we lighten it up with a
34:14 joke? Yeah. You already had your regular expression game, regular expressions. They're kind of,
34:20 they're kind of magic when they work. It's like, they really are like magic. You're like these couple of
34:25 symbols and it goes into a million word piece of text and it goes, pop, here, here are the seven
34:31 things. And I've even named the little sections of it for you. You can grab it, right? But when you're
34:37 done working on your regular expression and you want to make a change or you want to take someone else's,
34:41 I don't know, I kind of think of them as, as right only. Yeah. How about, how about you?
34:45 Well, I mean, I did learn them while I was writing Pearl. So it kind of goes with the territory.
34:50 Yes. You probably know them better than I do. So the joke and, you know, take this lightheartedly
34:56 as it is. The joke is what is the plural of reg X? Okay. Regrets. Regrets. Regrets.
35:03 Regrets and regrets. They are, they are amazing, but they are also tough to debug. Regrets. I've had a few.
35:13 Exactly. Exactly. Yeah. I got a few of them. All right. Well, that's it for our stuff. Yeah. You got
35:18 anything else? I don't. I think that was a good episode. It was an excellent episode and happy
35:24 birthday. Thanks everyone for seven years. Yeah. That's really incredible. It was pretty cool. We
35:30 had thought about it sooner. I just got a notification like an hour ago that I'm like, Hey, it's the
35:33 birthday. I'm like, Oh, we could have done more Brian, but I think there's plenty. I could wear a hat.
35:38 Yes, exactly. Yeah. Well, great to see you as always. See everybody a couple of weeks.