WEBVTT

00:00:00.001 --> 00:00:04.160
Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to

00:00:04.160 --> 00:00:10.060
your earbuds. This is episode 284, recorded May 17th, 2022. I'm Michael Kennedy.

00:00:10.060 --> 00:00:11.180
And I am Brian Okken.

00:00:11.180 --> 00:00:12.640
And I'm Daniel Mulkey.

00:00:12.640 --> 00:00:14.160
Daniel, great to have you here.

00:00:14.160 --> 00:00:15.480
Thank you. It's an honor.

00:00:15.480 --> 00:00:20.620
Yeah, it's an honor to have you. Now, before we get into our first topic that Brian's going to

00:00:20.620 --> 00:00:22.500
tell us about, just give us a bit of your background.

00:00:22.500 --> 00:00:27.280
Sure. I am an optical engineer in Southern California,

00:00:27.900 --> 00:00:32.800
but I have a significant amount of my time spent using Python for data analysis,

00:00:32.800 --> 00:00:37.760
instrument control, and other things. So I've been doing it for a better part of the last five

00:00:37.760 --> 00:00:42.500
years. And I've had a back and forth relationship with MATLAB and have finally married to Python,

00:00:42.500 --> 00:00:43.020
so to speak.

00:00:43.020 --> 00:00:48.160
Fantastic. You've finally been able to get out of your dysfunctional relationship with MATLAB.

00:00:48.160 --> 00:00:49.720
Yes, exactly.

00:00:49.720 --> 00:00:53.280
It sounds a little bit like you might live in a parallel universe to Brian.

00:00:53.280 --> 00:00:56.960
Yeah, it sounds like it. We should definitely get you on testing code.

00:00:56.960 --> 00:00:58.160
We can BS about that.

00:00:58.160 --> 00:01:00.140
Sure. Yeah, I'd love to.

00:01:00.140 --> 00:01:05.160
Brian, I would love to hear about our first topic. You want to talk about it?

00:01:05.160 --> 00:01:06.480
It sounds very distinct, you know?

00:01:06.480 --> 00:01:12.820
Distinctify. Yes, very distinct. So I ran across this. I can't remember how I ran across it. I guess

00:01:12.820 --> 00:01:17.580
it doesn't matter. But one of the things I like, it's a Python package called Distinctify.

00:01:18.040 --> 00:01:26.240
And it's very simple. It's a lightweight Python package to provide functions to generate colors

00:01:26.240 --> 00:01:33.140
that are visually distinct from one another. So I was thinking like, you know, you got a chart,

00:01:33.140 --> 00:01:37.400
like maybe you're taking user data or something, and you don't know how many lines you're going to plot,

00:01:37.400 --> 00:01:41.800
but you're going to plot a whole bunch of lines. How do you pick the colors for what the lines are?

00:01:42.440 --> 00:01:51.080
So this is a kind of a neat thing to just pick visually distinct colors. Pretty focused,

00:01:51.080 --> 00:01:57.260
but it's pretty cool. And all you do is you kind of just give it, you give it like the number of

00:01:57.260 --> 00:02:02.440
colors you want, and it gives you back the colors. And you can, it has display capabilities. So

00:02:02.440 --> 00:02:08.560
you have to install extra stuff to make that happen. But you can display color swatches too

00:02:08.560 --> 00:02:13.460
with it. And I was looking at some of the different colors that are available. Like one of the ones was

00:02:13.460 --> 00:02:21.960
15 different colors. I think it's 15 colors for normal vision versus some color blindness. So if you

00:02:21.960 --> 00:02:27.480
have colorblind people, you can pick based on some of that stuff. There's a whole bunch of examples in

00:02:27.480 --> 00:02:34.300
the repo too, that it's kind of fun to look at. One of them was the like the normal colorblind one.

00:02:34.940 --> 00:02:42.740
So was that it? No, that wasn't it. But there's some really cool examples of different colors. So if you just

00:02:42.740 --> 00:02:49.360
give it a few, it just grabs a few, of course, but there's a whole bunch of neat ones, clusters and things.

00:02:49.360 --> 00:02:55.100
So anyway, yeah, cool little library. It's great. Yeah, I like that they have, I noticed when I was looking

00:02:55.100 --> 00:02:58.940
through it, they have a function for generating a color palette. And so you can generate a colorblind

00:02:58.940 --> 00:03:04.240
friendly palette. So hypothetically, that works well for visual colorblind. And if it's in print and you're doing

00:03:04.240 --> 00:03:07.920
black and white, so that was the most interesting thing to me. Oh, do you mean it has black and white?

00:03:07.920 --> 00:03:12.000
That's interesting. Well, at least I think if you take a colorblind

00:03:12.000 --> 00:03:15.980
palette and you make it black and white, typically it's still a decent contrast. Oh, yeah. So you have to like worry about

00:03:15.980 --> 00:03:20.040
printing things out. Oh, that's cool. Yeah, that's great. And one of its functions

00:03:20.040 --> 00:03:24.260
is to take the color map that it generates and turn that into

00:03:24.260 --> 00:03:26.720
a matplotlib. Oh, yeah, yeah, yeah. It's cool.

00:03:26.720 --> 00:03:28.180
Oh, that's what I was looking for.

00:03:28.920 --> 00:03:29.280
Yeah.

00:03:29.280 --> 00:03:31.480
Oh, wow.

00:03:31.480 --> 00:03:34.600
And there's somebody in the audience who just found out they're colorblind.

00:03:34.600 --> 00:03:35.340
Yeah, go ahead, Daniel.

00:03:35.340 --> 00:03:38.920
And there's somebody in the audience who just found out they're colorblind.

00:03:38.920 --> 00:03:41.600
They're like, is there a difference? What is this?

00:03:41.600 --> 00:03:48.320
So my, I, yeah, one of my kids found out like in high school that they were colorblind.

00:03:48.320 --> 00:03:50.200
So interesting.

00:03:50.200 --> 00:03:51.900
Yeah. How would you know?

00:03:51.900 --> 00:03:52.500
Yeah.

00:03:52.500 --> 00:03:55.780
For a long time, you're just like, people tell me that's a color. I guess I'm not great at picking

00:03:55.780 --> 00:03:56.720
out that color or something.

00:03:56.720 --> 00:04:01.880
She had an art teacher said, I really love how you use both blues and greens in the sky.

00:04:01.880 --> 00:04:05.580
And she was like, I intended to just use blue, but thanks.

00:04:05.580 --> 00:04:11.740
I have a friend who went to art school and that was essentially his story that he always had really

00:04:11.740 --> 00:04:15.220
vivid color choices because he didn't see the same as everybody else.

00:04:15.220 --> 00:04:17.600
It was great. It was awesome.

00:04:17.600 --> 00:04:18.480
That's pretty cool.

00:04:18.480 --> 00:04:19.560
Yeah.

00:04:19.560 --> 00:04:21.380
Cool. All right.

00:04:21.380 --> 00:04:22.820
Ron, we ready for the next one?

00:04:22.820 --> 00:04:23.280
Definitely.

00:04:24.200 --> 00:04:33.100
Okay. So let's talk about SQL Soda or Soda SQL. So this is a open source CLI tool that if you're

00:04:33.100 --> 00:04:40.900
doing like ETL, like ingest, transform loads type of stuff, doing other sort of analysis or

00:04:40.900 --> 00:04:48.160
exploration of SQL data, it allows you to connect to your data source, like your database, and then

00:04:48.160 --> 00:04:53.480
define tests for what invalid data looks like, right? Does this have to be a number? Can it,

00:04:53.480 --> 00:05:00.300
does it just have to be not null? You know, what is it? So for an example, here, they're talking about,

00:05:00.300 --> 00:05:07.580
here's the YAML file for a, like a warehouse, a data warehouse reporting type thing for Postgres.

00:05:07.580 --> 00:05:12.940
So you just set up like your connection and your host and, and all that kind of stuff. And then

00:05:12.940 --> 00:05:18.900
off it goes. So pretty neat. And then you can scan your data set to run tests against your data.

00:05:19.300 --> 00:05:19.860
Isn't that cool?

00:05:19.860 --> 00:05:22.020
That's right. It's Soda cool.

00:05:22.020 --> 00:05:24.540
It's Soda cool. It is Soda cool.

00:05:26.620 --> 00:05:34.720
Yeah. So you just say Soda scan and you give it the YAML file for the connection information and then a YAML

00:05:34.720 --> 00:05:39.920
file for the types of things you want to test. So they've got this example of how you're talking to

00:05:39.920 --> 00:05:44.840
one of the data warehouses and it's going and pulling in these config files. And it basically,

00:05:44.840 --> 00:05:51.320
this example, it's testing 54 different conditions. Three tests were executed. Everything's good to go.

00:05:51.320 --> 00:05:56.760
So, you know, if you're getting kind of data dropped on you or you're scanning, you know,

00:05:56.760 --> 00:06:01.340
scraping data from other places on some kind of background job and you want to bring it in,

00:06:01.340 --> 00:06:04.460
you know, if it's all automated, how do you know when it goes wrong? Right. So here's a nice,

00:06:04.460 --> 00:06:05.860
simple way to express that.

00:06:05.860 --> 00:06:06.860
Yeah. That's neat.

00:06:06.860 --> 00:06:12.480
Yeah. And Brandon out in the audience says, I think we're looking at great expectations for this same

00:06:12.480 --> 00:06:18.260
thing. And yeah, this is kind of a, I guess my, my first impression is this is a less code

00:06:18.260 --> 00:06:23.740
way of doing what great expectations does. Right. So like you can just put together some YAML files

00:06:23.740 --> 00:06:28.800
that define, you know, what you want to test for. Right. So for example, in this YAML file,

00:06:28.800 --> 00:06:33.600
I can say the metrics are row count, missing count and missing percentage. And then I can test that the

00:06:33.600 --> 00:06:39.600
row count is greater than zero. Right. And then the, another one is for the column, for the ID,

00:06:39.600 --> 00:06:46.220
it's a UUID that it's, I'm allowing 0% of the UUID format to be invalid. Right. You know,

00:06:46.220 --> 00:06:50.580
that's got like a certain structure to it. Right. It's like a, either a straight UUID or a string

00:06:50.580 --> 00:06:55.700
that looks, that can be parsable over to one, I'm guessing something like that. So pretty cool. I

00:06:55.700 --> 00:06:59.620
think that's probably the biggest difference. So if you just want to define kind of like declaratively,

00:06:59.620 --> 00:07:04.080
like here are the conditions of which I want it to test. And then you want to just set it up to

00:07:04.080 --> 00:07:09.620
continuously scan it. Looks good. The invalid percentage looks interesting because,

00:07:09.620 --> 00:07:16.160
it's, it's an interesting addition of like, you know, there can be some bad rows, but we don't

00:07:16.160 --> 00:07:21.380
want more than like 20% bad rows or something like that. Right. Right. Maybe you can't have zero

00:07:21.380 --> 00:07:27.440
errors, right? Like you just, sometimes the data is just not there, but if it's a hundred percent not

00:07:27.440 --> 00:07:31.800
there, then something's gotten terribly wrong or the data formats change and it's not called that

00:07:31.800 --> 00:07:36.680
anymore or whatever in JSON, who knows? Daniel, what do you think? My, my data is always in CSV

00:07:36.680 --> 00:07:41.480
files. So I have, I guess there are pros and cons to never having touch SQL, as I've heard

00:07:41.480 --> 00:07:51.620
much, much easier to version control. Just put the CSV. Yeah. Anyway, I think, this one's pretty

00:07:51.620 --> 00:07:56.320
neat. People can check it out if they're doing relational data stuff and they, especially if you're

00:07:56.320 --> 00:08:01.560
doing a lot of like on demand, you know, not like you ask for it, but it's just on demand

00:08:01.560 --> 00:08:05.560
processing or you're given a database and you want to check it out to see how it's, how it's doing.

00:08:05.560 --> 00:08:10.780
So I won't go on anymore on that because I've got a ton of other extras. So kick it over to you,

00:08:10.780 --> 00:08:18.540
Daniel. Cool. So let's see. There was a review article back in 2020 published in the research

00:08:18.540 --> 00:08:27.180
journal nature, for anyone not in the research articles world, nature is one of the top level ones

00:08:27.180 --> 00:08:32.820
for referencing grad school. We had some fancy work we did with quantum entanglement and we got rejected

00:08:32.820 --> 00:08:39.420
by a sub journal of nature. So to get anything into nature is highly non-trivial. I will add the,

00:08:39.420 --> 00:08:46.080
it's like the JAMA, the journal of American medical association of science. Basically it's absolutely one of

00:08:46.080 --> 00:08:51.360
the top ones. I will say it's a review article. so it's easier typically to get a review article

00:08:51.360 --> 00:08:55.780
than to say, Hey, this is bleeding edge research. It's going to change the world, but still the big

00:08:55.780 --> 00:09:02.560
news is two things. One that there's a article by Travis elephant and others on array programming with

00:09:02.560 --> 00:09:07.780
NumPy in nature. it's a big enough deal that they chose to publish this and it got through.

00:09:07.780 --> 00:09:12.700
And it's, I think very significant that that software was something that was good enough to

00:09:12.700 --> 00:09:17.860
publish. the other, and you know, they go through and they talk about kind of the fundamentals

00:09:17.860 --> 00:09:22.680
of it all. There's one diagram I really like that sort of shows how the whole ecosystem stacks up.

00:09:22.680 --> 00:09:27.220
You've got numbers. Oh yeah. That's a cool visualization. Yeah. And then you got scipy and

00:09:27.220 --> 00:09:31.680
matplotlib and you know, the other plotting libraries. So there's the foundation. Yeah.

00:09:31.680 --> 00:09:36.640
I was just going to say for people who are listening, it's like the tree of life for scientific libraries.

00:09:36.640 --> 00:09:42.880
Sorry. Go on, Daniel. Yeah, that's absolutely right. So from that foundation, as far as algorithms

00:09:42.880 --> 00:09:47.100
and plots, you go up to like specific method you're using, are you doing image processing?

00:09:47.100 --> 00:09:52.020
Are you doing machine learning or something else? And off to domain specifics like AstroPy. And I think

00:09:52.020 --> 00:09:55.320
you've had those guys on Python. So you've gotten to talk to them and then down to very

00:09:55.320 --> 00:10:00.380
application specific. So it, you know, NumPy serving almost everybody who does anything numerical down

00:10:00.380 --> 00:10:07.320
to like Q-tip, which is used for people working on quantum computers. So very large breadth being

00:10:07.320 --> 00:10:17.700
discussed here. Q-tip. That's so cute. I like it. and yeah, so it's notable that Python got into

00:10:17.700 --> 00:10:21.980
nature. And if you go search for Python, there are a lot of other articles, but it's also interesting

00:10:21.980 --> 00:10:26.740
to see that they're willing to publish software. You guys have talked in the past about how you can't

00:10:26.740 --> 00:10:31.280
always publish the software package and any research journal. So how do you get credit for that if you're

00:10:31.280 --> 00:10:35.420
in academia? but this is an interesting take to see that nature goes to publish it.

00:10:35.420 --> 00:10:40.140
Yeah, this is super interesting. And I think it's, it's very valuable to just raise awareness,

00:10:40.140 --> 00:10:45.980
right? It's, you know, this is the water that we swim in, but not everyone. Everyone is immersed in

00:10:45.980 --> 00:10:49.980
the Python data science tooling, right? Yeah. There's a lot of authors on here.

00:10:49.980 --> 00:10:54.640
Yeah. I was trying to understand. I'm guessing those are the maintainers of the packages that

00:10:54.640 --> 00:10:59.240
were included, but I mean, you, you don't have 20 people write one paper, so I don't know how,

00:10:59.240 --> 00:11:03.880
I think it's, it's kind of like the LIGO papers or like the gravitational wave interferometer ones

00:11:03.880 --> 00:11:08.560
where like this crazy list. It's like the first page of the article is almost all authors just

00:11:08.560 --> 00:11:12.220
because there's so many people that worked on this for so long. So I'm guessing that's

00:11:12.220 --> 00:11:19.160
yeah. And you can access it. Some, some, articles, some journals, you can't actually read

00:11:19.160 --> 00:11:22.320
it unless you have a subscription, but this one's available. So.

00:11:22.320 --> 00:11:30.020
Indeed. Yeah. A very cool pick before we move on. Maybe, you know, Daniel Alvaro and audience

00:11:30.020 --> 00:11:36.320
has have any of you come across a way to validate pandas data frames against a schema, much like SQL,

00:11:36.320 --> 00:11:44.460
uh, soda, soda, soda, my scope. I feel like we have, but I don't remember, but yeah, I don't

00:11:44.460 --> 00:11:51.200
remember either. Sorry. Maybe something we should seek out for the next one. And I think we might

00:11:51.200 --> 00:11:56.800
get some answers in the audience. So we'll, we'll let them, inform us as we move on. So Brian,

00:11:56.800 --> 00:12:03.680
what's next? well, this isn't Python specific, but I think a lot of Python people are using

00:12:03.680 --> 00:12:10.360
GitHub actions. so, GitHub announced, I guess recently, supercharging GitHub

00:12:10.360 --> 00:12:17.180
actions with job summaries. That's an article that we'll link to. And, basically the, it's pretty,

00:12:17.180 --> 00:12:23.860
it's pretty cool. I can't wait to try this. I'm using GitHub actions. And, the gist is you can

00:12:23.860 --> 00:12:30.480
now have Markdown go directly into your GitHub job summary sort of thing with like this,

00:12:30.480 --> 00:12:39.140
this crazy, global variable called GitHub step summary. but it, it's got marked out to it.

00:12:39.140 --> 00:12:44.380
And I'm like, well, what can you do with this though? But, Simon Willison, released,

00:12:44.380 --> 00:12:51.840
was, was tweeting about it. And, and then said, and then Ned Batchelder said, Hey, I'm using it too.

00:12:51.840 --> 00:12:58.500
So Ned, has a little example on his, on coverage.py that shows, what does it show?

00:12:58.500 --> 00:13:03.940
It shows, you, you get this nice total coverage percentage. If you want to put that

00:13:03.940 --> 00:13:10.460
in your, in the coverage for your, your, your repo, you can do that. Interesting that

00:13:10.460 --> 00:13:16.060
coverage.py is not a hundred percent covered. I don't know why I find that funny.

00:13:16.060 --> 00:13:23.140
The irony. I love it. but, and then, so Simon also listed, data set is,

00:13:23.140 --> 00:13:30.280
uh, has an example on data set, you doing, adding some extra stuff, to, to,

00:13:30.280 --> 00:13:36.660
what is he adding changed files? Oh, he's got a, a tool that does, looks for,

00:13:36.660 --> 00:13:42.420
how many files have changed and, and recently. And he actually just wrote, he just wrote a

00:13:42.420 --> 00:13:47.440
write write up for that. So we're linked to that as well. So GitHub action job summaries,

00:13:47.440 --> 00:13:52.760
and he shows how it, how it works. You can pop, pop out stuff. And I love Markdown.

00:13:52.760 --> 00:13:56.840
So even little code fences and all sorts of stuff. That's very cool. If you want to structure something

00:13:56.840 --> 00:14:02.040
real nice like that. Yeah. It even has, so, so supposedly it's got a whole bunch of stuff.

00:14:02.040 --> 00:14:08.340
It's got like, you can do tables even. So that's neat. And emojis. Why not? So,

00:14:08.340 --> 00:14:13.260
Oh yeah. Pretty cool. Put a little fire emoji in there. Yes. Do it. Does anybody get images?

00:14:13.260 --> 00:14:18.180
Like if you create an image during the action, can you reference it? I do. I don't know.

00:14:18.180 --> 00:14:23.760
Didn't doesn't mention images, but maybe you could base 64 and code it and embed it as a data.

00:14:23.760 --> 00:14:31.560
Oh, wow. It even does a mermaid, which is a way to do diagrams, within it. That's pretty neat.

00:14:31.700 --> 00:14:36.580
Very nice. Like flow charts. Yeah. Fantastic. This is a good one. I need to learn to do more

00:14:36.580 --> 00:14:41.620
with GitHub actions. I don't do very much with them. I love them. They're like, it was, I used to use

00:14:41.620 --> 00:14:48.740
Travis back in the day, but, and, I think these are way easier. So, you know, do you do any of

00:14:48.740 --> 00:14:54.420
those sorts of things? Any, CI automation type stuff? at a previous company, we used Azure DevOps

00:14:54.420 --> 00:15:00.180
and set up some stuff to build packages and build applications, but, not at the moment. It's just,

00:15:00.180 --> 00:15:04.020
it doesn't, it doesn't happen to be any code bases I have, but I need that.

00:15:04.020 --> 00:15:09.680
Yeah. Very cool. All right. Well, I've got an interesting one here. I want to dive into it,

00:15:09.680 --> 00:15:15.680
you guys. So this one, let me give some attribution here. This one was sent over by

00:15:15.680 --> 00:15:24.440
Antomar, from meta. And then this is a writeup by Alex way good. And what it is, is it's the,

00:15:24.580 --> 00:15:30.280
basically the notes for all of us who are not there for the 2022 Python language summit.

00:15:30.280 --> 00:15:36.820
So that's pretty cool. There were around 30 core developers, triagers, and special guests gathered

00:15:36.820 --> 00:15:43.160
the day before PyCon. And so they, they had a bunch of different talks and ideas they discussed

00:15:43.160 --> 00:15:49.800
quick summary. Really it's about so much of this is about performance and parallelism right now.

00:15:50.440 --> 00:15:58.280
And then there's a lot of maintainability back channels, back flows here. All right. So

00:15:58.280 --> 00:16:04.320
coming to these first, Sam Gill made a huge splash last year when he talked and he introduced the no

00:16:04.320 --> 00:16:09.960
Gill work that they had done for, I thought I'm three, eight, I believe. I can't remember three,

00:16:09.960 --> 00:16:17.000
three, nine. No, it was three, nine for them. Cinder was three. So for three, nine, and there's a lot of

00:16:17.000 --> 00:16:23.940
interesting optimizations and whatnot in that talk. So the idea is, could we live without a

00:16:23.940 --> 00:16:30.240
global interpreter lock? Larry Hastings tried the galectomy, sort of said, you know, it's too much

00:16:30.240 --> 00:16:37.060
of a penalty to try to live without it. But this no GIL work that Sam Gross did actually had very small

00:16:37.060 --> 00:16:43.100
overhead in terms of what it added, but potentially removed some of the GIL things. So there's a lot of

00:16:43.100 --> 00:16:51.100
analysis of that. People were excited, but they, how is it written? It says robust, there was robust

00:16:51.100 --> 00:16:59.940
questioning. One, I guess one of the biggest parts that they discussed was maybe this should be a fork

00:16:59.940 --> 00:17:07.760
of CPython. There should be a no GIL version of Python. And, but Sam is like, I really don't want to

00:17:07.760 --> 00:17:13.800
have just another separate version of Python. I really want this to just help everyone. So pretty

00:17:13.800 --> 00:17:18.960
interesting. I think originally it was maybe going to be a runtime flag you could pass to Python,

00:17:18.960 --> 00:17:23.740
but it's looking like it more likely is going to turn out to be a compiler flag. So you'd have to have

00:17:23.740 --> 00:17:29.540
a no GIL build, even though it's from the same source code. So yeah, a bunch of interesting things,

00:17:29.540 --> 00:17:35.400
concerns about how it's going to work with like C libraries and so on. But that's, there's,

00:17:35.400 --> 00:17:43.220
all these are pretty interesting read-ups, reads, write-ups. So Eric Snow did a presentation on his

00:17:43.220 --> 00:17:49.740
per interpreter Gill, which is interesting in how it approaches a slightly different problem

00:17:49.740 --> 00:17:55.320
than say Sam Gross. So Sam is trying to get it out of Python. Eric is saying, well, if we could just

00:17:55.320 --> 00:18:00.900
have a sub interpreter, like a little mini in-process interpreter that runs per thread, then they can all

00:18:00.900 --> 00:18:04.400
Gill to their heart's content. It doesn't matter because it's all single threaded, right?

00:18:04.400 --> 00:18:12.600
But what's interesting is if you go look at this one in here, we've got this one. It says something

00:18:12.600 --> 00:18:21.560
like way back in 1997, this idea of multiple sub interpreters was added by Guido, but it really

00:18:21.560 --> 00:18:27.340
hasn't, nothing has been done with it. And when somebody tries to do stuff with it, there were

00:18:27.340 --> 00:18:32.900
thousands of global variables. And if you're going to have per interpreters, you have to somehow have

00:18:32.900 --> 00:18:36.900
those not shared because then you're going to have the GIL back on them, right? You have that locking.

00:18:36.900 --> 00:18:40.460
So due partly to the

00:18:40.460 --> 00:18:42.620
deprecation of some of the old libraries

00:18:42.620 --> 00:18:44.980
and stuff, it's gotten a little simpler, but

00:18:44.980 --> 00:18:49.140
no, that was it for the next write-up. But anyway, they reduced this to almost

00:18:49.140 --> 00:18:50.100
1,000, to 1,200

00:18:50.100 --> 00:18:52.060
remaining globals.

00:18:52.060 --> 00:18:54.980
So needless to say, it is not

00:18:54.980 --> 00:18:56.660
totally

00:18:56.660 --> 00:18:58.000
solved here, right?

00:18:58.100 --> 00:19:03.820
So again, one of the possible worries of all this stuff is, well, how are the C extensions going to deal with this?

00:19:03.820 --> 00:19:06.560
Like they don't know about multiple sub interpreters.

00:19:06.560 --> 00:19:10.600
Yeah. So anyway, that's another one of the main threads going on there.

00:19:10.600 --> 00:19:11.220
Let's see.

00:19:11.220 --> 00:19:14.220
Then this is probably the biggest deal.

00:19:14.620 --> 00:19:20.120
This is Faster CPython 3.12 and Beyond by Mark Shannon and Guido Van Rossum.

00:19:20.120 --> 00:19:22.900
So stepping back, a release.

00:19:22.900 --> 00:19:24.840
Python 3.11, if you haven't heard,

00:19:24.840 --> 00:19:27.040
is fast. It's supposed to be

00:19:27.040 --> 00:19:29.700
1.25 times faster than 3.10.

00:19:29.700 --> 00:19:30.580
How about that?

00:19:30.580 --> 00:19:31.260
Yikes.

00:19:31.260 --> 00:19:34.800
This blows me away. In one year, they were able to make Python

00:19:34.800 --> 00:19:36.400
1.25x

00:19:36.400 --> 00:19:38.680
faster, and it's been out for

00:19:38.680 --> 00:19:41.020
30 years. It's not like, oh, well, we released it

00:19:41.020 --> 00:19:42.460
last year, and now we've learned some things.

00:19:42.460 --> 00:19:44.380
It's really, really, really

00:19:44.380 --> 00:19:46.960
solidified in the way that it

00:19:46.960 --> 00:19:48.960
is, and then still, there's a lot of work.

00:19:48.960 --> 00:19:50.720
And this apparently is just the beginning.

00:19:50.720 --> 00:19:52.900
This is like a five-year plan to

00:19:52.900 --> 00:19:55.140
add all sorts of optimizing

00:19:55.140 --> 00:19:56.960
JIT compilers and all

00:19:56.960 --> 00:19:57.600
sorts of things.

00:19:57.600 --> 00:20:00.880
How did they quantify that, or what

00:20:00.880 --> 00:20:02.660
subset of the language was I tested on?

00:20:02.660 --> 00:20:04.140
That's the tricky thing to say.

00:20:04.140 --> 00:20:06.380
Python is 25% faster.

00:20:06.380 --> 00:20:08.820
Doesn't matter what you do. Even if you're just waiting

00:20:08.820 --> 00:20:10.580
on a database, it's still 25% faster.

00:20:10.580 --> 00:20:12.380
Does it just overclock your computer in the background?

00:20:12.380 --> 00:20:14.220
It liquid cools it.

00:20:14.220 --> 00:20:18.840
I believe that number comes from

00:20:18.840 --> 00:20:20.300
the unit tests,

00:20:20.300 --> 00:20:22.000
like all the tests for CPython.

00:20:22.000 --> 00:20:23.980
I'm not 100% sure, but I believe

00:20:23.980 --> 00:20:26.300
that was the conversation.

00:20:26.300 --> 00:20:28.460
And so one of the big things coming is

00:20:28.460 --> 00:20:30.500
possibly a JIT, an optimizing

00:20:30.500 --> 00:20:32.360
JIT compiler. So right now, they've

00:20:32.360 --> 00:20:34.180
found a way to optimize

00:20:34.180 --> 00:20:36.080
individual bytecode instructions

00:20:36.080 --> 00:20:38.280
to make the runtime

00:20:38.280 --> 00:20:40.320
smarter and go, oh, I see what you're trying to do.

00:20:40.380 --> 00:20:42.180
We could have a specialized version

00:20:42.180 --> 00:20:44.240
of that. But that's

00:20:44.240 --> 00:20:46.300
on a per line basis. Like, how about

00:20:46.300 --> 00:20:48.320
inlining this method? Because I only see it

00:20:48.320 --> 00:20:49.620
called in two places or

00:20:49.620 --> 00:20:52.040
something like that, right? So you need something that

00:20:52.040 --> 00:20:54.200
can look more broadly at the code. So that's this idea

00:20:54.200 --> 00:20:56.020
of the JIT compiler and

00:20:56.020 --> 00:20:58.180
so on. So yeah, this is really

00:20:58.180 --> 00:21:00.020
good. But all three of these things I've talked about

00:21:00.020 --> 00:21:01.700
are like, both,

00:21:01.700 --> 00:21:04.000
they might help each other, but they also might

00:21:04.000 --> 00:21:06.140
inhibit each other, right? So like the

00:21:06.140 --> 00:21:08.200
no-gil work might interfere

00:21:08.200 --> 00:21:09.940
with some of the optimizations that they're doing

00:21:09.940 --> 00:21:11.940
over here and the multiple sub-

00:21:11.940 --> 00:21:13.800
interpreters also might

00:21:13.800 --> 00:21:16.140
be some interplay that they've got to be

00:21:16.140 --> 00:21:18.100
got to be worked out. So I'll just summarize the rest.

00:21:18.100 --> 00:21:19.740
WebAssembly. And

00:21:19.740 --> 00:21:22.040
so we've talked about

00:21:22.040 --> 00:21:23.260
PyScript last time and

00:21:23.260 --> 00:21:24.120
Pyodide.

00:21:24.180 --> 00:21:26.340
Pyodide. This is the

00:21:26.340 --> 00:21:27.640
official CPython

00:21:27.640 --> 00:21:29.960
build target

00:21:29.960 --> 00:21:32.120
for just

00:21:32.120 --> 00:21:34.180
CPython. So this is really

00:21:34.180 --> 00:21:36.100
interesting. That is sort of a more from the core

00:21:36.100 --> 00:21:38.280
devs rather than somebody coercing

00:21:38.280 --> 00:21:40.080
CPython into a different build

00:21:40.080 --> 00:21:41.380
on their own. So that's pretty neat.

00:21:41.380 --> 00:21:44.000
f-strings. Apparently the F-string

00:21:44.000 --> 00:21:45.880
parser is kind of this weird

00:21:45.880 --> 00:21:48.100
side parser thing that's not actually

00:21:48.100 --> 00:21:49.980
part of the Python code

00:21:49.980 --> 00:21:51.640
parser. But now we have peg,

00:21:51.640 --> 00:21:53.880
the peg parser. It can support more of this.

00:21:53.880 --> 00:21:55.600
and sort of unify that.

00:21:55.600 --> 00:21:56.600
So yeah,

00:21:56.600 --> 00:21:58.720
there's something like

00:21:58.720 --> 00:22:00.920
1,400 lines of customized

00:22:00.920 --> 00:22:02.560
C code for parsing F-string.

00:22:02.560 --> 00:22:05.660
Well, the people who wrote it

00:22:05.660 --> 00:22:06.820
knew. They did a lot of work.

00:22:06.820 --> 00:22:09.340
There's like 600 of the global

00:22:09.340 --> 00:22:10.620
variables right there.

00:22:10.620 --> 00:22:11.500
Exactly.

00:22:11.500 --> 00:22:15.120
The most important

00:22:15.120 --> 00:22:17.200
1,400 lines in all of Python

00:22:17.200 --> 00:22:19.560
right now. They have string functionality.

00:22:19.560 --> 00:22:23.420
Then two of the big

00:22:23.420 --> 00:22:24.960
optimizations from sender.

00:22:24.960 --> 00:22:26.400
That's the Python 3.8

00:22:26.400 --> 00:22:28.260
specialization from meta.

00:22:28.260 --> 00:22:30.420
One is, this is a

00:22:30.420 --> 00:22:31.380
presentation by

00:22:31.380 --> 00:22:32.860
Itmar Osterreicher.

00:22:32.860 --> 00:22:34.980
So this is the

00:22:34.980 --> 00:22:36.260
person who sent this in actually.

00:22:36.260 --> 00:22:37.760
This is

00:22:37.760 --> 00:22:39.360
looking at

00:22:39.360 --> 00:22:40.540
async methods.

00:22:40.540 --> 00:22:42.020
And if you can be sure

00:22:42.020 --> 00:22:43.500
it's not actually going to await,

00:22:43.500 --> 00:22:44.900
treat it like a regular method.

00:22:45.900 --> 00:22:46.600
So, you know,

00:22:46.600 --> 00:22:47.760
if you have an async method,

00:22:47.760 --> 00:22:48.380
you might say,

00:22:48.380 --> 00:22:48.880
do this,

00:22:48.880 --> 00:22:49.240
do this,

00:22:49.240 --> 00:22:49.640
do this.

00:22:49.640 --> 00:22:51.900
If I already have the value

00:22:51.900 --> 00:22:52.420
in the cache,

00:22:52.420 --> 00:22:52.960
return,

00:22:52.960 --> 00:22:54.680
else await database call,

00:22:54.680 --> 00:22:55.040
right?

00:22:55.040 --> 00:22:57.280
If you already have it in the cache,

00:22:57.280 --> 00:22:58.220
why do you need to

00:22:58.220 --> 00:22:59.940
create a co-routine,

00:22:59.940 --> 00:23:01.320
schedule it on the back,

00:23:01.320 --> 00:23:02.100
on the loop,

00:23:02.100 --> 00:23:03.400
wait for the loop to get to it,

00:23:03.400 --> 00:23:04.040
and then return?

00:23:04.040 --> 00:23:04.780
Just boot.

00:23:04.780 --> 00:23:05.440
Just call it.

00:23:05.440 --> 00:23:06.380
Like a regular method,

00:23:06.380 --> 00:23:07.220
just give us the answer.

00:23:07.220 --> 00:23:08.340
That's the idea.

00:23:09.120 --> 00:23:09.740
There's some

00:23:09.740 --> 00:23:11.520
interesting ideas

00:23:11.520 --> 00:23:12.460
that it might change

00:23:12.460 --> 00:23:13.420
runtime ordering,

00:23:13.420 --> 00:23:14.360
although I don't know

00:23:14.360 --> 00:23:15.300
there was any promises

00:23:15.300 --> 00:23:16.140
of runtime ordering,

00:23:16.140 --> 00:23:17.260
but yeah.

00:23:17.260 --> 00:23:18.540
So that one's interesting.

00:23:18.540 --> 00:23:19.800
Also,

00:23:19.800 --> 00:23:22.360
the issue and PR backlog,

00:23:22.360 --> 00:23:23.940
now that we've moved to GitHub,

00:23:23.940 --> 00:23:24.760
apparently,

00:23:24.760 --> 00:23:26.160
there are issues

00:23:26.160 --> 00:23:27.740
that are still 20 years old

00:23:27.740 --> 00:23:29.080
that are still open.

00:23:29.080 --> 00:23:30.760
And traditionally,

00:23:30.760 --> 00:23:33.240
the core devs

00:23:33.240 --> 00:23:34.100
and the triagers

00:23:34.100 --> 00:23:34.980
and so on

00:23:34.980 --> 00:23:36.260
have approached

00:23:36.260 --> 00:23:37.060
these things like,

00:23:37.060 --> 00:23:37.960
well,

00:23:38.500 --> 00:23:39.500
should we close this

00:23:39.500 --> 00:23:40.320
or probably we need

00:23:40.320 --> 00:23:40.940
to keep it open

00:23:40.940 --> 00:23:41.660
because it's important

00:23:41.660 --> 00:23:42.660
for historical reasons.

00:23:42.660 --> 00:23:43.540
And they're starting

00:23:43.540 --> 00:23:44.320
to talk about like,

00:23:44.320 --> 00:23:45.260
this is not helpful

00:23:45.260 --> 00:23:45.760
for anyone.

00:23:45.760 --> 00:23:47.440
Maybe our first question

00:23:47.440 --> 00:23:48.000
is like,

00:23:48.000 --> 00:23:49.400
why should we keep this open?

00:23:49.400 --> 00:23:50.320
And if the answer

00:23:50.320 --> 00:23:50.880
is not clear,

00:23:50.880 --> 00:23:51.580
just close it.

00:23:51.580 --> 00:23:53.080
There's a lot of talk

00:23:53.080 --> 00:23:53.260
about,

00:23:53.260 --> 00:23:53.500
well,

00:23:53.500 --> 00:23:54.520
this historical stuff

00:23:54.520 --> 00:23:55.100
and maybe someone

00:23:55.100 --> 00:23:55.820
wants to pick it up.

00:23:55.820 --> 00:23:56.560
If it were me,

00:23:56.560 --> 00:23:57.720
if I got to pick

00:23:57.720 --> 00:23:59.120
and obviously I don't,

00:23:59.120 --> 00:23:59.820
so it doesn't really matter,

00:23:59.820 --> 00:24:00.780
I would just go,

00:24:00.780 --> 00:24:01.680
if it's older than two years,

00:24:01.680 --> 00:24:02.240
just close it.

00:24:02.240 --> 00:24:02.880
Like there's a script

00:24:02.880 --> 00:24:03.300
that just says,

00:24:03.300 --> 00:24:03.940
over in two years,

00:24:03.940 --> 00:24:04.520
select all,

00:24:04.520 --> 00:24:05.020
close.

00:24:05.020 --> 00:24:06.820
Now let's go through

00:24:06.820 --> 00:24:07.400
and figure it out

00:24:07.400 --> 00:24:09.180
because at some point,

00:24:09.180 --> 00:24:09.380
you know,

00:24:09.380 --> 00:24:10.560
if you've got 20 years

00:24:10.560 --> 00:24:11.620
of you should make this change,

00:24:11.620 --> 00:24:12.140
maybe even,

00:24:12.140 --> 00:24:13.060
maybe these,

00:24:13.060 --> 00:24:14.120
these things aren't even

00:24:14.120 --> 00:24:15.000
relevant anymore,

00:24:15.000 --> 00:24:15.420
you know,

00:24:15.420 --> 00:24:16.600
or things have moved beyond it

00:24:16.600 --> 00:24:17.620
or it doesn't make sense

00:24:17.620 --> 00:24:18.420
in 2022.

00:24:19.100 --> 00:24:19.760
I don't know.

00:24:19.760 --> 00:24:21.120
But I'm just,

00:24:21.120 --> 00:24:22.180
mostly what I got out

00:24:22.180 --> 00:24:22.600
of the articles,

00:24:22.600 --> 00:24:23.660
I'm thankful that I don't

00:24:23.660 --> 00:24:24.740
have to deal with 20 years

00:24:24.740 --> 00:24:25.900
of issues and PRs.

00:24:25.900 --> 00:24:28.120
But also,

00:24:28.120 --> 00:24:29.260
they don't go away

00:24:29.260 --> 00:24:30.100
if you close them.

00:24:30.100 --> 00:24:31.120
They're still there

00:24:31.120 --> 00:24:32.060
if people really want

00:24:32.060 --> 00:24:32.560
to see them.

00:24:32.560 --> 00:24:33.500
You can,

00:24:33.500 --> 00:24:35.300
so I think they should be,

00:24:35.300 --> 00:24:36.320
maybe two years

00:24:36.320 --> 00:24:37.380
might be a little extreme,

00:24:37.380 --> 00:24:38.900
but at the very least

00:24:38.900 --> 00:24:40.140
five or three

00:24:40.140 --> 00:24:40.940
or something like that.

00:24:40.940 --> 00:24:41.860
There should be a number

00:24:41.860 --> 00:24:42.540
where that's true

00:24:42.540 --> 00:24:43.000
and that number

00:24:43.000 --> 00:24:43.920
should be less than 30.

00:24:43.920 --> 00:24:44.560
And it's,

00:24:44.560 --> 00:24:45.620
and it's a smaller number

00:24:45.620 --> 00:24:46.200
than 20,

00:24:46.200 --> 00:24:46.820
right?

00:24:47.040 --> 00:24:47.240
So,

00:24:47.240 --> 00:24:48.480
yeah.

00:24:48.480 --> 00:24:49.380
All right.

00:24:49.380 --> 00:24:50.580
This is a long section.

00:24:50.580 --> 00:24:51.140
Last thing,

00:24:51.140 --> 00:24:52.300
I'll close it out with this.

00:24:52.300 --> 00:24:54.400
Immortal objects,

00:24:54.400 --> 00:24:55.400
the path forward

00:24:55.400 --> 00:24:56.200
for immortal objects.

00:24:56.200 --> 00:24:58.000
So let me ask you guys this.

00:24:58.000 --> 00:24:59.760
Can you change none

00:24:59.760 --> 00:25:00.900
or true or false?

00:25:00.900 --> 00:25:01.940
No, right?

00:25:01.940 --> 00:25:03.060
Does,

00:25:03.060 --> 00:25:03.800
do you think it's ever

00:25:03.800 --> 00:25:04.420
going to go away?

00:25:04.420 --> 00:25:04.660
Like,

00:25:04.660 --> 00:25:06.360
are we done using true

00:25:06.360 --> 00:25:07.060
and then it's just

00:25:07.060 --> 00:25:08.360
going to get garbage collected

00:25:08.360 --> 00:25:09.400
or reference counted

00:25:09.400 --> 00:25:09.980
out of memory?

00:25:09.980 --> 00:25:10.520
Nope.

00:25:10.520 --> 00:25:11.340
But you know what?

00:25:11.340 --> 00:25:12.740
Every time you interact

00:25:12.740 --> 00:25:13.920
with true and false,

00:25:13.920 --> 00:25:15.100
it's still incrementing

00:25:15.100 --> 00:25:15.800
its ref count.

00:25:15.800 --> 00:25:17.520
Interesting.

00:25:17.520 --> 00:25:18.840
And none

00:25:18.840 --> 00:25:19.120
and stuff

00:25:19.120 --> 00:25:20.220
because it's an object,

00:25:20.220 --> 00:25:20.520
right?

00:25:20.520 --> 00:25:21.100
Oh, yeah.

00:25:21.100 --> 00:25:22.580
And so,

00:25:22.580 --> 00:25:24.240
this discussion is like,

00:25:24.240 --> 00:25:25.160
isn't there some

00:25:25.160 --> 00:25:26.120
that just shouldn't

00:25:26.120 --> 00:25:26.960
be participating

00:25:26.960 --> 00:25:27.900
in reference counting

00:25:27.900 --> 00:25:28.680
because they're,

00:25:28.680 --> 00:25:30.260
they're just fundamental

00:25:30.260 --> 00:25:30.860
to,

00:25:30.860 --> 00:25:32.360
you know,

00:25:32.360 --> 00:25:33.040
like the idea

00:25:33.040 --> 00:25:33.720
of a class,

00:25:33.720 --> 00:25:34.200
like the,

00:25:34.200 --> 00:25:35.240
the structure

00:25:35.240 --> 00:25:35.660
of a thing

00:25:35.660 --> 00:25:36.120
that defines

00:25:36.120 --> 00:25:36.900
what a class is,

00:25:36.900 --> 00:25:37.460
true,

00:25:37.460 --> 00:25:38.040
false,

00:25:38.040 --> 00:25:38.920
the numbers,

00:25:38.920 --> 00:25:39.980
like the low numbers,

00:25:39.980 --> 00:25:40.880
like there should be

00:25:40.880 --> 00:25:41.420
some that are

00:25:41.420 --> 00:25:42.660
not consuming

00:25:42.660 --> 00:25:43.240
that memory

00:25:43.240 --> 00:25:44.240
because they don't

00:25:44.240 --> 00:25:45.020
need to keep track

00:25:45.020 --> 00:25:46.080
of that section

00:25:46.080 --> 00:25:47.160
and so on.

00:25:47.160 --> 00:25:48.240
Right.

00:25:48.240 --> 00:25:48.860
So anyway,

00:25:48.860 --> 00:25:49.920
this was the proposal.

00:25:49.920 --> 00:25:51.100
Again,

00:25:51.100 --> 00:25:52.620
it's complicated

00:25:52.620 --> 00:25:53.840
is the story,

00:25:53.840 --> 00:25:54.940
but yeah,

00:25:54.940 --> 00:25:56.100
I do something

00:25:56.100 --> 00:25:57.100
a little bit like this

00:25:57.100 --> 00:25:58.360
on Talk Python,

00:25:58.360 --> 00:25:59.200
the training site.

00:25:59.200 --> 00:26:00.500
So I've done a lot

00:26:00.500 --> 00:26:01.380
to tweak the garbage

00:26:01.380 --> 00:26:02.320
collection around there

00:26:02.320 --> 00:26:04.100
and really change

00:26:04.100 --> 00:26:04.880
the,

00:26:04.880 --> 00:26:06.120
the defaults

00:26:06.120 --> 00:26:06.640
of like,

00:26:06.640 --> 00:26:07.840
what are the triggers

00:26:07.840 --> 00:26:08.660
for garbage collection?

00:26:09.140 --> 00:26:09.980
So if I've got

00:26:09.980 --> 00:26:10.840
this many allocations

00:26:10.840 --> 00:26:11.540
and so on,

00:26:11.540 --> 00:26:12.900
and one of the things

00:26:12.900 --> 00:26:13.620
you can do

00:26:13.620 --> 00:26:14.880
is you can tell it

00:26:14.880 --> 00:26:15.900
from here on,

00:26:15.900 --> 00:26:17.160
like what has existed

00:26:17.160 --> 00:26:18.200
up until now,

00:26:18.200 --> 00:26:19.240
freeze that

00:26:19.240 --> 00:26:20.040
and don't,

00:26:20.040 --> 00:26:20.800
don't look at it

00:26:20.800 --> 00:26:21.320
when you have to

00:26:21.320 --> 00:26:22.140
look for cycles.

00:26:22.140 --> 00:26:22.820
Right.

00:26:22.820 --> 00:26:23.880
So I just,

00:26:23.880 --> 00:26:24.960
in my app startup

00:26:24.960 --> 00:26:25.460
when it's a,

00:26:25.460 --> 00:26:26.480
it's kind of

00:26:26.480 --> 00:26:27.740
imported the things

00:26:27.740 --> 00:26:28.600
and it's about to start,

00:26:28.600 --> 00:26:29.180
it just says,

00:26:29.180 --> 00:26:29.860
okay,

00:26:29.860 --> 00:26:30.700
everything that you've done

00:26:30.700 --> 00:26:31.380
to come to life,

00:26:31.380 --> 00:26:32.260
just don't,

00:26:32.260 --> 00:26:33.140
don't trick that anymore.

00:26:33.140 --> 00:26:34.480
Anything else I make

00:26:34.480 --> 00:26:35.040
from here on out,

00:26:35.040 --> 00:26:35.780
please clean that up.

00:26:35.780 --> 00:26:36.080
And it,

00:26:36.080 --> 00:26:36.760
it seems to,

00:26:36.760 --> 00:26:38.120
it's kind of a super cheap,

00:26:38.120 --> 00:26:39.080
cheap overs,

00:26:39.080 --> 00:26:39.240
version,

00:26:39.240 --> 00:26:39.940
but you still get

00:26:39.940 --> 00:26:40.460
reference counting,

00:26:40.460 --> 00:26:40.720
right?

00:26:40.720 --> 00:26:41.760
Yeah,

00:26:41.760 --> 00:26:42.320
that's definitely

00:26:42.320 --> 00:26:42.780
an optimization

00:26:42.780 --> 00:26:44.380
that I think is worth it

00:26:44.380 --> 00:26:45.160
for some of these

00:26:45.160 --> 00:26:46.460
immortal objects.

00:26:46.460 --> 00:26:47.160
Why not?

00:26:47.160 --> 00:26:47.620
Yeah.

00:26:47.620 --> 00:26:47.860
I mean,

00:26:47.860 --> 00:26:48.300
we shouldn't be

00:26:48.300 --> 00:26:49.220
reference counting on none.

00:26:49.220 --> 00:26:49.940
That's kind of weird.

00:26:49.940 --> 00:26:50.360
Unless,

00:26:50.360 --> 00:26:52.020
unless it slows things down

00:26:52.020 --> 00:26:53.820
by having like some.

00:26:53.820 --> 00:26:54.420
It does.

00:26:54.420 --> 00:26:55.240
That's the thing

00:26:55.240 --> 00:26:55.720
that's crazy.

00:26:55.720 --> 00:26:56.400
So over here,

00:26:56.400 --> 00:26:56.780
they're like,

00:26:56.780 --> 00:26:57.060
all right,

00:26:57.060 --> 00:26:57.640
here's the deal.

00:26:57.720 --> 00:26:57.860
we,

00:26:57.860 --> 00:26:58.720
we shouldn't,

00:26:58.720 --> 00:27:00.540
we shouldn't have to worry

00:27:00.540 --> 00:27:01.200
about this.

00:27:01.200 --> 00:27:02.000
And so,

00:27:02.000 --> 00:27:03.000
where was it?

00:27:03.000 --> 00:27:05.360
Except it adds an if statement

00:27:05.360 --> 00:27:06.100
to everything,

00:27:06.100 --> 00:27:06.920
right?

00:27:06.920 --> 00:27:07.240
Yeah.

00:27:07.240 --> 00:27:10.080
It says the naive implementation

00:27:10.080 --> 00:27:12.960
of this makes it 6% slower,

00:27:12.960 --> 00:27:13.660
not faster.

00:27:13.660 --> 00:27:13.920
Like,

00:27:13.920 --> 00:27:14.620
oh no.

00:27:14.620 --> 00:27:16.520
It makes sense.

00:27:16.520 --> 00:27:17.220
Yeah.

00:27:17.340 --> 00:27:18.380
And we think we can make it

00:27:18.380 --> 00:27:19.580
only 2% slower.

00:27:19.580 --> 00:27:22.360
It's going to be slower though.

00:27:22.360 --> 00:27:22.620
Yeah.

00:27:22.620 --> 00:27:24.240
Well,

00:27:24.240 --> 00:27:24.780
the thing is,

00:27:24.780 --> 00:27:26.160
normally you would just

00:27:26.160 --> 00:27:26.960
reference count it.

00:27:26.960 --> 00:27:27.980
You just go none

00:27:27.980 --> 00:27:29.140
plus equals one,

00:27:29.140 --> 00:27:29.420
right?

00:27:29.420 --> 00:27:30.080
Or plus plus,

00:27:30.080 --> 00:27:31.300
minus minus.

00:27:31.300 --> 00:27:32.540
But here you're like,

00:27:32.540 --> 00:27:33.380
you have to have a test.

00:27:33.380 --> 00:27:33.560
Like,

00:27:33.560 --> 00:27:35.100
if it's an immortal object,

00:27:35.100 --> 00:27:35.580
do this,

00:27:35.580 --> 00:27:36.340
else do that.

00:27:36.340 --> 00:27:37.100
And it's just like

00:27:37.100 --> 00:27:38.640
that bit in the hot loop

00:27:38.640 --> 00:27:39.560
of the runtime

00:27:39.560 --> 00:27:41.080
is just apparently overhead,

00:27:41.080 --> 00:27:41.360
you know?

00:27:41.360 --> 00:27:41.640
Yeah,

00:27:41.640 --> 00:27:42.340
for everything.

00:27:42.340 --> 00:27:43.560
So everything you reference

00:27:43.560 --> 00:27:44.620
has to check to see

00:27:44.620 --> 00:27:45.180
whether or not

00:27:45.180 --> 00:27:46.180
it's an immortal object.

00:27:46.940 --> 00:27:47.880
before it does

00:27:47.880 --> 00:27:48.900
the reference counting.

00:27:48.900 --> 00:27:49.260
So.

00:27:49.260 --> 00:27:49.880
Yeah.

00:27:49.880 --> 00:27:52.400
Maybe it has a NOAA method on it.

00:27:52.400 --> 00:27:53.000
I don't know.

00:27:53.000 --> 00:27:54.540
I think it probably works

00:27:54.540 --> 00:27:55.720
straight on the field though.

00:27:55.720 --> 00:27:56.520
All right.

00:27:56.520 --> 00:27:58.760
Much like Highlander,

00:27:58.760 --> 00:27:59.800
Alvaro says,

00:27:59.800 --> 00:28:01.520
there can only be one none.

00:28:01.520 --> 00:28:04.180
All right.

00:28:04.180 --> 00:28:04.540
Well.

00:28:04.540 --> 00:28:05.160
Straight off.

00:28:05.160 --> 00:28:06.040
Yeah.

00:28:06.040 --> 00:28:06.440
Yeah.

00:28:06.440 --> 00:28:06.940
This is definitely

00:28:06.940 --> 00:28:07.820
an interesting trade off.

00:28:07.820 --> 00:28:08.460
All right.

00:28:08.460 --> 00:28:08.620
Well,

00:28:08.620 --> 00:28:10.320
I think that's more than enough

00:28:10.320 --> 00:28:11.800
for the language writer.

00:28:11.800 --> 00:28:12.520
But it was really cool

00:28:12.520 --> 00:28:14.320
that Alex wrote that up

00:28:14.320 --> 00:28:15.080
and NMR sent it in

00:28:15.080 --> 00:28:16.200
because that's a good insight

00:28:16.200 --> 00:28:17.080
to what's next.

00:28:17.080 --> 00:28:19.580
Cool.

00:28:19.580 --> 00:28:20.140
So,

00:28:20.140 --> 00:28:22.100
it's my turn,

00:28:22.100 --> 00:28:22.260
right?

00:28:22.260 --> 00:28:22.560
Given that.

00:28:22.560 --> 00:28:23.040
Sorry.

00:28:23.040 --> 00:28:23.260
So,

00:28:23.260 --> 00:28:23.600
yes,

00:28:23.600 --> 00:28:24.600
you're good.

00:28:24.600 --> 00:28:24.660
Go,

00:28:24.660 --> 00:28:24.780
Daniel.

00:28:24.780 --> 00:28:25.360
Cool.

00:28:25.360 --> 00:28:26.500
So,

00:28:26.500 --> 00:28:28.120
people in the software community

00:28:28.120 --> 00:28:29.700
are blessed with many options

00:28:29.700 --> 00:28:31.200
for doing source control.

00:28:31.200 --> 00:28:31.480
You know,

00:28:31.480 --> 00:28:32.760
you've got get SVN,

00:28:32.760 --> 00:28:33.500
Mercurial,

00:28:33.700 --> 00:28:35.200
other historical ones

00:28:35.200 --> 00:28:36.420
that maybe aren't as well used,

00:28:36.420 --> 00:28:38.360
but optical engineers,

00:28:38.360 --> 00:28:39.600
mechanical engineers,

00:28:39.600 --> 00:28:40.520
electrical engineers,

00:28:40.520 --> 00:28:41.580
everybody else doesn't have it

00:28:41.580 --> 00:28:42.900
nearly as good

00:28:42.900 --> 00:28:43.800
as the software community.

00:28:43.800 --> 00:28:44.400
So,

00:28:44.400 --> 00:28:45.600
anytime I see an option

00:28:45.600 --> 00:28:46.460
for that,

00:28:46.460 --> 00:28:47.420
it definitely sticks out

00:28:47.420 --> 00:28:47.940
in my mind.

00:28:47.940 --> 00:28:48.260
So,

00:28:48.260 --> 00:28:48.660
I don't remember

00:28:48.660 --> 00:28:49.600
how I found this,

00:28:49.600 --> 00:28:51.240
but came upon Allspice

00:28:51.240 --> 00:28:52.540
fairly recently,

00:28:52.540 --> 00:28:53.640
which is Git

00:28:53.640 --> 00:28:54.560
for people

00:28:54.560 --> 00:28:55.700
who are doing circuits.

00:28:55.700 --> 00:28:56.760
This is cool.

00:28:56.760 --> 00:28:57.160
And so,

00:28:57.160 --> 00:28:58.160
it has,

00:28:58.160 --> 00:28:59.980
it looks exactly like Git.

00:28:59.980 --> 00:29:01.100
You've got version control,

00:29:01.100 --> 00:29:01.920
you've got all the things

00:29:01.920 --> 00:29:02.880
you expect to have.

00:29:02.880 --> 00:29:04.180
It's compatible

00:29:04.180 --> 00:29:05.520
with some of the common

00:29:05.520 --> 00:29:07.460
electrical design programs,

00:29:07.920 --> 00:29:08.960
but it really just

00:29:08.960 --> 00:29:10.040
gives you the ability

00:29:10.040 --> 00:29:11.160
to do all these sorts of things

00:29:11.160 --> 00:29:12.360
that you take for granted

00:29:12.360 --> 00:29:13.220
if you're in a

00:29:13.220 --> 00:29:14.320
sophisticated workflow

00:29:14.320 --> 00:29:14.980
like software,

00:29:14.980 --> 00:29:16.700
but that you wish dearly

00:29:16.700 --> 00:29:18.240
you had for any other discipline.

00:29:18.240 --> 00:29:19.500
So,

00:29:19.500 --> 00:29:20.320
when you put something

00:29:20.320 --> 00:29:20.980
in a source control

00:29:20.980 --> 00:29:21.560
and you diff it,

00:29:21.560 --> 00:29:22.300
what do you get?

00:29:22.300 --> 00:29:24.760
They have...

00:29:24.760 --> 00:29:26.480
Are you diffing graphics?

00:29:26.480 --> 00:29:27.300
Are you diffing

00:29:27.300 --> 00:29:28.940
some sort of definition file

00:29:28.940 --> 00:29:30.820
that defines the circuit?

00:29:30.820 --> 00:29:31.900
So,

00:29:31.900 --> 00:29:32.400
they have,

00:29:32.400 --> 00:29:32.640
you know,

00:29:32.640 --> 00:29:33.560
one of the first things

00:29:33.560 --> 00:29:34.420
they have is a diff tool

00:29:34.420 --> 00:29:34.860
because they know

00:29:34.860 --> 00:29:35.540
that that's kind of

00:29:35.540 --> 00:29:36.180
one of the big questions,

00:29:36.180 --> 00:29:36.340
right?

00:29:36.340 --> 00:29:36.880
Is how do you compare

00:29:36.880 --> 00:29:37.280
the schematics?

00:29:37.280 --> 00:29:38.280
So,

00:29:38.280 --> 00:29:39.780
they have a way

00:29:39.780 --> 00:29:41.020
to do it visually

00:29:41.020 --> 00:29:41.580
and you can look

00:29:41.580 --> 00:29:42.240
at all the changes

00:29:42.240 --> 00:29:42.980
and it looks like,

00:29:42.980 --> 00:29:43.120
you know,

00:29:43.120 --> 00:29:43.680
they're highlighting

00:29:43.680 --> 00:29:44.740
each commit

00:29:44.740 --> 00:29:45.740
to whatever change

00:29:45.740 --> 00:29:46.760
was made on the schematic.

00:29:46.760 --> 00:29:47.040
Oh,

00:29:47.040 --> 00:29:47.440
that's cool.

00:29:47.440 --> 00:29:48.900
Yeah.

00:29:48.900 --> 00:29:49.620
Oh,

00:29:49.620 --> 00:29:50.440
that is very cool.

00:29:50.440 --> 00:29:50.680
Yeah.

00:29:50.680 --> 00:29:51.500
Yeah.

00:29:51.500 --> 00:29:51.700
So,

00:29:51.700 --> 00:29:52.680
one potential question

00:29:52.680 --> 00:29:52.980
would be,

00:29:52.980 --> 00:29:53.300
well,

00:29:53.300 --> 00:29:54.080
great.

00:29:54.080 --> 00:29:54.500
You know,

00:29:54.500 --> 00:29:55.160
it's nice that you can

00:29:55.160 --> 00:29:55.900
do that on the internet,

00:29:55.900 --> 00:29:57.400
but I work at a commercial

00:29:57.400 --> 00:29:58.240
company that doesn't

00:29:58.240 --> 00:29:58.760
want to do that.

00:29:58.760 --> 00:30:00.600
But they do have

00:30:00.600 --> 00:30:02.240
both,

00:30:02.240 --> 00:30:03.420
what they have a,

00:30:03.420 --> 00:30:04.860
they have self-hosting

00:30:04.860 --> 00:30:05.340
and they have a

00:30:05.340 --> 00:30:06.300
government cloud version

00:30:06.300 --> 00:30:07.660
if you're subject

00:30:07.660 --> 00:30:08.220
to things like

00:30:08.220 --> 00:30:08.620
ITAR,

00:30:08.620 --> 00:30:09.000
EAR.

00:30:09.000 --> 00:30:09.820
So,

00:30:09.820 --> 00:30:10.200
you can,

00:30:10.200 --> 00:30:11.920
in the same sense,

00:30:11.920 --> 00:30:12.720
the Git has an enterprise

00:30:12.720 --> 00:30:13.160
option,

00:30:13.160 --> 00:30:14.400
Allspice also has an enterprise

00:30:14.400 --> 00:30:14.680
option.

00:30:15.120 --> 00:30:15.960
like an on-prem,

00:30:15.960 --> 00:30:17.080
self-hosted version.

00:30:17.080 --> 00:30:17.880
Yeah.

00:30:17.880 --> 00:30:18.260
So,

00:30:18.260 --> 00:30:18.920
you don't have to give away

00:30:18.920 --> 00:30:19.420
your secrets.

00:30:19.420 --> 00:30:20.680
Yes.

00:30:20.680 --> 00:30:21.860
But I have no personal

00:30:21.860 --> 00:30:22.460
experience with it,

00:30:22.460 --> 00:30:24.720
but it's very promising

00:30:24.720 --> 00:30:26.280
and exciting to see

00:30:26.280 --> 00:30:27.220
somebody trying to come up

00:30:27.220 --> 00:30:28.700
with better ways

00:30:28.700 --> 00:30:30.300
to do engineering work

00:30:30.300 --> 00:30:31.060
besides just software.

00:30:31.060 --> 00:30:32.740
You can even configure

00:30:32.740 --> 00:30:33.640
it to integrate with

00:30:33.640 --> 00:30:34.440
Tortoise Git,

00:30:34.440 --> 00:30:36.320
like the Windows Explorer

00:30:36.320 --> 00:30:37.600
right-click type of Git.

00:30:37.600 --> 00:30:38.320
Yeah.

00:30:38.320 --> 00:30:39.640
So,

00:30:39.640 --> 00:30:40.420
exciting stuff.

00:30:40.600 --> 00:30:41.560
hopefully somebody

00:30:41.560 --> 00:30:42.500
helps out the Mechies

00:30:42.500 --> 00:30:43.620
and the optical engineers

00:30:43.620 --> 00:30:44.900
as well one day.

00:30:44.900 --> 00:30:46.200
Yeah,

00:30:46.200 --> 00:30:46.400
I mean,

00:30:46.400 --> 00:30:47.800
there's always large

00:30:47.800 --> 00:30:48.500
file support,

00:30:48.500 --> 00:30:49.880
but the diff is terrible,

00:30:49.880 --> 00:30:51.100
right?

00:30:51.100 --> 00:30:51.440
So,

00:30:51.440 --> 00:30:52.820
usually.

00:30:52.820 --> 00:30:53.780
Yeah,

00:30:53.780 --> 00:30:54.460
you're looking at

00:30:54.460 --> 00:30:55.520
binary files or stuff

00:30:55.520 --> 00:30:55.900
that's,

00:30:55.900 --> 00:30:56.600
yeah,

00:30:56.600 --> 00:30:58.300
humans are so good

00:30:58.300 --> 00:30:59.160
at processing images

00:30:59.160 --> 00:30:59.960
that if you have a visual

00:30:59.960 --> 00:31:01.000
comparison that that's

00:31:01.000 --> 00:31:01.880
orders of magnitude

00:31:01.880 --> 00:31:02.660
better than trying

00:31:02.660 --> 00:31:03.760
to look at lines

00:31:03.760 --> 00:31:05.180
of your,

00:31:05.180 --> 00:31:06.660
even if it is a plain text

00:31:06.660 --> 00:31:07.360
file that you can read

00:31:07.360 --> 00:31:07.560
through.

00:31:07.560 --> 00:31:08.880
Yeah,

00:31:08.880 --> 00:31:09.680
definitely.

00:31:09.680 --> 00:31:11.980
Yeah.

00:31:11.980 --> 00:31:14.240
Here's your XML

00:31:14.240 --> 00:31:15.740
with its namespaces.

00:31:15.740 --> 00:31:17.100
Good luck.

00:31:17.100 --> 00:31:18.080
What?

00:31:18.080 --> 00:31:19.060
What does this mean?

00:31:19.060 --> 00:31:19.300
Yeah.

00:31:19.300 --> 00:31:20.480
Well,

00:31:20.480 --> 00:31:20.680
cool.

00:31:20.680 --> 00:31:21.380
I like it.

00:31:21.380 --> 00:31:22.000
All right.

00:31:22.000 --> 00:31:22.780
I do too.

00:31:22.780 --> 00:31:23.920
Brian,

00:31:23.920 --> 00:31:24.920
you got any extras for us?

00:31:24.920 --> 00:31:25.300
I,

00:31:25.300 --> 00:31:25.880
yeah,

00:31:25.880 --> 00:31:26.360
actually.

00:31:26.360 --> 00:31:26.760
So,

00:31:26.760 --> 00:31:27.560
I've been busy.

00:31:27.560 --> 00:31:28.100
I've been,

00:31:28.100 --> 00:31:29.500
kind of like this back

00:31:29.500 --> 00:31:30.400
stream of test and

00:31:30.400 --> 00:31:30.900
code episodes.

00:31:30.900 --> 00:31:31.200
So,

00:31:31.200 --> 00:31:32.240
the most recent one

00:31:32.240 --> 00:31:33.500
is that I,

00:31:33.620 --> 00:31:34.680
put out was with

00:31:34.680 --> 00:31:35.460
Will McCoogan.

00:31:35.460 --> 00:31:37.020
We're talking about

00:31:37.020 --> 00:31:37.920
rich and textual

00:31:37.920 --> 00:31:38.920
and textualized.

00:31:38.920 --> 00:31:39.700
It's really fun,

00:31:39.700 --> 00:31:41.000
really fun one.

00:31:41.000 --> 00:31:41.500
But,

00:31:41.500 --> 00:31:41.980
actually,

00:31:41.980 --> 00:31:42.260
so,

00:31:42.260 --> 00:31:42.940
since we talked

00:31:42.940 --> 00:31:43.460
last Tuesday,

00:31:43.460 --> 00:31:44.420
I've got four extra

00:31:44.420 --> 00:31:45.100
episodes that have

00:31:45.100 --> 00:31:45.720
come out.

00:31:45.720 --> 00:31:45.980
So,

00:31:45.980 --> 00:31:47.620
we've got teaching,

00:31:47.620 --> 00:31:49.140
including testing

00:31:49.140 --> 00:31:50.680
with web front-end

00:31:50.680 --> 00:31:51.120
stuff,

00:31:51.120 --> 00:31:53.040
which was,

00:31:53.040 --> 00:31:53.760
it was kind of

00:31:53.760 --> 00:31:54.540
an interesting story

00:31:54.540 --> 00:31:54.780
about,

00:31:54.780 --> 00:31:55.060
like,

00:31:55.060 --> 00:31:55.520
basically,

00:31:55.520 --> 00:31:56.700
if you're college-level

00:31:56.700 --> 00:31:57.100
students,

00:31:57.100 --> 00:31:57.900
but they're new to

00:31:57.900 --> 00:31:58.560
coding,

00:31:58.560 --> 00:32:00.700
when do you include

00:32:00.700 --> 00:32:01.260
testing?

00:32:01.260 --> 00:32:01.740
And,

00:32:01.740 --> 00:32:02.540
and,

00:32:02.540 --> 00:32:03.480
the

00:32:03.480 --> 00:32:04.480
Carl says,

00:32:04.480 --> 00:32:04.940
right away,

00:32:04.940 --> 00:32:05.360
why not?

00:32:05.360 --> 00:32:06.880
So,

00:32:06.880 --> 00:32:07.240
also,

00:32:07.240 --> 00:32:08.180
developer and

00:32:08.180 --> 00:32:09.280
productivity episode,

00:32:09.280 --> 00:32:11.360
I think that's,

00:32:11.360 --> 00:32:11.560
oh,

00:32:11.560 --> 00:32:11.780
yeah,

00:32:11.780 --> 00:32:12.480
and a Python,

00:32:12.480 --> 00:32:12.940
Django,

00:32:12.940 --> 00:32:14.160
rich and

00:32:14.160 --> 00:32:15.060
testing article,

00:32:15.060 --> 00:32:15.420
so,

00:32:15.420 --> 00:32:16.640
or episode,

00:32:16.640 --> 00:32:17.040
so,

00:32:17.040 --> 00:32:18.120
lots of goodness

00:32:18.120 --> 00:32:18.900
over on testing

00:32:18.900 --> 00:32:19.180
code.

00:32:19.960 --> 00:32:21.520
they have a Django

00:32:21.520 --> 00:32:22.500
rich package,

00:32:22.500 --> 00:32:22.900
apparently.

00:32:22.900 --> 00:32:23.740
Yeah,

00:32:23.740 --> 00:32:24.180
that,

00:32:24.180 --> 00:32:24.720
that,

00:32:24.720 --> 00:32:26.120
that was just

00:32:26.120 --> 00:32:26.740
for other,

00:32:26.740 --> 00:32:27.080
like,

00:32:27.080 --> 00:32:27.720
the CLI,

00:32:27.720 --> 00:32:28.300
the Django,

00:32:28.300 --> 00:32:29.560
CLI stuff,

00:32:29.560 --> 00:32:30.740
including rich with

00:32:30.740 --> 00:32:31.020
that,

00:32:31.020 --> 00:32:31.880
which was great,

00:32:31.880 --> 00:32:32.720
but they've

00:32:32.720 --> 00:32:33.260
incorporated,

00:32:33.260 --> 00:32:35.140
incorporated the,

00:32:35.140 --> 00:32:36.100
that into the

00:32:36.100 --> 00:32:36.620
test runner,

00:32:36.620 --> 00:32:37.200
so the,

00:32:37.200 --> 00:32:38.660
the Django test

00:32:38.660 --> 00:32:39.400
runner can do

00:32:39.400 --> 00:32:40.660
rich tracebacks,

00:32:40.660 --> 00:32:42.240
which is pretty

00:32:42.240 --> 00:32:42.460
cool.

00:32:42.460 --> 00:32:42.660
Perfect.

00:32:42.660 --> 00:32:43.100
So,

00:32:43.100 --> 00:32:44.600
how do you know

00:32:44.600 --> 00:32:45.000
you got anything

00:32:45.000 --> 00:32:45.440
else you want to

00:32:45.440 --> 00:32:46.000
give a quick shout?

00:32:46.000 --> 00:32:47.000
Sorry.

00:32:47.000 --> 00:32:47.520
Sure.

00:32:47.520 --> 00:32:48.260
So,

00:32:48.260 --> 00:32:49.100
you know,

00:32:49.100 --> 00:32:50.060
Adafruit's a well-known

00:32:50.060 --> 00:32:51.780
company for doing

00:32:51.780 --> 00:32:53.680
maker electronics

00:32:53.680 --> 00:32:54.180
and,

00:32:54.180 --> 00:32:54.940
oh yeah,

00:32:54.940 --> 00:32:55.320
I don't have the

00:32:55.320 --> 00:32:55.660
links up,

00:32:55.660 --> 00:32:55.880
sorry.

00:32:55.880 --> 00:32:57.440
But,

00:32:57.440 --> 00:32:57.620
you know,

00:32:57.620 --> 00:32:58.380
Adafruit's well-known

00:32:58.380 --> 00:32:59.040
and they do a good

00:32:59.040 --> 00:33:00.160
job of focusing at

00:33:00.160 --> 00:33:01.420
the first five-minute

00:33:01.420 --> 00:33:02.280
experience of getting

00:33:02.280 --> 00:33:02.920
you up to speed with

00:33:02.920 --> 00:33:03.800
something on electronics.

00:33:03.800 --> 00:33:05.060
But there are other

00:33:05.060 --> 00:33:05.800
companies that do the

00:33:05.800 --> 00:33:06.320
same thing as well,

00:33:06.320 --> 00:33:06.740
so I was going to

00:33:06.740 --> 00:33:07.800
shout out SparkFun,

00:33:07.800 --> 00:33:09.220
Seed Studio,

00:33:09.220 --> 00:33:10.280
and then other

00:33:10.280 --> 00:33:11.580
companies like OpenMV,

00:33:11.580 --> 00:33:12.700
who has a focus on

00:33:12.700 --> 00:33:13.440
machine vision.

00:33:13.440 --> 00:33:14.860
And they're less

00:33:14.860 --> 00:33:16.240
geared more for the

00:33:16.240 --> 00:33:16.900
people at the entry

00:33:16.900 --> 00:33:17.140
level,

00:33:17.140 --> 00:33:17.880
so maybe if you're a

00:33:17.880 --> 00:33:18.460
little more comfortable

00:33:18.460 --> 00:33:19.540
with certain things

00:33:19.540 --> 00:33:20.360
or a little more

00:33:20.360 --> 00:33:20.700
comfortable,

00:33:20.700 --> 00:33:21.560
you know,

00:33:21.560 --> 00:33:22.200
exploring those

00:33:22.200 --> 00:33:22.760
based on your own,

00:33:22.760 --> 00:33:23.220
they could be good

00:33:23.220 --> 00:33:23.300
options.

00:33:23.300 --> 00:33:23.520
Right.

00:33:23.520 --> 00:33:24.660
More specialized,

00:33:24.660 --> 00:33:25.040
maybe,

00:33:25.040 --> 00:33:25.920
for people who are

00:33:25.920 --> 00:33:26.440
trying to actually

00:33:26.440 --> 00:33:26.660
build.

00:33:26.660 --> 00:33:27.420
Or if you go to,

00:33:27.420 --> 00:33:28.000
yeah,

00:33:28.000 --> 00:33:28.780
if you go to Adafruit

00:33:28.780 --> 00:33:29.280
and what you want

00:33:29.280 --> 00:33:29.860
is out of stock,

00:33:29.860 --> 00:33:30.580
you can check some

00:33:30.580 --> 00:33:31.300
other places too.

00:33:31.300 --> 00:33:31.740
Which,

00:33:31.740 --> 00:33:32.380
unfortunately,

00:33:32.380 --> 00:33:33.000
happens a lot

00:33:33.000 --> 00:33:33.500
these days.

00:33:33.500 --> 00:33:34.200
It's,

00:33:34.200 --> 00:33:34.700
yeah,

00:33:34.700 --> 00:33:35.660
those things come and

00:33:35.660 --> 00:33:35.800
go.

00:33:35.800 --> 00:33:36.700
A lot of demand.

00:33:36.700 --> 00:33:37.620
Awesome.

00:33:37.620 --> 00:33:37.980
All right,

00:33:37.980 --> 00:33:39.100
I do have some.

00:33:39.100 --> 00:33:39.660
Cool.

00:33:39.840 --> 00:33:40.000
Yeah,

00:33:40.000 --> 00:33:40.360
that's right.

00:33:40.360 --> 00:33:41.320
I do have some

00:33:41.320 --> 00:33:41.760
extra ones,

00:33:41.760 --> 00:33:43.140
but I kind of got a

00:33:43.140 --> 00:33:43.320
lot,

00:33:43.320 --> 00:33:43.520
so.

00:33:43.520 --> 00:33:44.520
All right,

00:33:44.520 --> 00:33:44.880
let's see.

00:33:44.880 --> 00:33:46.120
I'll go last.

00:33:46.120 --> 00:33:46.300
All right,

00:33:46.300 --> 00:33:47.080
the first one is,

00:33:47.080 --> 00:33:48.080
I always love a good

00:33:48.080 --> 00:33:49.160
documentary on tech

00:33:49.160 --> 00:33:49.480
stuff,

00:33:49.480 --> 00:33:50.480
and sometimes these

00:33:50.480 --> 00:33:51.160
are super cheesy,

00:33:51.160 --> 00:33:52.380
but there's a

00:33:52.380 --> 00:33:53.060
documentary called

00:33:53.060 --> 00:33:53.760
Power On,

00:33:53.760 --> 00:33:54.700
The Story of Xbox,

00:33:54.700 --> 00:33:56.340
which is a four-hour

00:33:56.340 --> 00:33:57.220
video,

00:33:57.220 --> 00:33:58.040
which you can watch

00:33:58.040 --> 00:33:58.420
on YouTube,

00:33:58.420 --> 00:33:59.240
which I'll link

00:33:59.240 --> 00:33:59.820
directly to the

00:33:59.820 --> 00:34:00.280
YouTube video.

00:34:00.280 --> 00:34:01.180
And it's really

00:34:01.180 --> 00:34:01.420
good.

00:34:01.420 --> 00:34:01.900
It's really

00:34:01.900 --> 00:34:02.300
interesting.

00:34:02.300 --> 00:34:03.920
Whether you love

00:34:03.920 --> 00:34:04.600
or hate the Xbox,

00:34:04.600 --> 00:34:05.760
I honestly don't

00:34:05.760 --> 00:34:06.940
care that much one

00:34:06.940 --> 00:34:07.380
way or the other,

00:34:07.480 --> 00:34:07.840
but it's just

00:34:07.840 --> 00:34:08.320
an interesting

00:34:08.320 --> 00:34:09.480
sort of view of

00:34:09.480 --> 00:34:10.300
like the last 20

00:34:10.300 --> 00:34:11.980
years of technology

00:34:11.980 --> 00:34:12.860
from the sort of

00:34:12.860 --> 00:34:13.500
the gaming side.

00:34:13.500 --> 00:34:14.360
So if people are

00:34:14.360 --> 00:34:14.880
looking for something

00:34:14.880 --> 00:34:16.040
to watch and they

00:34:16.040 --> 00:34:16.540
want to spend four

00:34:16.540 --> 00:34:17.360
hours doing it or

00:34:17.360 --> 00:34:17.860
spread it out,

00:34:17.860 --> 00:34:18.140
you know,

00:34:18.140 --> 00:34:19.200
they can check this

00:34:19.200 --> 00:34:19.380
out.

00:34:19.380 --> 00:34:20.520
All right,

00:34:20.520 --> 00:34:22.560
speaking of videos,

00:34:22.560 --> 00:34:23.460
not that one.

00:34:23.460 --> 00:34:24.220
This one,

00:34:24.220 --> 00:34:25.260
I took,

00:34:25.260 --> 00:34:26.360
so recently I

00:34:26.360 --> 00:34:26.960
released my Git

00:34:26.960 --> 00:34:28.600
course on sort of

00:34:28.600 --> 00:34:29.300
a pragmatic

00:34:29.300 --> 00:34:30.240
introduction to Git

00:34:30.240 --> 00:34:31.440
and I decided I

00:34:31.440 --> 00:34:32.820
wanted to share

00:34:32.820 --> 00:34:33.540
one part of it

00:34:33.540 --> 00:34:34.160
with a broader

00:34:34.160 --> 00:34:34.780
world.

00:34:34.880 --> 00:34:35.400
So I released a

00:34:35.400 --> 00:34:35.760
video called

00:34:35.760 --> 00:34:36.360
The Four Reasons

00:34:36.360 --> 00:34:37.360
to Branch with Git

00:34:37.360 --> 00:34:38.360
and I put that on

00:34:38.360 --> 00:34:38.920
YouTube and people

00:34:38.920 --> 00:34:39.940
can check that out.

00:34:39.940 --> 00:34:40.700
So it's like an

00:34:40.700 --> 00:34:41.700
hour long video I

00:34:41.700 --> 00:34:42.600
posted this week.

00:34:42.600 --> 00:34:44.660
And then this one

00:34:44.660 --> 00:34:45.440
comes to us from

00:34:45.440 --> 00:34:47.260
Jason Perkore saying,

00:34:47.260 --> 00:34:48.480
how cool is it to

00:34:48.480 --> 00:34:49.280
see Python showing

00:34:49.280 --> 00:34:50.020
up like right on

00:34:50.020 --> 00:34:50.900
the front page of

00:34:50.900 --> 00:34:51.480
various places?

00:34:51.480 --> 00:34:52.100
So there's this

00:34:52.100 --> 00:34:52.520
place called

00:34:52.520 --> 00:34:53.260
EasyPost,

00:34:53.260 --> 00:34:54.240
easypost.com,

00:34:54.240 --> 00:34:55.460
which allows you

00:34:55.460 --> 00:34:57.160
to like do labels

00:34:57.160 --> 00:34:57.980
and track your

00:34:57.980 --> 00:34:58.700
labels and stuff.

00:34:58.700 --> 00:34:59.220
But if you just

00:34:59.220 --> 00:35:00.160
scroll down just a

00:35:00.160 --> 00:35:00.580
little bit,

00:35:00.580 --> 00:35:01.120
it says,

00:35:01.120 --> 00:35:01.440
you know what,

00:35:01.500 --> 00:35:01.880
why don't you

00:35:01.880 --> 00:35:04.360
just either buy

00:35:04.360 --> 00:35:05.120
labels or you can

00:35:05.120 --> 00:35:05.760
just use this

00:35:05.760 --> 00:35:06.820
Python API right

00:35:06.820 --> 00:35:07.000
here.

00:35:07.000 --> 00:35:07.400
And it doesn't

00:35:07.400 --> 00:35:08.780
even sort of,

00:35:08.780 --> 00:35:10.280
if your developers

00:35:10.280 --> 00:35:11.460
click to reveal the

00:35:11.460 --> 00:35:11.840
secret,

00:35:11.840 --> 00:35:12.520
you know,

00:35:12.520 --> 00:35:12.960
it's just like,

00:35:12.960 --> 00:35:13.140
no,

00:35:13.140 --> 00:35:14.500
here's your Python

00:35:14.500 --> 00:35:15.420
code for our

00:35:15.420 --> 00:35:16.740
company.

00:35:16.740 --> 00:35:17.860
So just kind of a

00:35:17.860 --> 00:35:20.020
cool little thing

00:35:20.020 --> 00:35:20.360
for that.

00:35:20.360 --> 00:35:21.440
Let's see.

00:35:21.440 --> 00:35:23.380
Brian Skin

00:35:23.380 --> 00:35:24.680
pointed out that

00:35:24.680 --> 00:35:25.900
the Stack

00:35:25.900 --> 00:35:27.180
Overflow 2022

00:35:27.180 --> 00:35:28.680
developer survey is

00:35:28.680 --> 00:35:30.480
open for accepting

00:35:30.480 --> 00:35:31.460
comments.

00:35:31.460 --> 00:35:31.500
comments,

00:35:31.500 --> 00:35:32.420
which is cool.

00:35:32.420 --> 00:35:33.560
And I'm going to

00:35:33.560 --> 00:35:34.560
put this up here

00:35:34.560 --> 00:35:35.040
on the screen

00:35:35.040 --> 00:35:35.300
first.

00:35:35.300 --> 00:35:36.040
So Brian,

00:35:36.040 --> 00:35:36.480
do you see this?

00:35:36.480 --> 00:35:37.120
It has all of

00:35:37.120 --> 00:35:37.400
this stuff.

00:35:37.400 --> 00:35:37.840
I can't,

00:35:37.840 --> 00:35:38.440
if I click it,

00:35:38.440 --> 00:35:39.080
it'll just go away

00:35:39.080 --> 00:35:39.300
and like,

00:35:39.300 --> 00:35:40.080
this is an image,

00:35:40.080 --> 00:35:40.320
right?

00:35:40.320 --> 00:35:40.620
Right here.

00:35:40.620 --> 00:35:40.940
Yeah.

00:35:40.940 --> 00:35:41.340
Yeah.

00:35:41.340 --> 00:35:42.360
What if I wanted

00:35:42.360 --> 00:35:43.420
that as text?

00:35:43.420 --> 00:35:44.640
What if I wanted

00:35:44.640 --> 00:35:46.180
to somehow grab

00:35:46.180 --> 00:35:46.480
that?

00:35:46.480 --> 00:35:47.860
So I've got this

00:35:47.860 --> 00:35:48.120
app,

00:35:48.120 --> 00:35:48.440
which I'm going

00:35:48.440 --> 00:35:48.980
to tell you all

00:35:48.980 --> 00:35:49.900
about next,

00:35:49.900 --> 00:35:50.800
um,

00:35:50.800 --> 00:35:52.380
called Text

00:35:52.380 --> 00:35:52.800
Sniper.

00:35:52.800 --> 00:35:53.180
Watch this.

00:35:53.180 --> 00:35:53.820
So you can't

00:35:53.820 --> 00:35:54.460
quite see if I

00:35:54.460 --> 00:35:55.260
just drag over

00:35:55.260 --> 00:35:55.560
that,

00:35:55.560 --> 00:35:56.480
just like you

00:35:56.480 --> 00:35:56.880
would a

00:35:56.880 --> 00:35:57.440
screenshot.

00:35:57.440 --> 00:35:59.160
And then let's

00:35:59.160 --> 00:35:59.420
see,

00:35:59.420 --> 00:35:59.860
um,

00:35:59.860 --> 00:36:00.880
I need somewhere

00:36:00.880 --> 00:36:01.380
I can paste

00:36:01.380 --> 00:36:02.500
this anywhere

00:36:02.500 --> 00:36:03.160
there.

00:36:03.160 --> 00:36:04.020
So what I got

00:36:04.020 --> 00:36:04.400
out of that

00:36:04.400 --> 00:36:05.400
is check this

00:36:05.400 --> 00:36:05.620
out.

00:36:05.620 --> 00:36:06.740
Oh,

00:36:06.740 --> 00:36:06.920
wow.

00:36:06.920 --> 00:36:07.340
Isn't that cool?

00:36:07.340 --> 00:36:07.720
Yeah.

00:36:07.720 --> 00:36:08.920
I just control

00:36:08.920 --> 00:36:09.860
seed from like

00:36:09.860 --> 00:36:11.380
the picture

00:36:11.380 --> 00:36:12.380
on my,

00:36:12.380 --> 00:36:12.800
uh,

00:36:12.800 --> 00:36:14.220
on my screen.

00:36:14.220 --> 00:36:14.900
and it can do

00:36:14.900 --> 00:36:15.840
PDFs.

00:36:15.840 --> 00:36:16.460
It can do

00:36:16.460 --> 00:36:17.320
screenshots.

00:36:17.320 --> 00:36:17.760
Like,

00:36:17.760 --> 00:36:18.760
so for example,

00:36:18.760 --> 00:36:19.480
if you're watching

00:36:19.480 --> 00:36:20.780
a video presentation

00:36:20.780 --> 00:36:21.320
and you see a

00:36:21.320 --> 00:36:21.720
slide,

00:36:21.720 --> 00:36:22.140
you're like,

00:36:22.140 --> 00:36:22.280
oh,

00:36:22.280 --> 00:36:22.800
I want to capture

00:36:22.800 --> 00:36:23.220
those bullet

00:36:23.220 --> 00:36:23.880
points or that

00:36:23.880 --> 00:36:24.980
grab it.

00:36:24.980 --> 00:36:25.420
You got it.

00:36:25.420 --> 00:36:26.640
So that is

00:36:26.640 --> 00:36:27.560
called Text

00:36:27.560 --> 00:36:28.240
Sniper,

00:36:28.240 --> 00:36:29.640
which is super

00:36:29.640 --> 00:36:29.920
neat.

00:36:29.920 --> 00:36:30.500
All it does,

00:36:30.500 --> 00:36:31.160
it's just like

00:36:31.160 --> 00:36:32.960
the select

00:36:32.960 --> 00:36:33.520
region for

00:36:33.520 --> 00:36:34.120
screenshot.

00:36:34.120 --> 00:36:34.860
That's great.

00:36:34.860 --> 00:36:36.020
And then boom,

00:36:36.020 --> 00:36:36.720
what it doesn't

00:36:36.720 --> 00:36:37.340
matter what's under

00:36:37.340 --> 00:36:37.460
it.

00:36:37.460 --> 00:36:37.700
It's just,

00:36:37.700 --> 00:36:38.320
if it's texted,

00:36:38.320 --> 00:36:39.020
OCR is it,

00:36:39.020 --> 00:36:39.520
and then you got

00:36:39.520 --> 00:36:39.680
it.

00:36:39.680 --> 00:36:40.240
Yeah.

00:36:40.240 --> 00:36:42.080
So often like

00:36:42.080 --> 00:36:43.060
a small restaurant

00:36:43.060 --> 00:36:43.700
will put their

00:36:43.700 --> 00:36:44.420
address or their

00:36:44.420 --> 00:36:44.920
phone number

00:36:44.920 --> 00:36:48.080
like in an image.

00:36:48.080 --> 00:36:48.380
Like,

00:36:48.380 --> 00:36:48.760
come on,

00:36:48.760 --> 00:36:50.260
I gotta click

00:36:50.260 --> 00:36:50.940
on that sucker.

00:36:50.940 --> 00:36:51.940
I want to put,

00:36:51.940 --> 00:36:52.640
just drop this,

00:36:52.640 --> 00:36:53.780
paste it into maps

00:36:53.780 --> 00:36:54.180
or something.

00:36:54.180 --> 00:36:54.600
That's right.

00:36:54.600 --> 00:36:56.120
So I don't know.

00:36:56.120 --> 00:36:56.680
I think for doing

00:36:56.680 --> 00:36:57.060
research,

00:36:57.060 --> 00:36:57.700
if you're like

00:36:57.700 --> 00:36:58.360
watching videos,

00:36:58.360 --> 00:36:58.840
you want to get

00:36:58.840 --> 00:36:59.580
something out of

00:36:59.580 --> 00:37:00.120
something that's

00:37:00.120 --> 00:37:00.660
on the screen,

00:37:00.660 --> 00:37:01.620
like a slide or

00:37:01.620 --> 00:37:01.760
whatever.

00:37:01.760 --> 00:37:02.120
This is,

00:37:02.120 --> 00:37:02.540
this is pretty

00:37:02.540 --> 00:37:02.820
awesome.

00:37:02.820 --> 00:37:03.720
And it,

00:37:03.720 --> 00:37:04.780
it costs something

00:37:04.780 --> 00:37:05.980
like $11 once.

00:37:05.980 --> 00:37:06.800
So it's,

00:37:06.800 --> 00:37:06.980
you know,

00:37:06.980 --> 00:37:07.660
if it's useful to

00:37:07.660 --> 00:37:07.780
you,

00:37:07.780 --> 00:37:08.620
it'll be worth it.

00:37:08.620 --> 00:37:08.980
If not,

00:37:08.980 --> 00:37:09.200
then,

00:37:09.200 --> 00:37:09.700
you know,

00:37:09.700 --> 00:37:09.940
it's not,

00:37:09.940 --> 00:37:11.000
it's gotta be worth

00:37:11.000 --> 00:37:12.420
$11 or zero to

00:37:12.420 --> 00:37:12.500
you.

00:37:12.500 --> 00:37:14.900
That was like a

00:37:14.900 --> 00:37:15.600
good OCR app.

00:37:15.600 --> 00:37:16.260
Yeah.

00:37:16.260 --> 00:37:16.500
Yeah.

00:37:16.500 --> 00:37:17.680
And it's just the,

00:37:17.680 --> 00:37:18.780
the ease of use,

00:37:18.780 --> 00:37:18.960
right?

00:37:18.960 --> 00:37:19.900
Not take a screenshot

00:37:19.900 --> 00:37:20.720
and go find your

00:37:20.720 --> 00:37:20.980
app.

00:37:20.980 --> 00:37:22.160
It's just like slap,

00:37:22.160 --> 00:37:22.720
slap drop.

00:37:22.720 --> 00:37:24.480
Okay.

00:37:24.560 --> 00:37:26.080
so last one of my

00:37:26.080 --> 00:37:26.600
extras,

00:37:26.600 --> 00:37:28.480
Sam Lowe and

00:37:28.480 --> 00:37:29.960
Philip Guo sent

00:37:29.960 --> 00:37:30.380
over,

00:37:30.380 --> 00:37:31.720
allow Sam Lowe,

00:37:31.720 --> 00:37:31.960
sorry.

00:37:31.960 --> 00:37:33.040
And then sent

00:37:33.040 --> 00:37:33.900
over that.

00:37:33.900 --> 00:37:35.460
I had them on to

00:37:35.460 --> 00:37:36.460
talk about pandas

00:37:36.460 --> 00:37:37.200
tutor and they were

00:37:37.200 --> 00:37:37.780
talking about the

00:37:37.780 --> 00:37:38.720
challenges of running

00:37:38.720 --> 00:37:40.520
pandas tutor on the

00:37:40.520 --> 00:37:41.420
server side and

00:37:41.420 --> 00:37:42.760
letting people run

00:37:42.760 --> 00:37:43.160
code,

00:37:43.160 --> 00:37:43.680
but it's pretty

00:37:43.680 --> 00:37:44.560
limited because you

00:37:44.560 --> 00:37:45.040
don't want them to

00:37:45.040 --> 00:37:46.160
hack the various

00:37:46.160 --> 00:37:46.540
things.

00:37:46.540 --> 00:37:47.040
You don't want to

00:37:47.040 --> 00:37:47.440
keep it pretty

00:37:47.440 --> 00:37:47.700
limited.

00:37:47.700 --> 00:37:48.440
So they don't take

00:37:48.440 --> 00:37:49.260
advantage of like

00:37:49.260 --> 00:37:49.720
your compute

00:37:49.720 --> 00:37:50.140
resources.

00:37:50.140 --> 00:37:52.740
So now they just

00:37:52.740 --> 00:37:53.660
posted a message

00:37:53.660 --> 00:37:54.680
saying pandas tutor.

00:37:54.680 --> 00:37:55.160
If you go over

00:37:55.160 --> 00:37:55.420
here and say,

00:37:55.420 --> 00:37:56.020
visualize your

00:37:56.020 --> 00:37:56.440
code,

00:37:56.440 --> 00:37:58.700
it'll go and do

00:37:58.700 --> 00:37:59.100
all these cool

00:37:59.100 --> 00:37:59.700
visualizations.

00:37:59.700 --> 00:38:00.400
I know we've

00:38:00.400 --> 00:38:01.000
spoken about this

00:38:01.000 --> 00:38:01.420
before,

00:38:01.420 --> 00:38:02.620
but notice what it

00:38:02.620 --> 00:38:03.240
says here.

00:38:03.240 --> 00:38:04.520
I can scroll a

00:38:04.520 --> 00:38:04.660
little.

00:38:04.660 --> 00:38:06.560
It says initializing

00:38:06.560 --> 00:38:08.700
high iodide on

00:38:08.700 --> 00:38:09.480
WASM download

00:38:09.480 --> 00:38:11.340
pandas running

00:38:11.340 --> 00:38:11.700
boom.

00:38:11.700 --> 00:38:12.340
And so all of

00:38:12.340 --> 00:38:12.960
this is running

00:38:12.960 --> 00:38:14.660
in client side

00:38:14.660 --> 00:38:15.280
Python,

00:38:15.280 --> 00:38:16.220
which is just,

00:38:16.220 --> 00:38:17.440
yeah.

00:38:17.440 --> 00:38:18.420
So we talked

00:38:18.420 --> 00:38:18.920
about that being

00:38:18.920 --> 00:38:19.660
one of the topics

00:38:19.660 --> 00:38:20.580
of the language

00:38:20.580 --> 00:38:20.900
summit,

00:38:20.900 --> 00:38:21.700
the WASM

00:38:21.700 --> 00:38:22.180
support.

00:38:22.180 --> 00:38:23.440
And here you

00:38:23.440 --> 00:38:23.760
have it in

00:38:23.760 --> 00:38:23.940
action.

00:38:23.940 --> 00:38:25.000
So I said on

00:38:25.000 --> 00:38:25.220
the show,

00:38:25.220 --> 00:38:25.380
like,

00:38:25.380 --> 00:38:25.500
hey,

00:38:25.500 --> 00:38:25.840
if you guys

00:38:25.840 --> 00:38:26.400
consider this,

00:38:26.400 --> 00:38:26.580
like,

00:38:26.580 --> 00:38:26.880
yeah,

00:38:26.880 --> 00:38:27.480
maybe we

00:38:27.480 --> 00:38:27.740
should.

00:38:27.740 --> 00:38:28.160
And then like,

00:38:28.160 --> 00:38:28.740
this turns out

00:38:28.740 --> 00:38:29.180
to be a great

00:38:29.180 --> 00:38:29.520
idea.

00:38:29.520 --> 00:38:32.300
That's pretty

00:38:32.300 --> 00:38:32.500
cool.

00:38:32.500 --> 00:38:32.940
Like the messages

00:38:32.940 --> 00:38:33.960
run code on the

00:38:33.960 --> 00:38:34.200
server.

00:38:34.200 --> 00:38:34.860
That's slower.

00:38:34.860 --> 00:38:35.880
We just recommend

00:38:35.880 --> 00:38:36.500
you run it here.

00:38:36.500 --> 00:38:38.300
Nice.

00:38:38.300 --> 00:38:39.000
All right.

00:38:39.000 --> 00:38:39.920
That's pretty neat.

00:38:39.920 --> 00:38:40.500
Well done,

00:38:40.500 --> 00:38:41.080
you guys.

00:38:41.080 --> 00:38:41.940
And that's it for

00:38:41.940 --> 00:38:43.000
my extras as well.

00:38:43.000 --> 00:38:44.520
That's a lot more

00:38:44.520 --> 00:38:45.220
real than I thought.

00:38:45.220 --> 00:38:45.860
I guess I thought

00:38:45.860 --> 00:38:46.680
pyro died and Web

00:38:46.680 --> 00:38:47.180
assembly were a little

00:38:47.180 --> 00:38:47.800
bit further off,

00:38:47.800 --> 00:38:48.440
but that's like,

00:38:48.440 --> 00:38:48.900
hey,

00:38:48.900 --> 00:38:49.540
there's an application

00:38:49.540 --> 00:38:50.260
right now doing

00:38:50.260 --> 00:38:50.800
that today.

00:38:50.800 --> 00:38:51.500
Yeah.

00:38:51.500 --> 00:38:52.080
Yeah.

00:38:52.080 --> 00:38:53.520
The Brian,

00:38:53.520 --> 00:38:54.620
the anti-gravity

00:38:54.620 --> 00:38:55.900
high script thing

00:38:55.900 --> 00:38:56.620
you showed last

00:38:56.620 --> 00:38:57.360
week was so cool.

00:38:57.360 --> 00:38:58.220
Yeah.

00:38:58.220 --> 00:38:59.540
I didn't even know

00:38:59.540 --> 00:39:00.360
it was doing that

00:39:00.360 --> 00:39:01.380
before we showed it,

00:39:01.380 --> 00:39:02.240
but it's pretty neat.

00:39:02.240 --> 00:39:02.560
Yeah.

00:39:02.560 --> 00:39:02.860
Yeah.

00:39:02.860 --> 00:39:02.920
Yeah.

00:39:02.980 --> 00:39:04.120
a lot of the

00:39:04.120 --> 00:39:04.760
interactions are

00:39:04.760 --> 00:39:05.140
super.

00:39:05.140 --> 00:39:05.940
They're getting

00:39:05.940 --> 00:39:06.540
starting to be

00:39:06.540 --> 00:39:07.060
real hour.

00:39:07.060 --> 00:39:07.500
We're getting

00:39:07.500 --> 00:39:07.640
there,

00:39:07.640 --> 00:39:07.880
Daniel.

00:39:07.880 --> 00:39:08.200
We're getting

00:39:08.200 --> 00:39:08.460
there.

00:39:08.460 --> 00:39:10.440
All right.

00:39:10.440 --> 00:39:11.900
How about a joke

00:39:11.900 --> 00:39:12.500
to wrap it up?

00:39:12.500 --> 00:39:13.140
Definitely.

00:39:13.140 --> 00:39:15.520
So we've all

00:39:15.520 --> 00:39:15.960
been in,

00:39:15.960 --> 00:39:16.660
well,

00:39:16.660 --> 00:39:17.080
maybe we haven't

00:39:17.080 --> 00:39:17.420
all been,

00:39:17.420 --> 00:39:18.720
we can all

00:39:18.720 --> 00:39:19.340
imagine being

00:39:19.340 --> 00:39:19.780
in awkward

00:39:19.780 --> 00:39:20.460
situations,

00:39:20.460 --> 00:39:21.200
maybe on a

00:39:21.200 --> 00:39:22.260
weird date.

00:39:22.260 --> 00:39:22.980
So I don't

00:39:22.980 --> 00:39:23.720
go on dates

00:39:23.720 --> 00:39:24.620
really being

00:39:24.620 --> 00:39:25.100
married for a

00:39:25.100 --> 00:39:25.420
long time,

00:39:25.420 --> 00:39:26.260
but imagine,

00:39:26.260 --> 00:39:27.520
imagine that you

00:39:27.520 --> 00:39:27.900
had,

00:39:27.900 --> 00:39:29.380
here's a

00:39:29.380 --> 00:39:31.220
graphic of a

00:39:31.220 --> 00:39:32.200
woman who's

00:39:32.200 --> 00:39:32.960
on a date,

00:39:32.960 --> 00:39:33.960
like maybe

00:39:33.960 --> 00:39:35.260
just woke up

00:39:35.260 --> 00:39:35.700
in the morning

00:39:35.700 --> 00:39:36.460
after the first

00:39:36.460 --> 00:39:36.960
day,

00:39:36.960 --> 00:39:37.520
first time

00:39:37.520 --> 00:39:38.420
together sort

00:39:38.420 --> 00:39:38.800
of thing.

00:39:38.800 --> 00:39:40.580
And the guy

00:39:40.580 --> 00:39:40.980
who's like

00:39:40.980 --> 00:39:41.740
sculpted,

00:39:41.740 --> 00:39:41.900
right?

00:39:41.900 --> 00:39:42.260
He's like

00:39:42.260 --> 00:39:43.320
clearly like a

00:39:43.320 --> 00:39:44.340
super fake,

00:39:44.340 --> 00:39:44.980
probably good

00:39:44.980 --> 00:39:45.520
looking guy,

00:39:45.520 --> 00:39:45.860
whatever.

00:39:45.860 --> 00:39:47.300
But he's in

00:39:47.300 --> 00:39:47.920
the shower and

00:39:47.920 --> 00:39:48.360
she's like

00:39:48.360 --> 00:39:48.860
flipping through

00:39:48.860 --> 00:39:49.280
his phone and

00:39:49.280 --> 00:39:49.540
says,

00:39:49.540 --> 00:39:50.340
when she looks

00:39:50.340 --> 00:39:50.640
through your

00:39:50.640 --> 00:39:51.040
phone,

00:39:51.040 --> 00:39:51.880
but all she

00:39:51.880 --> 00:39:52.860
can find is

00:39:52.860 --> 00:39:53.740
fork a child

00:39:53.740 --> 00:39:54.220
and kill it.

00:39:54.220 --> 00:39:54.780
Google search

00:39:54.780 --> 00:39:55.900
for a kill

00:39:55.900 --> 00:39:56.720
child and fork

00:39:56.720 --> 00:39:57.120
parent,

00:39:57.120 --> 00:39:58.360
kill parent

00:39:58.360 --> 00:39:58.900
with fork,

00:39:58.900 --> 00:39:59.880
kill parent

00:39:59.880 --> 00:40:00.480
without killing

00:40:00.480 --> 00:40:00.960
child.

00:40:00.960 --> 00:40:04.300
kill child

00:40:04.300 --> 00:40:04.900
without killing

00:40:04.900 --> 00:40:04.900
grandchild.

00:40:04.900 --> 00:40:05.040
And she's got

00:40:05.040 --> 00:40:05.800
this face of

00:40:05.800 --> 00:40:06.040
like,

00:40:06.040 --> 00:40:06.300
oh,

00:40:06.300 --> 00:40:07.080
what's that?

00:40:07.080 --> 00:40:07.280
Sorry.

00:40:07.280 --> 00:40:08.720
Those are

00:40:08.720 --> 00:40:09.060
great.

00:40:09.060 --> 00:40:09.880
Yeah,

00:40:09.880 --> 00:40:10.320
she's got

00:40:10.320 --> 00:40:11.000
this look like

00:40:11.000 --> 00:40:11.500
I thought it

00:40:11.500 --> 00:40:12.180
was going so

00:40:12.180 --> 00:40:13.060
well and he's

00:40:13.060 --> 00:40:13.600
a murderer.

00:40:13.600 --> 00:40:14.340
I can't believe

00:40:14.340 --> 00:40:14.680
it.

00:40:14.680 --> 00:40:16.080
No,

00:40:16.080 --> 00:40:16.460
he's just

00:40:16.460 --> 00:40:16.800
trying to

00:40:16.800 --> 00:40:17.160
figure out

00:40:17.160 --> 00:40:17.520
Linux.

00:40:17.520 --> 00:40:18.080
Don't,

00:40:18.080 --> 00:40:18.500
don't hold

00:40:18.500 --> 00:40:18.780
it again.

00:40:18.780 --> 00:40:19.500
Kill child

00:40:19.500 --> 00:40:20.120
without killing

00:40:20.120 --> 00:40:20.820
grandchild.

00:40:24.020 --> 00:40:24.600
It's so

00:40:24.600 --> 00:40:24.980
bad.

00:40:24.980 --> 00:40:26.680
Can you

00:40:26.680 --> 00:40:27.040
do that?

00:40:27.040 --> 00:40:29.720
Well,

00:40:29.720 --> 00:40:30.040
I don't

00:40:30.040 --> 00:40:30.200
know.

00:40:30.200 --> 00:40:30.520
I haven't

00:40:30.520 --> 00:40:30.940
searched it,

00:40:30.940 --> 00:40:31.940
but I

00:40:31.940 --> 00:40:32.160
don't want

00:40:32.160 --> 00:40:32.400
to have to

00:40:32.400 --> 00:40:32.980
explain that

00:40:32.980 --> 00:40:33.460
search if I

00:40:33.460 --> 00:40:33.640
did.

00:40:33.640 --> 00:40:34.560
Search it

00:40:34.560 --> 00:40:35.140
in stealth.

00:40:35.140 --> 00:40:37.060
That's what

00:40:37.060 --> 00:40:37.620
incognito

00:40:37.620 --> 00:40:37.900
most.

00:40:37.900 --> 00:40:40.620
This is

00:40:40.620 --> 00:40:41.420
totally benign,

00:40:41.420 --> 00:40:41.720
but if

00:40:41.720 --> 00:40:42.300
somebody sees

00:40:42.300 --> 00:40:42.660
it out of

00:40:42.660 --> 00:40:43.080
context,

00:40:43.080 --> 00:40:43.700
maybe they

00:40:43.700 --> 00:40:43.980
won't feel

00:40:43.980 --> 00:40:44.240
that way

00:40:44.240 --> 00:40:44.600
about it.

00:40:44.600 --> 00:40:46.840
There's what

00:40:46.840 --> 00:40:47.220
will get you

00:40:47.220 --> 00:40:47.740
on the FBI

00:40:47.740 --> 00:40:48.360
list and

00:40:48.360 --> 00:40:49.460
then software

00:40:49.460 --> 00:40:50.020
engineers.

00:40:50.020 --> 00:40:51.000
There's like

00:40:51.000 --> 00:40:52.280
Vendrygram of

00:40:52.280 --> 00:40:52.500
that.

00:40:53.080 --> 00:40:53.440
there's

00:40:53.440 --> 00:40:53.760
probably a

00:40:53.760 --> 00:40:53.960
small

00:40:53.960 --> 00:40:54.380
intersection

00:40:54.380 --> 00:40:54.700
there.

00:40:54.700 --> 00:40:56.640
It's probably

00:40:56.640 --> 00:40:57.160
pretty big

00:40:57.160 --> 00:40:57.520
actually.

00:40:57.520 --> 00:40:58.720
Yeah,

00:40:58.720 --> 00:40:59.020
it's probably

00:40:59.020 --> 00:40:59.500
pretty big.

00:40:59.500 --> 00:41:00.880
Anyway,

00:41:00.880 --> 00:41:01.540
well,

00:41:01.540 --> 00:41:02.100
thanks everybody

00:41:02.100 --> 00:41:03.200
for a fun

00:41:03.200 --> 00:41:03.780
show again.

00:41:03.780 --> 00:41:05.020
Yeah,

00:41:05.020 --> 00:41:05.920
you bet.

00:41:05.920 --> 00:41:06.220
Thanks,

00:41:06.220 --> 00:41:06.580
Brian and

00:41:06.580 --> 00:41:06.820
Daniel.

00:41:06.820 --> 00:41:07.200
It's good

00:41:07.200 --> 00:41:07.460
to have you

00:41:07.460 --> 00:41:07.700
here.

00:41:07.700 --> 00:41:08.860
Thanks.

00:41:08.860 --> 00:41:09.460
Thanks for

00:41:09.460 --> 00:41:09.600
coming.

00:41:09.600 --> 00:41:10.480
Bye.

