Brought to you by Talk Python Courses and Six Feet Up consulting

#497: Faster than light profiling

Published Tue, Sep 22, 2026, recorded Tue, Sep 22, 2026
0:00
00:26:48
Watch this episode on YouTube
Play on YouTube
Watch the live stream replay

Sponsored by Logfire from Pydantic: pythonbytes.fm/logfire Connect with the hosts

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, hand-crafted 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: Tachyon: A sampling profiler ships in Python 3.15's stdlib

  • Python 3.15 adds the profiling package per PEP 799: profiling.tracing (where cProfile moved) and profiling.sampling, the new sampler called Tachyon
  • py-spy and Austin exist but copy raw interpreter bytes with no API, so every CPython release risks breaking them; one in the stdlib is a contract to stop breaking profilers
  • Defaults: 1 kHz, main thread, wall clock, and a -live top-like view for poking at a slow server
  • Output is flexible: pstats, -flamegraph, -diff-flamegraph against a baseline, -heatmap on source lines, -opcodes for specialized bytecode, -gecko for Firefox Profiler with GIL and GC markers
  • Profiling modes: wall, cpu, gil (which function is starving my other threads?), and exception, plus -async-aware to see the task graph instead of just select(), -all-threads, and -subprocesses forking a profiler per child
  • Near-zero overhead for production; guidance is 10-30 second windows on representative load, and free-threaded builds divide the rate by thread count
  • Attach to a running PID, same minor version only; ptrace permissions are the main friction. A 3.14 backport already exists on GitHub
  • Caveat: it only sees Python frames, so 90% in calculate() hides NumPy underneath. For native stacks there's Cronon from HRT, 200k samples/sec over DWARF, not yet open source

Calvin #2: Python Workers are now generally available on Cloudflare

  • Python Workers are out of beta - now GA, "first-class" language on Cloudflare's Developer Platform
  • No more manual JS interop: bindings (queues, R2, D1, Durable Objects) now work natively in Python, e.g. self.env.QUEUE.send({...})
  • Runs on Pyodide (WASM-compiled Python), with real TCP socket support for DB connectivity
  • Frameworks supported: FastAPI, Django, Flask; AI libs like OpenAI SDK, LangChain, MCP
  • Underlying platform work formalized as PEP 783 (PyEmscripten), after a year of discussion
  • Bottom line: write real Python on Cloudflare's edge, no JS glue code required

Calvin #3: Flet 1.0 - build cross-platform apps in Python

  • Flet hits 1.0 - build Flutter-backed apps from pure Python, no frontend experience needed
  • One codebase targets six platforms: iOS, Android, Windows, macOS, Linux, web
  • 150+ built-in UI controls, plus support for custom controls / wrapping Flutter packages
  • Mobile now supports real Python packages: NumPy, pandas, Pillow, cryptography
  • Comes with pytest-based UI testing and an MCP integration for AI coding assistants
  • Milestone lands 4+ years after its first PyPI release (Sept 2022) - signals "production ready," not experimental

Michael #4: marimo-book: Build static books from marimo notebooks

marimo-book is a Jupyter-Book-style static site generator built specifically for marimo .py notebooks. It ships polished multi-page sites with Material for MkDocs theming, full-text search, dark mode, and code copy, plus a content-hashed incremental build cache that drops rebuilds from 100+ seconds to roughly 3 seconds on real books. Standout extras include anywidget rendering without a kernel, static reactivity for discrete sliders via pre-rendered lookup tables, an opt-in WASM/Pyodide mode per chapter, and per-chapter launch buttons.

  • If you've wanted to publish a marimo notebook as a real book or course site without hosting a kernel, marimo-book gives you the static, searchable, fast-loading output you'd expect from Jupyter Book.
  • Alpha (0.1.x), but in production: pin marimo-book>=0.1.5,<0.2; the book.yml schema is stable for v0.1, and dartbrains.org is a real-world user.
  • Two-stage build by design: a marimo-aware preprocessor emits plain Markdown + inline HTML, then mkdocs (Material today, zensical tomorrow) renders it. Not a mkdocs plugin, so the shell stays swappable.
  • Interactive widgets without a kernel: anywidget Canvas/Three.js/Plotly mounts render statically, and mo.ui.slider with explicit steps gets pre-computed as a static lookup table.
  • WASM escape hatch per chapter: set mode: wasm and the chapter routes through marimo's MarimoIslandGenerator, shipping the marimo runtime + Pyodide bundle for full reactivity where you need it.
  • Per-chapter launch buttons and extras: readers can jump to molab, GitHub, or a downloaded .py; optional [social], [linkcheck], and [pdf] extras cover OG cards, htmlproofer, and WeasyPrint PDF export.
  • Sandboxed notebooks: the sandbox mode reads PEP 723 inline metadata and provisions per-notebook envs via uv for portable builds, at the cost of slower first runs.

Extras

Calvin:

  • Great overview of a new feature in Python 3.15 - frozendict

Michael:

Joke: You have homework (no really ;) )

Watch Interview with Big Data engineer in 2026 by Kai Lentit

Episode Transcript

Collapse transcript

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

00:05 This is episode 497, recorded September 22nd, 2026.

00:11 I'm Calvin Hendryx-Parker.

00:12 And I'm Michael Kennedy.

00:14 Excellent, Michael.

00:15 I think you get a little message here you want to give.

00:17 This episode is brought to you by Logfire from Pydantic.

00:20 Check them out at pythonbytes.fm/logfire.

00:24 They are super, they're a great company, you know, Samuel and team.

00:29 Pydantic has been a good community member, and this is a really great way to add observability to your app.

00:34 I will tell you more about that later.

00:36 Perfect.

00:36 Right now, connect us, Calvin.

00:38 Yeah, I will.

00:39 You should connect with Michael and I and the show.

00:41 We are over on Mastodon, Bluesky X, and LinkedIn.

00:45 And make sure you can, if you want to check out and be part of the fun, we do live stream this at pythonbytes.fm/live.

00:52 We want to be part of the live studio audience.

00:54 Usually it's on Tuesdays at 7 a.m. Pacific, but we're doing a little later today.

00:58 Older versions are available on the YouTube as well.

01:01 And finally, if you want the Artisanal handcrafted digest of every week's show notes and email form, join our friends of the show list and we will send you that email pronto.

01:12 Speaking of pronto, things that go fast, usually you wanna profile things that make them go faster.

01:17 What do you got for us, Michael?

01:18 You absolutely do wanna profile things to go fast.

01:21 I wanna tell you about Tachyon.

01:22 Now this is interesting on a couple of levels.

01:24 So this is Python 315's new profiler.

01:28 Okay.

01:29 What's interesting about it is it's built in the Python.

01:31 So previously we've had profile and C profile and it still is a bit of a mystery to me while we have two.

01:39 And they weren't the easiest to use either.

01:41 No, they were not, not, they were not that obvious.

01:43 And what the, what I'm going to tell you about with this tachyon thing is going to literally be a game changer.

01:48 The game shall be changed.

01:49 All right.

01:50 So the other ones, it was basically the same details, but one was implemented in C and one was implemented in Python.

01:58 So you kind of think of them at the same, but for the most part, they were tracing profilers, a tracing profiler instruments, every function call, every stack change, all that kind of stuff to say, now we're entering this function.

02:12 Now we're leaving this function.

02:13 Now this function is now calling that function.

02:15 Now that function we're leaving that function.

02:16 You know what I mean?

02:16 Like it's, it's really invasive and that can dramatically slow down your code.

02:21 And what's frustrating is it slows it down in an uneven way.

02:24 Like some functions that are very shatty, you slow down a lot.

02:28 And one that calls something external, that's really equally slow, might barely slow down at all.

02:32 Right.

02:32 And so it also skews your results.

02:35 So people use sampling profilers.

02:37 All right.

02:38 And I don't think the other one did sampling.

02:40 Maybe it did.

02:40 I don't have not used it that way, but we now have this thing called tachyon from Pablo, and Laszlo.

02:50 Sorry, Laszlo, I'm forgetting your last name.

02:51 I, they're on the PEP of for, for, putting this together.

02:55 They worked on, I had them on the podcast on talk Python last week, had a really awesome conversation about this thing called tacky on.

03:01 So this is unique in a couple of ways.

03:03 It has its own logo.

03:05 How many sections of the Python standard library get their own logo?

03:10 I think none.

03:11 I know.

03:11 And they usually don't get a code name.

03:13 Now, Pablo and Lazlo would like this to be addressed, referred to as tacky on not profiling dot sampling, but they've redone the module layout.

03:23 So there's profiling dot tracing, which is C profile renamed.

03:27 And there's profiling dot sampling, which is a statistical profiler.

03:31 And it leverages the new features available in 3.15 that allow profilers to hook in externally into CD Python, the runtime.

03:40 Now you might think, okay, so fine.

03:41 It's a sampling profiler, not a tracing profiler, whatever.

03:44 No big deal.

03:45 Let me call your attention to the left here, Calvin.

03:48 Do you see this attach?

03:49 Ooh, yes.

03:50 This means I might have a project running on a server in a Docker container, processing real results, suffering some kind of problem that I cannot reproduce in dev or QA.

04:01 I can SSH and then Docker exec over into there.

04:05 And I can say Python dashed in profiling sampling attached to this PID.

04:08 Let it go for 30 seconds.

04:10 Detach.

04:10 And it will have generated a production level profiling PSTAT file that I can flame graph and I can look at and so on.

04:18 That sounds scary, but you're very useful.

04:21 It sounds scary.

04:22 And what I said about the degradation of performance with the tracing one, it would be, they say this has like a 2% to 3% overhead.

04:29 Oh, wow.

04:30 That's not bad at all.

04:31 Okay.

04:31 That's neat, right?

04:32 Yeah.

04:33 It's actually super neat.

04:34 Yeah.

04:35 This is a big deal.

04:36 I mean, I know it's a big deal.

04:37 It's such a big deal.

04:38 Python 315 is going to be a huge deal.

04:40 It's going to be such a big deal.

04:41 It'll be so good.

04:42 There's also run, which is the more standard, like just run this and profile it.

04:46 This attach is not just production though.

04:48 Here's something that drives me out of my mind when I'm trying to do profiling.

04:51 I want to profile how long this web request that takes.

04:55 So I profiles, run the app.

04:57 I go over and I click on the endpoint a few times and then I shut it down.

05:01 99.9% of all the profiling stuff is loading the web framework, connecting the database, doing this, doing like all the junk that is not what you're interested in.

05:10 No.

05:10 So you could start your app and get it just ready to profile, attach it, do the thing and detach it.

05:15 And you lose a lot of that noise.

05:17 I think it's really neat.

05:18 So yeah, there's a whole section on profiling and production and how that might go.

05:22 There's also different profiling modes.

05:24 Wall clock mode, CPU mode, GIL mode.

05:27 So you can understand GIL contention specifically.

05:30 If you're trying to do threading, CPU is, imagine there was no waits in the world.

05:34 If I wait on a database, that doesn't count because that's external.

05:37 I can't address that.

05:38 It's not part of my program.

05:40 So let's pretend that the stuff I'm waiting on doesn't exist.

05:42 That's the CPU mode.

05:43 Wall mode is like traditional.

05:45 And exceptions is just how much time are you spending handling exceptions and errors.

05:48 I think there's a bunch of stuff here.

05:50 Like it's, check out the docs I linked to, the little TOC on the left.

05:53 It's ridiculous.

05:54 It's really cool.

05:55 Yeah, yeah.

05:55 I mean, for people, if you get down to the point where you need to profile, you know you've got a serious performance problem because you don't take profiling typically lightly.

06:03 But this is going to be a huge boost for folks who are like, oh, Python's just too slow and can't do the things.

06:08 It might actually be your code.

06:10 And if you use this tool, you may find you can actually fix a problem be just as fast without having to switch off the python i like that a lot it's amazing yeah i think

06:17 this is really neat it's a big i think it's a bigger step than it initially sounds like for

06:22 python yeah it got its own name and logo in the python dog i mean that's significant that's kind of significant i unheard of definitely unheard of i'm surprised there weren't more boats rocked when

06:32 that that kind of went down you know well pablo's uh a force of nature he got it done i guess so

06:38 i'm glad they worked on that's really yeah me too well hey i've got a new there's been a big week in releases for the Python world in kind of other areas.

06:47 So the first one I wanted to cover was Cloudflare has released Python workers that are now, it's now generally available.

06:53 So for the last two years, I believe it is, that you could actually try out Python workers in the Cloudflare space.

07:00 So if you're not familiar, you can use compute on Cloudflare. And so it puts your compute at the edge and it's been generally JavaScript or TypeScript native because it does, it's all WASM. So it compiles it, runs it at the edge, and it's pretty limited too.

07:15 So one of the things you had to always worry about was RAM consideration, size of the container.

07:21 It was pretty, you know, cranked down as far as constraints go.

07:25 They just released the Python workers out of beta, so it's now generally available. So now a first-class language.

07:31 And one of the big holdups from before was there's no more manual JavaScript interop. If you were using one of the other Cloudflare services and you were using the beta version of the Python workers.

07:42 Like for example, if you're using R2, which is their object store, if you're using D1, which is their like mini like SQLite like database, if you're using durable objects for WebSockets, you had to convert all those data structures over into JavaScript

07:55 first from Python and then use those services, which pain in the butt, it's just like extra hoops.

08:01 You'd forget how to, you know, feed that overhead going along with that as well.

08:05 But now they're all natively available in Python.

08:08 So you can now just do self.m.queue.send if you want to use their durable objects queue system.

08:14 It all just works out of the box.

08:16 It's all running on Pyodide.

08:18 So it's WASM compiled Python with another big thing that wasn't available in the beta first was the ability for real TCP socket support.

08:26 So in the beta you could not connect to other databases.

08:29 So for example if you wanted to use I believe it's called Hyperscale which is their MySQL Postgres hosted versions of those things, that was a no go.

08:38 Couldn't couldn't do it.

08:39 Now it has support for that.

08:40 It also has support for frameworks.

08:43 So it more now natively supports FastAPI, Django, Flask, a bunch of AI libs. So if you want to do like a line chain or build MCP servers, it's pretty cool.

08:53 So here I've got the docs open right here, which is, you know, the Python worker docs are pretty, pretty nice, pretty clear.

08:58 I've been building lots of little fun, unique tools for myself using Cloudflare workers, which is very handy. So for example, I've replaced a lot of my usage of like Zapier or make.com just with like little one-off workers.

09:10 And now I can write them in Python because I was having to do them in JavaScript before.

09:13 So yeah.

09:15 Now don't get too excited when I say that Django is available on FastAPI or on the Cloudflare workers.

09:21 You still have some limits.

09:23 Actually, I'll pull that up right here.

09:25 The limits are still real.

09:27 You have a memory limit for free and for paid of 128 megabytes of memory.

09:32 I can tell you from my experience using FastAPI Cloud, pretty regularly going up close to 512, sometimes over.

09:40 And so you have to have a pretty slim app to be able to run in that small of a memory footprint. It's got to be really, really stateless and be able to handle that kind of memory usage.

09:50 So deploying a full blown Django app, probably not going to happen inside of these Cloudflare workers, but it's really not the intention or what you should be using them for.

09:58 Think about them as, again, kind of a Zapier drop-in replacement.

10:03 Instead of using Zapier, use Cloudflare because you could write the code. You have more control. Now you've got TCP sockets, so you can connect to real databases.

10:10 You can use their, I actually use their durable objects in some of my projects.

10:14 Super convenient.

10:15 I mean, just the convenience to having some of these pieces all geographically distributed automatically for you is a huge win.

10:22 But just yet to begin, be aware of all the limits.

10:25 Like, again, another thing it's worker size.

10:27 You're limited to 64 megabytes of disk space that you basically have available to you.

10:33 This has improved dramatically, though, since last year.

10:36 Earlier this spring or late last 2025, these limits used to be considerably smaller, like three megabytes and 10 megabytes were the limits up until very, very recently. So that's another big change that has happened.

10:48 That's across all workers, not just the Python workers, but that definitely helps the Python folks be able to and get our code encapsulated down into something small enough that can run in there.

10:58 This has all been done because the underlying platform was formalized as part of like PEP783, the Py and Scriptum.

11:04 So after a year of discussion, we now have generally available Python workers.

11:08 I'm really excited about this because now I can do real Python at the CloudFloor edge with no JavaScript required at all.

11:15 Amazing.

11:16 I'm excited about this as well.

11:16 Have you played with this at all?

11:18 No, no, but playing in a space tangentially near it.

11:23 I've not done anything with edge workers.

11:26 It looks super interesting to me, but I just haven't found the use case for me.

11:29 So, no.

11:30 I've got tons of event-driven, like any place where I'd want a cron job to go off and do something, I may put it into a Cloudflare worker.

11:38 I use it for Cloudflare pages quite a bit to publish quick little microsites to show off to a customer or to a prospect to convey something to them that we've worked on, because I can put authentication.

11:49 You can use middleware in the pages to actually cause authentication to trigger.

11:54 It's pretty slick.

11:55 Yeah, one thing that I do find interesting is the Cloudflare D1, and this is closer to where I'm talking.

12:01 Isn't that cool?

12:02 Which is basically SQLite on the edge, but somehow it syncs.

12:07 Maybe with Lightstream behaviors, I'm not entirely sure.

12:10 But it sounds very cool, and I'm actually all here for SQLite these days.

12:14 I've been doing some interesting stuff.

12:15 My number one item next week will be something, trying to think about how dramatic I wanna be here.

12:21 How dramatic is something pretty amazing on SQLite next week.

12:25 Not DuckDB.

12:27 No, DuckDB is an option.

12:28 This is more of a transactional thing that's more well-shaded with row-level behavior than with columns.

12:35 But if it was data science, then yeah, sure.

12:36 See, this is anticipation.

12:38 We'll just have to wait until next week.

12:39 Oh my gosh.

12:39 I'm not even-

12:40 I'm gonna literally be sitting on the edge of my chair.

12:42 It's gonna be hard.

12:43 Until then. - It's worse than Christmas, Let me tell you, but we're going to do it.

12:46 We're going to do it.

12:47 Now, before we move on, though, I do want to tell you about our sponsor, Pydantic Logfire.

12:51 They've been sponsored in the last couple episodes, and we really appreciate that.

12:54 What a cool forum.

12:56 So if you run Python apps in production, especially if these are AI, you're running AI models, using AI models, not necessarily executing models, but, you know, using something you're talking to, then you want to check out Logfire.

13:09 So here's the story.

13:10 It's 2 a.m.

13:11 You know where your kids are?

13:12 No, that was a different one.

13:13 Your AI agent has failed.

13:15 Was it the model, the tool call, the database?

13:17 Most observability tools can't tell you because they only see part of your stack.

13:21 Pydanic Logfire sees all of it.

13:22 One trace across your agents, LLMs, APIs, and database down to the infrastructure, whether it's services, Kubernetes, and on the hosts.

13:29 It's built on open telemetry with SDKs for Python, TypeScript, and Rust.

13:33 And it works with any OTEL compatible language.

13:35 Every prompt costs right next to your vector searches and API calls.

13:39 You query everything with Postgres compatible SQL.

13:42 And so your coding agent can as well.

13:45 It can use the Logfire MCP server, which is excellent.

13:49 Stop guessing.

13:50 Read the trace.

13:51 PyDenic Logfire.

13:52 AI is still just engineering.

13:54 So visit pythonbytes.fm/logfire today and sign up.

13:57 Get 10 million records for free every month.

13:59 No credit card required.

14:00 You can even click on board with your coding agent.

14:03 I love it so much to copy the prompt.

14:05 It's scary so much.

14:06 You give the Clotter codex and just say, user wants to do this.

14:10 Help them.

14:10 And you and I, we got this.

14:12 and then you'll just have it all set up for them.

14:13 That's a really cool way to onboard your projects these days.

14:16 So thanks to Pydantic for supporting the show.

14:18 It's a good thing we know them and we would trust them.

14:20 Exactly.

14:20 It's very unlikely to have.

14:24 True.

14:24 Very unlikely.

14:25 All right, over to you.

14:26 All right.

14:27 Another announcement this week was that Flet has gone 1.0.

14:31 So if you've not checked it out, it is a Flutter-backed app written in pure Python with no front-end experience needed at all.

14:39 So you can basically write a web app, a mobile app for iOS and Android, because Flutter is basically this cross-platform framework that allows you to do all that.

14:49 And you get stuck and run on macOS, Linux, and the web.

14:52 Cool.

14:53 I've never actually tried it until today.

14:55 I went and built a little quick demo from a previous app I had built and added a web app basically to it by saying, use Flutter, make a web app, and then launch it so I can play with it.

15:05 And so you get one code base that can target many platforms.

15:09 That's more the promise from Flutter.

15:11 The promise from Flutter is you get to do it all just with Python and you don't have to do any Java or Kotlin or, you know, JavaScript front end pieces to it.

15:22 That's a tall order. There's been a couple of different projects over the years that have attempted to do what this says, but this gives you 150 plus built-in UI controls plus support for some custom controls, all wrapping native Flutter packages.

15:37 The mobile version now supports real Python packages. So you can go out real Python packages that might include things like C or Rust dependencies.

15:46 So NumPy, Pandas, Pillow, Cryptography, those kinds of things can actually be used as part of Flut 1.0 now.

15:53 It has a MCP server that you can use as part of the documentation to give your agent knowledge about how to build a Flut app, which is kind of nice.

16:01 And I think it also has skills built into the repo.

16:04 So if you have your agent set up correctly, it can use the skills that come with Flet to build fancy apps very, very quickly.

16:11 So it had its first released back in 2022.

16:15 This kind of 1.0 is signaling that we're production ready and not experimental.

16:20 So actually, if you look at the, they have a blog post released on it today.

16:23 Flet.1.0 is out, or no, it's not today, it's from the 15th.

16:26 So Flet.1.0 is out, means it's production ready to go.

16:29 So it has a CLI and a library.

16:31 So you install the library to be able to use it to build your app in Flet.

16:34 You install the CLI so you can use things like the Flet build, Flet test, Flet run.

16:39 And away you go.

16:41 I also, here's like, I built a little calendar.

16:43 So this is all using Python under the covers.

16:46 And it's a real web app.

16:46 You can see you're running on my framework here in the house.

16:49 Yeah, it looks good.

16:50 Yeah.

16:50 I mean, those are all, I did nothing other than port Flet and told my agent to wrap the CLI app.

16:56 This is all a CLI app I'd written to make a little calendar.

16:59 and told it to give it next and previous buttons.

17:02 And I wrote no JavaScript is harmed in the creation of this quick little app.

17:07 No semicolons were dropped.

17:08 No, definitely not.

17:10 But I definitely consider it.

17:11 We've had some success with Flutter projects in the past.

17:14 I wasn't happy about the Flutter part, but now I could maybe tolerate it a little better if I'm not having to deal with it because Flutter deals with it for me.

17:20 I thought a lot about to write the Talk Python courses app in, and I ended up choosing Flutter.

17:25 And this is Dart, not Flutter.

17:27 It's been great.

17:27 It's been going for a couple of years.

17:28 I really like it.

17:29 It's performant.

17:30 It feels native.

17:31 It feels native.

17:32 Yeah, I like that.

17:34 Yeah, I just built a new version.

17:35 Sorry, go ahead.

17:36 Yeah, I would say when people get really real about it, I think you'll want to do native versions, but I think until then, Flutter is a great option.

17:42 I mean, there's native and then there's native.

17:43 You know, like how native does it have to be?

17:46 Like, we're right in the support lane.

17:47 That's true.

17:47 Right?

17:48 But still, this, I just pushed a new version to the App Store last week.

17:53 So, I don't know.

17:54 All the App Store review times are getting so bad with so many apps being submitted to them.

17:59 I mean, Apple can definitely, yeah.

18:01 I don't mind the new apps.

18:02 It's just Apple, especially, they just, they don't have the money to hire enough reviewers.

18:08 It's really unfortunate, those poor souls.

18:10 No, they just don't hire enough people.

18:11 It's really frustrating.

18:12 Like my review took a week or something like that.

18:14 And like, that's not normal for an app that's already out there.

18:16 For one that's already published, it's definitely not normal.

18:18 Yeah, yeah, exactly.

18:20 Anyway, the download for the Delta was three megs for the new version.

18:24 So it was really, really good.

18:25 All right, so there's that.

18:26 And then also I had, Fidor Fitzner, the guy behind flight on the show, not too long ago.

18:31 So people want to check that out, but I want to talk about books.

18:35 I want to talk about Marimo books.

18:37 So if you wanted to make a book, let's imagine you want to use not exactly Jupyter, but you want to use Marimo Marimo, and then you wanted to generate a book from it.

18:47 This is pretty cool actually.

18:49 So I like Marimo a lot.

18:50 I don't know.

18:51 You said you do as well.

18:52 I do too.

18:52 Yeah.

18:53 Yeah.

18:53 It's got a really nice UI, really nice feel on what it does.

18:57 But so they brought the guy behind any widgets and now works at Marimo.

19:03 And so you can imagine there's really good support in Marimo now for any widgets, which is interchangeable ways to have widgets for the printer and Marimo and others, I believe.

19:11 And you can have interactive sliders in your book.

19:15 You can either pre-render it or whatever.

19:17 Or if you want to do it online, you can add, here we go, here's our tie-in.

19:22 Wasm render per chapter.

19:24 So you can just publish this right up to Cloudflare.

19:26 Yeah.

19:26 Yeah.

19:27 You could just take this and say, here's your, here's your book.

19:30 And by the way, this part has a cool physics animation that I want to show you.

19:33 So online, we have the Wasm version with all the dynamic aspect of it.

19:38 Material for MK docs.

19:39 They mean, I wonder if it'll take on Sensicle eventually, but who knows?

19:43 You know, cause that's kind of the successor.

19:45 Martin and crew over there are working on that.

19:48 Launch buttons per chapter for launch on GitHub or on Molab, which is the Marimo online cloud hosted lab for notebooks.

19:56 Incremental build cache.

19:58 So stuff goes nice and speedy and goes straight to GitHub pages.

20:01 What do you think?

20:02 This looks really cool.

20:03 Yeah, it does.

20:04 Yeah, bundle onto Marimo.

20:05 I love it.

20:06 This is from LJ Ching, not from the Marimo team.

20:11 So it's an emerging project, but it looks neat to me.

20:16 And so I thought I'd go ahead and shine a bit of a light on it nonetheless.

20:19 I just love the idea of this being maybe the future of education, where you have a book that is fully interactive and the code works and it's published online and it works with the whole sandbox and everything.

20:29 It's just, that's, that's what's needed.

20:30 I love it.

20:31 That's really cool.

20:32 Absolutely.

20:33 Michael, do you have any, I got, I got one extra for us for this go around.

20:37 Run with it.

20:38 Yeah.

20:39 If you have not checked out, Python 315 has a new data type in it called frozen dict.

20:45 So I wanted to just highlight this link over to the RealPython site on their overview of it.

20:50 They did a nice overview.

20:52 What's nice about frozen dicts is that they are immutable.

20:56 And they basically line up to their list and set counterparts that have been around for years.

21:00 It also means you can use a frozen dict as a key in a regular dict because it is hashable.

21:07 Oh, interesting.

21:08 Yes.

21:08 I would have never thought of using a dictionary as a key.

21:11 It already blows my mind.

21:13 You can use a tuple as a key and for sorting and stuff.

21:16 Because it's immutable.

21:17 But yeah, so that was just a quick little one I wanted to throw in there because I think given the excitement that's now brewing around 315, I can't wait.

21:25 Yeah, same here.

21:26 And yeah, just another reason to be excited about 315, which by the way, I don't know if my calendar exactly pulled up, but I believe that is next week.

21:34 October 1st is when that comes out per schedule.

21:36 So that's great.

21:37 All right, now I have a couple.

21:39 Yeah, exactly.

21:40 A couple of things just to better noteworthy here, I thought maybe worth chatting about a bit.

21:46 One, we went back 10 years and there was an update from Microsoft for Windows or something like that.

21:51 There'd be but what, 20 patches?

21:53 Yeah, maybe.

21:54 This year is on track to have just more patches.

21:58 So many more.

21:58 I think last month was a record-setting month with 500 security patches for Windows.

22:04 This year is 1,000.

22:05 Sorry, this month is 1,000.

22:07 That's 2x the max.

22:09 of last month, which was an all-time record.

22:12 This is a serious endorsement, I guess, of using AI to find and solve security problems.

22:19 You know, Microsoft has this MDash program, which is kind of like their own, like, we're going to build our own glass wing.

22:23 Thank you very much sort of thing.

22:25 So I don't know.

22:25 I think this is just noteworthy.

22:27 And if you also look at the Golden Gate macOS 27, there was just a wall of little tiny, this is faster, this has improved, that's better, things that kind of mirrored a similar thing.

22:38 So I think, you know, people ask, where is the explosion of software if actually have increased productivity with AI?

22:45 Well Tech debt.

22:47 Yeah, exactly.

22:47 We're still digging out of the holes.

22:49 Anyway, I just wanted to throw this out here, not to bash on Microsoft. This is actually a good thing. - No,

22:54 I think it's a good thing.

22:54 I worry though still that for everyone they patched, how many more did we create along the way? Hopefully less than they're being very, they obviously are cognizant of that problem.

23:03 Yeah, there was a problem they introduced with Excel.

23:06 I think they broke copy and paste and they quickly fixed it.

23:09 But there's not a new security problem, right?

23:12 I mean, if you freeze the software, it's been around for 30 years.

23:15 There's a finite set of problems.

23:17 And the faster we can plow through them, the better, generally.

23:20 As long as the attackers don't outrun the white hats.

23:23 Anyway, okay, so on to the next.

23:25 The next thing is I am speaking of beginning of October.

23:29 On October 3rd, I will be speaking at, right here I am.

23:34 Who is this character?

23:35 I will be speaking at Friday.

23:36 I recognize all of those.

23:36 folks.

23:37 Yes, I didn't know as well.

23:38 We'll go back to the list a second, but I'm basically doing a updated newer version based on my book, Talk Python in production.

23:45 So how can you pick a simpler view of running and hosting your apps and not spend a ton of money, have it simple enough that one person can run it in their very much part-time efforts and yeah, still get a good outcome. So that's what the talk is about. I'm excited about that.

24:00 And we also have, let's see, Himalafox is going to be there. Awesome.

24:05 Brian Okken.

24:06 People may know him from the show. I'm not sure.

24:08 Maybe.

24:10 So anyway, I hope to see you all there for some of you.

24:13 And I also want to give a quick shout out to PyCon Netherlands.

24:18 So this was sent over by Gareth together and just wanted me to give a quick bit of background for people. So if you're headed to Europe in October, the good stuff is happening in October.

24:28 This is October 15th in Utrecht.

24:30 So you can check it out. It's one day, three tracks, about 150 people and it's an hour by train from Scheifell.

24:36 There's a session for just for community organizers from groups like PyLadies, PyData and Django.

24:41 And yeah, this is a good place because this is where Python was born in the Netherlands.

24:46 So go back to its roots.

24:48 Sometimes it only makes sense if you're Dutch.

24:50 That's right.

24:51 Well, I'll tell you what makes sense.

24:53 You gotta be German for this to make sense.

24:54 Oh, okay.

24:55 Yeah?

24:55 Yeah?

24:56 You got a joke for me?

24:57 I have homework.

24:59 I have homework for you.

24:59 And I know that you've done your homework you are a good student.

25:02 You are a good student.

25:04 So this comes to us from Kyle Lentit, otherwise known as programmers are human.

25:08 And oh my gosh, has he been killing it lately.

25:10 So this is actually one of two things I want to recommend to people.

25:14 And I'm not going to spoil it. We're going to come back to it. But there's a little hint right down here, the bottom right.

25:19 There's another video that I think is even better than this, but this is what the one I grabbed for the show called interview with a big data engineer in 2026.

25:28 I love how the intentional like gaps of like wording and stuff like.

25:33 So this is a video, but how long is it?

25:36 It's eight minutes.

25:36 You should all go watch it.

25:38 It's very funny.

25:39 You will spend on YouTube.

25:41 There's some great one-liners and some serious gold embedded into this video.

25:47 Like eventual consistency is hard.

25:49 So we went with immediately inaccurate.

25:51 One of my favorites from that video.

25:53 Yeah.

25:53 and 70% of the records are accurate.

25:55 That's better than a weather forecast.

26:00 And Kai is just, God, he is good at these jokes, but he's really, really informed in just like the broader space of programming.

26:08 It sounds so real because many of us have experienced these things.

26:12 Yeah, yeah, it really is good.

26:14 And he has another good little section here.

26:16 Salary, job security, holidays, pick two.

26:20 High salary, job security.

26:23 You can have any two of those you want.

26:26 Anyway, yeah, it's just like, I'm just clicking around at every little place I click on this video.

26:30 It's like, yeah, that part was awesome.

26:32 So check it out.

26:32 This is my joke.

26:33 It's not a direct joke.

26:34 It's homework, but trust me, you will enjoy it.

26:37 Click the link.

26:37 It'll be worth it.

26:38 It will.

26:39 And we'll come back to more stuff from Kai later.

26:42 All right, Michael.

26:42 Well, thank you so much again for this week's edition.

26:45 And we will see you all next week.

26:47 You bet.

26:47 Goodbye.


Want to go deeper? Check our courses




Subscribe to Python Bytes