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


Transcript #346: Have you lost your GIL?

Return to episode page view on github
Recorded on Tuesday, Aug 1, 2023.

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

00:04 your earbuds. This is episode 346. I'm Michael Kennedy. And I'm Brian Okken. And this episode

00:11 is brought to you by us. Check out all of our things and support the show by taking part in

00:17 them. We have our courses, the pytest one Brian wrote, a bunch of other ones. I just did the async

00:22 Python and MongoDB combo with a little bit of FastAPI and load testing in there. That's a good

00:27 one to check out. And if you want to be part of the live stream, just Python by set up him slash

00:32 live and you'll see the next scheduled one we got set up for you queued up for you. Usually 11am

00:38 Pacific on a Tuesday as it is today, but that's not always the case. So be sure to check. It is August,

00:44 Brian. Yeah, the summer is moving along. And so is the Python. You have some big news to share. I know

00:50 I have a bunch of fun, small things, but you got some big ones. You want to kick us off?

00:54 Yeah. So we, I think we've covered this before. There was a PEP 703 to make the global interpreter

00:59 lock optional in CPython. And well, we have some news from the steering council. So the steering

01:06 council has come back. There's a Thomas Wooters posted a steering council notice about PEP 703.

01:15 And there's a lot of news in here that I think I'll let you help me dig through this. So I'm going

01:21 to jump down to the, so there's, there's some assumptions and some discussion around this

01:28 GIL removal thing, but I'm going to jump to the short and midterm and longterm actions. So it's going

01:37 to be in stages. So the idea is in the short term, there'll be a no GIL build as an experimental build.

01:44 And that will be a part of possibly Python, their version 313 or 314. It looks like they're hoping

01:54 for 313, but that's so that what that's like next year or something like that. So and then, okay. So

02:00 then we'll have two builds. What do we do with that? Well, midterm is there is to have, and the

02:07 default is the default version is going to be the, the, the GIL version, of course, just as usual,

02:13 as things go through it, as they figure out and everybody deals with like the rest of the Python

02:19 environment and the community and all the third-party libraries figure out how to deal with the no Gill

02:24 version. So in the midterm is there's going to be a community, hopefully community support to help,

02:30 help get through this no GIL part. And, and then longterm, the no GIL version becomes the main

02:38 GIL or the main, not the main Gill, the main version of Python. And we deprecate the GIL version. So

02:44 the timeframe looks like about the longterm isn't super long. It's like in the five plus year timeframe.

02:52 Well, the plus means like, who knows how long it will be. But I think that there's a lot of energy

02:57 around getting this done and getting a lot done in the next few years. So yeah, the, the timeframe of

03:04 it being an option in three 13, I would put it in October of next year of 2024. Yeah. And some,

03:12 some alphas and betas earlier then. So yeah, for sure. That's pretty quick. And then, so there's just some

03:18 caveats in here saying they're this, everybody's excited about it, but they, they reserve the right to

03:25 just cancel the whole thing. If it's really not sound, if it's not working out. So, but I don't

03:30 think that will happen. Yeah. Yeah. We'll see how it goes. But we talked about this a little bit on

03:34 our AMA episode about the value and basically what the other languages do. Most of them have some

03:40 constructs, but assume that developer is kind of responsible. You pointed out that it's not as

03:45 burdensome as people might think, because most code is not parallel code and you don't have to worry

03:51 about it. It's just kind of a, no, no big deal. You don't have to think about it unless you're writing

03:56 libraries where, you know, that will be used in a thread safe way, you know, things like that, then,

04:01 then you do have to take that into account. I think the trade-off is worth it. We're not getting,

04:07 we're not trending towards a world where there are fewer CPU cores, right? Yeah. It's only getting to

04:13 the point where, you know, like for example, on, on my Mac, if I run some Python program, it has access

04:18 to 10% of the capacity. If I run it on my SIM computer, SIM racing computer, it has one 16th access

04:26 to one 16th of the CPU capacity, right? It's just, if you want to work in modern hardware,

04:31 you really need to have access to parallelism when you need it. So for me, this is a real positive.

04:37 I think the other thing that we previously covered is meta said they will come along and dedicate three

04:42 experienced engineering engineer years to this project to help make, not just it happen in CPython,

04:49 but to make it happen in the important libraries outside there, like NumPy and those types of things.

04:54 So I think for me, this is a super positive. It's always been a little bit weird that Python has been

05:00 so restricted. It's also one of those reasons that might, it's like one of those springboards

05:05 that might eject someone from the community that they would otherwise love, right? You might be told,

05:11 well, we got to get better parallelism. So we're not doing this in Python. We're going to do it and go

05:15 or some other place where you're like, kind of like Python, but I guess it's not a fit anymore,

05:20 right? This would mean that it's a better fit in other places. So this is awesome. I know it's

05:25 going to be a lot of work. It's going to be another legacy Python versus non-legacy Python sort of deal.

05:30 hopefully not too bad. Maybe having gone through it once, the community will go,

05:34 oh, we'll do it again. It's not as bad as we thought.

05:36 Yeah. But I mean, like the goal is so that you can have, like, if you're just writing a little,

05:41 a little single threaded thing or a little script or whatever, the small sort of things you do with

05:47 Python also, that those things are just as easy as they are. They've always been and just as fast.

05:53 That's what we want.

05:55 Yeah. That's certainly the goal. I'm just thinking about the code that uses the Python API for important

06:01 libraries that calls the API, release the gill, take the GIL. When there's no more gill, does that

06:08 library become unusable? Does that become a no-op and it's just undefined behavior? You know what I mean?

06:14 Like there will be some kind of consequence in the ecosystem. I just, I'm not sure what the knock-on

06:19 effect will be.

06:19 Yeah. Yeah. And it'll be interesting to see how, like, applications like Django and things like that

06:26 deal with it.

06:27 Yeah, for sure. And Liz out there points out, get through this long-winded breakup with a GIL.

06:33 We have a semi-toxic and ambivalent relationship with a GIL. We love it and hate it at the same

06:37 time. For sure.

06:38 Yep. Definitely.

06:39 All right. Well, Thomas, thanks for the updates on this. Yeah. And it's going to be an interesting

06:46 journey. Brian, it'll give us plenty to talk about. So that's cool.

06:48 Yeah. Stick with this. Make sure you subscribe to Python Bytes to keep up on everything that's going

06:54 on with the GIL breakup. Yeah, exactly. It'll be fun. All right. I got to adjust my browser before

07:00 we switch or I'm going to spoil the joke. All right. So I want to do just a quick one. This is not

07:06 Python specific, but it's super important for web developers. So we had Google with flock. Remember

07:12 that federated, cohorts of, learning of cohorts. Oh yeah. And then we had the sandbox groups,

07:21 which was kind of like that. And I, I don't remember exactly what that was called, but that was

07:25 another technique because the flocks met with such resistance. Like you could really do some bad stuff

07:31 by putting people into these groups. And so the, I'm not sure where the sandbox stands, but it turns out

07:37 there's now a new proposal, to try to get rid of third-party cookies. My feeling, I don't know for sure,

07:44 but Google is trying to get rid of third-party cookies because they're easy to block and it hurts

07:49 their advertising and they're retargeting. If you can just easily block it by checking a box,

07:53 like, do you want to be tracked? No, thanks. You know, in your browser, right? Like Firefox does,

07:58 like Vivaldi does. You know what? Oddly, I don't remember that setting being a default in Chrome that

08:03 it just offers to block the Google network. That's interesting. It must've been an oversight.

08:07 So anyway, this, they're now out with a new thing and the, over on a bleeping computer,

08:14 they say browser developers push back against Google's web DRM. So basically the different websites

08:21 can choose or be made to choose to force you to verify certain things, that, basically

08:30 prohibit things like ad blocking, like prove that you don't have ad blocking on. So you can visit my

08:35 website or I'm going to tell you, you can't write new authentication system could let websites block

08:40 extensions, jailbroken devices, and other important things. So the, the headline is Google has been

08:45 trying to implement plans to move beyond cookies for years. That sounds great. Comma without denying its

08:52 partners and itself, the means to sell targeted ads, which form the backbone of the company's revenue.

08:57 This new one comes, proposal to guarantee user privacy and security comes to the, the cost of

09:04 freedom of functionality, AKA the open web. So there's a bunch of, it talks a little bit

09:11 about how this works, but basically the website has to come along and decide what browsers it trusts.

09:18 And the web browsers themselves have to implement a mechanism to guarantee who they are. Not surprisingly,

09:25 Vivaldi comes along as one of the first people to push back against this and calling it dangerous.

09:30 If an entity has the power to decide which browsers are trusted and which are not, they say there's no

09:36 guarantee that they will trust any given browser. And a new one that comes along would not by default,

09:42 not be trusted until it's somehow proven itself to the people who run that website. And what about the

09:47 next website? What about the next? And so on, you have, of all these kind of an interesting position like

09:51 this, they, they're just, they use a fork of Chrome that's stripped down of a lot of things. But when you go

09:59 to a website or you look at the user agent, that's how browsers nowadays tell people who they are, right?

10:04 And just send whatever you want. But it usually is a consistent thing. Vivaldi lies and doesn't say,

10:09 we're Vivaldi version. I don't know, whatever version we're on. It says, I'm Chrome. And whatever the current version of Chrome is, it just says that. That way websites don't go, oh, you're going to need to use Chrome because,

10:21 your, your web browser isn't one of those. You know, it's like, it actually is internally identical.

10:27 Just, it's got a different name, right? So they're in this situation where they kind of lie to the world about who they are, the web server world. And this would kind of break that as well. The Brave team says, the Brave team says, they don't really care. They're not shipping it. We'll see if that's a problem or not. And Mozilla doesn't have an official opinion. But one of the folks said the mechanisms to attempt to restrict these choices are

10:51 are harmful to the openness of the web ecosystem. And this one's might be interesting to Brian. Additionally, the use cases listed depend upon the ability to detect non-human traffic, which as described would likely obstruct things like web assistive technologies or automated testing.

11:07 So anyway, this is one of those things that probably deserves enough interest from people in the Python web world to just voice a little bit of no.

11:17 No, the answer is no.

11:19 Yeah. And yeah. So anyway, I, it's, you know, not super actionable. It's not a thing that's out there yet. But like the previous two, it's, it's the folks behind the web side of Google, the web browser side of Google, the web standard side of Google saying, how can we basically change the web?

11:40 So that it's so that we will be able to completely still control and track and sell you right right now. The third party cookie thing is not looking good. Even, you know, parliaments and Congress have gotten into it and said, Oh, you can't have these cookies. We have these stupid pop-ups everywhere.

11:56 This would make those all go away and you would just be like part of the machine. You know what I mean? this is just the third, the third version of how do we make them part of the machine? and this one I think is probably the worst.

12:07 Cause not only is it something that would go into Chrome, which was the previous two, but this is something that would basically make the websites reject browsers. You might say, Michael, why would a website do this? I mean, obviously terrible places like CNN that have some like 45 trackers.

12:23 They put on you every visit, you might see why they would do that, but why would, you know, random little website not want you to come? Well, there could be things like, Oh, do you want to have Google ads on your site or any double click or any ads from any ad network?

12:37 Well, we're not going to allow you to have them at all. Unless your website has this, you know, please reject the ones that we don't like sort of setting turned on. And here's the script will help you do that.

12:47 So it's not ideal. Yeah. It's like, nobody can make money off of traffic except for me. sort of thing.

12:54 Yeah. It's, it's, I mean, it's pretty bad. It's kind of a monopoly type of situation. One in the browser space and then two in the ad space. They're kind of both sides of that markets. It's, it's pretty, pretty much not good.

13:06 I wonder how many people are turning off ads, because I mean, I've gone, I've got Vivaldi running and it's turning off ads and I, I run into websites that say I did. You can't read this unless you turn on.

13:18 Turn on if turn off your ad blocker and I'm like, well, I'm not going to read it then. I'm like, I'll go somewhere else. yeah. But how many people really do? I mean, it's can't be that many, many of us.

13:30 I would say for developers, the developer audience looking at when I used to run Google analytics before I decided they were evil and turn them off. It was about 40 to 50% of the traffic would not show up.

13:44 Yeah. Okay.

13:45 So that is not quite all blocking. There could be robots like, you know, requests doing a request like Python requests, doing a request that also wouldn't register, but that's, that's pretty good. And just, you know.

13:56 Yeah. We'll go back to like magazine ads, never had tracking in them and they did fine.

14:01 Yeah, exactly. So, I mean, it's not just, we're trying to be jerks to websites and we don't want to pay for stuff or we don't look at ads like this headline.

14:10 How long is this? This is just, you know, six months ago or nine months ago, hackers abuse Google ads to spread malware in legit software. Right.

14:17 There's just stuff over and over. Plus what, you know, there's all like the reselling stuff, the NSA, CIA stuff.

14:25 Yeah. Buying your, I mean, there's just lots of, it's not just, I don't want to see ads. There's really negative effects to these things. And it's honestly, it's a little bit disappointing that Google is doing this.

14:36 Right. And we have advertisers and we put ads on our website for the advertiser.

14:41 Absolutely.

14:42 And it's, but it's, there's no tracking. So.

14:44 And they're not even blocked because we're not trying to send it through some creepy network with retargeting. We're just, we tell you things that we've, we've evaluated and thought you might like.

14:54 And people paid us to help spread the word. And, you know, there's certainly ways you could do that. Right. Like this last thing, there's this page we're on here. If it had ads, I don't know if it does or not, cause I'm blocking them like you.

15:05 But if it did, it could easily show you ads about privacy. It could show you ad about browsers. There's like certainly relevant ads that can be put on here just based on the context of the page, not who is viewing it. Right.

15:18 And those work almost as well without all the negative stuff. So anyway, one more thing to keep an eye on folks. And Christopher on the audience says, interesting how Google has lately continuously, continuously been trying to do the exact opposite of don't be evil.

15:34 Yeah.

15:35 Shareholder value, Christopher, shareholder value. Let's have it.

15:38 Well.

15:41 All right, Brian, over to you.

15:42 That's pretty rough news, man.

15:45 No, it's okay. The last two sounded bad, too. And they both got, you know, pushed out of existence. I suspect this one will as well.

15:52 No, I was just trying to do a rough transition.

15:55 Oh, that was pretty rough.

15:58 Anyway, so there's an article. Oh, I lost the author. It's from Matthias.

16:09 From Matthias. How rough changed my Python programming habits. And we've covered rough, I think, several times on the show. But I, I and I've used it on a lot of projects. But, but I, I was excited to see this because it's some stuff about rough that I've, I haven't been paying attention to. It just works. And it's really fast. But there's a whole bunch of cool stuff. So this, in this article talks about, he talks about using pre commit.

16:35 Pre commit. Or has long been using pre commit. And flake eight and black and I sort of all that sort of stuff. And I knew that rough was going to start picking up some of these extra things. But I didn't know how far it went.

16:48 So in this article, he talks about using different rules within, within rough, like, like pie flakes and pie code styles. So that's, and the McCabe for cyclomatic complexity checker, just to make sure that you don't have too many nested, huge loops and different things like that.

17:09 I love that magic.

17:10 I love that magic.

17:10 I love that magic.

17:10 I love that magic.

17:10 I love that magic.

17:10 I love that magic.

17:10 I love that magic.

17:10 I love that magic.

17:10 I love that magic.

17:10 I love that magic.

17:10 I love that magic.

17:10 I love that magic.

17:10 I love that magic.

17:10 So all these things you can turn on within, just within, within rough.

17:15 I sort, PEP 8 naming.

17:17 That's cool.

17:18 Pi upgrade.

17:19 Love that.

17:20 Flake, flake eight 2020.

17:22 And I'm going to shortly show where you can look these up.

17:25 So there's a whole bunch of really cool things.

17:27 I really like bug bear, flake eight bug bear also.

17:30 So apparently that's been supported for almost a year within rough.

17:33 like a Django pie simplify, but this, these are just the, the ones that this person likes

17:40 or has, is he trying out and using.

17:42 so I went ahead and kept looking.

17:45 So that's, that's this article, which is a pretty decent article about using how it changes.

17:50 One of the things I want to highlight, and I've been trying to use, I, when I tried to use

17:55 pre-commit a while ago, I haven't been using it lately because a lot of these things take a

18:00 bit.

18:01 they take a bit of time and it's, he writes, there's always a trade-off between

18:07 development speed.

18:08 I.e. waiting on get commit is very boring and strictness.

18:12 And I have to agree.

18:13 So what I've been doing is mostly putting these tests in CI and not doing it as part of pre-commit,

18:18 but having it within, within rough is super fast.

18:22 And you can go back to using pre-commit with rough and just turn on a bunch of these things.

18:27 So, link also linking to the rough configuration, documentation.

18:32 And for example, these aren't, all these things aren't turned on by default.

18:36 We get, I think the air, the, PY code style warnings.

18:42 Oh, it does not turn on.

18:44 It doesn't turn on PY code style warnings.

18:46 It by default, it turns on PY code style errors and PY flakes, errors.

18:51 So those, those are turned on by default and you turn it on with this, like, in within

18:56 the toml file with like a select equal.

18:59 And then you have like just a, a string of characters like E for, PY code style F for PY flakes.

19:05 And then there's a whole list of these.

19:07 so there's an example of you do B for like a bug bear.

19:10 And then there's another page for, rules, where, in the rules list, all of the

19:16 different, different ones.

19:17 So like the PY flakes start with F.

19:19 So if you would add F for that, there's a whole ton of these things, that I'm excited about

19:25 trying to turn, turn more of them on.

19:28 And I have on one of my projects and it's just super fast.

19:31 So you just like within pre-commit.

19:33 So there, when I try to commit something, it'll run these on the files that have changed,

19:39 and try to run, or I can't, I actually don't know.

19:42 It's happening so fast.

19:43 I don't care.

19:44 Maybe it does the whole thing, but it's just super fast now.

19:47 And I don't have to wait to commit, but I know the checks are being done.

19:50 Super fun.

19:51 The other bit that I wanted to, the one last link I want to share is, astral, which is

19:57 the now company, around rough, has a rough pre-commit, hook that you can set

20:05 up for get, for GitHub actions.

20:08 So, if you just add a, this little snippet, that we have a link to, there's just a,

20:16 astral, astral dash sh rough pre-commit repository with a river, with a version and, with

20:23 the hook and you would, that will make it so that your project runs within GitHub actions

20:28 also.

20:29 So super fun.

20:30 Okay.

20:31 Yeah.

20:32 Very cool.

20:33 I also like having it set up.

20:34 So not as a pre-commit hook, but also as a high charm plugin.

20:39 Yeah.

20:40 Oh, right.

20:41 I just misspoke.

20:42 This isn't a GitHub action.

20:43 It's a pre-commit hook.

20:44 So it's, it hooks rough in with pre-commit.

20:46 Sorry about that.

20:47 Yeah.

20:48 Yeah.

20:49 Nice.

20:50 Well, so that way as you're typing and you see the stuff, it just puts a little squiggly

20:53 send there, there and suggests sometimes it can even auto fix it, you know, alt enter,

20:57 fix this thing by, for example, applying strict equals true and the zip.

21:01 Okay.

21:02 So you just have rough rough running in, in PyCharm.

21:05 And it just runs constantly as you type.

21:07 But again, it's so fast.

21:08 Like, you know, you don't notice.

21:09 Well, one of the fun 10 cores, I can do it over there.

21:12 One of the things with the, with the having it be a commit hook also is, you can set

21:18 it up to, to auto fix.

21:20 So rough isn't just, you have errors, but it can find the errors and fix them and not even

21:24 tell you about them.

21:25 It just fixes.

21:26 Oh, that's nice.

21:27 Yeah.

21:28 So like, well, I turned on bug bear or I can't remember what I turned on one of the extra

21:33 rules and it showed some, some, like some spaces at the end of the lines.

21:38 And then I added the command to just fix them for me.

21:42 And then it just didn't do it.

21:43 It just would fix them without even telling me, which is great.

21:46 It's way better than complaining.

21:48 Yeah.

21:49 Like I sort stuff.

21:50 Well, if I, if I, if I'm just, just sort them, if I got them in the wrong order, just

21:55 like, you know, I'm going to do it and that's fine.

21:56 Yeah.

21:57 And Henry says rough also has a VS Code language server plugin as well.

22:00 So either side of the fence that you sit on for those, that's all good.

22:04 All right.

22:05 Onto the next, onto the last.

22:06 All right.

22:07 Onto the last.

22:08 We've discussed F S back file system specification, I'm guessing.

22:14 And the idea of F S spec was that what you can do is you can have all these different

22:20 different file systems that when you would do like open, you know, open some file name

22:25 encoding as this append.

22:27 So on that kind of work, you could point it at different places besides the hard drive.

22:33 You could point it S three.

22:34 You could point it at a, some kind of web dev or some other, you know, blob storage network

22:41 drive, all these different things that you could possibly do.

22:43 And you have exactly the same API as just opening a standard file.

22:47 Right.

22:48 So that was like with open as file stream, dah, dah, dah, dah.

22:53 You go do your thing.

22:54 Right.

22:55 Well, a lot of us are fans of using, pathlib, right?

22:58 So create the path.

23:00 You do like a cool thing.

23:01 You do the, the slash, the division is overridden to look like you can separate the file names

23:06 and all that.

23:07 Right.

23:07 So there's this thing called universal pathlib.

23:10 Now that's, it looks like this project was created two months ago and this was sent in to us.

23:15 So I want to say thank you to Justin Flannery.

23:18 Remember he had that, that camping CLI thing that we could find campsites that are sold out and stuff.

23:23 Yeah.

23:24 and so we talked about that a few months ago.

23:26 So he sent this in and said, look, FS spec is awesome, but now there's a universal pathlib and it extends, the built-in pathlib.

23:35 So the pathlib module dot path API to use basically FS spec, which is awesome.

23:41 And so if you want to talk to things that are not file systems, but you really like the path class, then you can use this one.

23:49 Either saying, you know, import it as you path.

23:52 You could also just import it as path if you want, for long as you're not mixing it up with the other and just treat it the same.

23:57 Right.

23:58 So for example, you could say you path, instead of giving it a directory name or a file name, you would say like S3 colon, you know, slash, slash, some path to your S3 information slash some file.

24:10 Right.

24:11 And you could ask, what is the name?

24:12 What is the suffix?

24:13 Does it exist?

24:14 And read it.

24:15 And so on, just like you would with a normal file.

24:17 But now this thing is in S3.

24:19 We have file.

24:20 We have Azure storage.

24:22 We have HTTP and HTTPS.

24:24 We have Hadoop, Google cloud, S3, web dev.

24:28 And one, I think that would be really cool for testing Brian is memory.

24:32 Yeah.

24:33 Right.

24:33 You want to create a file, work with it, make sure, you know, pass this path like object to other APIs, let it do things.

24:38 And then it just goes away when it goes away.

24:40 Right.

24:41 That's pretty cool.

24:42 Yeah.

24:43 I love using memory file systems for testing.

24:44 Yeah, absolutely.

24:45 Like SQLite has one memory colon, I think it is, or maybe two colons on the front.

24:51 Same thing for the database.

24:52 But yeah, this is really handy.

24:54 Not to be, you might be wondering like, why would I ever use memory?

24:56 Because you don't want to touch the file system.

24:58 You just need to pass a file and there you go.

25:00 So super simple.

25:01 There's a little example notebook that I blasted past somewhere.

25:05 People can check that out if they want to just see how to use it.

25:08 Okay.

25:08 A bunch of examples play with it.

25:09 So if you are working with these alternative file systems, this is definitely worth giving it a look.

25:13 Yeah.

25:14 Cool.

25:14 Nice.

25:15 All right.

25:16 Well, I have no extras.

25:17 How extra are you feeling today?

25:18 I guess I don't really have any extras either.

25:20 Just thinking something funny might be nice.

25:23 I think so.

25:24 And I know that you've done, you do a lot of C these days still, and I've traditionally done some, although not too much lately.

25:31 So I want to have both a joke and something to help people think about pointers and pointers to pointers.

25:36 Because Python is all about pointers, even though we don't realize it, right?

25:40 When you create a variable, it points out to a thing.

25:42 You've got a list.

25:43 It doesn't hold the value of the thing that's in the list.

25:46 It holds the pointers that point to the things that are the values.

25:49 So here's the joke.

25:50 There's an int just written out in memory, just out in space floating there.

25:55 And there's an int star to a pointer to the int.

25:58 It's like an anime character pointing out to it.

26:00 And then what is a pointer to a pointer?

26:02 Well, it's just the anime character pointing at the int star that points over to the other one.

26:07 What do you think of this?

26:08 I think it's just a great, I agree with the comment.

26:10 It's just a great way to describe pointers.

26:12 Actually, somebody pointing.

26:14 Yeah.

26:15 Yeah.

26:16 It seems completely non-scary.

26:18 Whereas thinking about int star star avoid star star, something like that is pretty crazy.

26:23 Well, it's got 18,000 likes on, I don't know what it's on.

26:27 What website is this, Brian?

26:29 The company formerly known as Twitter?

26:34 Yes.

26:35 And yet what is the title of the pages?

26:38 So and so on Twitter and the domain is twitter.com.

26:41 But the logo is X and I don't know what a mess this is.

26:45 But anyway, the joke is funny.

26:47 Well, the next, so the, and the icons, there's an X for closing, which is still confusing.

26:53 Yeah, there's two X's in my tab up there.

26:56 Yeah.

26:57 The left X and the right X.

26:58 Yeah.

26:59 We just, hopefully nobody renames their company greater than greater than and weird things like that.

27:07 Yeah, absolutely.

27:08 So, hey, I want, want to add one more funny thing.

27:11 This is not really programming related, but I've been watching a lot of like streaming, catching up on some TV shows.

27:20 I'm watching.

27:21 I can't remember the name of it now catching up and I want to skip through the beginning.

27:25 Have you ever done that on streaming shows?

27:27 You skip the intro.

27:28 Right.

27:29 So, I saw this the other day.

27:31 It just cracked me up.

27:32 Apparently, it's rude to poke someone in the head, the forehead and say, skip intro when they start talking to you.

27:39 I know people heard the first hour.

27:43 Yeah.

27:44 Like I, okay, can you skip the preamble and just go to the, whatever you wanted to talk to me about.

27:48 So.

27:49 Pretty funny.

27:51 I imagine it probably is a little, little rude, but you know, sometimes you're in a hurry.

27:56 Yeah.

27:57 You've heard it three times already.

27:58 So get to the end.

27:59 Awesome talking with you as usual.

28:01 Indeed.

28:02 Thanks for being here.

28:03 Thank you to everyone who is listening and everyone who participated in the live stream.

28:07 See you all next time.

Back to show page