рдЗрд╕ рдПрдкрд┐рд╕реЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
- EuroPython 2026 videos are online
- The State of Django 2026: Boring is so back
- htmx 4.0.0 has been released
- ЁЯРН Functionally Zen
- Extras
- Joke
Sponsored by us! Support our work through:
- Our courses at Talk Python
- Consulting from Six Feet Up
Connect with the hosts
- Michael: Mastodon / BlueSky / X / LinkedIn
- Calvin: Mastodon / BlueSky / X / LinkedIn
- Show: Mastodon / BlueSky / X
Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesday at 7am PT. Older video versions available there too.
Finally, if you want an artisanal digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it.
Michael #1: EuroPython 2026 videos are online
The EuroPython Society has published all 117 recordings from EuroPython 2026 on the official EuroPython Conference YouTube channel. The conference ran July 13-19 in Krakow, Poland and celebrated the conference series' 25th anniversary. The playlist covers keynotes, panels, lightning talks, and full talk recordings across Python core, web, DevOps, data/ML, embedded, and other tracks.
- If you missed EuroPython 2026 in Krakow, this is the complete free on-demand archive of one of the year's biggest European Python events.
- 117 videos now live on the EuroPython Conference YouTube channel, last updated Aug 17, 2026.
- MichaelтАЩs personal watch list.
Calvin #2: The State of Django 2026: Boring is so back
- State of Django 2026 (JetBrains/DSF survey, ~3,500 devs, 40+ countries) - "boring is so back": Django's core stays reliable while everything around it moves fast
- Core is stable: Postgres 76тАУ79% for 5 years running, templates ~80%, 43% already on Django 6.0
- AI is routine now (only 10% use none) but workflow's unsettled - Claude Code leads at 35%, and 56% still just use it for chat, not autonomous edits
- Tooling is consolidating: uv and Ruff both at 43% adoption, each replacing several older single-purpose tools
- Type hints are winning (57% use them) but the checker is up for grabs - IDE-built-in leads at 40%, Mypy 32%, with ty/Pyrefly emerging
- Two Django communities coexist happily: 72% server-rendered templates vs. 53% API-only - and htmx adoption jumped from 5% to 34% in five years
Michael #3: htmx 4.0.0 has been released
After 8 months of work, the htmx team shipped 4.0.0, a rewrite that moves internals from XMLHttpRequest to fetch() while keeping the API almost identical to htmx 2. Three changes may need action: attribute inheritance is now explicit via an :inherited suffix, event names follow a htmx:phase:action pattern, and history no longer caches pages in localStorage. Additions include built-in morph swaps, the new hx-partial tag, and many core extensions. htmx 2 stays supported and remains latest on npm until early 2027.
- htmx is the go-to frontend layer for Python server-rendered apps (Flask, Django, FastAPI), and 4.0 is deliberately low-drama: nearly behavior-compatible, so teams can upgrade on their own schedule and pick up morph swaps and streaming extensions.
- Explicit inheritance is the biggest migration item: hx-confirm, hx-headers, hx-target and friends no longer cascade to children unless you append :inherited; hx-disinherit and hx-inherit are gone
- A CLI upgrade checker (npx htmx.org@4.0.0 upgrade-check) flags spots needing :inherited, renames like hx-disable to hx-ignore, removed attrs like hx-vars, and old event names in templates and JS
- Events follow htmx:phase:action (htmx:beforeRequest becomes htmx:before:request); most error events collapse into htmx:error and htmx:xhr:* events are removed with XMLHttpRequest
- History no longer snapshots pages in localStorage; back navigation re-fetches and swaps into the body, fixing a chronic support headache, with a new hx-history-cache extension for sessionStorage caching
- New features: out-of-the-box morphing swaps, the [HTML_REMOVED] tag for multi-element updates, streaming over SSE/WebSockets/multipart, and hx-live, their Alpine-inspired DOM scripting solution
- No forced upgrade: 2.x stays latest on npm until early 2027 (4.0 remains next) and is supported indefinitely; the team even ships official LLM skill files for guidance and upgrading
Calvin #4: ЁЯРН Functionally Zen
- Functionally Zen (Kyle Adams, Test Double) - riffs on "simple is better than complex" with 7 extra tenets for Python simplicity
- Core claims: idiomatic > non-idiomatic, data > functions, pure functions > impure functions > classes
- Favorite example: a medical-dosage calculator replaced with a plain lookup dict - no logic, no tests needed
- Big idea: keep a thin "impure shell" around a "pure core" (Gary Bernhardt's functional core / imperative shell) - push side effects (API calls, DB, files) to the edges
- Side note: constructors that do I/O are "poison pills" - the side effect infects every class that depends on them
- Payoff: pure functions and no-mock tests are just easier to read and reason about than the alternative
Extras
Calvin:
- uv ships trusted-publisher token revocation and Python 3.15 support
- Making a Python interpreter in 1024 bytes
Michael:
- Steering council voting is now open
рдЗрд╕ рдПрдкрд┐рд╕реЛрдб рдореЗрдВ
рдиреЛрджреНрд╕ рджрд┐рдЦрд╛рдПрдВ 🔗
рдЕрдиреБрд▓рд┐рдкрд┐ 🔗
00:00:00.040 --> 00:00:04.500
Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to
00:00:04.500 --> 00:00:11.280
your earbuds. This is episode 495, recorded on Tuesday, September 8th. I'm Calvin Hendricks
00:00:11.290 --> 00:00:16.460
Parker. And I'm Michael Kennedy. Glad to have you, Michael. If you want to support the people who
00:00:16.460 --> 00:00:21.100
make this possible, make sure you support our sponsors, the fine folks at, oh, Talk Python.
00:00:21.470 --> 00:00:26.560
Make sure you check out Michael's courses. He is doing incredible work over there. It's a great way
00:00:26.540 --> 00:00:28.900
to brush up on some technology you weren't sure about,
00:00:29.440 --> 00:00:30.060
try something new.
00:00:30.440 --> 00:00:31.600
He's got some really cool notes.
00:00:31.630 --> 00:00:33.280
You just released a couple of new courses, right?
00:00:33.580 --> 00:00:36.160
Yeah, we just released a Rust course,
00:00:36.520 --> 00:00:37.580
which I think is really nice.
00:00:37.780 --> 00:00:37.860
Yeah.
00:00:38.230 --> 00:00:38.520
Very cool.
00:00:38.940 --> 00:00:41.380
And then also check out the fine folks over at Six Feet Up.
00:00:41.620 --> 00:00:43.840
They are the ones who love solving hard problems.
00:00:44.220 --> 00:00:45.220
They do a lot of Python work.
00:00:45.320 --> 00:00:46.320
They've been around for 27 years.
00:00:47.030 --> 00:00:48.200
And we'd love to talk to you
00:00:48.340 --> 00:00:49.520
about doing some cool projects.
00:00:50.060 --> 00:00:51.500
If you want to connect with the hosts online,
00:00:51.750 --> 00:00:53.920
you can find Michael, myself, and the show
00:00:54.160 --> 00:00:55.860
on Mastodon, Bluesky, and X.
00:00:56.360 --> 00:00:58.500
And you can also find Michael and I on LinkedIn.
00:00:59.170 --> 00:01:03.720
But make sure you join us on YouTube for the live stream at pythonbytes.fm/live to
00:01:03.720 --> 00:01:04.260
be part of the audience.
00:01:04.980 --> 00:01:06.960
Usually it's Tuesday mornings, Pacific time.
00:01:07.460 --> 00:01:09.680
Older video versions are available there too.
00:01:09.890 --> 00:01:14.880
And finally, if you want our artisanal digest of every week's show notes in email form,
00:01:15.340 --> 00:01:19.200
add your name to our friends of the show list and we'll never share it, but you'll get a
00:01:19.280 --> 00:01:21.000
really cool recap of everything we talked about.
00:01:21.520 --> 00:01:23.600
Michael, thinking about recaps, what you got?
00:01:23.880 --> 00:01:28.820
I always look forward to when the videos of the conferences come out.
00:01:28.940 --> 00:01:29.300
How about you?
00:01:29.340 --> 00:01:30.220
Same. I do too.
00:01:30.640 --> 00:01:33.960
I mean, sometimes I'm at the conference and I just miss a great talk.
00:01:34.180 --> 00:01:36.580
And I'm so glad that many of the good ones are recorded.
00:01:37.140 --> 00:01:37.860
Exactly the same.
00:01:38.060 --> 00:01:42.000
And sometimes you don't miss it because you just want to...
00:01:42.000 --> 00:01:42.760
There's trade-offs, right?
00:01:42.860 --> 00:01:44.680
Like, I'm going to go to that talk instead of that one.
00:01:44.700 --> 00:01:48.240
Or, oh, there's a really interesting group of people having this conversation.
00:01:48.700 --> 00:01:49.780
And the talk is starting now.
00:01:49.900 --> 00:01:56.000
You got to decide, do I join the group and have the experience that's not going to be recorded or do I go to the talk?
00:01:56.340 --> 00:02:01.940
So, EuroPython2026 has all of the videos out.
00:02:02.340 --> 00:02:08.440
And I realize I need to update what I put in the show notes because this is just my subset.
00:02:08.800 --> 00:02:16.820
So, if you want to watch all the talks for EuroPython, 117 videos are now online on YouTube, which is great.
00:02:17.040 --> 00:02:17.880
That is fantastic.
00:02:18.320 --> 00:02:18.680
And quick.
00:02:18.840 --> 00:02:18.960
Yes.
00:02:19.240 --> 00:02:20.200
Because the conference just happened.
00:02:20.750 --> 00:02:21.440
Yes, I know.
00:02:21.560 --> 00:02:22.280
It's really, really good.
00:02:22.700 --> 00:02:29.200
And I went through and said, hmm, what might make an interesting thing that I personally
00:02:29.380 --> 00:02:30.200
would be interested in?
00:02:30.420 --> 00:02:31.000
This is not a voting.
00:02:31.220 --> 00:02:31.860
This is not a ranking.
00:02:32.060 --> 00:02:32.880
This is not a good, bad.
00:02:33.120 --> 00:02:35.580
This is Michael wants to watch this for two reasons.
00:02:35.810 --> 00:02:40.360
Either one is relevant to me, or I might be considering it for a Talk Python episode.
00:02:40.620 --> 00:02:47.539
Like, for example, the very first one by Giovanni Bairoliari is already out over on Talk Python
00:02:47.840 --> 00:02:48.180
Oh, nice.
00:02:48.460 --> 00:02:53.520
As the latest, he did a cool project rewriting asyncio
00:02:54.080 --> 00:02:58.020
from a perspective of what if there was only free-threaded Python?
00:02:58.520 --> 00:03:01.120
You wouldn't write asyncio exactly the same
00:03:01.360 --> 00:03:03.480
because you have the potential to split that work
00:03:03.920 --> 00:03:05.000
across multiple threads,
00:03:05.110 --> 00:03:07.380
whereas asyncio is single-threaded, et cetera, et cetera.
00:03:07.720 --> 00:03:09.400
So I'm finding these really interesting.
00:03:09.880 --> 00:03:11.700
We've got Marlene Magami.
00:03:12.400 --> 00:03:14.660
Her talk, her keynote is up.
00:03:14.880 --> 00:03:19.540
Updates on the JIT, update on free threaded Python by Thomas Warters.
00:03:20.620 --> 00:03:23.380
Paul Everitt is in here somewhere because it's Paul Everitt.
00:03:23.380 --> 00:03:26.500
Yeah, look, I haven't watched, I have not watched his talk yet, but I really want to,
00:03:26.500 --> 00:03:32.800
because he talks a lot about kind of the future of AI-driven development and local models and controlling your destiny and your data.
00:03:33.200 --> 00:03:33.860
Yeah, exactly.
00:03:34.240 --> 00:03:42.780
Stefan Ostrowski deploying Python web apps by Will Vincent, probably with a lean towards Django, hinted to your topics, maybe.
00:03:43.160 --> 00:03:43.420
Maybe.
00:03:43.480 --> 00:03:51.660
But anyway, I thought I would make my, like this morning I did it, made my watch list public because I don't know.
00:03:51.680 --> 00:03:55.320
I went through all 117 videos and said, okay, maybe, probably.
00:03:55.760 --> 00:03:57.120
And now I'm down to 29.
00:03:57.460 --> 00:04:00.500
So people can check that out or they can just look at the full list.
00:04:00.940 --> 00:04:04.360
I love that you make it a watch list so you get Michael's curated version.
00:04:04.800 --> 00:04:09.340
And so I can go enjoy what you think might be important because maybe I follow similar topics.
00:04:09.500 --> 00:04:13.660
So I think more folks should do that with conference videos because it's so hard to go.
00:04:13.760 --> 00:04:16.320
I mean, there's, you said what, 117 videos, what you said?
00:04:16.840 --> 00:04:17.680
Yeah, that's a lot.
00:04:17.840 --> 00:04:19.280
That's a lot of time to invest.
00:04:19.579 --> 00:04:26.280
I would venture there's probably not a single person that watches all videos all the way through, you know?
00:04:26.380 --> 00:04:26.880
Yeah, that'd be hard.
00:04:27.180 --> 00:04:27.920
That would be super hard.
00:04:28.040 --> 00:04:28.980
That's just a lot of time.
00:04:29.300 --> 00:04:29.840
That's a lot of time.
00:04:31.180 --> 00:04:34.680
Well, and I just got back from DjangoCon, which was in Chicago.
00:04:34.740 --> 00:04:41.660
And same time, just shortly afterwards, the PyCharm folks and the Django Software Foundation have
00:04:41.880 --> 00:04:48.800
released the 2026 State of Django. And I love so that William Vincent also published this over on
00:04:48.800 --> 00:04:56.920
the PyCharm blog. I love the fact that it's called Boring is Back. If you've ever read the blog post
00:04:56.940 --> 00:05:02.460
about boring tokens, like you only get to have so many new shiny technologies, shiny tokens,
00:05:02.560 --> 00:05:04.480
You only get so many new shiny technologies in your project.
00:05:05.220 --> 00:05:10.680
The good news is you can have Django and you can have Postgres and they're both considered very boring and very stable.
00:05:11.400 --> 00:05:13.580
If you look through here, it's very thriving.
00:05:14.100 --> 00:05:22.520
Postgres is actually the database of choice for almost 80% of the respondents who are doing Django work out there, which I think is a really telling mark.
00:05:22.900 --> 00:05:28.620
Another nice thing to see here is 43% are already on Django 6.0 months after it shipped.
00:05:28.820 --> 00:05:32.840
So folks are staying up to date and pretty well on the stable side of things.
00:05:33.620 --> 00:05:36.400
It was 3,500 Django developers across more than 40 countries.
00:05:36.570 --> 00:05:40.880
So it's a fairly good representation of the world's uses of Django.
00:05:41.130 --> 00:05:41.960
I'm sure there's a lot more.
00:05:42.040 --> 00:05:44.600
Statistically, I think that that's a pretty big sample size.
00:05:45.040 --> 00:05:45.220
Yeah.
00:05:45.350 --> 00:05:50.740
I mean, they did a good job of promoting it across multiple podcasts and conferences and
00:05:51.240 --> 00:05:51.660
things like that.
00:05:51.660 --> 00:05:53.880
And I think it's been really well received.
00:05:54.640 --> 00:05:56.060
They got a nice little infographic here.
00:05:56.440 --> 00:06:00.240
What I thought was interesting is this relates to maybe a future topic of yours.
00:06:00.740 --> 00:06:03.720
HTMX is closing in on React for the front end.
00:06:04.210 --> 00:06:10.700
You see here we've gone from 2025, 26% of projects maybe using, or we're using HTMX to
00:06:10.820 --> 00:06:15.480
now 34% catching up to React, which is only at 38% on the front end.
00:06:16.120 --> 00:06:16.940
I'm pro that.
00:06:17.010 --> 00:06:21.820
I think that's a really great sign of maybe people are looking for the simpler, more boring
00:06:22.100 --> 00:06:22.780
side of the web.
00:06:23.260 --> 00:06:25.120
And Django is a great place to do it.
00:06:25.240 --> 00:06:29.580
folks obviously using AI. So it's interesting, they had a couple of special sections in here.
00:06:29.810 --> 00:06:33.780
AI is mainstream, but no workflow is one. So whether they're using it all the time,
00:06:34.330 --> 00:06:39.760
several days a week, once or more often, AI is dominating the workflow, but it's still supervised,
00:06:40.050 --> 00:06:45.640
which I think it should be. The AI is here to make us better developers, not replace us as
00:06:45.820 --> 00:06:49.980
developers. I think we've seen that time and time again, as we talk about AI on the various shows.
00:06:50.480 --> 00:06:53.900
And so the report here, the stats definitely show it.
00:06:53.980 --> 00:06:56.420
I mean, that's the way to get the most out of these tools.
00:06:57.840 --> 00:06:59.260
VM is still the top of the list
00:06:59.440 --> 00:07:00.920
for managing your Python environment,
00:07:01.120 --> 00:07:02.520
not necessarily your Python dependencies,
00:07:03.140 --> 00:07:04.100
but the Python environment.
00:07:04.460 --> 00:07:07.500
I have a feeling uv will overtake here real soon
00:07:07.700 --> 00:07:09.260
because once you see uv work
00:07:09.560 --> 00:07:10.620
for getting your Python version,
00:07:11.220 --> 00:07:13.020
it's hard to go back seeing how fast
00:07:13.260 --> 00:07:14.640
and easy that is to be managed.
00:07:15.400 --> 00:07:16.340
Docker at 31%.
00:07:16.660 --> 00:07:18.559
So I'm also quite excited to see the fact
00:07:18.580 --> 00:07:22.300
that folks are containerizing and just using the Python coming out of the containers. That's also
00:07:22.400 --> 00:07:28.460
a very simple and easy way to just get started on the right foot with Python and Django is use
00:07:28.810 --> 00:07:32.200
Python that's already in a Docker container. Yeah, yeah. And we're both on team Docker.
00:07:32.620 --> 00:07:40.640
Oh, yeah, for sure. And in fact, I'm on team VE and V in Docker for consistency across the dev
00:07:40.810 --> 00:07:48.540
workflow. Me and Hennig. Right. I am on, actually, I use Docker, but a standard container
00:07:48.580 --> 00:07:53.940
and install my own uv python via uv for consistency exactly same like i don't yeah i don't want to
00:07:53.980 --> 00:07:58.600
pick some pre-made thing like well python comes with it's like it's so easy to install python
00:07:58.780 --> 00:08:03.760
into it pick pick yeah specifically i think and you can you run into weird edge cases if you start
00:08:04.060 --> 00:08:08.760
just kind of coloring slightly outside the lines with one of the standard python ones it could be a
00:08:08.820 --> 00:08:18.520
c dependency or just a weirdness of you want to install something and it gets it gets hard so i
00:08:18.540 --> 00:08:25.520
to install this way to go. Rough top of the list for code tooling. No surprises there. I think we
00:08:25.600 --> 00:08:30.440
should see more pre-commit coming up given what we'll see down here later. There's lots of testing
00:08:30.600 --> 00:08:37.200
going on. AI is write more code. Verification matters more. You see right here, pytest 45%.
00:08:37.419 --> 00:08:42.120
So we will, we see lots more testing happening, which I think is also a very good sign. And I'll
00:08:42.140 --> 00:08:47.620
talk a little bit about that in my second article as well. So I think, yeah, go check it out.
00:08:48.020 --> 00:08:50.400
This was also part of a fundraiser.
00:08:50.740 --> 00:08:55.860
So if you are renewing your PyCharm Pro license or looking for one, you can get 30% off.
00:08:56.020 --> 00:08:59.840
And then you also get 100% of that purchase price goes to the Django Software Foundation.
00:09:00.240 --> 00:09:03.840
So not an ad for PyCharm necessarily, but they are doing good out there in the world.
00:09:04.120 --> 00:09:05.700
I like a lot about this.
00:09:06.680 --> 00:09:11.740
Specifically, I also think this is a deeper view into Python in general.
00:09:11.940 --> 00:09:16.180
When I saw the headline for the survey, I thought, oh, it's going to survey Django things.
00:09:16.420 --> 00:09:20.760
Like who's using this feature, the ORM, and then who's deploying this way versus that way.
00:09:21.140 --> 00:09:23.140
And no, it's more of a general thing.
00:09:23.180 --> 00:09:27.140
Just let's ask the Django people what they're up to.
00:09:27.160 --> 00:09:27.280
Yeah.
00:09:27.560 --> 00:09:27.700
Yeah.
00:09:28.100 --> 00:09:28.160
Nope.
00:09:28.460 --> 00:09:28.980
Really good stuff.
00:09:29.360 --> 00:09:29.940
It is good stuff.
00:09:29.960 --> 00:09:30.820
I'm glad you covered it.
00:09:31.180 --> 00:09:32.220
Speaking of good stuff.
00:09:32.540 --> 00:09:33.620
Well, I mean, boring is good.
00:09:33.960 --> 00:09:35.720
But you mentioned HTMX.
00:09:35.800 --> 00:09:38.960
Well, HTMX 4 is now out.
00:09:39.000 --> 00:09:40.360
And that's officially released.
00:09:40.800 --> 00:09:41.200
Officially.
00:09:41.340 --> 00:09:42.020
And it's a Jeep.
00:09:43.300 --> 00:09:43.740
No, it's not.
00:09:43.860 --> 00:09:44.360
Excuse me.
00:09:44.420 --> 00:09:44.920
No, it's a horse.
00:09:45.560 --> 00:09:49.320
It's a Land Cruiser, I believe, not a Jeep.
00:09:49.820 --> 00:09:54.800
Anyway, there's a big picture on the announcement of some Land Cruiser jumping.
00:09:54.860 --> 00:10:00.980
That's the same cover art for the Game Boy Color cartridge that they produced in the announcement as well, which I have.
00:10:01.540 --> 00:10:02.180
You have? Okay.
00:10:02.450 --> 00:10:03.620
I have. I've been playing it too.
00:10:03.930 --> 00:10:05.640
So thank you, Carson, for doing that.
00:10:05.920 --> 00:10:11.040
In the release, HTMX 4.000, yay for non-zero ver.
00:10:11.380 --> 00:10:14.540
It says, after eight months of work, plus a game,
00:10:14.880 --> 00:10:15.600
and if you go to the game,
00:10:16.320 --> 00:10:18.860
this is a real Game Boy cartridge you can get, yeah?
00:10:19.280 --> 00:10:21.840
Yep, I have said cartridge is not made up.
00:10:21.940 --> 00:10:23.900
It is legitimately a cartridge you can play through.
00:10:24.400 --> 00:10:25.460
If you play all the way through,
00:10:25.920 --> 00:10:28.920
your reward is to see the source code for HTMX 4.0.
00:10:31.360 --> 00:10:31.760
Incredible.
00:10:32.140 --> 00:10:32.400
It is.
00:10:32.400 --> 00:10:36.000
All right, so there's a lot of interesting changes here.
00:10:36.180 --> 00:10:40.160
I think, first of all, HTMX has been really broadly adopted
00:10:40.180 --> 00:10:45.620
by people who are just like, I don't want to take on a React front-end framework or something
00:10:45.820 --> 00:10:53.640
like that. Even though all of the AI tools leap at using React for stuff, it's still really popular,
00:10:53.760 --> 00:10:57.780
which I think people are choosing. Why do you want to develop your models twice?
00:10:58.480 --> 00:11:04.900
Yeah. Why do you want a bunch of build steps and all that stuff just to get your app out?
00:11:05.320 --> 00:11:10.140
Yeah. If you don't need it, don't go all in. Also, a lot of these
00:11:10.160 --> 00:11:16.120
front-end frameworks, not HTML, but many of them encourage you to treat your back-end as a dumb
00:11:16.380 --> 00:11:21.980
pipe that just routes data to the front-end where the smarts live. And it's fine if you want to write
00:11:22.010 --> 00:11:26.740
your code on the front-end in JavaScript, but if you want to leverage the things that are really
00:11:26.840 --> 00:11:30.940
nice about Django or Flask or whatever you're writing against, and just Python in general,
00:11:31.310 --> 00:11:35.820
well, then it kind of undermines that, right? Yeah, but it's the last you just stay in the
00:11:35.840 --> 00:11:42.580
batteries included world especially with Django like all the html like filters and helpers that
00:11:42.580 --> 00:11:47.720
are built in to Django the framework are all still very useful with a tool like this they become
00:11:47.940 --> 00:11:52.620
useless if you're on react like you're not going to use it right exactly exactly so major changes
00:11:53.260 --> 00:11:59.980
attribute inheritance is now explicit it's a little is on a python isn't it um so it used to be you
00:12:00.000 --> 00:12:06.080
could do like an hx-confirm and if some action was going to happen first a dialogue would pop up
00:12:06.090 --> 00:12:10.960
and say are you sure you want to delete all the data and you would say yes or no but you could put
00:12:11.020 --> 00:12:15.680
that in say a div that contains some elements and then there was a button way down if you click the
00:12:15.880 --> 00:12:20.780
button the confirm would fire that no longer happens so you have to explicitly say at the top
00:12:20.830 --> 00:12:26.579
in the confirm and i want this to cascade down to the children biggest part yeah except for that it
00:12:26.560 --> 00:12:30.620
it stops working. That's the only problem. On the older code, so there's an upgrade path. It's not
00:12:30.860 --> 00:12:34.820
major, but there is, I mean, it's kind of a find and replace upgrade path, so it's not a huge deal.
00:12:35.220 --> 00:12:40.620
The event names have been changed a little bit. Yeah, we'll go through some examples, I guess.
00:12:40.710 --> 00:12:46.100
So yeah, there's like, you could do an hx confirm and then a button with an hx delete, and now you've
00:12:46.140 --> 00:12:52.460
got to say colon inherited. The events are also used to be able to say disinherit, so you could
00:12:52.480 --> 00:12:54.420
block a child from having stuff inherited
00:12:54.800 --> 00:12:56.280
upon it? Leave this part alone.
00:12:56.600 --> 00:12:57.060
Get away from me.
00:12:58.280 --> 00:13:00.520
Now that's gone. Now that's gone because you just
00:13:00.620 --> 00:13:02.220
that's the default is not to inherit.
00:13:02.360 --> 00:13:04.140
So you don't have to say don't cascade it down.
00:13:04.800 --> 00:13:06.380
Some events were renamed. Here's the find
00:13:06.480 --> 00:13:08.500
and replace. So it used
00:13:08.500 --> 00:13:10.400
to be htmx before request
00:13:10.680 --> 00:13:12.380
now it's htmx colon
00:13:12.620 --> 00:13:14.260
before colon request and
00:13:14.600 --> 00:13:16.520
so on. What else? History. This is
00:13:16.740 --> 00:13:18.420
actually, I didn't know this was happening.
00:13:18.740 --> 00:13:20.600
This is not ideal. So history
00:13:20.620 --> 00:13:26.280
support allows you go forwards and backwards, even if, so your forwards and backwards can navigate
00:13:26.600 --> 00:13:33.440
between HTMX events, not through just the page loads, right? So if I click a button, yeah,
00:13:33.450 --> 00:13:38.500
and it does a load, it changes something else. And I click another, maybe another row in a grid and a
00:13:38.840 --> 00:13:43.300
master detail, like another detail thing loads, you can go backwards, forwards between those.
00:13:43.740 --> 00:13:50.020
I didn't know this. It used to be that in HTMX2, the way backwards and forwards worked is it would
00:13:49.980 --> 00:13:53.500
save a copy of the pages for restoration and local storage.
00:13:53.920 --> 00:13:54.800
I forget the storage part.
00:13:54.860 --> 00:13:56.460
Like, wait, what if that data changed?
00:13:58.040 --> 00:14:00.140
You know, there's two hard things.
00:14:00.740 --> 00:14:01.300
Yeah, dangerous.
00:14:02.260 --> 00:14:02.520
Exactly.
00:14:02.780 --> 00:14:04.520
There's like two hard things in computer science.
00:14:05.080 --> 00:14:08.160
Caching, naming things, and off by one errors, right?
00:14:08.740 --> 00:14:09.300
Love that joke.
00:14:09.860 --> 00:14:11.140
Yeah, it's there for a reason.
00:14:11.180 --> 00:14:12.340
The caching is super hard.
00:14:12.800 --> 00:14:15.160
And this was so, like, I thought it was just reloading it.
00:14:15.180 --> 00:14:15.660
What's going on?
00:14:15.960 --> 00:14:17.000
So anyway, that's gone.
00:14:17.300 --> 00:14:17.440
Nice.
00:14:17.540 --> 00:14:20.600
It just literally reloads it like I always thought it did.
00:14:20.650 --> 00:14:21.260
So there's that.
00:14:21.760 --> 00:14:24.340
And the last one is, well, there's like two things.
00:14:24.780 --> 00:14:25.780
There's morph swaps.
00:14:25.990 --> 00:14:28.360
So what this is, I had to look this up, folks,
00:14:28.920 --> 00:14:35.060
is a morph swap is that instead of saying this portion of the page is changing,
00:14:35.340 --> 00:14:37.820
so we're going to get the new partial or fragment from the server
00:14:38.220 --> 00:14:39.540
and just replace that,
00:14:39.860 --> 00:14:44.140
a morph swap will rewrite the DOM to match the new segment.
00:14:44.600 --> 00:14:47.580
So for example, it doesn't jump around as much
00:14:47.720 --> 00:14:49.500
and those kinds of things, right?
00:14:49.680 --> 00:14:51.440
If maybe only some tiny element,
00:14:51.570 --> 00:14:52.800
even though you replaced a whole section,
00:14:53.260 --> 00:14:54.000
changes, it's like, okay,
00:14:54.050 --> 00:14:55.260
we'll just change the little element
00:14:56.160 --> 00:14:57.700
because, again, master detail,
00:14:57.890 --> 00:15:00.040
like there's a whole structure of the HTML there,
00:15:00.260 --> 00:15:01.800
but really as you click from page to page,
00:15:01.960 --> 00:15:03.700
it's just the values inside that structure.
00:15:04.080 --> 00:15:05.380
That sounds hard as a framework,
00:15:05.580 --> 00:15:07.240
but much easier for the end user
00:15:07.460 --> 00:15:08.460
who's building with the framework.
00:15:08.900 --> 00:15:09.240
Exactly.
00:15:10.040 --> 00:15:10.760
Let them suffer.
00:15:11.120 --> 00:15:12.700
Apparently they did the suffering for us,
00:15:12.730 --> 00:15:13.180
which I love.
00:15:13.240 --> 00:15:13.460
Yes.
00:15:14.000 --> 00:15:15.760
I mean, honestly, it's not the point of a framework.
00:15:15.760 --> 00:15:16.040
It is.
00:15:16.300 --> 00:15:19.480
I mean, why would you do a framework if you're not going to leverage that?
00:15:20.520 --> 00:15:22.320
And then the HX partial tag.
00:15:23.560 --> 00:15:25.920
So this for outer band changes.
00:15:26.500 --> 00:15:29.080
This is where HTMX used to be really brutal.
00:15:29.150 --> 00:15:30.980
And honestly, I've worked on a project before.
00:15:31.130 --> 00:15:34.440
And in the end, I'm like, oh, I kind of wish I didn't choose HTMX for this.
00:15:34.590 --> 00:15:37.560
Because I want to update something over here and something over there.
00:15:37.940 --> 00:15:38.700
And this part here.
00:15:38.900 --> 00:15:39.600
And it was tough.
00:15:40.040 --> 00:15:42.760
So this lets you specify partials.
00:15:43.200 --> 00:15:49.680
then um elements of it that change right so pretty pretty neat um that's slick it allows you to to
00:15:49.680 --> 00:15:56.180
sort of glue that stuff together very nice yeah so there there it is i mean and they definitely get
00:15:56.480 --> 00:16:03.140
best launch swag gifts or whatever the game boy cartridge over the top and real i love it
00:16:03.760 --> 00:16:08.120
i know the website you can go to the website and play it too but i didn't even have the
00:16:08.260 --> 00:16:11.839
eminid version that's cool so everyone can enjoy it if you don't have a game boy
00:16:12.240 --> 00:16:17.480
but that's crazy right it is super good it works yeah it's a beautiful cartridge really well done
00:16:17.740 --> 00:16:21.980
like the game was surprisingly well done for i can't imagine what how much time they spent on it
00:16:22.300 --> 00:16:30.200
well carson definitely is known for um interesting and catchy stuff so well played well well played
00:16:30.520 --> 00:16:36.579
well played i love it that's awesome yeah let's head over you mentioned zen some zen of python
00:16:36.600 --> 00:16:43.660
things. So for the final news article for me, this is actually a local IndyPy person. He presented
00:16:44.100 --> 00:16:49.360
about two IndyPys ago, Kyle from Testable. He gave a little nice little blog post about
00:16:49.600 --> 00:16:54.920
functionally Zen. And I kind of like going back over Zen of Python things. It's one of my favorite
00:16:55.160 --> 00:17:02.119
talks to give at PyCon and other conferences is something more around these initial tenants of
00:17:02.160 --> 00:17:07.199
Python and simplicity and why we love it. And for those of you who don't know, you can go to your
00:17:07.270 --> 00:17:12.439
command line, you can type Python minus m this, and you will see the little Easter egg, which is the
00:17:12.520 --> 00:17:16.980
Zen of Python that is in Python. Everyone should print it out, they should frame it, and you should
00:17:16.990 --> 00:17:20.939
put it in your, above your sink when you brush your teeth at night so you can read it every night.
00:17:21.300 --> 00:17:25.300
And you'll become a better human being instantly because you've got the Zen of Python there
00:17:25.420 --> 00:17:30.940
available to you. But Kyle took the Zen of Python and he actually put, took kind of added into it
00:17:30.960 --> 00:17:33.060
like seven extra tenants for Python simplicity.
00:17:33.740 --> 00:17:36.520
So he took specifically the simple
00:17:36.540 --> 00:17:38.760
is better than complex tenant of Python
00:17:39.420 --> 00:17:41.900
and then added these seven additional pieces
00:17:42.200 --> 00:17:44.680
that are about idiomatic code, data,
00:17:45.500 --> 00:17:47.540
pure functions being simpler than impure functions.
00:17:48.340 --> 00:17:50.260
It kind of goes on like in class functions
00:17:50.400 --> 00:17:52.840
being maybe simpler than classes.
00:17:53.620 --> 00:17:55.300
So it's just a way to think about
00:17:55.320 --> 00:17:57.060
how to keep your code again simple.
00:17:57.620 --> 00:17:59.899
There's no reason to get overly complex
00:18:00.000 --> 00:18:00.940
if you don't have to.
00:18:01.390 --> 00:18:04.160
And Python gives you all the tools that are right here.
00:18:04.210 --> 00:18:05.140
So you can talk about, again,
00:18:05.190 --> 00:18:06.420
he talks about being idiomatic.
00:18:07.000 --> 00:18:08.520
There's things you need to watch out for.
00:18:08.810 --> 00:18:09.940
For example, side effects,
00:18:10.340 --> 00:18:12.540
especially with classes that have constructors,
00:18:12.980 --> 00:18:15.240
they can have side effects in subclasses
00:18:15.360 --> 00:18:16.440
that you aren't aware of.
00:18:16.860 --> 00:18:18.780
So it just adds to the complexity
00:18:18.960 --> 00:18:19.980
and overhead as a developer.
00:18:20.620 --> 00:18:21.640
Some good examples in here.
00:18:21.750 --> 00:18:23.380
So if you looked at the idiomatic code
00:18:23.460 --> 00:18:25.200
is simpler than non-idiomatic code,
00:18:25.540 --> 00:18:27.800
some functional programmers might be tempted
00:18:27.800 --> 00:18:31.960
to use the map function of Python to extend a list.
00:18:32.280 --> 00:18:33.320
But there's actually a simpler way.
00:18:33.800 --> 00:18:35.300
Just using a list comprehension
00:18:35.980 --> 00:18:38.220
is actually a clearer, probably cleaner way
00:18:38.780 --> 00:18:40.080
for writing what you're looking for there.
00:18:40.320 --> 00:18:43.080
So this actually loops through and does the x times 2
00:18:43.240 --> 00:18:44.700
for x in a list of 1, 2, 3.
00:18:45.160 --> 00:18:46.280
So now you've got 2, 4, 6.
00:18:46.420 --> 00:18:48.060
And sometimes I think even better performance.
00:18:48.840 --> 00:18:50.220
Not hugely, but a little bit.
00:18:50.400 --> 00:18:51.900
Well, now the docs should be able to tell us, right?
00:18:51.980 --> 00:18:55.160
Because I've got the notation for those things in there.
00:18:55.260 --> 00:18:56.220
It's right in the docs.
00:18:56.880 --> 00:18:57.980
Data is simpler than functions.
00:18:58.430 --> 00:18:59.460
This one's a little harder to do.
00:18:59.670 --> 00:19:01.500
I think the example was a little contrived
00:19:01.920 --> 00:19:04.320
because if you have an object that has age
00:19:04.610 --> 00:19:06.320
with a sub-element of weight
00:19:06.500 --> 00:19:07.960
and a sub-element of lab measurement,
00:19:08.340 --> 00:19:09.460
I don't know if you'd have that structure
00:19:09.610 --> 00:19:10.220
necessarily all the time,
00:19:10.480 --> 00:19:12.680
but if you can get your data structured that way,
00:19:12.980 --> 00:19:15.380
it's probably easier to use, again, a dictionary lookup,
00:19:15.660 --> 00:19:16.620
and actually it's probably faster
00:19:17.130 --> 00:19:17.980
to use a dictionary lookup
00:19:18.060 --> 00:19:19.760
than it is to run a function
00:19:19.890 --> 00:19:21.280
that would be taking in arguments
00:19:21.720 --> 00:19:23.260
and looking up things based on those arguments.
00:19:23.810 --> 00:19:26.620
So I mostly agree with that example.
00:19:27.260 --> 00:19:33.160
This is about the impure functions or pure functions versus impure. So this pure function, for example
00:19:33.320 --> 00:19:39.080
You're certain is always going to return an integer like it has a reliable return to it
00:19:39.620 --> 00:19:42.560
This the second example where they're talking about fetch doubles
00:19:42.640 --> 00:19:45.300
The first one was like a double where you just to return x times two
00:19:45.520 --> 00:19:48.080
So it doubles the number the second one which was like fetch
00:19:48.820 --> 00:19:53.920
Under double it actually uses requests to get the response and then it tries to return the body
00:19:54.400 --> 00:19:58.420
looking for an answer key, that is not as stable.
00:19:58.780 --> 00:20:00.760
It could be it returns two or four.
00:20:01.280 --> 00:20:03.040
It could be the returns of 500 server error.
00:20:03.320 --> 00:20:05.020
Could be the returns some other,
00:20:05.340 --> 00:20:06.520
if a developer makes a mistake someplace,
00:20:06.640 --> 00:20:08.980
some other not expected answer or a string.
00:20:09.280 --> 00:20:11.100
So that's just an example of what
00:20:11.100 --> 00:20:13.340
It might even return an exception,
00:20:13.340 --> 00:20:15.320
like network not available.
00:20:15.320 --> 00:20:18.060
And then the pure functions versus classes.
00:20:18.060 --> 00:20:20.080
I mean, if you look at the example here,
00:20:20.080 --> 00:20:23.440
a function you can do in as simply as two lines
00:20:23.460 --> 00:20:25.640
with a definition of the function and a return.
00:20:26.440 --> 00:20:27.620
When you start talking about classes,
00:20:28.120 --> 00:20:31.220
you just get a lot more boilerplate going on inside the class.
00:20:31.440 --> 00:20:33.240
So if you don't need the classes,
00:20:33.700 --> 00:20:35.440
there's probably no reason to go that direction.
00:20:35.580 --> 00:20:37.120
And it kind of goes on and on and on here
00:20:37.280 --> 00:20:38.600
with more and more examples
00:20:39.240 --> 00:20:41.880
that just show some simpler ways to do that.
00:20:42.020 --> 00:20:43.840
This is the last one I'll talk about,
00:20:44.080 --> 00:20:44.920
which is the side effects.
00:20:45.320 --> 00:20:48.060
If you have a class that has a constructor in it,
00:20:48.180 --> 00:20:49.780
so you've defined a __init__() method,
00:20:50.580 --> 00:20:52.740
that __init__() can affect subclasses
00:20:52.780 --> 00:20:53.780
and you may not be aware of it
00:20:53.850 --> 00:20:55.420
because you've not looked at the code for it.
00:20:55.560 --> 00:20:57.580
So they have a time client example here
00:20:57.710 --> 00:21:00.840
with a __init__() that initializes a token
00:21:02.070 --> 00:21:03.400
using a request post.
00:21:03.430 --> 00:21:06.040
So it actually makes an API call in the base class.
00:21:06.500 --> 00:21:09.240
These other ones for time service and time controller
00:21:09.800 --> 00:21:12.600
are calling a constructor that uses that client,
00:21:12.810 --> 00:21:14.020
which means that every one of these
00:21:14.110 --> 00:21:15.740
will also make an API request.
00:21:16.240 --> 00:21:18.620
So you may want to manage that a little cleaner
00:21:19.320 --> 00:21:21.720
and reduce them or say, for example, external calls
00:21:21.940 --> 00:21:27.660
you're making in that case. The last bit I'll call out in honor of Brian Okken and his Lean TDD book,
00:21:28.240 --> 00:21:33.060
tests with no mocking are simpler than tests with mocking. I think we can all agree, but I think
00:21:33.120 --> 00:21:37.180
there's a world that needs to hear it. And there's a book about it. So if you check out Brian's Lean
00:21:37.360 --> 00:21:43.180
TDD book, he talks about this as well as part of that book. So I thought that was pretty apt and
00:21:43.680 --> 00:21:49.480
timely that this came up. And thanks, Kyle, for helping remind folks of the simpler ways and the
00:21:49.500 --> 00:21:53.400
nice idioms that Python gives us out of the box. I really like it. I remember when I first got into
00:21:53.570 --> 00:21:58.140
Python, I hear Pythonic. I'm like, but I need examples. These words are great, but give me
00:21:58.340 --> 00:22:03.180
examples so much. Yeah. I learned by example. And these are just great examples of like, oh,
00:22:03.600 --> 00:22:07.960
that's how I should do that. Okay. I can follow that pattern every time. Yeah, absolutely. That's
00:22:07.970 --> 00:22:11.800
good stuff. Speaking of following a pattern, your screen's already up. Maybe you just take the extras.
00:22:11.800 --> 00:22:17.680
Yeah, I will. I'll go with the extras first. And continuing in my three-week streak of talking
00:22:17.700 --> 00:22:26.240
about uv releases and new features. The latest one released four days ago, uv 0.12.10, now ships the
00:22:26.460 --> 00:22:33.380
trusted publisher token revocation, and it has Python 3.15 support. So uv is on a terror of keeping
00:22:33.540 --> 00:22:39.620
up with all the latest bits that are going on, including the Python 3.15 releases coming up. So
00:22:40.180 --> 00:22:43.880
that's really cool that they're doing that. And then the other bit, I saw a fun little
00:22:44.180 --> 00:22:51.480
right release here making a python interpreter in 1024 bytes so kind of a little example of
00:22:51.900 --> 00:22:57.640
of if you've ever done code golf and do something in in such and such a number of steps this person
00:22:57.920 --> 00:23:05.040
implemented a full python interpreter in 1024 bytes of good old c code so that's pretty wild
00:23:05.420 --> 00:23:11.880
he i think he first attempted with 512 bytes uh which seems kind of crazy yeah good for you austin
00:23:12.480 --> 00:23:16.660
the subtitle was 512 bytes. It's not enough. Like, right. No kidding. Wow.
00:23:18.400 --> 00:23:23.420
So yeah, he, he chronicled his whole journey. I just thought that was fun. not necessarily a
00:23:23.520 --> 00:23:26.920
full news article, but it's pretty cool. The people out there doing still cool stuff like this.
00:23:27.240 --> 00:23:29.680
That's some minified Python, not something you normally see.
00:23:30.400 --> 00:23:32.220
Right. But yeah.
00:23:32.760 --> 00:23:41.860
Wow. Okay. I just got a one quick one. Steering council elections are going on. So
00:23:41.880 --> 00:23:46.540
Oh, two week nomination period followed by a voting period.
00:23:46.880 --> 00:23:47.920
When is this actually?
00:23:48.080 --> 00:23:50.240
I saw that the votes were coming up, but I don't see the actual.
00:23:50.640 --> 00:23:54.100
Anyway, it's previously been November through December or November through November.
00:23:54.260 --> 00:23:56.660
I think it's not yet up or just started.
00:23:57.040 --> 00:23:58.940
Anyway, this is the 2026 one.
00:23:59.400 --> 00:24:02.520
And so candidates, the nominees are here.
00:24:02.920 --> 00:24:04.020
Lots of folks I see.
00:24:04.440 --> 00:24:05.740
Yeah, it's a good list.
00:24:05.940 --> 00:24:07.000
So check it out, folks.
00:24:07.600 --> 00:24:08.400
And yeah.
00:24:08.580 --> 00:24:10.720
So anyway, I just want to give a shout out to that being a thing.
00:24:10.940 --> 00:24:12.360
Hey, Michael, you got any jokes for us?
00:24:12.780 --> 00:24:14.420
I have a band joke.
00:24:14.920 --> 00:24:15.720
A band joke?
00:24:16.000 --> 00:24:16.660
Oh my God.
00:24:17.040 --> 00:24:18.500
You mean like band as in not allowed?
00:24:18.520 --> 00:24:21.020
We're going to be kicked off of YouTube and all the
00:24:21.020 --> 00:24:22.620
Yes, as in disallowed.
00:24:22.660 --> 00:24:23.060
Disallowed.
00:24:23.060 --> 00:24:25.260
We'll only get kicked off Reddit.
00:24:25.260 --> 00:24:27.300
This is not like a trombone versus trumpet.
00:24:27.300 --> 00:24:29.020
Like, what can you do with a trombone?
00:24:29.020 --> 00:24:30.820
You can't hit him with a little slider thing?
00:24:31.540 --> 00:24:32.100
I don't know.
00:24:32.100 --> 00:24:33.200
I used to play the trombone.
00:24:33.200 --> 00:24:36.420
I never really enjoyed it though.
00:24:37.160 --> 00:24:38.460
It was a requirement.
00:24:39.020 --> 00:24:39.620
No, the joke is, keep in mind,
00:24:39.660 --> 00:24:44.680
there's not programming exactly it's it but i think we can all just like enjoy a little it uh
00:24:45.240 --> 00:24:50.260
stuff you know and it says what single word in it makes you look like this and there used to be a
00:24:50.440 --> 00:24:55.860
picture that had a ah like i can't take it anymore and sorry this post was removed by reddit's filters
00:24:56.260 --> 00:24:59.820
and all it was was a picture of somebody making a weird face like honestly i don't know what was
00:24:59.860 --> 00:25:06.100
wrong with it but someone got up in arms this one this one took me a minute to understand what the
00:25:05.980 --> 00:25:12.400
the heck it was. It said, hello. Do you know what this is about? Why would this make IT people wig
00:25:12.580 --> 00:25:18.420
out? Maybe, you know, I didn't either. It's apparently on Teams or Slack. If somebody just
00:25:18.500 --> 00:25:22.440
says hello, and then they're going to write more, but then they kind of don't, you're like, hi.
00:25:22.880 --> 00:25:28.340
Okay. That could make me a little, okay, let's go. Okay. All right. Not a single word, but anytime
00:25:28.490 --> 00:25:34.540
I get a direct message along the lines, you got a minute? Or can I ask a question? Yes, exactly.
00:25:35.680 --> 00:25:36.360
Oh, let's see.
00:25:36.650 --> 00:25:38.480
So I got to collapse them because they all go down at like,
00:25:39.460 --> 00:25:40.540
this person says printer.
00:25:41.060 --> 00:25:42.160
Just no, no.
00:25:43.300 --> 00:25:43.860
Can't do it.
00:25:44.000 --> 00:25:46.180
What year is this and we still can't reliably print?
00:25:46.520 --> 00:25:46.880
I know.
00:25:46.930 --> 00:25:49.020
I just, this other, just like last week,
00:25:49.430 --> 00:25:51.960
I print maybe twice a year and I just needed to print.
00:25:52.050 --> 00:25:53.080
And it's like, the printer's out of ink.
00:25:53.110 --> 00:25:54.300
Like, I just bought an ink.
00:25:54.330 --> 00:25:56.460
I haven't printed since the last time I bought an ink.
00:25:56.760 --> 00:26:01.320
Anyway, but as in, not to interrupt your lunch, but.
00:26:02.980 --> 00:26:04.120
Could you add in a well actually?
00:26:04.640 --> 00:26:04.860
Yeah.
00:26:05.580 --> 00:26:07.920
Rico or scan to mail.
00:26:09.440 --> 00:26:11.160
Now I get hello.
00:26:11.600 --> 00:26:12.040
That's pretty good.
00:26:12.600 --> 00:26:12.680
Yeah.
00:26:13.040 --> 00:26:13.420
All right.
00:26:13.520 --> 00:26:15.120
Now I'm in my zone now.
00:26:15.400 --> 00:26:15.560
DNS.
00:26:16.820 --> 00:26:20.620
There's even like a little like Japanese style like water painting.
00:26:20.730 --> 00:26:21.820
It says it's not DNS.
00:26:22.180 --> 00:26:23.040
There's no way it's DNS.
00:26:23.340 --> 00:26:24.020
It's always DNS.
00:26:24.440 --> 00:26:25.500
Like some philosopher.
00:26:25.920 --> 00:26:26.040
Yeah.
00:26:26.480 --> 00:26:32.360
In the early days of Six Feet Up, Gabrielle made a comic about DNS because it was so hard to explain to folks.
00:26:32.760 --> 00:26:35.020
And every time I say there's a problem, she's like, is it DNS?
00:26:35.440 --> 00:26:41.040
and so this is my co-founder partner in life and she totally gets it dns is absolutely the problem
00:26:41.400 --> 00:26:47.060
this one might be for me outlook crowd strike i'll just not ever since you owe this one oh my god
00:26:47.200 --> 00:26:54.000
ever since you xyz this doesn't work anymore um update i'm surprised yeah i'm surprised update's
00:26:54.000 --> 00:27:01.899
not in there oracle i'm on that bandwagon um sharepoint let's see what else we got cve or just
00:27:01.940 --> 00:27:06.740
Citrix, teams, SAP, you got my vote on SAP.
00:27:07.310 --> 00:27:07.980
Oh my gosh.
00:27:08.460 --> 00:27:10.080
Anyway, I thought this was a really fun list.
00:27:10.220 --> 00:27:11.480
I don't understand why.
00:27:11.520 --> 00:27:11.980
That was a good thread.
00:27:12.340 --> 00:27:13.980
I don't understand why they banned it, but whatever.
00:27:14.560 --> 00:27:15.460
Now that makes it even better.
00:27:15.460 --> 00:27:16.120
Because it's Reddit apparently.
00:27:17.020 --> 00:27:17.600
Yeah, I know.
00:27:17.920 --> 00:27:18.160
Awesome.
00:27:18.420 --> 00:27:23.180
I put stuff up there and it'll be like, well, it looks like you're trying to share an announcement
00:27:23.740 --> 00:27:24.560
and that's not allowed.
00:27:24.720 --> 00:27:25.160
So blocked.
00:27:25.500 --> 00:27:27.060
Like just, I wrote a blog post.
00:27:27.090 --> 00:27:28.700
I thought this community would think was interesting.
00:27:28.790 --> 00:27:29.740
So I wanted to share it.
00:27:29.980 --> 00:27:31.560
It's like, I'm not selling you anything.
00:27:31.820 --> 00:27:32.140
I promise.
00:27:32.560 --> 00:27:33.240
Not in this case anyway.
00:27:33.440 --> 00:27:34.820
Not on my blog.
00:27:35.240 --> 00:27:35.720
Sorry, Michael.
00:27:36.120 --> 00:27:36.460
Not allowed.
00:27:36.840 --> 00:27:37.100
Banned.
00:27:37.500 --> 00:27:37.800
Banned.
00:27:38.180 --> 00:27:38.760
Well, that was a good episode.
00:27:39.160 --> 00:27:40.320
Thanks for hanging out.
00:27:40.640 --> 00:27:41.800
And we'll see you all next week.
00:27:41.960 --> 00:27:43.280
I'll still be in France next week, I believe.
00:27:43.740 --> 00:27:44.120
Au revoir.
00:27:44.700 --> 00:27:45.140
Au revoir.