WEBVTT

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

00:00:05.560 --> 00:00:10.420
This is episode 433, recorded May 26th, 2025.

00:00:11.280 --> 00:00:12.080
I am Brian Okken.

00:00:12.360 --> 00:00:13.200
And I'm Michael Kennedy.

00:00:13.560 --> 00:00:15.440
And this episode is sponsored by us.

00:00:15.720 --> 00:00:24.320
So please check out offerings at the courses at Talk Python Training and at pythontest.com, of course, to learn your pytest goodies.

00:00:25.280 --> 00:00:27.460
And also thank you to Patreon supporters.

00:00:28.110 --> 00:00:28.400
You rock.

00:00:28.860 --> 00:00:39.320
If you'd like to connect with us, of course, check out the links in the show notes for both Michael, myself, and the show at Bluesky and at Mastodon on Fosstodon.

00:00:39.960 --> 00:00:43.820
And if you'd like to listen to the show, if you listen to the show, thank you.

00:00:44.160 --> 00:00:53.400
If you'd like to watch it also live, check out pythonbytes.fm/live, usually Monday at 10 a.m., even when we forget that it's a holiday today.

00:00:54.640 --> 00:01:07.740
But yeah, also, if you'd like to get, if you're listening to this and you kind of want to check out some of the stuff that we're talking about, but you can't remember the link, sign up for our newsletter on at pythonbytes.fm.

00:01:08.100 --> 00:01:09.440
Really easy to find the link there.

00:01:10.380 --> 00:01:20.900
And you'll get an email every week with all of the links and everything we talked about, plus extra goodies to help you get up to speed if you want to.

00:01:22.070 --> 00:01:22.840
So that's wonderful.

00:01:23.820 --> 00:01:25.260
What do we got to start with, Michael?

00:01:25.660 --> 00:01:26.080
Let's start

00:01:26.080 --> 00:01:27.800
with a throwback, okay?

00:01:28.440 --> 00:01:28.540
Okay.

00:01:28.960 --> 00:01:32.500
So, did you ever watch the movie Fight Club, Brad Pitt, Edward Norton?

00:01:32.820 --> 00:01:33.140
Yeah.

00:01:34.160 --> 00:01:36.000
It was a cult classic, right?

00:01:36.000 --> 00:01:36.800
It was definitely a...

00:01:37.000 --> 00:01:38.000
First rule of Fight Club.

00:01:38.380 --> 00:01:40.120
Yeah, first rule of Fight Club.

00:01:40.560 --> 00:01:41.420
Don't talk about Fight Club.

00:01:42.060 --> 00:01:42.840
Second rule of Fight Club.

00:01:42.940 --> 00:01:45.260
You do not talk about Fight Club.

00:01:46.380 --> 00:01:46.480
So,

00:01:46.480 --> 00:01:46.920
what are we doing?

00:01:47.120 --> 00:01:47.920
What are we talking about?

00:01:48.080 --> 00:01:48.500
Why am I talking?

00:01:49.280 --> 00:01:53.460
Because up next are get flight rules.

00:01:54.120 --> 00:01:59.360
fight rules. I want to call it fight. So what are flight rules? They're a guide for astronauts

00:02:00.200 --> 00:02:06.600
or programmers who use Git who now do things when stuff goes wrong with Git. So they're hard earned,

00:02:07.040 --> 00:02:12.200
they're not fight club rules. They're hard earned body of knowledge recorded in manuals that like,

00:02:12.320 --> 00:02:16.880
if this goes on, what do you do? If you stir the tanks and there's an explosion

00:02:17.720 --> 00:02:22.640
and a lot of the oxygen shoots out of the spaceship, what do you do? And so on. Okay.

00:02:23.100 --> 00:02:23.360
All right.

00:02:24.460 --> 00:02:25.420
So this is actually pretty cool.

00:02:25.470 --> 00:02:27.660
I think this is going to be super helpful for a lot of people.

00:02:28.500 --> 00:02:33.540
So it talks about, well, what do you do with Git when things go wrong, basically?

00:02:33.930 --> 00:02:41.420
I mean, source control is awesome until you're like, it says there's a merge conflict and I don't know how to merge it or I don't know how to do that correctly.

00:02:41.900 --> 00:02:45.740
Or I've created the repo here, but I want to push to a different origin there.

00:02:45.750 --> 00:02:46.660
And how do I do that?

00:02:46.790 --> 00:02:48.060
So this is like, uh-oh.

00:02:48.520 --> 00:02:53.280
Okay, so it's grouped by sort of category or something, I guess.

00:02:53.420 --> 00:02:54.400
So repositories.

00:02:54.580 --> 00:02:56.280
I want to start a local repository.

00:02:56.440 --> 00:02:57.460
I want to clone a remote one.

00:02:57.460 --> 00:02:58.480
These are pretty standard, right?

00:02:58.660 --> 00:02:59.720
But as you go down, you'll see.

00:03:00.080 --> 00:03:02.560
I set the wrong remote repository.

00:03:04.400 --> 00:03:07.000
I want to push to a different origin and so on.

00:03:07.280 --> 00:03:08.040
There's edit rules.

00:03:08.420 --> 00:03:09.080
There's staging.

00:03:09.680 --> 00:03:10.480
And they're pretty interesting.

00:03:10.760 --> 00:03:12.160
There's discarding changes.

00:03:13.440 --> 00:03:21.180
I want to discard specific unstaged changes, or I want to discard all of my untracked files,

00:03:21.560 --> 00:03:28.820
but not the tracked ones, and so on. Or maybe if I am staging, let's see, I staged too many edits,

00:03:29.040 --> 00:03:31.380
and I want to break them into a separate commit. What

00:03:31.380 --> 00:03:31.520
do

00:03:31.520 --> 00:03:34.160
I do? I want to unstage my edits and

00:03:35.060 --> 00:03:39.380
unstage my staged edits, right? So all these things of sort of, here's the scenario,

00:03:40.340 --> 00:03:45.620
rebase emerging. I need to update the parent commit in my branch when I'm rebasing. Whatever,

00:03:45.920 --> 00:03:48.720
there's a bunch here. I even called out a few in the show notes.

00:03:49.680 --> 00:03:52.200
I got to check out the rebasing

00:03:52.260 --> 00:03:53.940
stuff because that always stresses me out. I

00:03:53.940 --> 00:03:56.340
know, me too. One is like, what did I just commit?

00:03:57.400 --> 00:04:05.020
I want to store a deleted file. I want to discard a specific unstaged changes. Not all of them,

00:04:05.060 --> 00:04:10.280
just one of them and so on. Isn't this cool? Yeah, this is great. Yeah. Well, I think you're

00:04:10.310 --> 00:04:16.420
letting me stretch the fight rules a bit, but I do. It's fine. But I think this will be super

00:04:16.560 --> 00:04:21.480
helpful. It's sort of how to deal with stuff when, how to deal with Git when Git stuff goes wrong.

00:04:22.120 --> 00:04:22.780
It's sub modules,

00:04:23.320 --> 00:04:27.560
man. Oh boy. That's a whole nother. That's a whole nother.

00:04:28.460 --> 00:04:29.240
No, it's good.

00:04:31.460 --> 00:04:31.660
Okay.

00:04:32.680 --> 00:04:35.220
So let's talk about t-strings a little bit.

00:04:35.300 --> 00:04:38.860
We've already covered t-strings on the show before, I believe.

00:04:39.580 --> 00:04:40.900
They came in with PEP 750.

00:04:41.610 --> 00:04:43.780
But they're very new.

00:04:44.010 --> 00:04:51.820
So to play with them, I think it's just 3.14.0 Beta 1 has them.

00:04:52.080 --> 00:04:53.300
I don't know if anything before.

00:04:54.080 --> 00:04:56.520
So I was just playing with them this morning a little bit.

00:04:57.020 --> 00:05:02.020
But I'm really happy with this article from Brett Cannon, Unraveling t-strings.

00:05:02.460 --> 00:05:07.300
And what I really like about it is because I really kind of wanted to play with t-strings

00:05:07.680 --> 00:05:12.640
or just understand them more, but I didn't want to actually require, you know, it'd be

00:05:12.690 --> 00:05:18.180
great if you didn't have to have the latest 3.14 beta 1 to do this.

00:05:18.330 --> 00:05:20.580
And so that's really with this article.

00:05:20.860 --> 00:05:24.080
So even though t-strings come in with the 3.14,

00:05:25.240 --> 00:05:28.880
this article talks about going through all the details

00:05:29.100 --> 00:05:32.640
of kind of how t-strings work without actually using t-strings.

00:05:32.920 --> 00:05:35.900
So Brett starts out with this idea of like,

00:05:36.220 --> 00:05:39.420
let's say you've got this little converter thing of converting,

00:05:40.920 --> 00:05:45.040
take this function called fyeah that takes a T-string,

00:05:45.220 --> 00:05:48.260
but here it says T-string, but it's just a variable name.

00:05:49.000 --> 00:05:51.960
takes something and returns something.

00:05:52.130 --> 00:05:53.960
And right off the bat, it's just an identity.

00:05:54.650 --> 00:05:57.940
And what we want, and what he's showing is like with fstrings,

00:05:59.420 --> 00:06:00.960
fstrings do a lot of things.

00:06:01.090 --> 00:06:02.620
Like they can replace variables.

00:06:02.870 --> 00:06:05.960
They can do one of those formatting stuff.

00:06:06.820 --> 00:06:09.920
They can do format specs, specifiers, and then there's conversions.

00:06:10.370 --> 00:06:12.400
Like this is a raw string conversion thing.

00:06:13.700 --> 00:06:23.160
And so he walks with that with an example of just, you know, once you pass the SF string into the function, what do you get out?

00:06:23.740 --> 00:06:34.000
But then he talks about, like, basically it starts out simple, but then he goes into, well, what if we wanted to pass in the parts, all the different parts passing into our function?

00:06:34.500 --> 00:06:43.880
And then he passes in, uses like the representation or conversions and format specifiers to walk through those.

00:06:44.740 --> 00:06:52.040
So basically we've walked through so far evaluating Python expressions, applying specified conversions, and then format specifiers.

00:06:52.640 --> 00:06:58.560
And then goes into like just dives into it further of like, let's keep track of all this stuff.

00:06:58.850 --> 00:07:03.780
And then let's, you know, let's make, we've got a lot of stuff we're keeping track of.

00:07:04.100 --> 00:07:08.420
So let's put some of the things that were like all of the conversion stuff.

00:07:08.620 --> 00:07:11.820
We'll put that into an interpolation class.

00:07:13.220 --> 00:07:14.580
And I was a bit lost here.

00:07:14.580 --> 00:07:16.220
So I actually walked through all of this.

00:07:16.340 --> 00:07:21.980
And it was really helpful to actually run the code, like copy it into there and walk through it.

00:07:22.140 --> 00:07:26.640
And then a template class and basically walking through all the different parts.

00:07:26.820 --> 00:07:33.080
And then at the end, he shows you, says, basically, we've just built up something that would be like t-strings,

00:07:33.380 --> 00:07:34.780
even though we don't have t-strings yet.

00:07:36.000 --> 00:07:38.700
And then gave an example of what it would look like,

00:07:39.190 --> 00:07:40.440
what it looks like through 3.14.

00:07:40.610 --> 00:07:43.600
The example in the PEP 750 is right there.

00:07:43.610 --> 00:07:44.400
You can run that too.

00:07:45.020 --> 00:07:45.780
All really good.

00:07:45.790 --> 00:07:47.180
So if you really want to get a handle,

00:07:47.480 --> 00:07:49.640
get your brain around what t-strings are,

00:07:49.700 --> 00:07:50.540
this is a great article.

00:07:51.860 --> 00:07:54.820
But I was a little frustrated that it was all in,

00:07:55.180 --> 00:07:57.900
like just files.

00:07:58.919 --> 00:08:03.340
So I went ahead and rewrote all of his examples

00:08:03.500 --> 00:08:05.900
as Python or pytest tests.

00:08:06.520 --> 00:08:08.840
So you can just have one file and run them all.

00:08:09.560 --> 00:08:11.520
Also get to show off near the end

00:08:11.700 --> 00:08:12.860
because the last example,

00:08:12.990 --> 00:08:15.260
you actually have to have a Python version,

00:08:15.520 --> 00:08:17.880
Python beta one, 3.4 beta one.

00:08:18.360 --> 00:08:19.440
So I'll show you,

00:08:19.550 --> 00:08:23.020
show people how to use a skip if to skip that

00:08:23.020 --> 00:08:24.900
if you don't have that Python version installed.

00:08:25.170 --> 00:08:26.100
So yeah, that's cool.

00:08:26.440 --> 00:08:28.540
I really had fun walking through

00:08:28.700 --> 00:08:30.240
all of this article from Brett.

00:08:30.380 --> 00:08:31.660
So thanks Brett for putting it together.

00:08:32.039 --> 00:08:32.580
Yeah, very cool.

00:08:34.400 --> 00:08:35.560
real-time follow-up.

00:08:35.599 --> 00:08:36.979
This was not what I was expecting to talk about,

00:08:37.240 --> 00:08:41.620
but I just had Paul Everitt, Jim Baker, and Dave Peck

00:08:41.820 --> 00:08:43.479
all on Talk Python just a little bit ago

00:08:43.820 --> 00:08:44.880
talk about t-strings.

00:08:45.080 --> 00:08:46.380
So if you want to dive into the internals

00:08:46.500 --> 00:08:48.100
with some of the folks that worked on that as well.

00:08:48.420 --> 00:08:48.840
Keep them listening.

00:08:49.220 --> 00:08:49.340
Yeah,

00:08:49.900 --> 00:08:51.420
that's not my next topic.

00:08:51.660 --> 00:08:54.940
My next topic is like a hacker version,

00:08:56.000 --> 00:08:59.140
cyberspace version of HTOP, Neo-HTOP,

00:08:59.360 --> 00:09:00.400
HTOP, Matrix version?

00:09:00.760 --> 00:09:02.360
No, Neo-HTOP.

00:09:02.840 --> 00:09:05.740
a blazing fast system for monitoring your desktop,

00:09:06.240 --> 00:09:07.360
which I think is super cool.

00:09:07.360 --> 00:09:09.360
And I'm pretty sure it's cross-platform,

00:09:09.360 --> 00:09:10.140
yeah, cross-platform,

00:09:10.160 --> 00:09:12.200
a modern cross-platform system monitor

00:09:12.460 --> 00:09:14.260
built on top of whatever doesn't matter.

00:09:15.340 --> 00:09:17.040
But Rust is in there somewhere.

00:09:17.680 --> 00:09:18.480
So we look at the features.

00:09:18.580 --> 00:09:20.640
It has real-time process monitoring,

00:09:21.220 --> 00:09:22.960
CPU and memory usage tracking.

00:09:23.160 --> 00:09:24.180
This is a GUI, by the way.

00:09:24.460 --> 00:09:26.200
Modern UI with dark and light themes.

00:09:26.720 --> 00:09:27.400
Cool filtering.

00:09:27.680 --> 00:09:29.060
You can pin processes.

00:09:29.680 --> 00:09:30.740
You can kill processes.

00:09:31.620 --> 00:09:32.120
Very nice.

00:09:32.500 --> 00:09:33.980
So I actually have it running.

00:09:34.260 --> 00:09:35.700
Let me pull it up here.

00:09:35.770 --> 00:09:37.980
You can see whatever's happening on my computer right now.

00:09:38.160 --> 00:09:39.280
Apparently, guess what?

00:09:39.280 --> 00:09:45.000
The Vivaldi helper for StreamYard is grinding away using 50% CPU.

00:09:45.340 --> 00:09:46.820
But there's all sorts of cool stuff.

00:09:46.890 --> 00:09:49.160
You can hit these little informational things here.

00:09:49.480 --> 00:09:49.980
No, that's the pin.

00:09:49.990 --> 00:09:57.160
Hit the informational things, and it actually shows you stuff like how much CPU and memory is that process using exactly.

00:09:57.620 --> 00:09:58.360
What is its ID?

00:09:58.500 --> 00:10:00.000
but also what is its parent ID,

00:10:00.640 --> 00:10:02.360
has like graphs for the memory,

00:10:02.640 --> 00:10:05.720
and also what command was used to launch it.

00:10:06.020 --> 00:10:07.100
I think this is super cool.

00:10:07.360 --> 00:10:08.040
Oh, that's neat.

00:10:08.380 --> 00:10:10.740
So if you see, oh, here's a, there's this,

00:10:11.260 --> 00:10:12.460
why is this process running?

00:10:13.060 --> 00:10:14.520
You know, it's a sub-process, but what is it doing?

00:10:14.640 --> 00:10:15.580
It actually shows you.

00:10:15.820 --> 00:10:16.760
And then if you go to the parent,

00:10:16.930 --> 00:10:18.680
this is, I think, even cooler maybe.

00:10:18.750 --> 00:10:20.680
You go to like, say, Vivaldi in this case,

00:10:21.220 --> 00:10:24.200
and it shows all of the different sub-processes

00:10:24.300 --> 00:10:25.240
that Vivaldi has created,

00:10:25.680 --> 00:10:27.680
and how much CPU they're each using,

00:10:27.720 --> 00:10:29.520
how much memory they're using, what their IDs are.

00:10:29.810 --> 00:10:30.180
Isn't that cool?

00:10:30.490 --> 00:10:34.940
Yeah, actually, I think a lot of these are useful for servers,

00:10:35.300 --> 00:10:37.160
but I think I'd use this to store it on the desktop.

00:10:37.720 --> 00:10:38.140
Yeah, exactly.

00:10:38.440 --> 00:10:40.000
I'm thinking this is really nice for the desktop

00:10:40.300 --> 00:10:42.860
because Windows has sysinternals stuff.

00:10:43.740 --> 00:10:44.260
What is it?

00:10:45.120 --> 00:10:47.720
Sysmon, I think it is, which is incredibly good.

00:10:47.770 --> 00:10:50.280
It's way better than this, but it's Windows only, right?

00:10:51.720 --> 00:10:56.020
And we've got on the Mac, we've got system and iStats menus around there,

00:10:56.120 --> 00:11:00.500
which are really nice, but it doesn't give you the look inside the processes quite like this.

00:11:00.680 --> 00:11:06.100
You also get stuff about network, about storage, about memory, all these things.

00:11:06.520 --> 00:11:07.820
So I think that's pretty cool.

00:11:08.220 --> 00:11:08.740
Yeah, of course.

00:11:09.420 --> 00:11:10.940
It looks like you can kill things from here.

00:11:11.360 --> 00:11:12.640
Yes, you can definitely kill them.

00:11:12.740 --> 00:11:13.820
You can be malicious.

00:11:14.819 --> 00:11:16.600
Anyway, that's my item here.

00:11:16.800 --> 00:11:20.860
If you want some nice GUI desktop monitoring tools that are cross-platform,

00:11:21.140 --> 00:11:22.480
check out this Neo H-Top thing.

00:11:22.580 --> 00:11:23.000
It's pretty cool.

00:11:23.340 --> 00:11:23.660
H-Top.

00:11:24.040 --> 00:11:24.360
All right.

00:11:25.560 --> 00:11:26.020
Where are we at?

00:11:26.060 --> 00:11:34.600
remove okay next um we i think we just did we just talk about ty or thank you or ty or whatever

00:11:34.680 --> 00:11:36.480
that was last week or something recently

00:11:36.480 --> 00:11:38.100
so yeah

00:11:38.100 --> 00:11:42.260
so that's the uh ty was the astral um type checker

00:11:42.620 --> 00:11:51.299
and uh so this week why not do another so pyrefly is a new type checker from it's from facebook meta

00:11:51.320 --> 00:11:56.920
So there's an article, a new type checker, yeah, introducing Pyrefly.

00:11:57.580 --> 00:12:03.400
And one of the things I think is interesting about this, so it talks, I played with it just a little bit.

00:12:03.600 --> 00:12:05.620
This is also based on Rust, so it's super fast.

00:12:07.720 --> 00:12:14.600
And one of the reasons why they built it, apparently, the principles behind it are performance, of course, but also IDE first.

00:12:14.760 --> 00:12:23.760
So I guess that totally makes sense, but I think a lot of things are built, you know, not thinking about the IDE right away, maybe.

00:12:24.500 --> 00:12:34.420
But this is thinking about making sure that it integrates with the IDE really well and have a command line interface experience as well is good.

00:12:34.980 --> 00:12:43.160
So IDE first, performance, inference, having this work well with Python programs that are not typed yet.

00:12:43.440 --> 00:12:48.900
They're not annotated at least, but they might still have consistent with types.

00:12:49.080 --> 00:12:50.060
So it infers types.

00:12:50.840 --> 00:12:52.380
And open source, of course.

00:12:52.680 --> 00:12:59.880
So even though it's from the Facebook engineering group, it's not closed source, open source stuff.

00:13:00.340 --> 00:13:00.960
So that's good.

00:13:01.860 --> 00:13:08.860
There's some talk about what they're going to do in the future, but really slick looking website, of course, with a VS Code extension.

00:13:09.400 --> 00:13:11.540
And I made a mistake, though.

00:13:11.580 --> 00:13:18.600
So I downloaded this and I thought, yeah, I just want to run it on one of my projects to see how well.

00:13:19.020 --> 00:13:25.420
And the project I chose was the pytestCheck plugin and it blew up.

00:13:26.060 --> 00:13:27.620
It didn't blow up.

00:13:27.880 --> 00:13:28.580
It worked fine.

00:13:28.620 --> 00:13:32.160
It just told me a whole bunch of stuff that was wrong that's not really wrong.

00:13:33.780 --> 00:13:40.820
So I probably shouldn't have chosen the one project that I work on that completely abuses the dynamic nature of Python.

00:13:41.820 --> 00:13:44.180
there's a check object

00:13:45.120 --> 00:13:46.260
so I do often

00:13:46.740 --> 00:13:48.020
from pytest check import check

00:13:48.290 --> 00:13:50.260
this check object is both the

00:13:50.420 --> 00:13:52.040
interface into the system plus

00:13:52.360 --> 00:13:53.680
it's a context manager

00:13:54.260 --> 00:13:56.300
and it overloads a whole bunch of stuff

00:13:56.620 --> 00:13:56.740
so

00:13:58.400 --> 00:13:59.600
yeah maybe

00:14:00.160 --> 00:14:02.260
but having all those warnings might be a hint

00:14:02.360 --> 00:14:03.760
that maybe I should redesign this

00:14:04.030 --> 00:14:05.080
we'll see anyway

00:14:05.860 --> 00:14:07.980
Pyrefly another faster type checker

00:14:08.420 --> 00:14:09.539
and yeah neat

00:14:09.700 --> 00:14:10.960
Interesting. Yeah, two things

00:14:10.960 --> 00:14:21.440
that I'd like to add. It's a good find. I was considering covering this as well. Pyrefly is a replacement for the existing Pyre, P-Y-R-E, from Facebook.

00:14:22.000 --> 00:14:22.260
Okay.

00:14:22.340 --> 00:14:22.780
So

00:14:22.780 --> 00:14:28.980
they had had that previously, and I guess this is like a rewrite or something like that.

00:14:29.720 --> 00:14:43.140
And the other thing is comparing it to ty, aka Red Knot from Astral, this looks more mypy-like, which is somewhat the goal of ty as well.

00:14:43.380 --> 00:14:46.020
But ty, I believe, is meant to be more forgiving.

00:14:46.380 --> 00:14:49.060
So maybe it would scream at you less, right?

00:14:49.140 --> 00:14:52.760
it's meant to work on less typed code, I guess.

00:14:53.120 --> 00:14:56.460
But the main difference that I haven't looked in this deeply,

00:14:56.490 --> 00:14:57.780
so maybe it's in there somewhere,

00:14:57.980 --> 00:15:00.020
but one of the big deals of TY

00:15:00.400 --> 00:15:02.180
is in addition to making a type checker

00:15:02.600 --> 00:15:05.900
that comes with an LSP, a language server,

00:15:06.380 --> 00:15:09.380
and one of the challenges with PyLance,

00:15:09.460 --> 00:15:11.760
the one built into VS Code,

00:15:12.100 --> 00:15:14.640
is when you get to extremely large code bases,

00:15:15.180 --> 00:15:17.239
basically it falls apart

00:15:17.260 --> 00:15:19.140
and sometimes can't even keep up or work with it.

00:15:19.520 --> 00:15:21.980
So things like your autocomplete or go-to-definition

00:15:22.470 --> 00:15:24.400
just start to shut off because the language server

00:15:24.620 --> 00:15:27.060
can't deal with ginormous amounts of files.

00:15:27.330 --> 00:15:30.620
And so they're trying to build a Rust-based language server

00:15:31.140 --> 00:15:33.540
that flies on even millions of lines of code.

00:15:33.940 --> 00:15:37.240
So when you compare ty to Pyrefly,

00:15:39.160 --> 00:15:42.180
they're not exact just like, well, one is from Facebook

00:15:42.400 --> 00:15:43.560
and one is from Astral, right?

00:15:43.660 --> 00:15:44.960
They're slightly different as well.

00:15:45.640 --> 00:15:49.660
Do you know if Pyrefly is doing a replacement language server also,

00:15:49.820 --> 00:15:51.540
or are they using, you know?

00:15:52.020 --> 00:15:52.980
I don't know that either.

00:15:53.340 --> 00:15:55.480
They do have LSP as one of their tags,

00:15:56.060 --> 00:15:58.480
but I don't see any more words than that.

00:15:58.680 --> 00:15:59.120
Let's see.

00:16:00.760 --> 00:16:00.920
Okay.

00:16:02.700 --> 00:16:04.420
On their website, they don't.

00:16:04.760 --> 00:16:06.060
Do you plan to build an LSP?

00:16:06.560 --> 00:16:07.500
Yes, see our roadmap.

00:16:07.940 --> 00:16:08.440
Oh, okay.

00:16:08.980 --> 00:16:10.680
And what does the roadmap say about LSPs?

00:16:11.199 --> 00:16:12.460
It doesn't appear on it.

00:16:12.620 --> 00:16:14.540
So, you know, it's closed maybe.

00:16:15.060 --> 00:16:15.220
LSP?

00:16:15.819 --> 00:16:17.020
Yeah, I can't tell.

00:16:18.360 --> 00:16:22.620
It's an infinite scroll thing, so it's like sort of hard to get there.

00:16:22.800 --> 00:16:25.100
I mean, you kind of need an LSP to understand it.

00:16:25.140 --> 00:16:28.640
You need something that parses into something like an abstract syntax tree,

00:16:28.700 --> 00:16:30.880
then you start asking type-based questions about it, right?

00:16:31.140 --> 00:16:31.920
That's how a lot of these work.

00:16:32.560 --> 00:16:35.400
And one of the frustrating things, though, with the limited,

00:16:35.940 --> 00:16:40.080
I'm looking forward to having some of these Rust-based language servers come online

00:16:40.420 --> 00:16:44.340
because it's the large projects that I really need all the help with.

00:16:45.160 --> 00:16:46.060
The smaller projects,

00:16:46.200 --> 00:16:50.140
I don't really need, I mean, I kind of can get my head around it already.

00:16:50.660 --> 00:16:51.500
But so

00:16:51.500 --> 00:16:52.900
anyway.

00:16:53.240 --> 00:16:54.600
I'm just going to be using chat to write on my codes.

00:16:54.720 --> 00:16:55.100
I don't care.

00:16:57.100 --> 00:16:57.980
Just kidding, people.

00:16:58.080 --> 00:16:59.760
Just stick with the vibe.

00:17:00.100 --> 00:17:00.360
Yes.

00:17:00.900 --> 00:17:04.000
Speaking about stuff running on platforms I worked on, talk by then training.

00:17:04.079 --> 00:17:06.100
Let me tell you about a new course that we have over here.

00:17:06.500 --> 00:17:09.839
Polars for Power Users, Transforming Your Data Analysis Game.

00:17:10.500 --> 00:17:14.300
So this is a super fun course put together by Christopher Trudeau.

00:17:14.800 --> 00:17:16.380
And it's super fun.

00:17:16.430 --> 00:17:20.300
If you want to learn Polars and you know a little bit of pandas

00:17:20.680 --> 00:17:22.959
or you know tools like Excel and others,

00:17:23.050 --> 00:17:24.600
it kind of walks you through like,

00:17:24.740 --> 00:17:26.140
hey, you know how to do this in other tools.

00:17:26.660 --> 00:17:27.720
But here's the advantages.

00:17:28.079 --> 00:17:29.120
Here's the different API.

00:17:29.700 --> 00:17:32.840
Yeah, really fun if you want to get started with Polars

00:17:33.320 --> 00:17:37.280
or see it compared to various tools like I mentioned.

00:17:37.820 --> 00:17:39.100
Definitely worth checking out.

00:17:39.300 --> 00:17:41.640
$29, you can get going there.

00:17:41.900 --> 00:17:43.280
And it's three hours, I think.

00:17:43.520 --> 00:17:45.180
Not a lot of your time, not a lot of your money,

00:17:45.420 --> 00:17:47.620
but you'll have a nice new skill set at the end.

00:17:47.880 --> 00:17:48.140
Nice.

00:17:49.220 --> 00:17:51.480
And let's see, what else have we got here?

00:17:51.900 --> 00:17:52.760
A couple of announcements.

00:17:53.200 --> 00:17:56.960
Airflow, the workflow framework,

00:17:57.460 --> 00:17:58.700
has its biggest release,

00:17:59.620 --> 00:18:01.700
the most significant release in the project history.

00:18:01.830 --> 00:18:04.300
They describe it as Airflow 3.0,

00:18:04.660 --> 00:18:07.500
builds on to adding a new service-oriented architecture,

00:18:07.720 --> 00:18:09.540
modern React-based UI, enhanced security,

00:18:09.880 --> 00:18:13.420
host of long-quested features such as DAG versioning,

00:18:14.120 --> 00:18:16.000
directed acyclic graph versioning,

00:18:16.520 --> 00:18:17.880
improved backfills, event scheduling,

00:18:18.400 --> 00:18:19.640
and remote execution.

00:18:20.080 --> 00:18:22.240
In this case, I guess that's a good version, a good thing.

00:18:22.400 --> 00:18:24.060
A lot of times remote execution is bad,

00:18:24.160 --> 00:18:25.460
but when you ask for it, it's good.

00:18:26.340 --> 00:18:28.320
Anyway, if people do Airflow, check it out.

00:18:28.580 --> 00:18:29.240
It's pretty cool.

00:18:29.680 --> 00:18:30.260
There's a new one there.

00:18:30.740 --> 00:18:34.640
And my last one, this came in just yesterday,

00:18:34.870 --> 00:18:35.900
I think is when I first saw it.

00:18:36.240 --> 00:18:36.420
Paste.

00:18:36.660 --> 00:18:38.620
Brian, do you use some kind of clipboard manager?

00:18:39.580 --> 00:18:39.980
Yeah.

00:18:40.940 --> 00:18:42.780
Other than just the clipboard itself, obviously.

00:18:43.600 --> 00:18:44.480
Oh, clipboard manager.

00:18:44.780 --> 00:18:45.240
No, I don't.

00:18:45.440 --> 00:18:45.620
Okay.

00:18:45.760 --> 00:18:51.480
So once you start using one of these things, you will never, ever want to go back to working

00:18:51.580 --> 00:18:51.940
without it.

00:18:52.220 --> 00:18:52.800
Here's the thing.

00:18:52.840 --> 00:18:53.560
Have you ever done this?

00:18:53.660 --> 00:18:56.200
Have you ever gone and said, oh, I need to copy this.

00:18:56.760 --> 00:18:59.560
And then you go over and accidentally copy something else.

00:19:00.140 --> 00:19:00.440
Or I

00:19:00.440 --> 00:19:00.900
don't know about

00:19:00.900 --> 00:19:03.780
you, but I use Bitwarden for my 2FA stuff.

00:19:04.060 --> 00:19:06.160
And by default, it has a copy.

00:19:06.700 --> 00:19:11.520
In addition to pasting the 2FA code, it'll just copy it because sometimes the paste fails.

00:19:12.020 --> 00:19:16.980
But if I didn't have this clipboard thing and I like copy something important and went over and I tried to want to paste it somewhere,

00:19:17.080 --> 00:19:17.820
oh, I got to log in.

00:19:17.820 --> 00:19:20.700
I hit my Bitwarden thing and I'm like, no, it's gone.

00:19:20.760 --> 00:19:21.320
Where did that go?

00:19:21.440 --> 00:19:22.640
You go back and find it.

00:19:23.640 --> 00:19:26.000
This thing called Paste for Mac.

00:19:26.300 --> 00:19:31.820
I know there's similar things for other platforms, but my recommendation in this little extra is Paste.

00:19:33.580 --> 00:19:33.980
So

00:19:33.980 --> 00:19:35.600
super, super nice thing.

00:19:35.640 --> 00:19:37.600
They just released Fivo, which is like a big improvement.

00:19:37.970 --> 00:19:43.500
So what it does is it'll keep track of three months, a year, one month, whatever, of clipboard

00:19:43.600 --> 00:19:43.800
history.

00:19:43.950 --> 00:19:47.960
So you can copy three, four things, go back, hit a button, go back, find them, you get

00:19:47.990 --> 00:19:49.160
little thumbnails of them.

00:19:49.410 --> 00:19:50.100
Or you can even search.

00:19:50.190 --> 00:19:52.500
You're like, just, I want to see what did I copy?

00:19:52.660 --> 00:19:55.980
You can just type Firefox and I'll show you everything you've copied from Firefox in the

00:19:56.080 --> 00:19:56.540
last month.

00:19:56.850 --> 00:19:59.040
And you can copy from that or reuse it or whatever.

00:20:00.060 --> 00:20:05.960
And it'll like synchronize across Mac and your iPhone and so on.

00:20:06.040 --> 00:20:06.920
So super cool thing.

00:20:06.980 --> 00:20:07.920
Anyway, they just had a big release.

00:20:08.390 --> 00:20:09.160
It works much nicer.

00:20:09.540 --> 00:20:09.820
If

00:20:09.820 --> 00:20:10.220
you don't use something like this.

00:20:10.220 --> 00:20:11.760
I think I would do it by just like five minutes.

00:20:12.860 --> 00:20:13.640
But, you know.

00:20:13.840 --> 00:20:14.680
Yeah, you can do five minutes.

00:20:14.880 --> 00:20:16.440
I mean, you can change however you want.

00:20:16.580 --> 00:20:18.160
But I think you'd be surprised.

00:20:18.280 --> 00:20:20.400
You're like, oh, yeah, I know I copied that yesterday.

00:20:20.700 --> 00:20:21.580
Or I have the same.

00:20:21.940 --> 00:20:26.340
Whenever I'm creating a new Python Bytes stream, I have the same description.

00:20:26.720 --> 00:20:29.980
but the software won't remember the same description from,

00:20:30.380 --> 00:20:32.680
so I got to copy it or retype a paragraph, right?

00:20:32.800 --> 00:20:33.260
Like, no.

00:20:33.740 --> 00:20:35.960
So I just hit the hot key to pull this up

00:20:36.080 --> 00:20:36.420
and I type

00:20:36.420 --> 00:20:36.940
join

00:20:36.940 --> 00:20:38.020
us and then boom,

00:20:38.300 --> 00:20:39.720
that's the join us to be part of the show

00:20:39.880 --> 00:20:41.220
and come to the live stream, da-da-da-da-da,

00:20:41.300 --> 00:20:41.960
and I just paste it.

00:20:42.140 --> 00:20:43.000
And so from last week,

00:20:43.260 --> 00:20:45.180
I just get that back in like three keystrokes.

00:20:45.500 --> 00:20:45.800
Oh, nice.

00:20:45.960 --> 00:20:46.080
Brilliant.

00:20:46.460 --> 00:20:46.560
So

00:20:46.560 --> 00:20:48.100
if you're on macOS,

00:20:48.480 --> 00:20:49.000
check out this paste.

00:20:49.120 --> 00:20:51.440
They had a new release, super nice.

00:20:52.400 --> 00:20:53.020
If you're on something else,

00:20:53.440 --> 00:20:54.480
maybe send us recommendations.

00:20:54.860 --> 00:20:56.020
We'll give them a shout out or something.

00:20:56.280 --> 00:20:57.080
All right, those are all my extras.

00:20:57.220 --> 00:20:57.400
How about you?

00:20:58.020 --> 00:20:58.820
I got a couple.

00:20:59.200 --> 00:20:59.560
Let's see.

00:20:59.840 --> 00:21:00.300
Where are we at?

00:21:01.300 --> 00:21:03.000
So Python, the documentary.

00:21:03.920 --> 00:21:05.120
I've kind of looking forward to this.

00:21:05.880 --> 00:21:09.200
There's a trailer out, official trailer for the Python, the documentary.

00:21:09.840 --> 00:21:10.920
It's just a couple minutes.

00:21:12.760 --> 00:21:14.320
But it looks like it might be fun.

00:21:14.420 --> 00:21:15.000
This looks great, Brian.

00:21:15.220 --> 00:21:15.940
This looks really good.

00:21:16.200 --> 00:21:20.780
And I know they did this, like, joke thing about Guido coming back

00:21:20.940 --> 00:21:23.360
and the empire strikes back sort of thing and all that.

00:21:23.520 --> 00:21:27.780
But if you click on CultRepo, the username of this right there,

00:21:28.200 --> 00:21:30.180
and go to their videos and look through it,

00:21:30.240 --> 00:21:31.980
like if you look at all the things they've done,

00:21:32.180 --> 00:21:33.800
you can see, by the way, that video I talked about.

00:21:34.000 --> 00:21:37.060
But they have from Node.js to Dino,

00:21:37.560 --> 00:21:41.980
and they've got the Angular, the official documentary, and so on.

00:21:42.080 --> 00:21:42.200
They've

00:21:42.200 --> 00:21:43.480
got a bunch of cool,

00:21:44.060 --> 00:21:45.560
in-depth, highly produced

00:21:45.820 --> 00:21:47.480
Ruby on Rails, the documentary, and so on.

00:21:48.280 --> 00:21:51.520
A lot of programming-based, framework-based documentaries,

00:21:51.900 --> 00:21:55.020
like really nice storytelling there.

00:21:55.130 --> 00:21:56.660
So I think that is what's coming

00:21:56.980 --> 00:21:58.720
with the Python documentary.

00:21:59.040 --> 00:22:00.040
I'm going to have to check out

00:22:00.070 --> 00:22:02.120
Life Advice from Bjorn Strewstrup.

00:22:03.900 --> 00:22:04.140
Pointers.

00:22:04.470 --> 00:22:05.920
Always use pointers in your life.

00:22:06.400 --> 00:22:07.020
Never duplicate.

00:22:08.220 --> 00:22:08.360
Yeah.

00:22:08.790 --> 00:22:08.920
Interesting.

00:22:09.340 --> 00:22:09.460
Yeah.

00:22:09.640 --> 00:22:10.740
No, some good stuff there.

00:22:11.000 --> 00:22:11.120
Okay.

00:22:11.490 --> 00:22:14.020
So that was one was the documentary.

00:22:14.980 --> 00:22:15.500
Documentary?

00:22:17.620 --> 00:22:20.220
Also, quick errata.

00:22:20.600 --> 00:22:22.560
I mentioned that when I was talking about t-strings,

00:22:23.140 --> 00:22:25.680
I mentioned like the raw conversion.

00:22:25.870 --> 00:22:26.560
It wasn't the raw.

00:22:27.140 --> 00:22:28.200
Henry corrected me.

00:22:28.460 --> 00:22:29.840
It's the repper conversion.

00:22:30.160 --> 00:22:30.580
Thank you, Henry.

00:22:31.760 --> 00:22:33.300
So the next step.

00:22:33.390 --> 00:22:34.060
So, okay.

00:22:34.240 --> 00:22:35.740
So the new Python.

00:22:36.220 --> 00:22:39.620
Oh, Tim Hopper.

00:22:40.140 --> 00:22:41.040
We covered this already.

00:22:41.160 --> 00:22:43.180
The Python developer tooling handbook.

00:22:43.680 --> 00:22:46.080
And one of my comments was, where's the testing?

00:22:46.820 --> 00:22:53.920
So anyway, he added a testing intro also, setting up testing with pytest and uv.

00:22:54.040 --> 00:23:02.120
And actually combining the two is kind of fun to show how you do add pytest to your dev environment with uv.

00:23:02.940 --> 00:23:03.320
Pretty fun.

00:23:03.780 --> 00:23:08.060
Very simple example, a little calculator sort of thing, add, subtract, multiply, testing.

00:23:09.000 --> 00:23:13.360
So shameless plug, if this isn't enough intro to pytest you'd like,

00:23:13.660 --> 00:23:20.540
I suggest going over to courses.pythontest.com where you can pick up any course you want on pytest.

00:23:23.940 --> 00:23:25.860
And a couple others, I guess.

00:23:26.040 --> 00:23:31.920
Last thing is I've been using Pocket for a while to keep track of things I want to read.

00:23:32.260 --> 00:23:33.120
Pocket's going away.

00:23:34.299 --> 00:23:38.560
It's shutting down, I think, as of July, July 1st.

00:23:38.880 --> 00:23:40.720
Anyway, I don't know when it's shutting down.

00:23:40.820 --> 00:23:44.520
But it's shutting down, so you've got to move off onto it.

00:23:44.700 --> 00:23:46.500
If you're using Pocket, don't use Pocket anymore.

00:23:47.660 --> 00:23:49.080
What do you should use instead?

00:23:49.600 --> 00:23:52.460
Obviously, you can check whatever, try your own things out.

00:23:52.720 --> 00:23:55.720
I tried a few things, and I landed on Raindrop.

00:23:55.940 --> 00:23:58.620
So I haven't been liking Raindrop so far.

00:23:59.040 --> 00:24:01.460
And somebody, I posted this on social media.

00:24:02.120 --> 00:24:04.600
Somebody said, well, what does the code look like?

00:24:04.720 --> 00:24:09.840
Because sometimes these bookmark sort of apps aren't that great at code highlighting.

00:24:10.580 --> 00:24:12.480
And I'll show you an example.

00:24:12.960 --> 00:24:16.240
This is of Brett's T-string article.

00:24:17.010 --> 00:24:17.580
It's not bad.

00:24:17.750 --> 00:24:18.200
It doesn't.

00:24:18.440 --> 00:24:24.620
So the web view had, this is the normal view had, oh, it doesn't show highlighting.

00:24:25.150 --> 00:24:32.300
The other version I had had syntax highlighting on Brett's site, but it doesn't show syntax highlighting.

00:24:32.640 --> 00:24:33.640
It's just code blocks.

00:24:34.150 --> 00:24:34.820
So it's not bad.

00:24:35.100 --> 00:24:37.280
Anyway, I've been enjoying Raindrop so far.

00:24:37.870 --> 00:24:39.340
And that is all of my extras.

00:24:40.400 --> 00:24:41.360
Awesome. Yeah, I

00:24:41.360 --> 00:24:46.480
started using Raindrop and I love it. I moved all my, I went on a journey, Brian.

00:24:47.100 --> 00:24:52.260
Not only did I start using Raindrop, I said, I'm going to go to all my various browsers I've used

00:24:52.360 --> 00:24:58.620
throughout the years, Firefox, Vivaldi, and others. I'm going to clean up all of their bookmarks

00:24:58.840 --> 00:25:04.400
because they'll be like just cruft. You know what I mean? From like 10 years of, I'm like, nope,

00:25:04.540 --> 00:25:09.499
nope, nope, nope, nope, nope, nope, nope. Keep these 100 or whatever. Then I imported all of

00:25:09.520 --> 00:25:15.460
those into raindrop and now i have the extension in all my browsers so on any computer any browser

00:25:15.880 --> 00:25:19.120
i have all the same history it's really nice so i definitely second that

00:25:19.120 --> 00:25:21.060
also beast i just started

00:25:21.060 --> 00:25:21.460
off clean

00:25:21.460 --> 00:25:22.380
i got like

00:25:22.380 --> 00:25:24.320
three things in there so far i

00:25:24.320 --> 00:25:27.960
not only migrated i cleaned it up one other

00:25:28.220 --> 00:25:33.940
option if you're a self-hosting person this appeals to me but i did not do it because i just don't want

00:25:33.940 --> 00:25:38.219
more things to babysit at the moment but this thing that used to be called hoarder now named

00:25:38.240 --> 00:25:44.360
Kara Keep. Looks super cool. It's like a self-hosted read it later bookmark service,

00:25:44.680 --> 00:25:49.940
which is cool. Automatically tag your bookmarks with AI and et cetera, et cetera. Looks pretty

00:25:50.020 --> 00:25:55.460
cool. So yeah, but I'm not using it. Are you ready for a different kind of joke?

00:25:55.860 --> 00:25:56.100
Yeah.

00:25:56.700 --> 00:26:02.440
All right. Have you seen this yet? No. Okay. Well, here we go. So I was sitting around thinking,

00:26:03.100 --> 00:26:08.200
I don't know why I came across this, but I'm like, what if we had like historical quotes

00:26:08.320 --> 00:26:12.340
that are well-known, but they were reframed for programmers, right?

00:26:12.760 --> 00:26:13.720
So I set

00:26:13.720 --> 00:26:16.220
out to make this just the joke for the show.

00:26:16.420 --> 00:26:18.120
And then I ended up kind of like, you know what?

00:26:18.140 --> 00:26:19.100
Why don't I just publish this?

00:26:19.150 --> 00:26:20.760
And then we'll still make it the joke for the show.

00:26:21.300 --> 00:26:24.740
So you know the Roosevelt's man in the arena speech?

00:26:25.300 --> 00:26:25.360
I

00:26:25.360 --> 00:26:26.040
love this speech.

00:26:26.420 --> 00:26:27.020
I'll read it.

00:26:27.160 --> 00:26:28.380
It's a little bit long, but not very long.

00:26:28.440 --> 00:26:29.360
I'll read it for people.

00:26:29.610 --> 00:26:31.820
It says, it's not the critic who counts,

00:26:32.100 --> 00:26:34.820
not the man who points out how the strong man or woman stumbles

00:26:35.260 --> 00:26:37.200
or where the doer of deeds could have done them better.

00:26:37.380 --> 00:26:38.180
The critic counts.

00:26:38.240 --> 00:27:08.120
The credit belongs to those who are actually in the arena, whose face is marred by dust and sweat and blood, who strives valiantly, who errs, who comes up short and again and again, because there is no effort without error and shortcoming, but who does actually strive to do the deeds, who knows great enthusiasms, great devotions, and who spins oneself in a worthy cause, who at best knows in the end the triumph of high achievement, and who at the worst, if they fail, at least they fail while doing greatly, so that their place shall never be with those cold and timid.

00:27:08.200 --> 00:27:11.840
its souls who never, you know, neither know victory nor defeat.

00:27:12.280 --> 00:27:12.420
All right.

00:27:12.700 --> 00:27:13.600
So that's the famous quote.

00:27:14.060 --> 00:27:16.760
What if, what if Theodore was speaking about programmers?

00:27:17.540 --> 00:27:18.980
So I came up with a couple of versions.

00:27:20.660 --> 00:27:21.580
I think these are more fun.

00:27:21.820 --> 00:27:22.000
All right.

00:27:22.240 --> 00:27:24.880
It is not the, I kind of gave him title.

00:27:25.020 --> 00:27:26.320
This is a legacy code warriors.

00:27:26.800 --> 00:27:31.780
This first one, it says it is not the keyboard warrior of comment threads who elevates the

00:27:31.880 --> 00:27:37.240
craft, but the engineer whose IDE still glows at midnight, whose mind is seared by stack

00:27:37.260 --> 00:27:42.680
trace here graphics and whose resolve endures failed build after failed build.

00:27:43.010 --> 00:27:47.020
The honor rests with those who wade into legacy code knee-deep in technical debt,

00:27:47.380 --> 00:27:49.960
emerging grimy but triumphant with a cleaner architecture,

00:27:50.860 --> 00:27:55.600
or if defeated, bear the proud scars of having fought for elegance.

00:27:57.840 --> 00:28:00.020
Then, I'll do the last, I'll read the last one.

00:28:00.200 --> 00:28:01.020
This is good.

00:28:01.270 --> 00:28:02.960
This is to the open source maintainers.

00:28:03.100 --> 00:28:06.720
No glory clings to the spectator who counts another's failed build.

00:28:07.040 --> 00:28:11.420
It crowns the open source contributor whose pull request is battle scarred by review,

00:28:11.920 --> 00:28:14.080
whose changelog tells the failures endured,

00:28:14.740 --> 00:28:18.480
and whose merged code becomes the unseen engine of tomorrow's discoveries.

00:28:19.280 --> 00:28:19.560
There you go.

00:28:19.940 --> 00:28:20.360
I like it.

00:28:20.760 --> 00:28:22.060
Yeah, something inspiring for people there.

00:28:23.000 --> 00:28:24.880
You having trouble sleeping, Michael?

00:28:24.980 --> 00:28:27.400
Actually, yes, but this is not evidence of it.

00:28:29.120 --> 00:28:29.300
Okay.

00:28:29.940 --> 00:28:30.500
No, I like it.

00:28:30.720 --> 00:28:31.060
Yeah, thanks.

00:28:32.720 --> 00:28:32.900
All right.

00:28:32.920 --> 00:28:34.240
Well, that's all I got for you, Brian.

00:28:34.520 --> 00:28:34.920
That's what I got.

00:28:35.160 --> 00:28:35.420
All right.

00:28:35.580 --> 00:28:37.320
That's good to wrap it up then.

00:28:37.820 --> 00:28:37.900
Indeed.

00:28:38.320 --> 00:28:38.520
All right.

00:28:38.840 --> 00:28:39.060
See you later.