WEBVTT

00:00:00.020 --> 00:00:05.420
<v Michael Kennedy>Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.

00:00:05.560 --> 00:00:12.060
<v Michael Kennedy>This is episode 460, recorded, unbelievably, December 1st.

00:00:12.340 --> 00:00:12.980
<v Michael Kennedy>I'm Michael Kennedy.

00:00:13.400 --> 00:00:14.100
<v Michael Kennedy>And I'm Brian Okken.

00:00:14.420 --> 00:00:20.880
<v Michael Kennedy>And this episode is brought to you by us, especially Black Friday things that we have on offer.

00:00:21.340 --> 00:00:23.540
<v Michael Kennedy>I don't know, it's been a great Black Friday for me.

00:00:23.640 --> 00:00:27.940
<v Michael Kennedy>A lot of people really interested in the stuff that I put together, hopefully for you as well, Brian.

00:00:28.260 --> 00:00:29.940
<v Brian Okken>Yeah, I kind of forgot about Black Friday.

00:00:30.240 --> 00:00:31.620
<v Brian Okken>Well, the Black Friday has been going good.

00:00:31.740 --> 00:00:33.180
<v Brian Okken>What I forgot about was Cyber Monday.

00:00:33.540 --> 00:00:41.060
<v Brian Okken>So I did add today so people can use Cyber Monday code for the course today.

00:00:41.480 --> 00:00:43.380
<v Brian Okken>But yeah, I just added that this morning.

00:00:44.020 --> 00:00:48.260
<v Michael Kennedy>Well, people can look for an email from me if they're signed up to the newsletters.

00:00:49.020 --> 00:00:51.660
<v Michael Kennedy>Is your stuff, what's yours through?

00:00:51.860 --> 00:00:52.860
<v Michael Kennedy>Is it through today?

00:00:53.540 --> 00:00:56.740
<v Michael Kennedy>I think I'm going to have it end just tomorrow morning.

00:00:57.100 --> 00:01:00.360
<v Michael Kennedy>So in case people are like, oh, no, I always get emails like, I missed it by an hour.

00:01:00.640 --> 00:01:03.500
<v Michael Kennedy>Or just let it go another day and then turn it off.

00:01:04.040 --> 00:01:06.660
<v Brian Okken>So if you're not watching this live, you're kind of SOL.

00:01:06.980 --> 00:01:07.120
<v Brian Okken>Sorry.

00:01:08.100 --> 00:01:10.240
<v Michael Kennedy>No, I mean, they can listen today.

00:01:10.620 --> 00:01:12.260
<v Michael Kennedy>Like, this is timely news.

00:01:12.400 --> 00:01:15.920
<v Michael Kennedy>People have got to stay on top of Python by saying can't let it accumulate.

00:01:16.300 --> 00:01:17.780
<v Michael Kennedy>No, it's fine if you listen backwards.

00:01:17.920 --> 00:01:19.680
<v Michael Kennedy>There's a lot of stuff that's not that timely.

00:01:19.840 --> 00:01:21.580
<v Michael Kennedy>But one of my topics certainly is.

00:01:21.860 --> 00:01:23.940
<v Michael Kennedy>Anyway, yeah, that's going good.

00:01:24.740 --> 00:01:25.560
<v Michael Kennedy>Subscribe to the newsletter.

00:01:25.900 --> 00:01:27.020
<v Michael Kennedy>Follow us on the socials.

00:01:27.900 --> 00:01:31.680
<v Michael Kennedy>Make sure to subscribe here on YouTube as well if you're interested in catching that.

00:01:32.420 --> 00:01:34.800
<v Michael Kennedy>We intend the podcast to be an audio podcast.

00:01:35.380 --> 00:01:38.440
<v Michael Kennedy>But while we're doing the live stream, we do put stuff up on the screen.

00:01:38.560 --> 00:01:42.480
<v Michael Kennedy>And sometimes it helps to see it, you know, even though we do our best to keep it audio friendly.

00:01:42.900 --> 00:01:43.000
<v Michael Kennedy>Yeah.

00:01:43.660 --> 00:01:46.900
<v Michael Kennedy>Speaking of putting stuff on the screen, what do you got for us, Brian?

00:01:47.200 --> 00:01:52.260
<v Brian Okken>Well, today is December 1st, and that means that it's the first day of Advent of Code.

00:01:52.680 --> 00:01:57.100
<v Brian Okken>So I want to look to see how long this has been going on.

00:01:57.170 --> 00:01:58.180
<v Brian Okken>And I guess I don't.

00:01:58.440 --> 00:01:59.160
<v Brian Okken>I'll have to look harder.

00:01:59.250 --> 00:02:00.740
<v Brian Okken>I don't know how long this has been going on.

00:02:01.440 --> 00:02:07.500
<v Brian Okken>This is, so what this is, it's code puzzles that you can do in any language.

00:02:08.050 --> 00:02:09.780
<v Brian Okken>The intent is to do them in any language.

00:02:09.970 --> 00:02:12.400
<v Brian Okken>But of course, our listeners are probably doing them in Python.

00:02:12.620 --> 00:02:13.640
<v Brian Okken>Maybe Rust this year.

00:02:13.870 --> 00:02:14.200
<v Brian Okken>Who knows?

00:02:14.600 --> 00:02:16.060
<v Brian Okken>But this is from Eric.

00:02:16.210 --> 00:02:17.040
<v Michael Kennedy>Assembly as a stretch goal?

00:02:17.360 --> 00:02:17.520
<v Michael Kennedy>Come on.

00:02:17.800 --> 00:02:18.160
<v Brian Okken>Yeah.

00:02:20.000 --> 00:02:21.720
<v Brian Okken>This is from Eric Wassel.

00:02:22.560 --> 00:02:24.060
<v Brian Okken>And I really appreciate it.

00:02:24.580 --> 00:02:26.140
<v Brian Okken>This year's a couple changes.

00:02:26.420 --> 00:02:28.620
<v Brian Okken>There's no, let's see, there's 12 days.

00:02:28.910 --> 00:02:34.200
<v Brian Okken>And actually, I'm kind of grateful because I've never actually gotten through all 25.

00:02:34.680 --> 00:02:37.260
<v Brian Okken>And I might, or 24, or how many of them anywhere.

00:02:37.700 --> 00:02:40.180
<v Brian Okken>But so I'm kind of grateful for a shorter one.

00:02:40.350 --> 00:02:42.280
<v Brian Okken>So I can take a couple days to try them out.

00:02:42.430 --> 00:02:43.240
<v Brian Okken>I might try this year.

00:02:44.260 --> 00:02:46.840
<v Brian Okken>And there's, what are the other couple changes?

00:02:47.180 --> 00:02:51.720
<v Brian Okken>There's the global leaderboard has gone away for maintenance reasons.

00:02:52.320 --> 00:02:57.140
<v Brian Okken>So I do appreciate, it's one of the things is we should say thanks for people doing cool stuff.

00:02:57.400 --> 00:02:58.980
<v Brian Okken>So Adventic culture is cool.

00:02:59.110 --> 00:02:59.840
<v Brian Okken>It is sponsored.

00:03:00.060 --> 00:03:04.320
<v Brian Okken>There are some sponsors that have helped keep this going.

00:03:04.820 --> 00:03:08.540
<v Brian Okken>But one of the things I noticed this year, and maybe it's been there and I just haven't noticed,

00:03:08.800 --> 00:03:12.060
<v Brian Okken>is there's a swag page.

00:03:12.130 --> 00:03:20.240
<v Brian Okken>You can go look at some cool stuff and you can grab a mug or a shirt or something kind of fun.

00:03:20.540 --> 00:03:22.680
<v Brian Okken>One of the things I kind of like about it is it's not,

00:03:22.880 --> 00:03:24.180
<v Brian Okken>the year isn't on there.

00:03:24.480 --> 00:03:26.360
<v Brian Okken>So this can be one that you can just,

00:03:26.980 --> 00:03:29.300
<v Brian Okken>you can pull out and wear every year around Christmas.

00:03:30.080 --> 00:03:30.820
<v Brian Okken>Evergreen swag.

00:03:31.420 --> 00:03:32.360
<v Brian Okken>Yeah, I like it.

00:03:33.239 --> 00:03:34.440
<v Brian Okken>So fun thing.

00:03:34.620 --> 00:03:37.140
<v Brian Okken>I'd love to hear if other people are using

00:03:37.760 --> 00:03:39.540
<v Brian Okken>or doing the Advent of Code this year.

00:03:40.440 --> 00:03:42.520
<v Brian Okken>Yeah, I'd like to hear about how it's going.

00:03:44.799 --> 00:03:47.200
<v Brian Okken>Another kind of associated with this,

00:03:47.270 --> 00:03:48.400
<v Brian Okken>I saw this up on Reddit.

00:03:49.600 --> 00:04:03.060
<v Brian Okken>Somebody wrote a, I know there's been other helpers out there, but there is a Python project that is called Elf, which is a modern advent of code helper that fetches inputs, submits answers and tracks your progress.

00:04:03.600 --> 00:04:05.200
<v Brian Okken>So we're going to link to that as well.

00:04:05.680 --> 00:04:06.680
<v Brian Okken>Just saw this.

00:04:08.560 --> 00:04:11.300
<v Brian Okken>Oh, they've been working on it for a few months, getting ready for it.

00:04:11.520 --> 00:04:11.840
<v Brian Okken>That's cool.

00:04:12.260 --> 00:04:17.440
<v Brian Okken>So Elf is a command line interface to kind of play with the advent of code stuff.

00:04:17.560 --> 00:04:18.739
<v Brian Okken>So we'll link to that as well.

00:04:18.980 --> 00:04:43.620
<v Michael Kennedy>Yeah, very cool. The advent of code stuff is interesting, but I've never really put much time and energy into it personally. I just have so many projects that I have ideas for and I want to build and I can't even focus on them. So it's like, it is cool. I'm personally thankful for surviving Hocktoberfest without 10 PRs suggesting that I put a comma in my readme.

00:04:45.040 --> 00:04:45.780
<v Michael Kennedy>Did you get any?

00:04:46.420 --> 00:04:47.520
<v Michael Kennedy>No, I used to.

00:04:47.540 --> 00:04:48.620
<v Michael Kennedy>I used to get a bunch.

00:04:48.720 --> 00:04:50.320
<v Michael Kennedy>Like, hey, we've improved your readme.

00:04:50.360 --> 00:04:53.800
<v Michael Kennedy>And it's like, you're looking to do a PR is what you're looking to do.

00:04:54.900 --> 00:04:56.060
<v Michael Kennedy>You're just wasting my time.

00:04:56.260 --> 00:05:02.720
<v Michael Kennedy>But actually, no, maybe people put up rules around it or they just put up admonishment.

00:05:02.780 --> 00:05:04.240
<v Michael Kennedy>Like, please don't bother people like that.

00:05:04.520 --> 00:05:05.540
<v Michael Kennedy>But yeah, not this year.

00:05:05.800 --> 00:05:06.320
<v Michael Kennedy>Yeah, cool.

00:05:08.360 --> 00:05:10.080
<v Michael Kennedy>Let's talk about Django, huh?

00:05:10.480 --> 00:05:11.540
<v Michael Kennedy>That's what I want to cover next.

00:05:12.060 --> 00:05:13.240
<v Michael Kennedy>Yeah, Django.

00:05:13.640 --> 00:05:19.820
<v Michael Kennedy>And what's cool is Django is coming up with a major new release.

00:05:20.500 --> 00:05:22.580
<v Michael Kennedy>They're knocking out the versions pretty quickly.

00:05:23.260 --> 00:05:28.300
<v Michael Kennedy>And as I did point out at the opening, this is expected December 2025.

00:05:28.480 --> 00:05:30.920
<v Michael Kennedy>So I'm expecting this any moment now, Brian.

00:05:31.280 --> 00:05:31.500
<v Michael Kennedy>Okay.

00:05:31.600 --> 00:05:36.320
<v Michael Kennedy>Seriously, Django 6 has some really cool features, actually some genuinely useful ones.

00:05:36.360 --> 00:05:42.440
<v Michael Kennedy>The first thing I want to point out about it is how aggressive they are at saying no to older versions.

00:05:42.760 --> 00:05:43.500
<v Michael Kennedy>Like no old Python.

00:05:44.020 --> 00:05:46.240
<v Michael Kennedy>They only support Python 3.12 and above.

00:05:46.700 --> 00:05:48.360
<v Michael Kennedy>That's pretty hardcore, honestly.

00:05:49.340 --> 00:05:50.920
<v Brian Okken>Yeah, but it's an application.

00:05:51.260 --> 00:05:52.920
<v Brian Okken>So you get to decide.

00:05:53.100 --> 00:05:55.440
<v Brian Okken>It's not like if you're building on top of Django,

00:05:55.580 --> 00:05:58.820
<v Brian Okken>you have to support backwards compatible stuff.

00:05:59.420 --> 00:06:02.780
<v Michael Kennedy>Yeah, but you may have a five-year-old Django app

00:06:02.800 --> 00:06:04.540
<v Michael Kennedy>you want to upgrade that has some weird dependency

00:06:05.240 --> 00:06:06.640
<v Michael Kennedy>that goes up to 3.10.

00:06:06.700 --> 00:06:07.180
<v Michael Kennedy>You know what I mean?

00:06:07.560 --> 00:06:09.800
<v Michael Kennedy>And I'm not saying this is a bad thing.

00:06:10.040 --> 00:06:10.900
<v Michael Kennedy>I think this is awesome.

00:06:11.440 --> 00:06:15.180
<v Michael Kennedy>I think there's a lot of benefit that people are missing out.

00:06:15.480 --> 00:06:19.260
<v Michael Kennedy>Like when I did the year in review sort of thing,

00:06:19.680 --> 00:06:21.500
<v Michael Kennedy>article at JetBrains earlier this year,

00:06:21.900 --> 00:06:25.760
<v Michael Kennedy>one of the areas I worked on and like sort of did a bunch of math

00:06:25.760 --> 00:06:28.640
<v Michael Kennedy>and like predictions or stats on or whatever

00:06:29.180 --> 00:06:32.300
<v Michael Kennedy>was this what version of Python are people running on?

00:06:32.500 --> 00:06:35.760
<v Michael Kennedy>And a huge bunch of people are still running on 310 or older.

00:06:36.180 --> 00:06:39.420
<v Michael Kennedy>And your code is so much faster and uses less memory

00:06:39.820 --> 00:06:40.620
<v Michael Kennedy>and just so much better.

00:06:40.780 --> 00:06:43.100
<v Michael Kennedy>Like forget the new features that you get to use.

00:06:43.380 --> 00:06:46.300
<v Michael Kennedy>Just literally it's like 50% faster or something

00:06:46.720 --> 00:06:49.580
<v Michael Kennedy>just by changing what version of Python you're running on.

00:06:50.180 --> 00:06:53.360
<v Michael Kennedy>And this sort of encourages the Python people who also Django

00:06:53.950 --> 00:06:57.460
<v Michael Kennedy>to ride at the further out on the edge of that wave, I suppose,

00:06:57.760 --> 00:07:00.620
<v Michael Kennedy>which is really good because, yeah, it definitely helps.

00:07:01.040 --> 00:07:04.080
<v Michael Kennedy>So 5.2 is the last one to support, 3.10 and 3.11.

00:07:04.200 --> 00:07:06.480
<v Michael Kennedy>So they dropped two years worth of Python in one year.

00:07:06.710 --> 00:07:06.980
<v Michael Kennedy>Pretty good.

00:07:08.540 --> 00:07:10.680
<v Michael Kennedy>So features, content security policy.

00:07:11.080 --> 00:07:15.560
<v Michael Kennedy>We all do not love our cross-site scripting and other badnesses.

00:07:15.770 --> 00:07:21.300
<v Michael Kennedy>So it comes now with a built-in support for the content security policy standard.

00:07:21.770 --> 00:07:22.560
<v Michael Kennedy>So that's cool.

00:07:23.000 --> 00:07:26.200
<v Michael Kennedy>Avoid CSS or XSS and those kinds of things.

00:07:26.230 --> 00:07:27.920
<v Michael Kennedy>Just install it and configure it.

00:07:28.160 --> 00:07:33.920
<v Michael Kennedy>Basically, it sets some headers, which then tell the web browsers how they're allowed to behave, cross-site, and that kind of thing.

00:07:34.140 --> 00:07:39.560
<v Michael Kennedy>Another one, I feel like this one probably has Carlton Gibson fingerprints on it here,

00:07:40.140 --> 00:07:42.480
<v Michael Kennedy>is they now have template partials.

00:07:43.080 --> 00:07:43.800
<v Michael Kennedy>This is super cool.

00:07:44.220 --> 00:07:51.160
<v Michael Kennedy>So I'm really surprised how much HTMX, the JavaScript where you run in framework,

00:07:51.270 --> 00:07:56.480
<v Michael Kennedy>where you write no JavaScript sort of thing, is how popular it has become in Django.

00:07:56.760 --> 00:07:59.020
<v Michael Kennedy>It's featured in a lot of talks and stuff.

00:07:59.270 --> 00:08:02.159
<v Michael Kennedy>And one of the things that you really, really need to focus on

00:08:02.180 --> 00:08:07.920
<v Michael Kennedy>when you're doing that kind of programming is how do I take portions of my page and then return them

00:08:08.180 --> 00:08:14.020
<v Michael Kennedy>from server-side code. And you can end up with lots of duplication or other weirdnesses. So this

00:08:14.220 --> 00:08:19.920
<v Michael Kennedy>basically addresses that if you want to return a fragment of a page, then you can say, I know here's

00:08:19.920 --> 00:08:27.499
<v Michael Kennedy>the whole page, the whole template of HTML markup with a Django syntax. But in this view, when somebody

00:08:27.520 --> 00:08:30.260
<v Michael Kennedy>makes this request, I want to return just this portion of it.

00:08:30.760 --> 00:08:34.820
<v Michael Kennedy>And you can even do things like, is the request coming in a regular request?

00:08:35.180 --> 00:08:36.000
<v Michael Kennedy>We'll return the whole page.

00:08:36.400 --> 00:08:38.719
<v Michael Kennedy>No, is it an HTMLX partial request?

00:08:38.940 --> 00:08:39.900
<v Michael Kennedy>Then just return the partial.

00:08:40.060 --> 00:08:44.280
<v Michael Kennedy>So this is really, really valuable and basically makes those kinds of frameworks that exchange

00:08:44.640 --> 00:08:47.740
<v Michael Kennedy>partial bits of HTML, regardless of whether it's HTML, nicer.

00:08:48.100 --> 00:08:48.520
<v Michael Kennedy>That's pretty cool.

00:08:48.800 --> 00:08:48.920
<v Michael Kennedy>Yeah.

00:08:49.220 --> 00:08:51.980
<v Michael Kennedy>Another really nice one is a background tasks.

00:08:52.779 --> 00:08:57.260
<v Michael Kennedy>So just a thread that cruises around in the background that you can throw stuff at.

00:08:57.380 --> 00:08:59.420
<v Michael Kennedy>way more useful than you would think.

00:09:00.540 --> 00:09:03.140
<v Michael Kennedy>Sometimes you want to process something

00:09:03.170 --> 00:09:04.060
<v Michael Kennedy>that takes a little bit longer,

00:09:04.540 --> 00:09:07.320
<v Michael Kennedy>but you don't want to block up the request response.

00:09:07.620 --> 00:09:09.240
<v Michael Kennedy>Like, hey, I want to sign up for your newsletter.

00:09:09.380 --> 00:09:11.500
<v Michael Kennedy>If you want to send them a welcome to my newsletter

00:09:11.660 --> 00:09:15.500
<v Michael Kennedy>or whatever email, you could on that request block

00:09:16.200 --> 00:09:17.380
<v Michael Kennedy>and let it sit there and spin,

00:09:17.960 --> 00:09:21.720
<v Michael Kennedy>fire up your email API, connect, send,

00:09:21.940 --> 00:09:24.000
<v Michael Kennedy>wait for that actually to send, get a response back

00:09:24.500 --> 00:09:26.820
<v Michael Kennedy>and then say, welcome, we've sent you an email, right?

00:09:26.980 --> 00:09:30.240
<v Michael Kennedy>That's one way, but that makes your code potentially slow.

00:09:30.680 --> 00:09:34.060
<v Michael Kennedy>It'd be nice to go instantly, hey, thanks for signing up.

00:09:34.440 --> 00:09:35.880
<v Michael Kennedy>You're on the newsletter.

00:09:36.050 --> 00:09:39.820
<v Michael Kennedy>And then kick off a task to the background, like send that person an email.

00:09:40.220 --> 00:09:41.520
<v Michael Kennedy>For one email, it's not that big of a deal.

00:09:41.530 --> 00:09:45.120
<v Michael Kennedy>If you've got to send a lot or do a bunch of stuff, it can time out your web requests.

00:09:46.720 --> 00:09:48.760
<v Michael Kennedy>You get normally 20 seconds or something like that.

00:09:48.940 --> 00:09:50.460
<v Michael Kennedy>And if it takes longer than that, it's a problem.

00:09:50.660 --> 00:09:54.100
<v Michael Kennedy>Of course, people are going to be freaked out and reload or whatever as well.

00:09:54.240 --> 00:09:56.300
<v Michael Kennedy>But anyway, this is like a real simple way

00:09:56.340 --> 00:10:00.080
<v Michael Kennedy>so you don't have to run other servers and message queues

00:10:00.240 --> 00:10:01.200
<v Michael Kennedy>and all that kind of stuff.

00:10:01.280 --> 00:10:03.380
<v Michael Kennedy>You just put it in the background of your app and let it go.

00:10:03.660 --> 00:10:05.080
<v Michael Kennedy>It's not as durable, but it's great.

00:10:05.200 --> 00:10:07.500
<v Brian Okken>Almost every app needs some sort of background task.

00:10:07.740 --> 00:10:10.040
<v Brian Okken>So this is awesome that it's included now.

00:10:10.220 --> 00:10:11.480
<v Michael Kennedy>It's cool that it's included, absolutely.

00:10:12.440 --> 00:10:14.280
<v Michael Kennedy>Speaking of email, email handling in Django

00:10:14.360 --> 00:10:17.880
<v Michael Kennedy>now uses the Python's modern API introduced in 3.6

00:10:18.260 --> 00:10:20.460
<v Michael Kennedy>using email.message.emailmessage.

00:10:20.740 --> 00:10:21.120
<v Michael Kennedy>Super cool.

00:10:21.540 --> 00:10:22.280
<v Michael Kennedy>Easier to send that way.

00:10:22.400 --> 00:10:25.160
<v Michael Kennedy>and then a bunch of minor features that I'm not going to go into.

00:10:25.480 --> 00:10:29.760
<v Michael Kennedy>Anyway, that's a pretty big set of releases or features for a year.

00:10:30.060 --> 00:10:30.180
<v Brian Okken>Yeah.

00:10:30.959 --> 00:10:34.040
<v Brian Okken>Yeah, so now we have to see how many people are going to update

00:10:34.220 --> 00:10:38.880
<v Brian Okken>all of their Django books and tutorials and everything,

00:10:39.860 --> 00:10:40.360
<v Brian Okken>Django 6.

00:10:41.320 --> 00:10:44.120
<v Brian Okken>It's both an opportunity and a bit of a challenge.

00:10:44.839 --> 00:10:45.240
<v Brian Okken>Yeah.

00:10:45.340 --> 00:10:49.280
<v Brian Okken>So Django's not a-- that isn't just a year, though, is it?

00:10:50.160 --> 00:10:54.280
<v Brian Okken>Doesn't there is the release cycle like a year and a half or two years or something like that?

00:10:54.560 --> 00:10:55.200
<v Brian Okken>Let's see.

00:10:55.690 --> 00:10:57.620
<v Michael Kennedy>I feel like, where's the release?

00:10:57.980 --> 00:10:58.320
<v Michael Kennedy>Here we go.

00:10:58.540 --> 00:10:58.980
<v Michael Kennedy>It's yearly.

00:10:59.420 --> 00:10:59.860
<v Michael Kennedy>Yeah, it's yearly.

00:11:00.480 --> 00:11:00.660
<v Michael Kennedy>Okay.

00:11:00.990 --> 00:11:01.440
<v Michael Kennedy>Well, yeah.

00:11:01.740 --> 00:11:02.100
<v Michael Kennedy>Hold on.

00:11:02.220 --> 00:11:03.640
<v Michael Kennedy>It depends on what you call.

00:11:03.940 --> 00:11:05.420
<v Michael Kennedy>Like, what is the version bump?

00:11:05.960 --> 00:11:09.560
<v Michael Kennedy>There is a release every year, but it's not always a major version bump.

00:11:09.670 --> 00:11:12.520
<v Michael Kennedy>Like, 6 is coming, but then 6.1 and 6.2 are planned.

00:11:12.570 --> 00:11:14.800
<v Michael Kennedy>And I think 6.2 might be the LTS.

00:11:15.080 --> 00:11:15.220
<v Michael Kennedy>Yeah.

00:11:15.420 --> 00:11:17.240
<v Michael Kennedy>So it bumps between LTSs.

00:11:17.400 --> 00:11:19.900
<v Michael Kennedy>And the LTSs are on a three-year cycle.

00:11:20.120 --> 00:11:24.440
<v Michael Kennedy>long-term support so you're not forced to keep rolling to get security fixes and stuff yeah

00:11:24.780 --> 00:11:28.960
<v Brian Okken>yeah and i think that's because of some deprecation uh stuff and everything so

00:11:29.580 --> 00:11:36.720
<v Brian Okken>all right cool gotta love advancements in django yep um okay well i um i'm gonna look take a look

00:11:36.720 --> 00:11:41.700
<v Brian Okken>at some typing stuff how's that sound i love typing let's do it um so there's a there's an article

00:11:42.020 --> 00:11:48.500
<v Brian Okken>um called advanced overlooked python typing and there's some goodies in here that i didn't know

00:11:48.460 --> 00:11:49.180
<v Brian Okken>about, which is cool.

00:11:49.300 --> 00:11:52.180
<v Brian Okken>So I was slow to come on board with typing,

00:11:52.480 --> 00:11:53.980
<v Brian Okken>but I like all of the extra.

00:11:54.720 --> 00:11:56.020
<v Brian Okken>I'm kind of a fan now.

00:11:56.200 --> 00:11:59.780
<v Brian Okken>Plus, it only takes having one package that's kind of popular

00:12:00.080 --> 00:12:01.760
<v Brian Okken>that people will demand that you--

00:12:02.320 --> 00:12:06.620
<v Brian Okken>so anyway, so some cool extra things

00:12:06.720 --> 00:12:09.620
<v Brian Okken>if you possibly may not have known about.

00:12:09.920 --> 00:12:12.080
<v Brian Okken>The first I'll jump into is--

00:12:12.260 --> 00:12:13.940
<v Brian Okken>oh, there's a disclaimer here that it says

00:12:14.120 --> 00:12:16.300
<v Brian Okken>that it's looking at modern stuff.

00:12:16.480 --> 00:12:21.600
<v Brian Okken>So Python 312 or 313 or newer for some of this stuff.

00:12:22.600 --> 00:12:23.800
<v Brian Okken>So assert never.

00:12:23.880 --> 00:12:25.180
<v Brian Okken>I didn't know this was a thing.

00:12:25.600 --> 00:12:30.520
<v Brian Okken>So let's say you've got a match case thing like switches.

00:12:31.480 --> 00:12:33.720
<v Brian Okken>And you've got your catch all at the end.

00:12:33.780 --> 00:12:35.440
<v Brian Okken>And you want to never hit that.

00:12:36.100 --> 00:12:39.940
<v Brian Okken>Usually I'll throw an assert there or something just in case.

00:12:40.480 --> 00:12:42.040
<v Brian Okken>But there's an assert never.

00:12:42.700 --> 00:12:44.100
<v Brian Okken>That comes from typing.

00:12:44.280 --> 00:12:45.040
<v Brian Okken>Didn't know that was there.

00:12:45.200 --> 00:12:49.040
<v Brian Okken>that you can make sure that this default case has never hit,

00:12:49.240 --> 00:12:51.140
<v Brian Okken>or if you have other cases that should never be hit.

00:12:51.640 --> 00:12:52.380
<v Brian Okken>Throw that in there.

00:12:52.660 --> 00:12:52.940
<v Brian Okken>That's cool.

00:12:53.680 --> 00:12:54.600
<v Brian Okken>Didn't know that existed.

00:12:55.460 --> 00:12:56.140
<v Brian Okken>There's getArgs.

00:12:56.940 --> 00:12:59.320
<v Brian Okken>And the idea around getArgs is,

00:12:59.580 --> 00:13:00.640
<v Brian Okken>oh, this is a little small,

00:13:00.830 --> 00:13:03.560
<v Brian Okken>so I'm going to see if I can make this a little bigger.

00:13:04.560 --> 00:13:06.480
<v Brian Okken>The idea around getArgs is,

00:13:06.910 --> 00:13:08.720
<v Brian Okken>so if you've got,

00:13:10.320 --> 00:13:13.400
<v Brian Okken>like here we've got frozen sets to have literals.

00:13:13.720 --> 00:13:14.700
<v Brian Okken>There's literals before,

00:13:14.980 --> 00:13:22.460
<v Brian Okken>but you kind of had to have a duplication of all the actual literals for typing for different things.

00:13:22.540 --> 00:13:25.460
<v Brian Okken>And that's in a set of literals, and that's sort of a pain.

00:13:25.780 --> 00:13:36.300
<v Brian Okken>So instead of that, you can do get args, which creates essentially a set of literals for types, for things that are in something.

00:13:37.280 --> 00:13:40.560
<v Brian Okken>So you kind of have to see the code here to understand that.

00:13:40.740 --> 00:13:51.000
<v Brian Okken>It helps with keeping it in line so that when you create an extra element in your set, it automatically gets an extra type.

00:13:51.600 --> 00:13:52.880
<v Brian Okken>TypeGuard we've covered before.

00:13:53.600 --> 00:13:54.820
<v Brian Okken>I think we've covered it.

00:13:55.000 --> 00:13:58.420
<v Brian Okken>It gets you the exact type-narrowing logic.

00:13:59.320 --> 00:14:04.180
<v Brian Okken>I haven't used TypeGuard a lot, but there's sort of a pickier version.

00:14:04.520 --> 00:14:09.200
<v Brian Okken>Type is a stricter and more prophesied type-narrowing than TypeGuard.

00:14:09.240 --> 00:14:11.300
<v Brian Okken>by enabling bidirectional narrowing.

00:14:11.640 --> 00:14:14.520
<v Brian Okken>Okay, so kind of fun with type is.

00:14:14.900 --> 00:14:17.180
<v Brian Okken>Anyway, some extra,

00:14:17.820 --> 00:14:21.100
<v Brian Okken>oh, we've got unpacking and concatenation for callables.

00:14:22.139 --> 00:14:23.720
<v Brian Okken>Oh, callable with dot, dot.

00:14:23.940 --> 00:14:26.380
<v Brian Okken>Anyway, a lot of goodies for if you want to like

00:14:26.540 --> 00:14:27.920
<v Brian Okken>really get into some of the nitty gritty

00:14:28.080 --> 00:14:30.300
<v Brian Okken>and some of the extra fun things with typing.

00:14:30.520 --> 00:14:31.180
<v Brian Okken>This is a fun article.

00:14:31.860 --> 00:14:32.640
<v Michael Kennedy>Yeah, very nice.

00:14:32.780 --> 00:14:36.040
<v Michael Kennedy>I actually have an interesting one to add to that

00:14:36.180 --> 00:14:37.340
<v Michael Kennedy>is no return.

00:14:37.980 --> 00:14:38.440
<v Michael Kennedy>Oh, really?

00:14:38.720 --> 00:14:38.840
<v Michael Kennedy>Okay.

00:14:39.000 --> 00:14:43.620
<v Michael Kennedy>So you can go to a function and you can say arrow, I mean, goes to int,

00:14:43.980 --> 00:14:47.320
<v Michael Kennedy>goes to stir, goes to optional customer, whatever.

00:14:47.810 --> 00:14:51.300
<v Michael Kennedy>You can even say it returns none, which is literally it returns none.

00:14:51.720 --> 00:14:54.600
<v Michael Kennedy>But no return is, it's not like a void.

00:14:54.680 --> 00:14:55.300
<v Michael Kennedy>It's different.

00:14:55.460 --> 00:14:59.800
<v Michael Kennedy>It basically says the only way that this function exits is through an exception.

00:15:00.300 --> 00:15:01.520
<v Michael Kennedy>There's no way out of it.

00:15:01.830 --> 00:15:04.660
<v Michael Kennedy>So you might have a while application is still running.

00:15:05.120 --> 00:15:10.920
<v Michael Kennedy>And then in some case, if it decides it needs to stop, it raises an aborted, task aborted exception.

00:15:11.400 --> 00:15:14.600
<v Michael Kennedy>And it's like, while true, if exit, raise task aborted.

00:15:14.640 --> 00:15:16.500
<v Michael Kennedy>Like there's no regular way out.

00:15:16.550 --> 00:15:19.700
<v Michael Kennedy>The only way out is through an exception than this.

00:15:20.420 --> 00:15:22.240
<v Michael Kennedy>So you might think, why would I ever do that?

00:15:22.440 --> 00:15:30.100
<v Michael Kennedy>Well, some of the web frameworks, when you do a redirect, the way they do the redirect is they raise an HTTP redirect sort of exception type thing,

00:15:30.480 --> 00:15:36.180
<v Michael Kennedy>which is more likely to just like make it get all the way out right away rather than if you forget

00:15:36.340 --> 00:15:40.320
<v Michael Kennedy>to say return redirect, right? Something like that. So you'd put a no return there. Isn't that a weird

00:15:40.330 --> 00:15:47.680
<v Brian Okken>one? Yeah. Yeah. So I would have expected like one of the commenters, I thought no return was

00:15:47.920 --> 00:15:53.960
<v Brian Okken>equivalent to return none. So if you don't have a return, that's not what it means. I'm like, oh,

00:15:54.080 --> 00:15:59.399
<v Michael Kennedy>this is a really cool way to say it only returns none ever, which is the case if you never, if you

00:15:59.360 --> 00:16:01.460
<v Michael Kennedy>don't say the keyword return, it still returns none.

00:16:01.820 --> 00:16:05.400
<v Michael Kennedy>But no, this says the only way it gets out

00:16:05.440 --> 00:16:06.080
<v Michael Kennedy>is through exceptions.

00:16:07.020 --> 00:16:08.000
<v Michael Kennedy>Yeah, it was weird, right?

00:16:08.440 --> 00:16:11.380
<v Michael Kennedy>Timing module, annotate functions that never return normally.

00:16:11.580 --> 00:16:13.580
<v Michael Kennedy>I wanted a void.

00:16:14.480 --> 00:16:15.300
<v Michael Kennedy>Where's my void?

00:16:15.440 --> 00:16:15.860
<v Michael Kennedy>You know what I mean?

00:16:16.000 --> 00:16:17.100
<v Michael Kennedy>There's nothing coming out of this.

00:16:17.680 --> 00:16:20.860
<v Michael Kennedy>This is not it, but this is something else in that realm

00:16:21.260 --> 00:16:21.860
<v Michael Kennedy>of advanced type.

00:16:21.940 --> 00:16:23.640
<v Brian Okken>Yeah, and those things do exist.

00:16:23.840 --> 00:16:24.840
<v Brian Okken>So yeah, interesting.

00:16:25.319 --> 00:16:26.120
<v Michael Kennedy>They sure do.

00:16:26.660 --> 00:16:29.000
<v Michael Kennedy>So you know what else exists is misspellings.

00:16:29.260 --> 00:16:31.800
<v Michael Kennedy>So I got on my Talk Python in production book,

00:16:32.600 --> 00:16:34.720
<v Michael Kennedy>Christian Klaus was kind enough to send me a message saying,

00:16:34.980 --> 00:16:37.780
<v Michael Kennedy>hey, you know, so you may have some misspellings.

00:16:38.200 --> 00:16:39.640
<v Michael Kennedy>And he sent me this thing, right?

00:16:40.160 --> 00:16:40.800
<v Michael Kennedy>As a PR.

00:16:41.600 --> 00:16:45.680
<v Michael Kennedy>However, it says fixed typos discovered by code spell,

00:16:46.180 --> 00:16:47.000
<v Michael Kennedy>all one word, code spell.

00:16:47.320 --> 00:16:47.780
<v Michael Kennedy>- Okay. - Wait,

00:16:47.910 --> 00:16:49.080
<v Michael Kennedy>what is this code spell?

00:16:49.960 --> 00:16:52.160
<v Michael Kennedy>Well, code spell is a tool that checks

00:16:52.380 --> 00:16:55.240
<v Michael Kennedy>for common misspellings in source code.

00:16:55.530 --> 00:16:57.180
<v Michael Kennedy>It works on other files as well,

00:16:57.340 --> 00:17:00.680
<v Michael Kennedy>but it especially works on different types of source files

00:17:01.220 --> 00:17:04.100
<v Michael Kennedy>'cause it ignores backslash escapes

00:17:04.360 --> 00:17:07.079
<v Michael Kennedy>and other things that are common in code.

00:17:07.579 --> 00:17:09.240
<v Michael Kennedy>But it's not a spell checker.

00:17:09.520 --> 00:17:12.520
<v Michael Kennedy>It's a misspelling finder, let's say.

00:17:12.900 --> 00:17:14.819
<v Michael Kennedy>So what it does is it goes and it says,

00:17:14.939 --> 00:17:17.100
<v Michael Kennedy>I'm gonna look for words that are commonly misspelled.

00:17:17.300 --> 00:17:20.160
<v Michael Kennedy>Like in my example, what two things had I misspelled.

00:17:20.160 --> 00:17:23.100
<v Michael Kennedy>I had FOM instead of from, F-O-M.

00:17:23.520 --> 00:17:29.440
<v Michael Kennedy>had plausible with able instead of able on it. Right. So it looks for common misspellings. It

00:17:29.560 --> 00:17:33.880
<v Michael Kennedy>doesn't look for words. It doesn't know because those are super annoying. You're like, here's

00:17:34.700 --> 00:17:40.140
<v Michael Kennedy>723 misspellings. Like, no, those are acronyms. You know what I mean? Yeah. like that is a

00:17:40.420 --> 00:17:45.280
<v Michael Kennedy>library I'm importing. It's not misspelled. If I change it, it doesn't work. Right. Like that

00:17:45.440 --> 00:17:51.039
<v Michael Kennedy>kind of stuff. So what this does is it looks for like common misspellings, like ADN or, TEH

00:17:51.060 --> 00:17:52.960
<v Michael Kennedy>or what, you know, stuff like that.

00:17:53.300 --> 00:17:54.840
<v Michael Kennedy>Anyway, there's not a whole lot more to say about it

00:17:54.930 --> 00:17:56.660
<v Michael Kennedy>other than it's pretty cool, it's configurable,

00:17:56.800 --> 00:17:59.120
<v Michael Kennedy>you can like put words that are, you know,

00:17:59.360 --> 00:18:00.860
<v Michael Kennedy>learn the spelling equivalents

00:18:00.910 --> 00:18:03.740
<v Michael Kennedy>and put other types of config files and whatnot.

00:18:04.140 --> 00:18:04.960
<v Michael Kennedy>Oh, this is cool.

00:18:05.240 --> 00:18:07.940
<v Michael Kennedy>Yeah, you can even put it into a pyproject.toml

00:18:08.100 --> 00:18:09.060
<v Michael Kennedy>in settings if you wish.

00:18:09.460 --> 00:18:09.600
<v Michael Kennedy>Cool.

00:18:09.880 --> 00:18:13.640
<v Michael Kennedy>Yeah, it's got 2.3,000, 2,300 GitHub stars.

00:18:13.840 --> 00:18:15.080
<v Michael Kennedy>So yeah, pretty popular actually.

00:18:15.460 --> 00:18:18.359
<v Brian Okken>As somebody that uses a code editor

00:18:18.380 --> 00:18:21.400
<v Brian Okken>exclusively for all of my text writing needs.

00:18:22.090 --> 00:18:22.640
<v Michael Kennedy>This will be good.

00:18:23.180 --> 00:18:23.800
<v Michael Kennedy>Yeah, indeed.

00:18:24.330 --> 00:18:28.420
<v Michael Kennedy>I think Christian even set it up as a pre-commit hook.

00:18:28.760 --> 00:18:29.440
<v Michael Kennedy>Oh, that's a good idea.

00:18:29.680 --> 00:18:30.420
<v Michael Kennedy>Which is kind of interesting

00:18:30.640 --> 00:18:32.220
<v Michael Kennedy>because it's apparently pretty fast.

00:18:32.540 --> 00:18:34.560
<v Michael Kennedy>I think this is the one we were talking about.

00:18:34.700 --> 00:18:36.560
<v Michael Kennedy>Yeah, it has like, there's something about pre-commit

00:18:36.660 --> 00:18:37.880
<v Michael Kennedy>like right there in the last commit.

00:18:38.140 --> 00:18:39.760
<v Michael Kennedy>So I'm guessing it does something with that.

00:18:40.340 --> 00:18:40.620
<v Michael Kennedy>All right.

00:18:40.850 --> 00:18:41.780
<v Michael Kennedy>How are you feeling on your extras?

00:18:42.200 --> 00:18:43.740
<v Michael Kennedy>I got a few extras.

00:18:44.700 --> 00:18:44.880
<v Michael Kennedy>Okay.

00:18:45.290 --> 00:18:46.100
<v Michael Kennedy>Yeah, go for it.

00:18:46.280 --> 00:18:46.460
<v Brian Okken>Okay.

00:18:47.180 --> 00:18:47.560
<v Brian Okken>Let's see.

00:18:47.800 --> 00:18:50.400
<v Brian Okken>I'll start with Hatch.

00:18:50.680 --> 00:18:54.060
<v Brian Okken>So Hatch 1.16 came out.

00:18:54.200 --> 00:18:57.180
<v Brian Okken>So some exciting features of Hatch.

00:18:59.139 --> 00:19:04.020
<v Brian Okken>So for Hatch backends and Hatch itself, what do we got?

00:19:04.020 --> 00:19:07.740
<v Brian Okken>We got dependency groups and there are workspaces.

00:19:08.000 --> 00:19:11.300
<v Brian Okken>So workspaces allow you to, like if you have a monorepo

00:19:11.340 --> 00:19:14.540
<v Brian Okken>and you have a bunch of different projects within a monorepo,

00:19:14.600 --> 00:19:15.980
<v Brian Okken>this might help with that.

00:19:16.820 --> 00:19:18.920
<v Brian Okken>And then there's one, this is interesting.

00:19:19.300 --> 00:19:21.200
<v Brian Okken>It supports software bill of materials now.

00:19:22.200 --> 00:19:24.380
<v Brian Okken>So that's going to be, that's becoming a growing thing.

00:19:25.180 --> 00:19:31.720
<v Brian Okken>So update to Hatch and another update on a different project we talked about last week.

00:19:32.120 --> 00:19:32.680
<v Brian Okken>Was it last week?

00:19:32.840 --> 00:19:36.500
<v Brian Okken>We talked about in one of the things we talked about was Zensical.

00:19:37.040 --> 00:19:40.420
<v Brian Okken>And a listener over on Mastodon, Fasodon said,

00:19:41.280 --> 00:19:46.119
<v Brian Okken>one of the things we forgot to mention is Zensical is a replacement for MakeDocs

00:19:46.240 --> 00:19:48.880
<v Brian Okken>plus, what was it, material theme?

00:19:49.240 --> 00:19:51.640
<v Brian Okken>And also one of the things they talked about

00:19:51.900 --> 00:19:54.960
<v Brian Okken>was MakeDocs doesn't seem like it's been maintained

00:19:55.660 --> 00:19:56.840
<v Brian Okken>since the middle of 2024.

00:19:57.540 --> 00:19:59.260
<v Brian Okken>So there's a link in here to,

00:20:00.190 --> 00:20:02.140
<v Brian Okken>is MakeDocs still maintained?

00:20:02.880 --> 00:20:04.760
<v Brian Okken>And I scrolled.

00:20:04.960 --> 00:20:06.180
<v Brian Okken>It's an interesting read,

00:20:06.370 --> 00:20:11.000
<v Brian Okken>but I kind of think the answer is maybe-ish,

00:20:11.300 --> 00:20:12.620
<v Brian Okken>but maybe not.

00:20:15.240 --> 00:20:17.200
<v Brian Okken>So if you always have to,

00:20:17.760 --> 00:20:19.600
<v Michael Kennedy>you always have to split that difference of like,

00:20:19.780 --> 00:20:20.800
<v Michael Kennedy>it could just be done,

00:20:21.160 --> 00:20:21.360
<v Michael Kennedy>you know,

00:20:21.640 --> 00:20:22.620
<v Michael Kennedy>certain things are just,

00:20:22.960 --> 00:20:24.660
<v Michael Kennedy>they really don't need more and they're supposed to be simple,

00:20:24.680 --> 00:20:28.260
<v Michael Kennedy>but I feel like MK docs is something that could continually take on new

00:20:28.760 --> 00:20:30.080
<v Michael Kennedy>variations and features and updates.

00:20:30.660 --> 00:20:30.960
<v Brian Okken>Yeah.

00:20:32.820 --> 00:20:34.380
<v Brian Okken>So not even to say no,

00:20:34.380 --> 00:20:36.160
<v Brian Okken>we're not longer being maintained.

00:20:36.460 --> 00:20:36.840
<v Brian Okken>Is this the,

00:20:36.920 --> 00:20:37.220
<v Brian Okken>anyway,

00:20:37.900 --> 00:20:40.580
<v Brian Okken>interesting read if you're curious and want to depend on that,

00:20:40.800 --> 00:20:41.600
<v Brian Okken>but I think I'll be,

00:20:41.880 --> 00:20:43.320
<v Brian Okken>I'll be checking out Zensical as well.

00:20:43.580 --> 00:20:43.700
<v Michael Kennedy>Right.

00:20:43.860 --> 00:20:47.420
<v Michael Kennedy>And as you pointed out last week, you said,

00:20:47.720 --> 00:20:49.520
<v Michael Kennedy>for sure that it's a rewrite.

00:20:49.760 --> 00:20:52.340
<v Michael Kennedy>Zensical is not just building on MKDocs.

00:20:52.720 --> 00:20:55.960
<v Michael Kennedy>It's just the people that were working on material for MKDocs

00:20:55.960 --> 00:20:59.120
<v Michael Kennedy>are now building a completely from scratch documentation thing, right?

00:20:59.320 --> 00:21:02.820
<v Brian Okken>Yeah, it's backwards compatible if you used MKDocs before,

00:21:03.300 --> 00:21:05.540
<v Brian Okken>but it is something completely different.

00:21:05.780 --> 00:21:06.140
<v Michael Kennedy>All right.

00:21:07.160 --> 00:21:07.420
<v Michael Kennedy>All right.

00:21:07.480 --> 00:21:08.320
<v Michael Kennedy>How about, do you have any extras?

00:21:09.160 --> 00:21:10.140
<v Michael Kennedy>Or something completely different?

00:21:10.240 --> 00:21:10.620
<v Michael Kennedy>I do.

00:21:10.740 --> 00:21:13.260
<v Michael Kennedy>Let's go back to, was it last week or week before?

00:21:13.820 --> 00:21:21.120
<v Michael Kennedy>I talked about TAC, T-A-C-H, and how it creates one of those basically architectural layered

00:21:21.540 --> 00:21:25.240
<v Michael Kennedy>graphs that let you show which parts of your app depend upon which other parts of your app,

00:21:25.310 --> 00:21:25.940
<v Michael Kennedy>that kind of thing.

00:21:26.480 --> 00:21:31.380
<v Michael Kennedy>And it was pointed out that, hey, hey, that thing looks kind of unmaintained.

00:21:31.940 --> 00:21:37.600
<v Michael Kennedy>Well, Gerber Decker sent me a message and says, TAC has been unmaintained for a bit,

00:21:37.840 --> 00:21:38.400
<v Michael Kennedy>but it's not anymore.

00:21:39.460 --> 00:21:43.780
<v Michael Kennedy>It was the main project of Gage, which is a Y Combinator startup that pivoted to something

00:21:43.800 --> 00:21:49.800
<v Michael Kennedy>unrelated and based on AI, surprise, surprise. And they abandoned TAC. However, detached head from

00:21:49.980 --> 00:21:54.240
<v Michael Kennedy>GitHub forked it and now has access to the main repo and has committed to maintaining it. So it's

00:21:54.360 --> 00:21:58.520
<v Michael Kennedy>back. Also rough analyzed graph. It is fully independent of TAC. And they actually looked

00:21:58.700 --> 00:22:03.620
<v Michael Kennedy>into using that as an alternative once it became unmaintained. But yeah, anyway, that's

00:22:04.480 --> 00:22:13.160
<v Michael Kennedy>TAC is back. TAC is back. TAC is back. Also quick shout out to Doug Farrell and thanks. He wrote a

00:22:13.200 --> 00:22:19.280
<v Michael Kennedy>Review my book and yeah, very nice. So I linked over to that if people are interested. Thank you, Doug for writing that

00:22:20.440 --> 00:22:23.300
<v Michael Kennedy>TLDR says recommended so appreciate that. All right

00:22:24.200 --> 00:22:28.560
<v Michael Kennedy>Are we ready to joke about something? Yeah. Okay, so you've heard of

00:22:29.220 --> 00:22:30.960
<v Michael Kennedy>Platform as a service PA

00:22:31.580 --> 00:22:38.320
<v Michael Kennedy>AS you've heard about infrastructure as a service IAS or IAAS DB as a service DB as

00:22:39.460 --> 00:22:39.960
<v Michael Kennedy>A-A-S.

00:22:40.460 --> 00:22:46.180
<v Michael Kennedy>Sometimes, though, your productivity just demands that you stay focused and you just say no.

00:22:46.660 --> 00:22:47.020
<v Michael Kennedy>Right, Brian?

00:22:47.340 --> 00:22:47.460
<v Brian Okken>Yeah.

00:22:48.220 --> 00:22:50.760
<v Michael Kennedy>So I present to you no as a service.

00:22:53.100 --> 00:22:58.920
<v Michael Kennedy>So this is an API that will simply return a random but realistic excuse for saying no.

00:22:59.400 --> 00:23:00.920
<v Michael Kennedy>So you can turn it down and stop.

00:23:01.500 --> 00:23:02.020
<v Michael Kennedy>Oh, nice.

00:23:02.580 --> 00:23:02.680
<v Michael Kennedy>Yeah.

00:23:03.400 --> 00:23:05.280
<v Michael Kennedy>Built by humans, excuses, and humor.

00:23:05.340 --> 00:23:07.800
<v Michael Kennedy>This project is sponsored by Git Ads.

00:23:08.100 --> 00:23:08.500
<v Michael Kennedy>Git Ads.

00:23:08.520 --> 00:23:09.100
<v Michael Kennedy>I don't know what that is.

00:23:09.560 --> 00:23:16.460
<v Michael Kennedy>but anyway so if you pull it up it's um n-a-a-s i think it's n-o-a-s but you know whatever it's

00:23:16.600 --> 00:23:21.080
<v Michael Kennedy>that's not the domain they got and you just get a little bit of json reason i'm finding an invisible

00:23:21.280 --> 00:23:26.260
<v Michael Kennedy>dragon at home it's taking longer than expected or not my circus not my monkey so definitely not

00:23:26.280 --> 00:23:31.120
<v Michael Kennedy>my act to perform cinderella left one shoe here and i need to help her find it instead of going out

00:23:31.860 --> 00:23:34.920
<v Michael Kennedy>I would come, but I'm trying this new thing where I just don't.

00:23:38.360 --> 00:23:42.700
<v Michael Kennedy>So if you need to integrate no for whatever reason into your application,

00:23:43.300 --> 00:23:44.600
<v Michael Kennedy>well, here's the API right here.

00:23:44.600 --> 00:23:45.440
<v Michael Kennedy>You get a JSON response.

00:23:45.840 --> 00:23:47.180
<v Brian Okken>It is built as an API.

00:23:47.500 --> 00:23:48.100
<v Brian Okken>This is great.

00:23:48.320 --> 00:23:49.640
<v Brian Okken>You can just query it.

00:23:50.500 --> 00:23:52.940
<v Michael Kennedy>Yeah, we're going to get probably an MCP built over as well.

00:23:52.960 --> 00:23:55.580
<v Michael Kennedy>So you can integrate into your AI workflow as well.

00:23:55.640 --> 00:23:56.600
<v Michael Kennedy>I mean, it's going to be powerful.

00:23:58.660 --> 00:24:00.960
<v Brian Okken>Why use a constant when you can call an API?

00:24:01.040 --> 00:24:07.480
<v Michael Kennedy>guy exactly anyway I thought no as a service is a pretty good joke I I love this last one I would

00:24:07.620 --> 00:24:14.220
<v Brian Okken>come but I'm trying this new thing where I just don't exactly I my favorite is I can't make it

00:24:14.300 --> 00:24:23.540
<v Michael Kennedy>because I don't want to exactly no don't want to all right well uh fun episode as always thank

00:24:23.540 --> 00:24:27.660
<v Michael Kennedy>you everyone for listening thanks thanks Brian thank you thanks all yeah bye

