WEBVTT
00:00:00.001 -->
00:00:05.920Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
00:00:05.920 -->
00:00:12.580This is episode 398, recorded August 26th, 2024. I'm Michael Kennedy.
00:00:12.580 -->
00:00:13.700And I'm Brian Okken.
00:00:13.700 -->
00:00:17.080This episode is brought to you by us. Check out our things.
00:00:17.080 -->
00:00:25.300Brian's assorted pytest courses, his book, the almost 300 hours of courses over at talkpython.fm.
00:00:25.300 -->
00:00:29.920So many things that you can do to support us and get awesome stuff back in return.
00:00:30.340 -->
00:00:35.580If you want to connect with us on the socials, check us out over on Mastodon.
00:00:35.580 -->
00:00:39.360And we're also on X under very, very similar usernames.
00:00:39.360 -->
00:00:42.040You can find us in all of the places.
00:00:42.040 -->
00:00:48.020And of course, comment on the show on the YouTube stream, which is linked from the episode page all the time.
00:00:48.020 -->
00:00:51.480And with that, Brian, how shall we start today? What do you got for us?
00:00:51.480 -->
00:00:57.520Well, I've got some open source myths, but I wanted to touch on the day early bit, I think.
00:00:58.140 -->
00:01:02.680Oh, yes, that's right. Because we are recording on Monday. This is not Tuesday.
00:01:02.680 -->
00:01:08.500In fact, I looked at my watch, which has a little calendar, what's coming up next on Sunday.
00:01:08.500 -->
00:01:12.320And it said Python Bytes. I'm like, huh, that's weird. I feel like it's, I thought it was Sunday.
00:01:12.320 -->
00:01:13.980It even caught me off guard.
00:01:13.980 -->
00:01:15.280But no, here we are.
00:01:15.720 -->
00:01:20.060Yeah, my work schedule changed a little bit. And I got to go into work on Tuesdays and Wednesdays now.
00:01:20.400 -->
00:01:29.960So we've moved the recording to Monday. That's just, that's the long short of it. Luckily, Michael has a fairly flexible schedule.
00:01:29.960 -->
00:01:30.740Indeed.
00:01:30.740 -->
00:01:33.020And that's the plan going forward, right?
00:01:33.020 -->
00:01:42.100So until your meetings change again, for whatever reason, or you got to do trips, we're going to plan on doing it every Monday, 10 a.m. Pacific time.
00:01:42.440 -->
00:01:48.160Yeah. And we'll get to that a little later. We've got a little cheat sheet for people to be able to look up when it's going to be recorded.
00:01:48.160 -->
00:01:50.420Oh, indeed. Very cool.
00:01:50.420 -->
00:01:58.080Okay. So our first item, though, I just wanted to talk about how awesome open source is. I'm working on open source software.
00:01:58.080 -->
00:02:08.180And I was, there's somebody named Josh Bressers on Mastodon, posted a list of open source myths.
00:02:08.180 -->
00:02:11.900So myths about working in open source or using open source.
00:02:11.900 -->
00:02:19.120And he started the list. And then on Mastodon, like, let's see, most projects have more than one maintainer.
00:02:19.120 -->
00:02:23.100Yeah. Usually it's just one, which is, yeah, surprising to me also.
00:02:23.100 -->
00:02:31.520So let's see. I like these two together. Open source is more secure than closed source and open source is less secure than closed source.
00:02:31.520 -->
00:02:35.940So both, both at the same time, they can exist.
00:02:35.940 -->
00:02:41.500And so, and then he said, got any others and a whole bunch of people sent him back myths.
00:02:41.500 -->
00:02:47.940So he has a, let's see, a list on, he put it up on Google Docs.
00:02:47.940 -->
00:02:52.360And I made a copy because I wanted to highlight a few of them because I thought it was, they were interesting.
00:02:52.360 -->
00:02:58.120So a few I want to call out. Most projects have funding driving the development.
00:02:58.120 -->
00:03:01.360Yeah, no. Does anybody think that? Anyway.
00:03:02.260 -->
00:03:06.020If the source code is available, it's open source. No, it's not.
00:03:06.020 -->
00:03:08.480And that's something that surprised me too.
00:03:08.480 -->
00:03:12.160Just because it's on GitHub even doesn't mean that it's open source.
00:03:12.160 -->
00:03:17.040You can publish your proprietary code online if you feel like it.
00:03:17.040 -->
00:03:22.500People are probably going to copy it anyway if you publish it, but it doesn't have to be open source.
00:03:22.500 -->
00:03:23.300Yeah.
00:03:23.300 -->
00:03:25.740It has to do with the license, right?
00:03:25.740 -->
00:03:26.120Yep.
00:03:26.120 -->
00:03:36.680Yeah. So most of the time I have, I've been one of those people that just defaults to MIT because, because I read it once and it went, oh yeah, it sounds good.
00:03:36.680 -->
00:03:44.160Basically MIT is what it's kind of like open source, but it's open source, but you can also, you can also use it in commercial software if you want to.
00:03:44.660 -->
00:03:47.640And some of them, some of the licenses don't allow that.
00:03:47.640 -->
00:03:52.620So my favorites coming up, all open source developers live in Nebraska.
00:03:52.620 -->
00:03:54.780I thought it was just one.
00:03:54.780 -->
00:03:58.700I thought there literally was one open source person in Nebraska, according to XKCD.
00:03:58.700 -->
00:04:00.000Nebraska.
00:04:00.000 -->
00:04:00.900Oh yeah.
00:04:00.900 -->
00:04:02.640Is that the XKCD thing?
00:04:02.640 -->
00:04:03.220Yeah.
00:04:03.220 -->
00:04:09.200It's like we have this huge castle of everything supported by one person, single open source developer who lives in Nebraska.
00:04:09.200 -->
00:04:10.060I believe that's right.
00:04:10.060 -->
00:04:17.420So, so Marco says, hey, I don't know if he's upset about not being in Nebraska or being the one developer in Nebraska.
00:04:17.420 -->
00:04:17.960Not sure.
00:04:17.960 -->
00:04:23.700So I thought it was Kansas because aren't all the Django people in Kansas?
00:04:23.700 -->
00:04:25.500Yeah, Lawrence.
00:04:25.500 -->
00:04:29.840And then let's see, all open source is run by hippies?
00:04:29.840 -->
00:04:30.380Sure.
00:04:30.380 -->
00:04:34.380Wait, but it's in Nebraska and hippies aren't in Nebraska.
00:04:34.380 -->
00:04:35.880So, or maybe they are.
00:04:35.880 -->
00:04:36.940Are there hippies in Nebraska?
00:04:36.940 -->
00:04:37.640I don't know.
00:04:37.640 -->
00:04:38.180Never been there.
00:04:38.180 -->
00:04:40.280Open source means it costs $0.
00:04:40.280 -->
00:04:46.800Well, you can use it without paying, but it doesn't cost zero to make it.
00:04:46.800 -->
00:04:49.920Everything is being rewritten in Rust.
00:04:49.920 -->
00:04:54.720It does seem like that lately, but no, there's a lot of stuff that's not good.
00:04:54.720 -->
00:04:55.900Well, we'll talk more about that one later.
00:04:55.900 -->
00:05:00.400Yeah, I guess that's a decent segue.
00:05:00.920 -->
00:05:06.600But no, this is a cool, a fun list of some of them are useful items.
00:05:06.600 -->
00:05:08.360Open source makes you rich.
00:05:08.360 -->
00:05:09.260No, it doesn't.
00:05:09.260 -->
00:05:11.300Well, maybe it makes some people rich.
00:05:11.300 -->
00:05:12.300It hasn't worked for me yet.
00:05:12.300 -->
00:05:13.920Yeah.
00:05:13.920 -->
00:05:15.320Anyway, fun list.
00:05:15.320 -->
00:05:16.880So thanks, Josh, for putting this together.
00:05:16.880 -->
00:05:18.440Yeah, that's a really excellent one, actually.
00:05:18.440 -->
00:05:19.180I love it.
00:05:19.180 -->
00:05:19.560Okay.
00:05:20.040 -->
00:05:21.380On to my first item.
00:05:21.380 -->
00:05:26.760Got a bunch of things that I'm going to cover, and I know you do as well, Brian, this week.
00:05:26.760 -->
00:05:29.220So some of them will go fast, some we'll dive into.
00:05:29.220 -->
00:05:30.520Mostly we'll go fast through them.
00:05:30.720 -->
00:05:41.020So this one is a feature capability framework matrix for people who do functions as a service, or aka serverless.
00:05:41.020 -->
00:05:41.680Right?
00:05:41.680 -->
00:05:51.640I am, I'll go on the record and say I am somewhat skeptical about the usefulness of serverless, but I know for some people, for some of their setups, they absolutely love it.
00:05:51.640 -->
00:05:55.780And certainly for you, there are tons of interesting use cases around serverless.
00:05:55.780 -->
00:05:56.380All right.
00:05:56.380 -->
00:06:01.480Certainly the most common one is Lambda, AWS Lambda, I would say.
00:06:01.480 -->
00:06:06.660And we also have Azure Functions, which is the serverless thing that lives in Azure.
00:06:06.660 -->
00:06:09.940We previously talked about Cloudflare workers.
00:06:09.940 -->
00:06:16.540And what's cool about the Cloudflare workers is that they run on WASM or WebAssembly.
00:06:16.540 -->
00:06:19.740Now the WASM ones start to get really interesting to me.
00:06:19.740 -->
00:06:26.060So if I've got a Docker container in AWS and it spins up every time there's a call, one of my functions.
00:06:26.060 -->
00:06:26.820Okay.
00:06:26.820 -->
00:06:27.560Interesting.
00:06:27.560 -->
00:06:32.940Maybe I should just have a Docker container running instead of like a bunch of start, stop, start, stop, start, stop.
00:06:32.940 -->
00:06:36.940And sort of a funky pricing you're not really sure about.
00:06:36.940 -->
00:06:38.480There's a pricing chart you can get into.
00:06:38.700 -->
00:06:43.780But the reason I really thought this was interesting is there's a couple of them that run on the client.
00:06:43.780 -->
00:06:50.720As far as I know, there's not necessarily even a per usage fee there because it's running not on their infrastructure.
00:06:50.720 -->
00:06:52.260It's just shipping some bytes.
00:06:52.260 -->
00:06:54.320So one of them, we talked about Cloudflare.
00:06:54.320 -->
00:06:56.340Another one I want to talk about is from Permian.
00:06:56.340 -->
00:06:58.560This is Python 3.11 Plus.
00:06:58.560 -->
00:07:01.640And if you scroll over, hiding in the side, there's a link.
00:07:01.640 -->
00:07:03.200There's this thing called Spin.
00:07:03.200 -->
00:07:04.440I don't know if you've heard of it, Brian.
00:07:04.440 -->
00:07:05.240I've never heard of it.
00:07:05.240 -->
00:07:05.640No.
00:07:05.640 -->
00:07:07.240Spin Python SDK.
00:07:07.540 -->
00:07:15.120So it says, we'll look at how to build a serverless app using Python and deploy it to Fermion Cloud in a few simple steps.
00:07:15.120 -->
00:07:17.820And it talks about how all this stuff works.
00:07:17.820 -->
00:07:20.320It's based on a plugin called Py2Wasm.
00:07:20.320 -->
00:07:22.220And by the way, this may run in their cloud.
00:07:22.220 -->
00:07:24.940I can't remember this because you can run Py2Wasm.
00:07:24.940 -->
00:07:28.660You can run Wasm code locally or you can run it in the browser.
00:07:28.660 -->
00:07:29.040Right.
00:07:29.040 -->
00:07:31.080So it could go either way.
00:07:31.080 -->
00:07:37.440But basically, this gives you a WebAssembly super lightweight foundation to run Python code.
00:07:37.440 -->
00:07:38.440For your app.
00:07:38.440 -->
00:07:39.580Which I think is pretty awesome.
00:07:39.580 -->
00:07:41.600So here's this grid.
00:07:41.600 -->
00:07:45.640The news item is this matrix of these comparisons.
00:07:46.180 -->
00:07:50.320But some of them that it points out here are based on Wasm, which is pretty interesting.
00:07:50.320 -->
00:07:52.880The Fly.io one is based on MicroVM.
00:07:52.880 -->
00:07:55.520It talks about which frameworks you can use.
00:07:55.520 -->
00:07:56.960Do you directly program it?
00:07:56.960 -->
00:08:00.280Like FastAPI for Cloudflare or Spin for Fermion.
00:08:00.280 -->
00:08:01.840Lask for Google.
00:08:02.300 -->
00:08:04.620A lot of interesting stuff here and how to process it.
00:08:04.620 -->
00:08:06.060And then also the pricing.
00:08:06.060 -->
00:08:07.540Yeah.
00:08:07.540 -->
00:08:16.020This is actually timely because I have a project that I was thinking about doing some Lambda functions and things like that.
00:08:16.020 -->
00:08:16.700Yeah.
00:08:16.700 -->
00:08:25.180Was it last time or the time before where I highlighted something where someone had gotten like a $96,000 fair sale bill?
00:08:25.680 -->
00:08:27.280We're doing some of their processing.
00:08:27.280 -->
00:08:28.500Yeah.
00:08:28.500 -->
00:08:29.360That'll catch you off guard.
00:08:29.360 -->
00:08:31.320So you want to know what you're in for.
00:08:31.320 -->
00:08:32.740And this is a nice comparison.
00:08:32.740 -->
00:08:33.880I think it's pretty neat.
00:08:33.880 -->
00:08:36.540It's really, you know, I don't know why it has to be so complicated.
00:08:36.540 -->
00:08:45.040Like the Google one is $0.40 per 1 million requests plus $0.0000025 per gigabyte per second.
00:08:45.040 -->
00:08:46.100Is that where?
00:08:46.100 -->
00:08:46.600Yeah.
00:08:46.820 -->
00:08:49.280And then some more for CPU and then some more for egress.
00:08:49.280 -->
00:08:50.160You know, like, wait a minute.
00:08:50.160 -->
00:08:51.920Like others are based on memory.
00:08:51.920 -->
00:08:54.400It's just like it's really hard to understand.
00:08:54.400 -->
00:08:55.360I don't know.
00:08:55.360 -->
00:08:56.180But that's how it goes.
00:08:56.180 -->
00:08:57.300Wait, what's egress?
00:08:57.300 -->
00:08:59.580Data out as opposed to data in.
00:08:59.580 -->
00:09:00.960I thought they were type of bird.
00:09:00.960 -->
00:09:01.460Yeah.
00:09:01.460 -->
00:09:05.520Well, it usually lives like right above fiber optic cables.
00:09:05.520 -->
00:09:07.640And it goes only away from data centers.
00:09:07.640 -->
00:09:10.000That's its migration pattern is away from data centers.
00:09:10.000 -->
00:09:11.660So $0.12 per egress.
00:09:11.660 -->
00:09:12.220Yeah.
00:09:12.220 -->
00:09:15.060They carry a lot of data on them birds, though.
00:09:15.060 -->
00:09:15.420It's okay.
00:09:15.420 -->
00:09:15.920Yeah.
00:09:16.180 -->
00:09:19.340So that's why I like to have most of my data go underwater.
00:09:19.340 -->
00:09:20.460There's no birds.
00:09:20.460 -->
00:09:22.640Yeah.
00:09:22.640 -->
00:09:23.820So people could check this out.
00:09:23.820 -->
00:09:24.440They would.
00:09:24.440 -->
00:09:25.840It's just a GitHub repo.
00:09:25.840 -->
00:09:29.300You can obviously make contributions and add stuff and so on.
00:09:29.300 -->
00:09:29.740Huh.
00:09:29.740 -->
00:09:30.580That's pretty cool.
00:09:30.580 -->
00:09:31.060Nice.
00:09:31.060 -->
00:09:31.540Yeah.
00:09:31.540 -->
00:09:32.680All right.
00:09:32.680 -->
00:09:34.320Back to you.
00:09:34.320 -->
00:09:34.980Okay.
00:09:34.980 -->
00:09:40.020Well, we have talked about this top PyPI packages before.
00:09:40.020 -->
00:09:40.600I'm pretty sure.
00:09:40.600 -->
00:09:42.860From HugoVK.
00:09:42.860 -->
00:09:46.140It's just a list that's updated.
00:09:46.140 -->
00:09:53.240I don't want to call out Hugo too much, but it's supposed to be updated monthly.
00:09:53.240 -->
00:09:55.240And it was last updated in July.
00:09:55.240 -->
00:09:55.840Yeah.
00:09:55.840 -->
00:09:57.160Maybe we get some August updates.
00:09:57.160 -->
00:09:57.480Anyway.
00:09:57.480 -->
00:10:01.420Well, maybe he's traveling near relative ballistic speeds.
00:10:01.420 -->
00:10:02.780In which case, that would explain it.
00:10:03.060 -->
00:10:03.420Oh, yeah.
00:10:03.420 -->
00:10:03.680Maybe.
00:10:03.680 -->
00:10:04.040Okay.
00:10:04.040 -->
00:10:05.700Anyway, that's close enough.
00:10:05.700 -->
00:10:07.460So, you know, it's a month old, but that's all right.
00:10:07.460 -->
00:10:08.120Anyway.
00:10:08.120 -->
00:10:13.020So there's a list of it shows the top 100 right away.
00:10:13.120 -->
00:10:16.440But you can show the top 8,000.
00:10:16.440 -->
00:10:20.740So what are the things I've used this before is to try to find the top pytest plugins.
00:10:20.740 -->
00:10:26.600So I'll grab this data or I'll like, you know, show the 8,000 and then I'll like search for pytest.
00:10:26.600 -->
00:10:28.080Just pytest.
00:10:28.080 -->
00:10:30.280Because most plugins are pytest.
00:10:30.280 -->
00:10:31.680So the top one's going to be pytest.
00:10:31.680 -->
00:10:33.760And then the next ones are like, you know, the plugins.
00:10:33.760 -->
00:10:36.100Because they often have pytest in the name.
00:10:36.100 -->
00:10:36.740It's handy.
00:10:36.740 -->
00:10:40.260So I thought it'd be cool if I just did something about this and made my own list.
00:10:40.380 -->
00:10:41.200So I did.
00:10:41.200 -->
00:10:44.180This weekend, I decided to give it a shot.
00:10:44.180 -->
00:10:47.240I wrote top pytest plugins.
00:10:47.240 -->
00:10:53.460And I just grabbed the top 8,000 because it's available on GitHub.
00:10:53.460 -->
00:10:56.360He just publishes the top 8,000 all the time.
00:10:56.360 -->
00:10:58.040Once a month.
00:10:58.040 -->
00:11:01.720You can grab those as a JSON file and parse it.
00:11:01.720 -->
00:11:03.440So grab that.
00:11:03.440 -->
00:11:05.540And then I'm listing.
00:11:06.120 -->
00:11:11.740I just grabbed all the pytest things with pytest in the name other than the top other than pytest.
00:11:11.740 -->
00:11:13.300And I grabbed.
00:11:13.300 -->
00:11:14.540There's 142.
00:11:14.540 -->
00:11:16.800It's basically all 8,000 and however many.
00:11:16.800 -->
00:11:20.540So 142 plugins show up in the top 8,000.
00:11:20.540 -->
00:11:24.460I thought it was cool that pytest check shows up.
00:11:24.460 -->
00:11:25.760That's my little plugin.
00:11:25.760 -->
00:11:28.720Made the top 25.
00:11:28.720 -->
00:11:30.620Yeah, it's at 25.
00:11:30.620 -->
00:11:31.680So that's cool.
00:11:31.680 -->
00:11:32.860Yeah.
00:11:32.860 -->
00:11:34.420And a bunch of that I love in here.
00:11:34.560 -->
00:11:38.320There's actually some pretty cool stuff that I want to explore more by looking at this.
00:11:38.320 -->
00:11:45.340A lot of the top, like the top 10 or so, they don't change much because you've got tons of projects using them.
00:11:45.340 -->
00:11:47.260Even though pytest runner, come on, people.
00:11:47.260 -->
00:11:51.620pytest runner should not be the number second one because it is deprecated.
00:11:51.620 -->
00:12:01.620It's so that you can run pytest tests from Python setup.py test.
00:12:01.620 -->
00:12:03.480And like, who does that anymore?
00:12:03.700 -->
00:12:04.020I don't know.
00:12:04.020 -->
00:12:05.040I thought everybody was.
00:12:05.040 -->
00:12:06.32030 million people did that.
00:12:06.320 -->
00:12:07.960Yeah, apparently.
00:12:07.960 -->
00:12:11.520So anyway, I thought it was fun.
00:12:11.520 -->
00:12:13.480The downloads.
00:12:13.480 -->
00:12:18.120So top PyPI packages just gives me the name and the download count.
00:12:18.120 -->
00:12:22.460So I wanted to know like how to get the summary on there.
00:12:22.560 -->
00:12:26.900So I asked on Mastodon and Jeff Triplett delivered.
00:12:26.900 -->
00:12:32.960And he said, hey, why don't you use the API from the warehouse?
00:12:32.960 -->
00:12:33.600Yeah.
00:12:33.600 -->
00:12:36.040PyPI is built on warehouse and warehouse has an API.
00:12:36.040 -->
00:12:38.520So you can use it to get some interesting information.
00:12:38.520 -->
00:12:39.680So I did that.
00:12:39.680 -->
00:12:41.040And that's how the summaries come in.
00:12:41.280 -->
00:12:42.840I wrote up a blog post about it.
00:12:42.840 -->
00:12:45.320So that's linked about how this is done.
00:12:45.320 -->
00:12:47.180And then what?
00:12:47.180 -->
00:12:48.240Publish the code also.
00:12:48.240 -->
00:12:49.040So you can check it out.
00:12:49.040 -->
00:12:51.080And then I was like, it's dumb code.
00:12:51.080 -->
00:12:51.280Why?
00:12:51.280 -->
00:12:52.940I'll publish it anyway.
00:12:52.940 -->
00:12:53.380Why not?
00:12:54.020 -->
00:12:57.920And Jeff Triplett says, yeah, it needs cleaned up a bit.
00:12:57.920 -->
00:13:00.980So he threw it into Claude 3.5, 3.5.
00:13:00.980 -->
00:13:06.020And came up with what Claude says is the better code.
00:13:06.020 -->
00:13:07.540So anyway.
00:13:07.540 -->
00:13:08.940He also added Rich.
00:13:08.940 -->
00:13:10.560So I have to incorporate this.
00:13:10.560 -->
00:13:11.140Rich and Typer.
00:13:11.140 -->
00:13:11.700Yeah.
00:13:11.700 -->
00:13:15.040He added Rich and Typer, which really didn't add much code.
00:13:15.040 -->
00:13:16.140So ooh, green.
00:13:16.140 -->
00:13:20.900He did the download count in green and the packages in magenta.
00:13:20.900 -->
00:13:22.620And the what?
00:13:23.020 -->
00:13:24.600Oh, the download counts are in green.
00:13:24.600 -->
00:13:27.100And the number is in cayenne, cyan.
00:13:27.100 -->
00:13:27.840I don't know.
00:13:27.840 -->
00:13:29.840So thanks, Jeff.
00:13:29.840 -->
00:13:30.780So anyway.
00:13:30.780 -->
00:13:31.320Yeah.
00:13:31.320 -->
00:13:32.540Very cool.
00:13:32.540 -->
00:13:33.460I love it.
00:13:33.460 -->
00:13:36.420Now, just one more request for your blog post there.
00:13:36.420 -->
00:13:39.320Would it be cool to see a graph of popularity?
00:13:39.320 -->
00:13:43.940So you can sort of see what does the tail look like in terms for...
00:13:43.940 -->
00:13:45.120So you can see it tail off pretty quick.
00:13:45.120 -->
00:13:47.340But as a picture, how would those numbers look?
00:13:47.340 -->
00:13:48.660Oh, yeah.
00:13:48.660 -->
00:13:49.860Okay.
00:13:49.860 -->
00:13:51.140So a graph of popularity.
00:13:51.140 -->
00:13:51.860That'd be fun.
00:13:52.320 -->
00:13:54.400I wanted to see...
00:13:54.400 -->
00:14:00.020There's a couple other things I wanted to see, like the which Python version that it supports.
00:14:00.020 -->
00:14:05.700And I also kind of want to dig in a little bit to see which ones it's tested against.
00:14:05.700 -->
00:14:11.360So if there's some way to look into the code to see it supports 3.8 and above often.
00:14:11.360 -->
00:14:14.960But is it tested on 3.12 yet?
00:14:14.960 -->
00:14:16.040Sort of things.
00:14:16.040 -->
00:14:16.640Yeah.
00:14:16.640 -->
00:14:17.460Interesting.
00:14:17.940 -->
00:14:19.540Does it support free threading?
00:14:19.540 -->
00:14:20.820Yeah.
00:14:20.820 -->
00:14:22.920I don't know.
00:14:22.920 -->
00:14:25.640The other thing that I thought would be cool was...
00:14:25.640 -->
00:14:29.620Somebody requested this on Mastodon.
00:14:29.620 -->
00:14:35.240Some trending for keeping track of this over time and seeing some deltas.
00:14:35.240 -->
00:14:37.120Like, which ones are going?
00:14:37.120 -->
00:14:40.800Like, upward trends or downward trends or something?
00:14:41.100 -->
00:14:41.600Oh, yeah.
00:14:41.600 -->
00:14:41.840Yeah.
00:14:41.840 -->
00:14:45.640That would be cool to see where the momentum is for them.
00:14:45.640 -->
00:14:46.080Yeah.
00:14:46.080 -->
00:14:51.480Oh, one of the things I did want to shout out for Jeff, his version of this does...
00:14:51.480 -->
00:14:55.280It also takes the package name as an input.
00:14:55.280 -->
00:15:00.440So you can, if you wanted to look for things with Django in the name or things with, you know,
00:15:00.440 -->
00:15:05.400something else like Jason in the name or something, you can search for those as well that way with his.
00:15:05.400 -->
00:15:06.760So often...
00:15:06.760 -->
00:15:07.060Excellent.
00:15:07.060 -->
00:15:07.800Yeah, yeah.
00:15:07.800 -->
00:15:08.340That's super cool.
00:15:08.340 -->
00:15:12.580And Henry out there says, a badge given the rank would be fun.
00:15:12.580 -->
00:15:13.540Given the rank.
00:15:13.540 -->
00:15:14.480Like that...
00:15:14.480 -->
00:15:15.880So you can put it on your GitHub readme.
00:15:15.880 -->
00:15:19.860It's just like number 26 most popular pie test.
00:15:19.860 -->
00:15:20.680Oh, yeah.
00:15:20.680 -->
00:15:21.320Plugin.
00:15:21.320 -->
00:15:22.120Something like that.
00:15:22.120 -->
00:15:24.200I'm reading into this, but that's what I think.
00:15:24.200 -->
00:15:24.640Yeah.
00:15:24.640 -->
00:15:25.560Star count.
00:15:25.560 -->
00:15:26.120Skip.
00:15:26.120 -->
00:15:26.540Star count.
00:15:26.540 -->
00:15:27.940Does that matter too much?
00:15:27.940 -->
00:15:28.940Yeah, perhaps.
00:15:28.940 -->
00:15:29.580All right.
00:15:29.580 -->
00:15:30.800Derivative of star count.
00:15:30.800 -->
00:15:31.600Is it going up?
00:15:31.600 -->
00:15:32.780Like, how fast?
00:15:32.780 -->
00:15:33.980Anyway, let's carry on.
00:15:33.980 -->
00:15:38.120You're going to have a whole master's thesis.
00:15:38.120 -->
00:15:40.520We could definitely bike shed this for a long time.
00:15:40.520 -->
00:15:41.060We could.
00:15:41.060 -->
00:15:41.760Yeah.
00:15:41.760 -->
00:15:42.620We could.
00:15:42.620 -->
00:15:42.780Okay.
00:15:42.780 -->
00:15:44.660Let's hit the big news of the week.
00:15:44.660 -->
00:15:45.760Big news.
00:15:46.060 -->
00:15:46.180Yeah.
00:15:46.180 -->
00:15:46.860I swooped in.
00:15:46.860 -->
00:15:48.040I know you're going to cover it as well.
00:15:48.040 -->
00:15:50.840I learned you were going to cover it after I grabbed it as a topic.
00:15:50.840 -->
00:15:53.540So this comes from the astral folks and Charlie Marsh.
00:15:53.540 -->
00:15:59.880And maybe I'm going to have Charlie on Talk Python and me to cover this tomorrow or in a week.
00:15:59.880 -->
00:16:00.460I'm not sure.
00:16:00.460 -->
00:16:03.160He's traveling, I think, or something like that.
00:16:03.160 -->
00:16:05.380So we'll see if we can make it happen tomorrow.
00:16:05.380 -->
00:16:07.600But very soon, Charlie's going to come on Talk Python.
00:16:07.600 -->
00:16:09.300I'm going to dive in deeper into this.
00:16:09.300 -->
00:16:10.920But let's spend a few minutes on it.
00:16:10.920 -->
00:16:12.060Here's the announcement.
00:16:12.060 -->
00:16:13.700The official announcement is uv.
00:16:13.700 -->
00:16:15.340We've talked about uv before.
00:16:15.540 -->
00:16:22.120It's started out as kind of a pip replacement, but it's growing to do more and more things
00:16:22.120 -->
00:16:22.680now.
00:16:22.680 -->
00:16:26.860And the announcement is uv, a unified Python packaging.
00:16:26.860 -->
00:16:33.480So there's been a lot of trends in Python packaging about tools that disintermediate PIP
00:16:33.480 -->
00:16:36.600and some of the other things we do with lock files.
00:16:36.600 -->
00:16:38.740And there's sort of been two takes.
00:16:38.880 -->
00:16:41.220One take is we build stuff inside Python.
00:16:41.220 -->
00:16:45.460Then once we have Python and we have this tool, then we manage our projects.
00:16:45.460 -->
00:16:48.400You know, I'm thinking of things like Hatch or poetry.
00:16:48.400 -->
00:16:52.960On the other hand, there's been things that try to manage Python from the outside.
00:16:52.960 -->
00:16:56.940And probably the most well-known one is Pyenv.
00:16:57.200 -->
00:17:04.340Pyenv, not Pyenv, Pyenv, which gives you your Python or maybe Knox talks for testing and it'll manage
00:17:04.340 -->
00:17:05.480the Python and the environments.
00:17:06.120 -->
00:17:12.260And so they're coming, Charlie and Astral are coming at this from that outer, outside perspective
00:17:12.260 -->
00:17:12.860more, right?
00:17:12.860 -->
00:17:14.680Here's a tool that doesn't depend on Python.
00:17:14.980 -->
00:17:20.780And until recently, it's been a fast way to do pip things and pip compile and so on.
00:17:20.780 -->
00:17:28.280But now this is a big, big announcement for here is the thing that can kind of be Cargo.
00:17:28.280 -->
00:17:30.020Cargo is the Rust version of this.
00:17:30.020 -->
00:17:32.540I think there's a lot of inspiration for a lot of people around that.
00:17:32.540 -->
00:17:35.340I don't use Rust, so it doesn't inspire or disinspire me.
00:17:35.340 -->
00:17:36.720It just, whatever.
00:17:36.720 -->
00:17:38.280But here's the thing.
00:17:38.660 -->
00:17:45.220It has end-to-end project management, so you can add dependencies, you can run tools
00:17:45.220 -->
00:17:49.820against your program like pytest or whatever.
00:17:49.820 -->
00:17:56.000It can create lock files, it can update those lock files, it can install Python.
00:17:56.000 -->
00:17:57.700We talked about that last time, right, Brian?
00:17:57.700 -->
00:17:58.240Yeah.
00:17:58.240 -->
00:18:03.280So uv Python install or uv Python list and all those options.
00:18:03.280 -->
00:18:07.980It can now run scripts, which is pretty interesting.
00:18:07.980 -->
00:18:15.140So if I gave you a single Python file and like Jeff Triplett's example, it depended upon
00:18:15.140 -->
00:18:18.440HTTPX and I gave that to you and said, hey, Brian, run this.
00:18:18.440 -->
00:18:19.360What would you do?
00:18:19.360 -->
00:18:20.500You'd be like, try to run it.
00:18:20.500 -->
00:18:21.400No, it doesn't run.
00:18:21.400 -->
00:18:27.640I guess I need a virtual environment or I'll just into my system, install HTTPX and then
00:18:27.640 -->
00:18:29.180it's going to need another and so on.
00:18:29.180 -->
00:18:30.180That's a hassle, right?
00:18:30.180 -->
00:18:37.840So with the script execution thing, what you do is you put into somewhere, into the top
00:18:37.840 -->
00:18:40.740of your file as a multi-comment.
00:18:41.240 -->
00:18:43.500It's a hash and then it has four slashes.
00:18:43.500 -->
00:18:44.620I don't know.
00:18:44.620 -->
00:18:46.040Meta comment within a comment.
00:18:46.040 -->
00:18:52.420You put a comment here that says what this library depends upon and then theoretically you
00:18:52.420 -->
00:18:53.340should be able to run this.
00:18:53.340 -->
00:18:58.800So if you say uv run and you give it the script, it'll look at that and say, oh, I'm going to
00:18:58.800 -->
00:19:03.120need to quick install or find the cached version of what's listed at the top of this.
00:19:03.120 -->
00:19:05.700So as long as you had uv, I could just give you any file.
00:19:05.700 -->
00:19:11.240You could run it and that could be a cool distribution mechanism throughout like your company or utility
00:19:11.240 -->
00:19:15.560tools where at least you've agreed upon uv as a basis.
00:19:15.560 -->
00:19:19.760It's pretty cool because it even create, I think this one even creates a little virtual
00:19:19.760 -->
00:19:21.840environment to install stuff and run.
00:19:21.840 -->
00:19:26.420It, yeah, all this stuff has a lot to do with virtual environments and I don't know if it's
00:19:26.420 -->
00:19:30.680a persistent virtual environment, but yeah, it does isolate these things.
00:19:30.680 -->
00:19:34.680And so there's two ways, the reason I'm not certain is there's two ways to do this.
00:19:34.680 -->
00:19:41.440Like you can create a project and start it, initialize it or sync it and get it going.
00:19:41.440 -->
00:19:49.360You can also create virtual environments here with uv and it'll go and create one of these
00:19:49.360 -->
00:19:54.480based on say the pyproject.toml or something, but you can also run commands.
00:19:54.480 -->
00:19:59.680There's ways to just run like the tooling stuff that they're doing.
00:20:00.660 -->
00:20:02.780And when you look at that, it will use it.
00:20:02.780 -->
00:20:08.100I don't think it creates a virtual environment, but it uses the cached versions and just runs
00:20:08.100 -->
00:20:09.060in kind of an isolate.
00:20:09.060 -->
00:20:16.640So it's, if you say uv tool run, which is alias to uvx kind of like npmx, it uses an isolated
00:20:16.640 -->
00:20:18.020environment, but yeah, exactly.
00:20:18.020 -->
00:20:20.060The environment doesn't last.
00:20:20.060 -->
00:20:20.640Right.
00:20:20.640 -->
00:20:26.420Whereas if you say uv tool install versus uv tool run, there's like variations about this.
00:20:26.420 -->
00:20:26.620Right.
00:20:26.620 -->
00:20:33.340But, but the gist of it that like as a user, it's not, it's not, it's not throwing stuff
00:20:33.340 -->
00:20:34.980into my global Python, which I want.
00:20:34.980 -->
00:20:35.820I don't want that.
00:20:35.820 -->
00:20:37.760So it's doing the right thing.
00:20:37.760 -->
00:20:42.540You might, I might not know what it is, but it's not like polluting the global Python.
00:20:42.940 -->
00:20:43.500Yes, absolutely.
00:20:43.500 -->
00:20:44.520Yeah, exactly.
00:20:44.520 -->
00:20:46.860It does the right thing for you.
00:20:46.860 -->
00:20:48.360And it does it super, super fast.
00:20:48.360 -->
00:20:53.680Like I was checking out an example and after you've run it once, after it's basically cached
00:20:53.680 -->
00:20:55.440the dependencies, it's instant.
00:20:55.600 -->
00:20:58.160It's as if those things were just there, right?
00:20:58.160 -->
00:21:00.940As if you were in an activated virtual environment and good to go.
00:21:00.940 -->
00:21:01.440Yeah.
00:21:01.440 -->
00:21:06.500I'm really, I've, I've been changing my workflow over to all of this, especially since, so that
00:21:06.500 -->
00:21:11.160we did kind of cover it last week, but all the, all the neat things that I saw in
00:21:11.160 -->
00:21:14.840UV were all like, like experimental.
00:21:14.840 -->
00:21:16.660They're not experimental anymore.
00:21:16.660 -->
00:21:18.260They're all, they're all locked in.
00:21:18.260 -->
00:21:18.500So.
00:21:18.500 -->
00:21:19.020Yeah.
00:21:19.020 -->
00:21:20.120Yeah, absolutely.
00:21:20.200 -->
00:21:23.120This is the big, big release we have in the audience.
00:21:23.120 -->
00:21:28.320Makeshift says super into uv primarily for Python management, interested in script execution
00:21:28.320 -->
00:21:31.660and packing that up into something that acts like a single binary executable.
00:21:31.660 -->
00:21:31.900Yeah.
00:21:31.900 -->
00:21:36.260It kind of does give you the sense of long as you're connected to the internet, here's the
00:21:36.260 -->
00:21:41.820thing that's always ready to run all versions of Python, all dependency, you know, regardless
00:21:41.820 -->
00:21:46.260of the dependencies or regardless of the version that it says, assuming that it's in the
00:21:46.260 -->
00:21:50.080UV Python list listing, you can just run it.
00:21:50.080 -->
00:21:50.380Right.
00:21:50.380 -->
00:21:51.660And if it's not there, it'll download it.
00:21:51.660 -->
00:21:55.300But if it is there, it'll use the cache version and off it goes, which is pretty awesome.
00:21:55.300 -->
00:21:55.800Yeah.
00:21:55.800 -->
00:21:59.500You bring up something interesting that I haven't tried is like, if you run, run all these
00:21:59.500 -->
00:22:03.660tool chains for a while and you disconnect from the internet, what happens to you?
00:22:03.660 -->
00:22:05.200I think if it's cached, it's okay.
00:22:05.200 -->
00:22:07.060But if it's not cached, it's probably not okay.
00:22:07.060 -->
00:22:07.580Okay.
00:22:07.580 -->
00:22:08.880Makes sense.
00:22:08.880 -->
00:22:10.140That's what I believe.
00:22:10.140 -->
00:22:10.420Yeah.
00:22:10.420 -->
00:22:16.240Because the speed at which it runs, I doubt that it's every time checking unless you ask
00:22:16.240 -->
00:22:17.280it to do an update.
00:22:17.280 -->
00:22:21.040There's like sync and lock commands versus run and so on.
00:22:21.040 -->
00:22:23.800There's other interesting things we're diving into here.
00:22:23.800 -->
00:22:26.240For example, like the Docker integration.
00:22:26.240 -->
00:22:32.960If you don't even want this thing on your computer, you can actually get a Docker version, run it,
00:22:32.960 -->
00:22:37.440and then just alias commands to your Docker container or things like that.
00:22:37.440 -->
00:22:42.420Or it talks about how to use, how to build it using Docker or like, here you go, for example,
00:22:42.420 -->
00:22:49.060here's how you would get, get it to run, get it to install and run something using a Docker
00:22:49.060 -->
00:22:50.000command and so on.
00:22:50.000 -->
00:22:53.460So there's, there's a lot of things going on, GitHub actions, pre-commits.
00:22:54.160 -->
00:22:55.660This is a super deep project.
00:22:55.660 -->
00:23:03.340If you look at a release, if you look at workspaces, this is a lot of stuff around mono repos.
00:23:03.340 -->
00:23:10.120So if you've got a bunch of different packages and you want them all to be treated as kind
00:23:10.120 -->
00:23:12.720of managed by one, one thing here.
00:23:12.720 -->
00:23:15.580But you can say I have a dependency.
00:23:15.580 -->
00:23:21.580This part of my code has a dependency and another part of my code, please install it as, as you're
00:23:21.580 -->
00:23:24.300running with it or just run it in editable form out of this directory.
00:23:24.300 -->
00:23:25.480A lot of stuff going on here.
00:23:25.480 -->
00:23:27.160I've been checking it out this morning.
00:23:27.160 -->
00:23:33.120So I'm going to let people dive in more for themselves here and maybe listen to the Talk
00:23:33.120 -->
00:23:35.880Python episode from, with Charlie soon.
00:23:35.880 -->
00:23:41.020However, also I want to say thank you to a couple of folks who sent in this.
00:23:41.020 -->
00:23:44.640Skylar, Casco, and John Hagen both said and said, Hey, you guys should check out these
00:23:44.640 -->
00:23:46.940things around this announcement.
00:23:47.200 -->
00:23:53.120One is Simon Willison, speaking of living in Kansas, no longer lives in Kansas, but part
00:23:53.120 -->
00:23:53.700of the Django team.
00:23:53.700 -->
00:24:01.120He wrote a blog post called uv Unified Python Packaging, huge release from the Astral team
00:24:01.120 -->
00:24:04.580and basically says, this has been out for a couple of hours.
00:24:04.580 -->
00:24:07.900Let me, let me just see what, give you my real quick impressions.
00:24:07.900 -->
00:24:12.100It's kind of a, like a walkthrough almost like here's what I think is important from it.
00:24:12.300 -->
00:24:19.540I think more interesting perhaps is to bump over to Omnivore here and look at what Armin
00:24:19.540 -->
00:24:25.580Roeneker said of creator, original creator of Flask, most recent creator of Rye, R-Y-E,
00:24:25.580 -->
00:24:30.460which has been something kind of trying to do this a little bit, but not as ambitious.
00:24:31.020 -->
00:24:36.180And he handed over ownership of Rye to the Astral folks as well.
00:24:36.180 -->
00:24:40.420So it's kind of, some of this stuff is kind of a blending of these things.
00:24:40.420 -->
00:24:42.400So his article is super interesting.
00:24:42.400 -->
00:24:45.100There's a lot of opinion and takes on it.
00:24:45.100 -->
00:24:46.980Put a few highlights here in Omnivore.
00:24:46.980 -->
00:24:53.320So for example, one of, when creating Rye, he says, one of the things I mentioned there
00:24:53.320 -->
00:24:57.740is that the goal of a packaging tool has to be that will dominate the space.
00:24:57.740 -->
00:24:59.780That is, it's awesome.
00:24:59.780 -->
00:25:00.580If you're not first, you're last.
00:25:00.580 -->
00:25:05.660Not in like a, if you're a second, you're the first loser.
00:25:05.660 -->
00:25:10.660Not in that sense, but in the sense for it like really to make a big impact, it has to be the way,
00:25:10.660 -->
00:25:11.200right?
00:25:11.200 -->
00:25:12.600If there's 20 ways.
00:25:12.600 -->
00:25:13.700This is the way.
00:25:14.040 -->
00:25:18.600Yeah, it's more, more of like the Mandalorian thing.
00:25:18.600 -->
00:25:19.620This is the way.
00:25:19.620 -->
00:25:20.000That's right.
00:25:20.000 -->
00:25:26.460So if it's going to simplify the Python experience, it can't be that there's 20 ways, different
00:25:26.460 -->
00:25:27.940and unrelated ways to simplify.
00:25:27.940 -->
00:25:29.920There has to be a way we kind of agree on, right?
00:25:29.920 -->
00:25:31.540And then it goes on to say-
00:25:31.540 -->
00:25:32.180I don't agree, but that's okay.
00:25:32.180 -->
00:25:33.960Yeah, no, I hear you.
00:25:33.960 -->
00:25:39.220I really want everyone who gets to learn and experience Python, not to remember it as an old
00:25:39.220 -->
00:25:43.760language, bad tooling, but it is an amazing language with stellar, stellar developer,
00:25:43.960 -->
00:25:44.440experience.
00:25:44.440 -->
00:25:49.160Unfortunately, that's not the case today because there are so much choice, so many tools that
00:25:49.160 -->
00:25:52.260are not quite compatible and by the inconsistency everywhere.
00:25:52.260 -->
00:25:53.360That's what he's getting at.
00:25:53.360 -->
00:25:55.600He said, well, I think uv is poised to be this tool.
00:25:55.600 -->
00:26:02.240Now the momentum, now's the moment to step up as a community and start to start to rally
00:26:02.240 -->
00:26:02.800around it.
00:26:02.800 -->
00:26:03.200Yeah.
00:26:03.200 -->
00:26:04.800He needs to take the next step.
00:26:04.800 -->
00:26:08.000Say some of these tools are no longer recommended.
00:26:08.000 -->
00:26:12.960For example, we stopped recommending Easy Install and took them out of our guides.
00:26:13.380 -->
00:26:18.440So I recommend that you consider making uv an option in your documentation.
00:26:18.440 -->
00:26:23.320Also has a little bit of interesting commentary about, well, this is VC funded.
00:26:23.320 -->
00:26:24.620What if they turn evil?
00:26:24.620 -->
00:26:26.700I don't think that they will, but what if they did?
00:26:26.700 -->
00:26:28.640And he talks about that as well.
00:26:28.640 -->
00:26:29.580So-
00:26:29.580 -->
00:26:29.660Yeah.
00:26:29.660 -->
00:26:29.700Yeah.
00:26:29.700 -->
00:26:30.940We can always work it.
00:26:30.940 -->
00:26:31.880Yeah.
00:26:31.880 -->
00:26:34.020Let's see what Henry has to say as well out there.
00:26:34.020 -->
00:26:36.720Says, this is basically mostly faster PIPX replacements.
00:26:36.720 -->
00:26:39.900The script runner, tool management, tool running without installing first.
00:26:39.900 -->
00:26:40.620I agree.
00:26:40.620 -->
00:26:46.140There's, I didn't point it out, but you're right that there's a lot of overlap of PIPX and
00:26:46.140 -->
00:26:46.420this.
00:26:46.420 -->
00:26:48.540Although I think there's more to it as well.
00:26:48.780 -->
00:26:49.000Yeah.
00:26:49.000 -->
00:26:53.160One of the things I'm, I'm interested in is there's, there's been, I've never really,
00:26:53.160 -->
00:26:59.440there's something about the, there's nothing, nothing really against PDM, but my, my experience
00:26:59.440 -->
00:27:02.800with it was just not what, not what I like to do.
00:27:02.940 -->
00:27:08.980And, and uv, the uv tools have taken a lot of the ideas from PDM as well, which is interesting
00:27:08.980 -->
00:27:12.780that they're, they're looking at all, they're taking the inspiration from all over the place.
00:27:12.780 -->
00:27:13.720So they are.
00:27:13.720 -->
00:27:20.720One of the things I don't necessarily like is a lot of it, a lot of it turns the Python package
00:27:20.720 -->
00:27:27.980and sort of environment and project management into uv project and package management.
00:27:28.740 -->
00:27:37.280So for example, you know, you type uvx run or uv, uv add instead of pip, just pip install,
00:27:37.280 -->
00:27:37.500right?
00:27:37.500 -->
00:27:42.200Where the uv add will put it into the lock file and the requirement and so on.
00:27:42.200 -->
00:27:45.420And the lock files even like uv dot lock or something.
00:27:45.420 -->
00:27:46.680Yes.
00:27:46.680 -->
00:27:48.400So I am quite excited about it.
00:27:48.400 -->
00:27:53.140However, a lot of the stuff has, you know, it's kind of founded on virtual environments,
00:27:53.140 -->
00:27:57.140which if you just want to activate the virtual environment and go do your thing, once you,
00:27:57.140 -->
00:28:03.160you maybe get your Python installed if it didn't exist or whatever, then you can go on and do
00:28:03.160 -->
00:28:06.160a lot of things, the Python way without worrying about it.
00:28:06.160 -->
00:28:08.340But it's going to be interesting what the adoption is.
00:28:08.340 -->
00:28:10.580I'm going to talk to Charlie soon about it and it'll be fun.
00:28:10.580 -->
00:28:10.960Good.
00:28:10.960 -->
00:28:12.040I'll listen to that one.
00:28:12.040 -->
00:28:12.580Yeah.
00:28:12.580 -->
00:28:16.080I'm super excited about uv in general, so we'll see where it goes.
00:28:16.080 -->
00:28:16.540Yeah.
00:28:16.540 -->
00:28:17.620All right.
00:28:17.620 -->
00:28:20.760I believe that is it for our main items.
00:28:20.760 -->
00:28:26.060Well, based on your, your tab count, I'm guessing that you're feeling pretty extra.
00:28:26.400 -->
00:28:26.800Yeah.
00:28:26.800 -->
00:28:27.820This will go quick though.
00:28:27.820 -->
00:28:36.100I wanted to point out that the Jeff triplet rewrite of the top Python packages is, is already
00:28:36.100 -->
00:28:37.960scriptified uv scriptified.
00:28:37.960 -->
00:28:41.140He included the script at the top to pull in the dependencies.
00:28:41.140 -->
00:28:45.940And, you know, once you look at it for something you're, you're, you're familiar with, you're like,
00:28:45.940 -->
00:28:46.640Oh, that's easy.
00:28:46.640 -->
00:28:52.040You're just adding like HTTPX rich and type or to the dependencies and telling which Python version.
00:28:52.040 -->
00:28:52.800That's really all.
00:28:52.800 -->
00:28:59.660That's, I mean, there might be other stuff that you can do, but this is great to be able to just do uv run with this.
00:29:00.120 -->
00:29:02.420I wonder if the editors auto collapse that.
00:29:02.420 -->
00:29:09.140It'd be awesome if you just never see that unless you want to, you know, like it collapses, it folds the code for those sections on open.
00:29:09.140 -->
00:29:09.580Yeah.
00:29:10.120 -->
00:29:15.200Cause if you had like some weird, some weird, corporate thing that you had to stick at the top of your code.
00:29:15.200 -->
00:29:18.820Also, you'd have to scroll down three pages before you get actual.
00:29:19.640 -->
00:29:20.160Yeah.
00:29:20.160 -->
00:29:21.060okay.
00:29:21.060 -->
00:29:42.840So, this is a, like us, owed to Hugo because, or Hugo VK, because, he also, let us know that when we changed the date from Tuesday to Monday, people could use, are we meeting yet.com to keep track of, of when the meeting is because it, it converts to your time, whatever we push this in at.
00:29:42.840 -->
00:29:49.140So I'm seeing that, the next meeting is, is August 26th.
00:29:49.140 -->
00:29:49.660That's today.
00:29:49.660 -->
00:29:59.520so, but if you go here when we're not here, it'll tell you that there's, there's like a meeting coming up and it'll show how many, how many, how much time left.
00:29:59.520 -->
00:30:02.840And there's even a calendar entry that you can add, there.
00:30:02.840 -->
00:30:03.780So that's fun.
00:30:03.780 -->
00:30:06.620And then a link to the, I added the link to the live stream.
00:30:06.620 -->
00:30:09.060So if you click on the live stream link, you can see live stream.
00:30:09.420 -->
00:30:10.940So then that's the real way.
00:30:10.940 -->
00:30:14.480Cause this is, if you do a, are we, are we meeting yet.com?
00:30:14.480 -->
00:30:18.560It doesn't update if we ever have to change things, but yeah, the time is embedded in the URL.
00:30:18.560 -->
00:30:21.820It just adapts to the, that time and the title for your location.
00:30:21.820 -->
00:30:22.400Yeah.
00:30:22.400 -->
00:30:26.440So if you really, want to make sure check out the live stream link.
00:30:26.440 -->
00:30:26.800Okay.
00:30:26.800 -->
00:30:36.620So, and while I was looking at the top, the top PyPI packages, I was looking through, at Hugo VK's, other projects.
00:30:36.620 -->
00:30:39.320And I'm like, oh, there's some cool stuff here that he's published.
00:30:39.320 -->
00:30:45.080So I wanted to shout out to, to a couple of these Python logos from around the world from different Pycons.
00:30:45.080 -->
00:30:46.600So these are fun.
00:30:46.600 -->
00:30:49.140he just has a selection of different ones.
00:30:49.140 -->
00:30:51.160Like, yeah, it's great.
00:30:51.160 -->
00:30:51.880I love these.
00:30:51.880 -->
00:30:53.980That's pretty Pycon Zimbabwe.
00:30:53.980 -->
00:30:54.680That's awesome.
00:30:55.760 -->
00:30:59.420and then also, PyPI downloads.
00:30:59.420 -->
00:31:11.660it's some, some, tools for Python tools with the download counts for versions over time, which is sort of fascinating how slow some stuff like gradually gets down.
00:31:11.660 -->
00:31:13.380So what is, what are we looking at here?
00:31:13.380 -->
00:31:17.320We've got, three, three, 12.
00:31:17.320 -->
00:31:24.420So we've got this, this blue is three, 10, three, 10, 11, 12 is blue is, is up in this top right corner.
00:31:24.420 -->
00:31:31.020And then the old ones like nine, eight, seven, six, five, three, four, are just gradually going down over time.
00:31:31.020 -->
00:31:36.900and it, I kind of would have expected a sharper drop, but, yeah, it's interesting.
00:31:36.900 -->
00:31:40.980And that, that, that sort of trend goes like, here's your URL of three.
00:31:40.980 -->
00:31:41.260Yeah.
00:31:41.260 -->
00:31:42.860Two, six on there for a while.
00:31:42.860 -->
00:31:43.500Yeah.
00:31:43.500 -->
00:31:49.340Well, and two, yeah, two, six did like take a long time to completely disappear.
00:31:49.340 -->
00:31:54.720Two, seven is down into the like single digit percents, but it's not gone away.
00:31:54.720 -->
00:31:56.300so yeah.
00:31:56.300 -->
00:31:57.720Anyway, interesting.
00:31:57.720 -->
00:32:02.520the other thing, he's got, Python, there's a bunch of stuff, Python core devs.
00:32:02.520 -->
00:32:06.620I thought was interesting of different core devs and there when they started and stopped.
00:32:06.620 -->
00:32:08.840So I didn't know that people stopped.
00:32:08.840 -->
00:32:13.560I thought we were like core dev for life or something, but, you don't have to be, I guess.
00:32:13.560 -->
00:32:15.760So interesting, graphic.
00:32:15.900 -->
00:32:21.380The other thing I wanted to, the last thing I wanted to extra is that, at, Python
00:32:21.380 -->
00:32:25.420test.com, we've got the courses of course, and they're going, they're going really well.
00:32:25.420 -->
00:32:26.580And I'm excited about that.
00:32:26.580 -->
00:32:31.140The, the other thing we've added is, when I had an, on the other platform, I used to be
00:32:31.140 -->
00:32:31.980on teachable.
00:32:31.980 -->
00:32:33.740Now we're on, Podia.
00:32:33.740 -->
00:32:35.980but Podia has a community thing.
00:32:35.980 -->
00:32:40.960So we've added community options so that if, if you like, for instance, this is great about
00:32:40.960 -->
00:32:45.020the community options, because if you bought the book physical book, but you have a question,
00:32:45.020 -->
00:32:46.540how do you get that answered?
00:32:46.540 -->
00:32:49.600Well, you can hop on and, and join the community here.
00:32:49.600 -->
00:32:51.720So then you can answer, ask questions.
00:32:51.720 -->
00:32:53.560Do you have any extras for us?
00:32:53.560 -->
00:32:57.640Oh, I have many, but I'll make them quick as well.
00:32:57.640 -->
00:33:05.020The Python course for coding in a castle in October 5th to 12th is happening.
00:33:05.020 -->
00:33:08.560And the time is coming up short for if you want to be part of it.
00:33:08.560 -->
00:33:13.540So I would love to spend a week with you in Italy, half programming and half drinking wine
00:33:13.540 -->
00:33:15.060and traveling around.
00:33:15.060 -->
00:33:17.900So if you could, you're interested about in being in that and you're like, Oh, maybe that
00:33:17.900 -->
00:33:18.500would be interesting.
00:33:18.500 -->
00:33:24.400Well, time, the time is now to sign up because, we're going to call it'll be done.
00:33:24.400 -->
00:33:27.560And soon, you know, the applications will be closed.
00:33:28.060 -->
00:33:29.580So follow up from last week.
00:33:29.580 -->
00:33:31.480Remember I talked about PI awaitable.
00:33:31.480 -->
00:33:32.520I'd been waiting for it.
00:33:32.520 -->
00:33:39.560So, zero intensity, the author of PI awaitable commented says, Hey, author of PI awaitable here.
00:33:39.560 -->
00:33:40.820Thanks for showcasing.
00:33:40.820 -->
00:33:41.460You were right.
00:33:41.580 -->
00:33:43.940The PEP didn't get published with a number.
00:33:43.940 -->
00:33:47.060I was working with Peter Victorin on it.
00:33:47.060 -->
00:33:52.660And we only got as far as a discussion thread, but unfortunately something that only uses the public API.
00:33:52.660 -->
00:33:54.100Doesn't make a strong proposal.
00:33:54.100 -->
00:33:57.220So the draft got scrapped and turned into documentation.
00:33:57.220 -->
00:34:03.700The plan is to integrate it into CPython sometime in the future, depending on how much maintenance needs, which hopefully should not be that much.
00:34:03.700 -->
00:34:05.980Quoken as a true maintainer right there.
00:34:05.980 -->
00:34:09.180Brian, let's talk web browsers real quick.
00:34:09.620 -->
00:34:12.700So we've got Vivaldi, which is what I'm using.
00:34:12.700 -->
00:34:18.500Obviously Firefox is, well known people use Chrome for some reason still these days.
00:34:18.500 -->
00:34:24.500I don't understand it, but that it still is like, let me run spyware and type into it.
00:34:24.500 -->
00:34:24.780Okay.
00:34:24.780 -->
00:34:28.640there's Safari, there's edge or the bunch of options, right?
00:34:28.640 -->
00:34:29.100Brave.
00:34:29.100 -->
00:34:29.840So on.
00:34:29.840 -->
00:34:34.840But there's this new project that I came across called ladybird, which is pretty interesting.
00:34:34.840 -->
00:34:35.740Interesting here.
00:34:35.740 -->
00:34:37.400welcome to ladybird.
00:34:37.400 -->
00:34:39.100A truly independent web browser.
00:34:39.100 -->
00:34:42.500We're building a brand new browser from scratch backed by a nonprofit.
00:34:42.500 -->
00:34:44.180That's kind of interesting, isn't it?
00:34:44.180 -->
00:34:46.780Kind of look go scroll to the top again.
00:34:46.780 -->
00:34:50.340Isn't that the, isn't that the meta logo or?
00:34:50.340 -->
00:34:51.320No, it's not meta.
00:34:51.320 -->
00:34:58.700It does look, it does look a little bit like it, but it's, it's not, I think it's supposed to look like a bird with, I don't know.
00:34:58.700 -->
00:35:00.420It's, it's similar, but it's not meta.
00:35:00.420 -->
00:35:00.800Okay.
00:35:00.800 -->
00:35:01.440It's not meta.
00:35:01.440 -->
00:35:08.580So it's an open source and open source project that has six full-time developers working on it and they expect to ship in
00:35:08.580 -->
00:35:17.2002026, which is a lot of work, but you know, web browsers are basically operating systems these days, but it's pretty interesting actually.
00:35:17.200 -->
00:35:18.720So there's a newsletter you can sign up for.
00:35:18.720 -->
00:35:19.740There's an FAQ.
00:35:20.140 -->
00:35:23.640They have sponsors getting, you know, a decent amount of money.
00:35:23.640 -->
00:35:25.000But yeah.
00:35:25.000 -->
00:35:25.620What does it mean?
00:35:25.620 -->
00:35:26.340Where's it come from?
00:35:26.340 -->
00:35:27.040And so on.
00:35:27.040 -->
00:35:28.040So I didn't know.
00:35:28.040 -->
00:35:30.100I just, I ran across that and thought that was interesting.
00:35:30.100 -->
00:35:30.680Yeah.
00:35:32.680 -->
00:35:36.820Jay out there in the audience says, Hey, you're going to buy me a ticket for this, code in the castle.
00:35:36.820 -->
00:35:37.100Yeah.
00:35:37.100 -->
00:35:37.500We'll see.
00:35:37.500 -->
00:35:38.020We'll see.
00:35:38.020 -->
00:35:40.400Wait, you're not buying me a ticket.
00:35:41.460 -->
00:35:46.220Well, get yourself to Germany and then it's, or Austria and it's a short little trip on down.
00:35:46.220 -->
00:35:46.660Okay.
00:35:46.660 -->
00:35:47.620Just across the Alps there.
00:35:47.620 -->
00:35:48.760Okay.
00:35:48.760 -->
00:35:49.380Next one.
00:35:49.380 -->
00:35:55.880Someone asked us about, like, so sorry, I forgot to write down the name when I wrote down this note.
00:35:55.880 -->
00:35:57.580It says, Hey, I'm interested in your video.
00:35:57.580 -->
00:36:03.000We talked about, I can't remember what we talked about, but some, maybe the new microphone or something.
00:36:03.000 -->
00:36:05.940I said, Hey, I'm also interested in your video recording setup.
00:36:06.200 -->
00:36:08.180And would that be cool as an extra?
00:36:08.180 -->
00:36:08.880Okay.
00:36:08.880 -->
00:36:09.800So sure.
00:36:09.800 -->
00:36:12.940I'll, I'll give people a rundown on this and Brian, you can chime in on yours.
00:36:12.940 -->
00:36:19.320I record all of the talk Python courses these days with OBS, OBS studio, which is awesome.
00:36:19.320 -->
00:36:27.320It lets you basically record your screen, record your face, set up multiple scenes, do green screens, picture and picture with the background cut out.
00:36:27.320 -->
00:36:31.440So you're just a little bloating human in the bottom of some piece of software.
00:36:31.440 -->
00:36:32.520This is free.
00:36:32.520 -->
00:36:34.000You can download it, runs on all the things.
00:36:34.480 -->
00:36:37.260I encourage people to contribute and donate to it.
00:36:37.260 -->
00:36:42.300Like if you really use this a lot, they have, they have a Patreon thing, so I support them on Patreon.
00:36:42.300 -->
00:36:49.260But this is really nice for recording, setting things up and then controlling it with my steam deck, stream deck rather.
00:36:49.260 -->
00:36:55.240This is a really cool little bit of software that lets you change the lighting, change what's shown, stop, start, pause, et cetera.
00:36:55.480 -->
00:37:04.280Also have, for some reason, the product page for the Elgato key light says that their store is undergoing maintenance, but the rest of the website is up.
00:37:04.280 -->
00:37:07.700So they point over here, so I can show you at least on Amazon.
00:37:07.700 -->
00:37:14.180I've got some cool Elgato key lights that can control with a stream deck and multicolor and stuff.
00:37:14.180 -->
00:37:14.760That's really fun.
00:37:15.100 -->
00:37:18.400And then finally, edit all of this with DaVinci Resolve.
00:37:18.400 -->
00:37:21.600DaVinci Resolve is super fun software.
00:37:21.600 -->
00:37:26.300They use it for a lot of the Marvel movies, I believe.
00:37:26.300 -->
00:37:27.740They use it for Spider-Man.
00:37:27.740 -->
00:37:30.200So it's kind of intense.
00:37:30.200 -->
00:37:32.860If you open it up, you're like, what am I supposed to do with this?
00:37:33.080 -->
00:37:40.220But if you just stay in the little edit section with the timeline, then it's pretty manageable and pretty nice to use.
00:37:40.220 -->
00:37:41.300So that's also free.
00:37:41.300 -->
00:37:43.500So that's what I'm doing these days.
00:37:43.500 -->
00:37:44.000Cool.
00:37:44.000 -->
00:37:44.760Yeah.
00:37:44.760 -->
00:37:47.260I'm doing a lot of that.
00:37:47.260 -->
00:37:49.760I want to switch to, I want to try the open.
00:37:49.760 -->
00:37:51.320OBS.
00:37:51.320 -->
00:37:52.040OBS.
00:37:52.040 -->
00:37:55.420I'm currently using Camtasia for recording stuff.
00:37:55.420 -->
00:37:58.080Not for this show, but for courses and stuff.
00:37:58.080 -->
00:37:58.760I use Camtasia.
00:37:58.760 -->
00:38:02.660And Camtasia is oddly, it works better on Windows than it does on Mac.
00:38:02.840 -->
00:38:04.760Because you can export multiple.
00:38:04.760 -->
00:38:09.020It's actually something I'm looking for on a Mac.
00:38:09.020 -->
00:38:14.820I want to be able to record everything in one project and then export multiple videos from one project.
00:38:14.820 -->
00:38:16.660And you can't do that with Camtasia.
00:38:16.660 -->
00:38:20.560I don't think you can do that with that other.
00:38:20.560 -->
00:38:21.360DaVinci.
00:38:21.360 -->
00:38:22.060DaVinci.
00:38:22.060 -->
00:38:24.040But maybe you can.
00:38:24.040 -->
00:38:25.120I just don't know how.
00:38:25.120 -->
00:38:26.600Yeah.
00:38:26.600 -->
00:38:31.400I have maybe 100 videos for some courses and they're all in one project in DaVinci.
00:38:31.400 -->
00:38:32.180It's pretty nice.
00:38:32.480 -->
00:38:34.240Also, I'm using Stream Deck.
00:38:34.240 -->
00:38:34.960I love Stream Deck.
00:38:34.960 -->
00:38:36.800And the key lights.
00:38:36.800 -->
00:38:37.420They're great.
00:38:37.420 -->
00:38:40.380The one thing that you didn't mention was what camera you're using.
00:38:40.380 -->
00:38:41.480Oh, yeah.
00:38:41.480 -->
00:38:42.220I'm using.
00:38:42.220 -->
00:38:43.880I've used a whole bunch.
00:38:43.880 -->
00:38:45.760So this is not a strong recommendation.
00:38:45.760 -->
00:38:47.940But I'm using the Elgato.
00:38:47.940 -->
00:38:49.440She can't look like that thing.
00:38:49.440 -->
00:38:52.700The Elgato.
00:38:53.520 -->
00:38:54.520What is it called?
00:38:54.520 -->
00:38:55.760Facecam Pro.
00:38:55.760 -->
00:38:56.560That's what it's called.
00:38:56.560 -->
00:38:56.940Okay.
00:38:56.940 -->
00:38:58.560Which is like a 4K camera.
00:38:58.560 -->
00:38:59.720That's pretty good.
00:38:59.720 -->
00:39:00.240Yeah.
00:39:00.240 -->
00:39:00.720It's pretty good.
00:39:00.720 -->
00:39:00.940Yeah.
00:39:00.940 -->
00:39:01.520It's pretty good.
00:39:01.520 -->
00:39:03.220The color is a little bit off.
00:39:03.220 -->
00:39:05.720Like, it's hard to get just real natural colors.
00:39:06.160 -->
00:39:07.900I'm using the Logitech Logi.
00:39:07.900 -->
00:39:09.120A little tiny camera.
00:39:09.120 -->
00:39:10.020Which is decent.
00:39:10.020 -->
00:39:11.140I think I used that before.
00:39:11.140 -->
00:39:12.020And it's also real nice.
00:39:12.020 -->
00:39:12.180Yeah.
00:39:12.180 -->
00:39:12.680Yeah.
00:39:12.920 -->
00:39:15.560But it'd be fun if I tried this other one.
00:39:15.560 -->
00:39:18.320And also so that we looked a little more similar.
00:39:18.320 -->
00:39:20.540I'm usually showing up lighter than you.
00:39:20.540 -->
00:39:21.880Might be a lighting thing.
00:39:21.880 -->
00:39:22.860But anyway.
00:39:22.860 -->
00:39:23.400Yeah.
00:39:23.400 -->
00:39:23.900Yeah.
00:39:23.900 -->
00:39:24.200For sure.
00:39:24.200 -->
00:39:25.840Let's see.
00:39:25.840 -->
00:39:27.380Also, just to round this out.
00:39:27.380 -->
00:39:29.460For the live streams, we use StreamYard.
00:39:29.460 -->
00:39:30.900Oh, yeah.
00:39:30.900 -->
00:39:32.000We've been happy with that.
00:39:32.000 -->
00:39:32.460Yeah.
00:39:32.460 -->
00:39:33.320StreamYard is really good.
00:39:33.320 -->
00:39:33.700Really good.
00:39:33.700 -->
00:39:36.240And Jay Miller out there says,
00:39:36.240 -->
00:39:38.380If you're doing both recording and streaming,
00:39:38.380 -->
00:39:39.240I recommend Ecamm.
00:39:39.240 -->
00:39:40.660Massive fan.
00:39:40.660 -->
00:39:42.440They built Zoom stream support,
00:39:42.580 -->
00:39:43.260which is, yeah.
00:39:43.260 -->
00:39:44.860Jay does some cool live streaming as well.
00:39:44.860 -->
00:39:45.720So, all right.
00:39:45.720 -->
00:39:47.420That was actually kind of a long-winded answer.
00:39:47.420 -->
00:39:48.480But that's what we're doing, folks.
00:39:48.480 -->
00:39:49.680For those of you who aren't interested.
00:39:49.680 -->
00:39:50.200Yeah.
00:39:50.200 -->
00:39:51.300Anything else?
00:39:51.300 -->
00:39:52.600Are we up to the joke?
00:39:52.600 -->
00:39:53.980I am ready to tell the joke.
00:39:53.980 -->
00:39:55.980And now, this joke has no graphic.
00:39:55.980 -->
00:39:58.360No graphic.
00:39:58.360 -->
00:39:59.220But I thought I would put,
00:39:59.220 -->
00:40:01.140just for the live stream here,
00:40:01.140 -->
00:40:04.020I would put a picture of a really nice data center
00:40:04.020 -->
00:40:05.800so people can appreciate their code running
00:40:05.800 -->
00:40:07.420in like an awesome place here.
00:40:07.420 -->
00:40:07.840Okay?
00:40:07.840 -->
00:40:09.360Yeah.
00:40:09.360 -->
00:40:10.100It's terrible.
00:40:10.100 -->
00:40:10.660Okay.
00:40:10.660 -->
00:40:11.880It's that.
00:40:11.960 -->
00:40:12.640It's a really bad,
00:40:12.640 -->
00:40:15.660a really bad looking place there.
00:40:15.660 -->
00:40:17.660So, here's the joke.
00:40:17.660 -->
00:40:21.520This is like an Alcoholics Anonymous meeting type of thing.
00:40:21.520 -->
00:40:22.060Okay.
00:40:22.060 -->
00:40:23.820Which, alcoholism is not funny,
00:40:23.820 -->
00:40:25.720but making fun of DevOps is.
00:40:25.720 -->
00:40:28.380So, let's do it in that style, right?
00:40:28.380 -->
00:40:32.680This joke is adapted from a joke Blaze wrote and sent in.
00:40:32.680 -->
00:40:34.760So, this is the DevOps support group.
00:40:34.760 -->
00:40:35.360Are you ready, Brian?
00:40:35.360 -->
00:40:35.880Yeah.
00:40:36.140 -->
00:40:36.440Hi.
00:40:36.440 -->
00:40:36.480Hi.
00:40:36.480 -->
00:40:37.600My name is Bob.
00:40:37.600 -->
00:40:38.220Group.
00:40:38.220 -->
00:40:39.300Hi, Bob.
00:40:39.300 -->
00:40:43.080It's been 42 days since I last SSH'd into production.
00:40:43.080 -->
00:40:44.500Applause for the group.
00:40:44.500 -->
00:40:47.340But only four days since I actually took down the website.
00:40:47.340 -->
00:40:48.380Someone in the back.
00:40:48.380 -->
00:40:49.080Oh, Bob.
00:40:49.080 -->
00:40:49.880Oh, Bob.
00:40:49.880 -->
00:40:55.680That's funny.
00:40:55.680 -->
00:40:56.360Yeah.
00:40:56.460 -->
00:40:57.120It's a good one.
00:40:57.120 -->
00:40:57.660Yeah.
00:40:57.660 -->
00:40:59.800You don't want to be the one who took down the website.
00:40:59.800 -->
00:41:00.440How?
00:41:00.440 -->
00:41:02.440If he didn't SSH into production.
00:41:02.440 -->
00:41:05.280Well, he must have shipped a bad Ansible script or something.
00:41:05.280 -->
00:41:05.740I don't know.
00:41:05.740 -->
00:41:05.880Yeah.
00:41:06.880 -->
00:41:11.500Like, I knew the last time I took down the website inadvertent, I was completely out of
00:41:11.500 -->
00:41:11.660the blue.
00:41:11.660 -->
00:41:13.080I'm like, what in the world is happening?
00:41:13.080 -->
00:41:15.300Was I was using the Walrus operator.
00:41:15.300 -->
00:41:19.080And Python, it was a while ago, Python 3.7 was running on the server.
00:41:19.080 -->
00:41:21.620I didn't use the Walrus operator on the website code.
00:41:21.620 -->
00:41:23.780I used it on a, like, utility thing.
00:41:23.780 -->
00:41:30.660But the script was collected in a subsection where the web framework scanned for routes for
00:41:30.660 -->
00:41:31.300the framework.
00:41:31.780 -->
00:41:36.100And as it tried to parse the Walrus code to see if it could add it to the website, it
00:41:36.100 -->
00:41:37.400took down the website instead.
00:41:37.400 -->
00:41:38.080It couldn't start.
00:41:38.080 -->
00:41:38.960Oh, no.
00:41:38.960 -->
00:41:40.760Yeah.
00:41:40.760 -->
00:41:41.260Yeah.
00:41:41.260 -->
00:41:41.780Anyway.
00:41:41.780 -->
00:41:42.600Oh, Bob.
00:41:42.600 -->
00:41:43.460Oh, Bob.
00:41:43.460 -->
00:41:45.600Don't be Bob.
00:41:45.600 -->
00:41:47.600Stay on top of stuff with Python bytes.
00:41:47.600 -->
00:41:48.980Get all the latest things.
00:41:48.980 -->
00:41:50.000Don't be Bob.
00:41:50.000 -->
00:41:52.280Unless your name is Bob.
00:41:52.280 -->
00:41:53.040Then you be Bob.
00:41:53.040 -->
00:41:55.100Don't be that Bob.
00:41:55.100 -->
00:41:56.360Don't be that Bob.
00:41:56.360 -->
00:41:57.080Exactly.
00:41:57.080 -->
00:41:57.820All right.
00:41:57.820 -->
00:42:01.660Well, thank you, everyone, for being here and sending in all the stuff.
00:42:01.660 -->
00:42:02.600a lot of fun Brian
00:42:02.600 -->
00:42:03.140see you later
00:42:03.140 -->
00:42:04.040thanks a lot bye