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 your earbuds.

00:05 This is episode 346.

00:08 I'm Michael Kennedy.

00:09 And I'm Brian Okken.

00:10 And this episode is brought to you by us.

00:13 Check out all of our things and support the show by taking part in them.

00:18 We have our courses, the pytest one Brian wrote, a bunch of other ones.

00:21 I just did the Async Python and MongoDB combo with a little bit of FastAPI and load testing in there.

00:27 That's a good one to check out.

00:28 And if you want to be part of the live stream, just Python by set up them slash alive and you'll see the next scheduled one that we got set up for you queued up for you.

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

00:45 Yeah, the summer is moving along. And so is the Python you have some big news to share. I know, I have a bunch of fun small things, but you got some big ones.

00:53 - You wanna kick us off?

00:54 - So we, I think we've covered this before.

00:56 There was a PEP 703 to make the global interpreter lock optional in CPython.

01:02 And well, we have some news from the steering council.

01:05 So the steering council has come back.

01:08 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.

01:21 So I'm gonna jump down to the, so there's some assumptions and there's some discussion around this gill removal thing, but I'm gonna jump to the short and midterm and long-term actions.

01:36 So it's gonna be in stages.

01:38 So the idea is in the short term, there'll be a no gill build as an experimental build, and that will be part of possibly Python version 3.13 or 3.14.

01:53 It looks like they're hoping for 3.13, but that's, so that, what, that's like next year or something like that?

01:58 So, and then, okay, so then we'll have two builds.

02:02 What do we do with that?

02:03 Well, midterm is, is to have, and the default is, the default version is gonna be the, the, the Gill version, of course, just as usual, as things go through it, as they figure out, and everybody deals with, like the rest of the Python environment, community and all the third party libraries figure out how to deal with the no-gill version.

02:24 So in the midterm, there's going to be hopefully community support to help get through this no-gill part. And then long-term, the no-gill version becomes the main version of Python, and we deprecate the gill version. So the time frame looks like about... The long-term isn't super long, it's like in the five plus year time frame.

02:52 Well, the plus means like, who knows how long it will be.

02:55 But I think that there's a lot of energy around getting this done and getting a lot done in the next few years.

03:01 So, yeah, the the time frame of it being an option in three 13, I would put it in October of next year of twenty twenty four.

03:11 Yeah. And some some alphas and betas earlier than so.

03:15 Yeah, for sure. It's pretty quick.

03:16 And then, so there's just some caveats in here saying, this, everybody's excited about it, but they reserve the right to just cancel the whole thing if it's really not sound, if it's not working out.

03:29 So, but I don't think that'll happen.

03:31 - Yeah, yeah, we'll see how it goes.

03:33 But we talked about this a little bit on our AMA episode about the value and basically what do other languages do?

03:39 Most of them have some constructs, but assume that developer is kind of responsible.

03:43 You pointed out that it's not as burdensome as people might think, because most code is not parallel code and you don't have to worry about it.

03:51 It's just kind of a no big deal.

03:54 Don't have to think about it.

03:55 Unless you're writing libraries where you know they will be used in a thread safe way, you know, things like that, then you do have to take that into account.

04:03 I think the trade-off is worth it.

04:05 We're not getting, we're not trending towards a world where there are fewer CPU cores, right?

04:12 It's only getting to the point where, you know, like for example, on my Mac, if I run some Python program, it has access to 10% of the capacity.

04:20 If I run it on my sim computer, sim racing computer, it has 1/16th access to 1/16th of the CPU capacity, right?

04:29 It's just, if you want to work in modern hardware, you really need to have access to parallelism when you need it.

04:35 So for me, this is a real positive.

04:37 I think the other thing that we previously covered is Meta said they would come along and dedicate three experienced engineering engineer years to this project to help make, not just it happen in CPython, 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.

04:57 It's always been a little bit weird that Python has been so restricted.

05:01 It's also one of those reasons that might, it's like one of those springboards that might eject someone from the community that they would otherwise love.

05:10 You might be told, well, we got to get better parallelism.

05:13 So we're not doing this in Python.

05:14 We're going to do it in Go or some other place where you're like, kind of like Python, but I guess it's not a fit anymore.

05:20 This would mean that it's a better fit in other places.

05:23 So this is awesome.

05:24 I know it's going to be a lot of work.

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

05:30 Hopefully not too bad.

05:32 Maybe having gone through it once, the community go, "Oh, we'll do it again." It's not as bad as we thought.

05:37 >> Yeah. But I mean, the goal is so that you can have, Like if you're just writing a little single threaded thing or a little script or whatever, the small sort of things you do with Python also, that those things are just as easy as they've always been and just as fast.

05:53 That's what we want.

05:54 >> Yeah, that's certainly the goal.

05:56 I'm just thinking about the code that uses the Python API for an important libraries that run calls the API release the gill, take the gill.

06:07 When there's no more GIL, does that library become unusable?

06:10 Does that become a no-op and it's just undefined behavior?

06:13 You know what I mean? There will be some consequence in the ecosystem.

06:17 I'm not sure what the knock-on effect will be.

06:20 >> Yeah. It'll be interesting to see how applications like Django and things like that deal with it.

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

06:33 We have a semi-toxic and ambivalent relationship with the GIL.

06:36 We love it and hate it at the same time, for sure.

06:39 - Yep, definitely.

06:40 - All right, well, Thomas, thanks for the update on this.

06:45 It's gonna be an interesting journey.

06:46 Brian will give us plenty to talk about, so that's cool.

06:48 - Yeah, stick with this.

06:50 Make sure you subscribe to Python Bytes to keep up on everything that's going on with the Gil breakup.

06:56 - Yeah, exactly.

06:57 It'll be fun.

06:58 All right, I gotta adjust my browser before we switch or I'm gonna spoil the joke.

07:01 All right, so I wanna do just a quick one.

07:06 This is not Python specific, but it's super important for web developers.

07:09 So we had Google with Flock, remember that federated cohorts of learning of cohorts.

07:16 And then we had the sandbox groups, which was kind of like that.

07:22 And I don't remember exactly what that was called, but that was another technique because the Flock's met with such resistance, like you could really do some bad stuff by putting people into these groups.

07:33 And so the, I'm not sure where the sandbox stands, but it turns out there's now a new proposal to try to get rid of third-party cookies.

07:42 My feeling, I don't know for sure, but Google's trying to get rid of third-party cookies because they're easy to block and it hurts their advertising and their retargeting if you can just easily block it by checking a box.

07:53 Like, do you want to be tracked?

07:55 No, thanks.

07:56 You know, in your browser, right?

07:57 Like Firefox does, like Vivaldi does.

07:59 You know what?

08:00 Oddly, I don't remember that setting being a default in Chrome that it just offers to block the Google network.

08:05 That's interesting.

08:06 Must've been an oversight.

08:07 So anyway, they're now out with a new thing and the over on a bleeping computer, they say browser developers push back against Google's web DRM.

08:19 So basically the different websites can choose or be made to choose to force you to verify certain things that basically prohibit things like ad blocking, like prove that you don't have ad blocking on so you can visit my website or I'm gonna tell you you can't, right?

08:38 New authentication system could let websites block extensions, jailbroken devices, and other important things.

08:44 So the headline is, "Google has been trying to implement plans "to move beyond cookies for years." That sounds great, comma, "without denying its partners and itself "the means to sell targeted ads "which form the backbone of the company's revenue." This new one comes, Proposal to Guarantee User Privacy and Security comes at the cost of freedom of functionality, aka the open web.

09:07 So there's a bunch of, it talks a little bit about how this works, but basically the website has to come along and decide what browsers it trusts, and the web browsers themselves have to implement a mechanism to guarantee who they are.

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

09:31 If an entity has the power to decide which browsers are trusted and which are not, they say there's no guarantee that they will trust any given browser and a new one that comes along would not by default not be trusted until it's somehow proven itself to the people who run that website.

09:47 And what about the next website?

09:48 What about the next?

09:49 And so on.

09:49 You have all these kind of in an interesting position like this, they're just, they use a fork of Chrome that's stripped down of a lot of things.

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

10:04 You can just send whatever you want, but it usually is a consistent thing.

10:08 Vivaldi lies and doesn't say, "We're Vivaldi version," I don't know, whatever version we're on.

10:13 It says, "I'm Chrome," and whatever the current version of Chrome is, it just says that.

10:17 That way websites don't go, "Oh, you're gonna need to use Chrome "because 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?

10:30 So they're in this situation where they kind of lie to the world about who they are, the web server world.

10:35 And this would kind of break that as well.

10:37 The Brave team says, they don't really care, they're not shipping it.

10:43 We'll see if that's a problem or not.

10:45 And Mozilla doesn't have an official opinion, but one of the folks said, "The mechanisms to attempt to restrict these choices "are harmful to the openness of the web ecosystem." And this one's might be interesting to you, Brian.

10:57 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:08 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:18 (Brian laughs)

11:19 - No, the answer is no.

11:20 - Yeah, and yeah.

11:22 So anyway, I, it's, you know, not super actionable.

11:26 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 so that it's, so that we will be able to completely still control and track and sell you.

11:45 Right.

11:46 Right now, the third party cookie thing is not looking good.

11:49 Even, you know, parliaments and Congress have gotten into it and said, Oh, you can't have these cookies.

11:54 We have these stupid pop-ups everywhere.

11:56 This would make those all go away.

11:58 And you would just be like part of the machine.

12:00 You know what I mean?

12:00 this is just the third, the third version of how do we make them part of the machine?

12:05 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.

12:14 Reject browsers.

12:16 You might say, Michael, why would a website do this?

12:19 I mean, obviously terrible places like CNN that have like some, like 45 trackers they put on you every visit.

12:25 You might see why they would do that, but why would, you know, random little website not want you to come?

12:30 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, or 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.

12:49 >> Yeah.

12:50 It's like nobody can make money off of traffic except for me.

12:54 >> Yeah. I mean, it's pretty bad.

12:57 It's a monopoly type of situation.

12:59 One, in the browser space and then two, in the ad space, they're both sides of that markets.

13:04 It's pretty not good.

13:06 >> I wonder how many people are turning off ads.

13:09 Because I've got Vivaldi running and it's turning off ads.

13:13 And I run into websites that say, you can't read this unless you turn off your ad blocker.

13:20 And I'm like, well, I'm not going to read it then.

13:23 I'll go somewhere else.

13:26 But how many people really do?

13:27 I mean, it can't be that 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 turned them off, it was about 40 to 50% of the traffic would not show up.

13:45 - Yeah, okay.

13:45 - So that, I mean, it's not quite all blocking.

13:48 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 pretty good.

13:56 And just, you know.

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

14:01 - Yeah, exactly.

14:02 So, I mean, it's not just, we're trying to be jerks to websites, and we don't wanna pay for stuff, or we don't wanna look at ads.

14:09 like this headline, how long is this?

14:11 This is just six months ago, or nine months ago.

14:14 Hackers abuse Google ads to spread malware in legit software, right?

14:17 There's just stuff over and over.

14:19 Plus there's all the reselling stuff, the NSA, CIA stuff, buying.

14:26 I mean, there's just lots of, it's not just I don't wanna see ads.

14:29 There's really negative effects to these things, and it's honestly 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:42 And it's, but it's, there's no tracking.

14:44 So.

14:45 - And they're not even blocked because we're not trying to send it through some creepy network with retargeting.

14:49 We're just, we tell you things that we've, we've evaluated and thought you might like and people have paid us to help spread the word.

14:56 And you know, there's certainly ways you could do that.

14:59 Right?

15:00 Like this last thing, 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.

15:10 It could show you ad about browsers.

15:12 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.

15:18 Right.

15:18 And those work almost as well without all the negative stuff.

15:22 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 I'm like shareholder value, Christopher shareholder value.

15:38 Let's have it.

15:39 - Well.

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

15:43 - That's pretty rough news, man.

15:45 - So it's okay.

15:47 The last two sounded bad too, and they both got, you know, pushed out of existence.

15:51 I suspect this one will as well, but.

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

15:56 - Oh, that was pretty rough, sorry.

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

16:05 It's from Mattias, from Mattias.

16:10 How Ruff changed my Python programming habits.

16:13 And we've covered Ruff, I think, several times on the show.

16:17 But I, and I've used it on a lot of projects, but I was excited to see this because it's some stuff about Ruff that I haven't been paying attention to.

16:27 It just works and it's really fast.

16:29 But there's a whole bunch of cool stuff.

16:31 So this, in this article, talks about, He talks about using pre-commit or has long been using pre-commit and flakeade and black and isorge and all that sort of stuff.

16:42 And I knew that Ruff 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 Ruff, like PyFlakes and PyCodeStyles.

16:57 So that's in the McCabe for cyclomatic complexity checker.

17:03 just to make sure that you don't have too many nested, huge loops and different things like that.

17:09 >> I love that, Vacek.

17:10 >> All these things you can turn on just within RUF.

17:16 I sort, pep8 naming, that's cool.

17:18 PyUpgrade, love that.

17:20 Flake 8 2020, and I'm going to shortly show where you can look these up.

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

17:27 I really like bugbear, Flake 8 bugbear also.

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

17:34 Like a Django, Py, Simplify, but these are just the ones that this person likes or is trying out and using.

17:43 So I went ahead and kept looking.

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

17:50 One of the things I wanna highlight, and I've been trying to use, when I tried to use pre-commit a while ago, I haven't been using it lately because a lot of these things take a bit.

18:01 They take a bit of time and it's, he writes, "There's always a trade-off between development speed, "i.e. waiting on git commit is very boring, "and strictness." 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:19 But having it within RUF is super fast and you can go back to using pre-commit with RUF and just turn on a bunch of these things.

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

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

18:36 We get, I think the PyCode style warnings.

18:41 Oh, it doesn't turn on PyCode style warnings.

18:46 By default, it turns on PyCode style errors and PyFlakes errors.

18:52 So those are turned on by default.

18:54 And you turn it on within the Toml file with a select equal, and then you have just a string of characters, like E for PyCode style, F for PyFlakes.

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

19:08 So there's an example of you do B for a bug bear.

19:11 And then there's another page for rules, and the rules list all of the different ones.

19:18 So the PyFlakes start with F, so if you would add F for that.

19:22 there's a whole ton of these things that I'm excited about trying to 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:34 So there, when I try to commit something, it'll run these on the files that I've changed and try to run, or I can't, I actually don't know.

19:43 It's happening so fast that I don't care.

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

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

19:51 super fun. The other bit that I wanted to the one last link I want to share is Astral, which is the now company around rough has a rough pre commit hook that you can set up for git for GitHub actions. So if you just add a this little snippet that we have a link to there's just a Astral Astral -sh rough pre-commit repository with a version and with a hook.

20:25 That will make it so that your project runs within GitHub Actions also.

20:29 Super fun.

20:30 >> Okay. Yeah, very cool.

20:32 I also like having it set up not as a pre-commit hook, but also as a PyCharm plugin.

20:39 >> Yeah. I just misspoke.

20:42 This isn't a GitHub Action, it's a pre-commit hook.

20:45 It hooks rough in with pre-commit.

20:47 Sorry about that.

20:47 - Yeah, yeah, nice.

20:48 Well, so that way, as you're typing and you see the stuff, it just puts a little squigglies in there and suggests sometimes it can even auto fix it, you know, Alt + Enter fix this thing by, for example, applying strict equals true and the zip.

21:01 - Okay. - Stuff like that.

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

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

21:07 But again, it's so fast, like, you know, you don't notice.

21:11 - Well, one of the fun-- - What's on 10 cores?

21:12 I could do it over there.

21:13 - One of the fun things with the, Having it be a commit hook also is, you can set it up to auto-fix.

21:21 So, Ruff isn't just, you have errors, but it can find the errors and fix them and not even tell you about them.

21:26 It just fixes them.

21:27 - Oh, that's nice, yeah.

21:28 - So like-- - That's pretty cool.

21:29 - Well, I turned on Bugbear, or I can't remember what.

21:31 I turned on one of the extra rules and it showed 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:47 - It's way better than complaining.

21:48 (laughing)

21:49 - Yeah, like I sort stuff.

21:50 Well, if I'm just sort them, if I got them in the wrong order, just reorder them, that's fine.

21:56 - Yeah, and Henry says RUP also has a VS Code language server plugin as well.

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

22:05 All right, onto the next, onto the last.

22:07 All right, onto the last.

22:09 We've discussed FS-spec file system specification, I'm guessing.

22:14 And the idea of FS-spec was that what you can do is you can have all these different file systems that when you would do like open, you know, open some file name, encoding is this, append, so on, that kind of work.

22:29 You could point it at different places besides the hard drive.

22:33 You could point it at S3.

22:35 You could point it at some kind of web dev or some other blob storage, network drive, all these different things that you could possibly do, and you have exactly the same API as just opening a standard file, right?

22:48 So that was like with open as file stream, da da da da, you go do your thing, right?

22:54 Well, a lot of us are fans of using Pathlib, right?

22:59 So create the path, you do like a cool thing, you do the slash, the division is overridden to look like you can separate the file names and all that, right?

23:07 So there's this thing called Universal Pathlib now that's, it looks like this project was created two months ago.

23:14 And this was sent in to us.

23:16 So I wanna say thank you to Justin Flannery.

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

23:24 - Yeah.

23:25 - And so we talked about that a few months ago.

23:27 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:36 So the pathlib module dot path API to use basically FS spec, which is awesome.

23:42 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:50 They're saying, you know, import it as upath.

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

23:58 So for example, you could say upath 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:11 Right.

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

24:13 What is the suffix?

24:14 Does it exist?

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

24:18 But now this thing is in S3.

24:19 We have file, we have Azure storage, we have HTTP and HTTPS.

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

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

24:32 Yeah.

24:33 create a file, work with it, make sure you pass this path-like object to other APIs, let it do things, and then it just goes away when it goes away, right?

24:41 That's pretty cool.

24:42 >> Yeah, I love using memory file systems for testing.

24:44 >> Yeah, absolutely.

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

24:51 The same thing for the database.

24:53 But yeah, this is really handy.

24:54 Not to, 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:02 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:09 A bunch of examples play with it.

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

25:14 >> Yeah. Cool. Nice.

25:15 >> All right. 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. I know that 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:37 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, you got a list, it doesn't hold the value of the thing that's in the list, it holds the pointers, that point to the things that are the values.

25:49 So here's the joke.

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

25:56 And there's an int star, so a pointer to the int, it's like an anime character pointing out to it.

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

26:03 Well, 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:11 It's just a great way to describe pointers.

26:13 Actually, somebody pointing.

26:14 Yeah, it seems completely non-scary.

26:18 Where as 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, and yet what is the title of the pages so and so on Twitter, the domain is twitter.com, but the logo is X and I don't know what a mess this is.

26:46 But anyway, the joke is funny.

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

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

26:56 - Yeah.

26:57 - The left X and the right X.

26:59 >> Yeah. Hopefully nobody renames their company greater than, greater than, and weird things like that.

27:07 >> Yeah, absolutely.

27:08 >> Hey, I want to add one more funny thing.

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

27:20 I'm watching, I can't even 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, you skip the intro?

27:28 >> Right. I saw this the other day, it just cracked me up.

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

27:40 I know people like this.

27:42 >> I heard the first time.

27:43 >> Yeah. Okay, can you skip the preamble and just go to whatever you wanted to talk to me about?

27:49 >> Pretty funny. I imagine it probably is a little rude, but sometimes you're in a hurry.

27:56 >> You've heard it three times already, so get to the end.

28:00 >> Awesome talking with you as usual.

28:02 >> Indeed. Thanks for being here.

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

28:08 See you all next time.

Back to show page