Python Bytes - #488 tau - it's 2pi and it writes code

Episode Date: July 14, 2026

Topics covered in this episode: The trusted-publishing debate: how to do it right vs. why you shouldn't trust it JupyterLab 4.6 and Notebook 7.6 are out! Tau – new small, readable terminal codin...g agent Django Tasks and Django 6.1 Extras Joke Watch on YouTube About the show 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, 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. Calvin #1: The trusted-publishing debate: how to do it right vs. why you shouldn't trust it https://snarky.ca/how-to-publish-to-pypi-using-github-actions-securely/ (Brett Cannon) and https://blog.yossarian.net/2026/07/07/You-shouldnt-trust-trusted-publishing (William Woodruff) Trusted Publishing (PyPI's OIDC-based auth scheme, also now used by npm, RubyGems, crates.io, NuGet) replaces long-lived API tokens with short-lived, auto-scoped credentials tied to CI/CD machine identity. Yossarian's post: it's purely an authentication mechanism between a machine identity and a package — it says nothing about package safety or quality. PyPI deliberately avoids any "verified/trusted" badge for it, unlike its verified-URL checkmarks. Same logic applies to PyPI attestations: anyone can sign with any machine identity they control, so an attestation's presence isn't itself a trust signal. Bottom line from that post: don't confuse "trusted" (machine-to-machine) with "trustworthy" (human judgment about the package). Snarky.ca's companion piece is more practical: given GitHub Actions compromises in the news, the real fix is 3 concrete steps — run zizmor to lock down workflow permissions/checkout credentials and pin actions to commit hashes, adopt Trusted Publishing to eliminate stored PyPI tokens, and require manual approval via a GitHub environment before any publish job runs. Takeaway for listeners: Trusted Publishing is good hygiene for how you authenticate to PyPI, but it's not a substitute for securing your CI pipeline itself — or for actually vetting the packages you install. Michael #2: JupyterLab 4.6 and Notebook 7.6 are out! Michał Krassowski's rundown - a chunky minor release: 68 features, 97 bug fixes, 95 contributors, one of the biggest ever. Scratchpad console (Notebook 7.6 headliner) - a console next to your notebook sharing its kernel, for throwaway experiments. Ctrl+B. Jump to last-edited cell - new commands hop through recently edited cells. File browser glow-up - Date Created column, editable breadcrumbs with Tab-completion, and Open in Terminal. Debugger - sources open in the main area, floating step/continue overlay, live kernel-sources filter. Custom layouts (Lab) - activity bar top/bottom, draggable panels, four-way tab splits, per-panel Ctrl+scroll zoom. ~5x faster extension builds - webpack → Rspack, and jupyter-builder means no full Lab install needed to build extensions. Keyboard/a11y - add shortcuts from the UI (no JSON), Find & Replace in Edit menu (Ctrl+H). Calvin #3: Tau – new small, readable terminal coding agent Tau – new small, readable terminal coding agent (Python 3.12+), built as both a working tool and a teaching project for how coding agents work under the hood Install via uv tool install tau-ai, pipx, or pip; ships a tau CLI Three-layer architecture: tau_ai (provider-neutral model layer) → tau_agent (reusable "brain": messages, tools, events, loop) → tau_coding (CLI/TUI, file & shell tools, sessions) Supports OpenAI, Anthropic, OpenAI Codex, OpenRouter, Hugging Face, and custom/local OpenAI-compatible endpoints Built-in tools (read/write/edit/bash), durable JSONL sessions with resume/branching, project instructions via AGENTS.md, and context compaction Core harness is UI-agnostic — same brain can power the TUI, print mode, or a custom frontend — usable as a standalone library too Michael #4: Django Tasks and Django 6.1 Django 6.0 finally ships first-party background tasks (django.tasks) - out of Jake Howard's DEP 14, accepted May 2024, after two decades of everyone bolting on Celery/RQ/Huey. It's an API, not a worker. Django handles task definition, validation, queuing, and result storage - it does not execute them. You bring the backend. The default backend traps people. ImmediateBackend runs tasks inline on the request thread and blocks until done - so out of the box .enqueue() backgrounds nothing (a 5-second task means a 5-second response). The other built-in, DummyBackend, runs nothing at all. Both are dev/test only. Nice API otherwise: slap @task on a function, call .enqueue(), get back a TaskResult you look up later by id - with async twins like aenqueue(). Gotcha: args and return values must survive a JSON round-trip, so a tuple sneakily comes back as a list. The community local backend to know: django-tasks-local by Chris Beaven (SmileyChris). A ThreadPoolExecutor backend that gives real background threads with zero infrastructure - no Redis, no Celery, no database - plus a ProcessPoolBackend for CPU-bound work → github.com/lincolnloop/django-tasks-local Its catch: results live in memory, so pending tasks vanish on restart or deploy. Great for dev and low-traffic production; for persistence, drop to Jake Howard's django-tasks (DatabaseBackend + worker command). Extras Calvin: Fixing the dictionary with Python 3.14 — Hugo van Kemenade stumbled on - and got fixed - a markup bug in the OED's own citation of a 1706 use of the pi symbol. Michael: Bunny DNS is now free Jokes: What's the object-oriented way to become wealthy? Inheritance To understand what recursion is... You must first understand what recursion is 3 SQL statements walk into a NoSQL bar. Soon, they walk out They couldn't find a table.

Transcript
Discussion (0)
Starting point is 00:00:00 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds. This is episode 488, and it is Tuesday, July 14, 26. I'm Michael Kennedy. And I'm Calvin Hendricks-Parker. Happy best-eel day. Yes, indeed. Happy best deal day to you. And this episode is brought to you by us. So check out our things. Courses over at Talk Python. I have many in the works competing for what comes next. Maybe Rust. I think a Rust course is going to be the next. out the gate. So we'll talk more about that at some point soon. If you have a project and you would lock some expert help for the really hard projects, reach out to six feet up. You can subscribe to our newsletter. Got some nice announcements there. Follow us on all the socials and watch
Starting point is 00:00:47 us live or the replays on YouTube. Every episode has a little YouTube thumbnail. If you click it, guess what you got? YouTube, YouTube version. So we appreciate the people who are part of the live show, but definitely not required. And with that, Calvin, I would say I want to talk about the Inosuch blog. Yes. Who do you trust? It's interesting. This is actually a pair of blog posts that both came out last week on the seventh.
Starting point is 00:01:13 One from William Woodruff, this blog right here. And the other one's actually from Brett Cannon, which I'll show here in a second. But they're both around trusted publishing and who you should trust. What I think is important to understand, and I think what they both emphasize in their posts, is that trusted publishing is not for you it is for the machines so if you're not familiar trusted publishing it is pi's oidc based off scheme uh so you can now it's used by other groups too npm ruby gems crates and new get they they basically want to replace long-lived API tokens with short-lived autoscoped credentials tied to the cacd machine identity so this may sound really great and like you
Starting point is 00:01:56 could trust everything coming out of these these tools but really what it's it's about is making sure places the software is coming from and going to is trusted. And you can actually see that in this post. William goes into why you shouldn't trust trusted publishing alone. And then the other posts actually from Brett Cannon, but that was actually quite interesting, which is how to publish to Pi Pi using GitHub actions securely. And he actually mentions Zismore or Zizmore. How do he pronounced that?
Starting point is 00:02:25 Is that the right pronunciation of the tool? So William wrote the tool mentioned. in here, and he also mentioned in his own post. All right, the security episode I just did with the Python security folks, Mike Fiedler and Seth and Juanita. They called it Zizmore, I believe. Zizmore, we'll go Zismore than I believe. Mike would know, and Mike will correct me momentarily, I'm sure.
Starting point is 00:02:51 But you got to trust me. I mean, speaking about trust, you got to trust that I'm remembering this correctly. They're remembering correctly. But this is a tool that will help you clear, make the CICD actions happy. So once you make Zizmore happy, it's going to reduce scopes of tokens and double check for things like the old API tokens being in existence and what their scopes may be. It'll also make sure that when you do a checkout in GitHub actions, the credentials that are used for that checkout act as you.
Starting point is 00:03:23 And then you can make sure that things like those remain short-lived. And so that those don't persist throughout the rest of that run, keeping the building of your package or your software separate from the publishing of your package in the software. So keeping those kinds of concerns separate from one another helps you make sure that these kinds of attestations can be made and have some level of assurances that you're doing the right things, that things are going to right places, that no one's exploiting something they shouldn't be. So it's a little bit of like least privilege wrapped around the ability to establish trust between the machines that are building and the machine that would be publishing it. If you want to see an example of this, you can look at this is more package.
Starting point is 00:04:10 You'll see this is Williams package that does the kind of work you need to make sure that you're doing the right practices. You'll see this verified details over here on Pi Pi. Again, this does not mean that this package is. of a known quality or you should definitely include it as a dependency into your system. It just means that these are verified and have come from trusted sources, that the person who is listed here as maintainer, you know, has some level of control or has exercised some proof of ownership over these pieces. You'll also notice in Pi Pi that there are unverified details like the homepage and documentation in this specific case. So you can look for those as
Starting point is 00:04:47 levels of quality that you want to check into when you want to look into including a package like this, but don't confuse trusted with trustworthy. You make sure you have human judgment in the loop about the package you're getting ready to bring in to your potential project. This is no substitute also for securing your own CI pipeline or actually vetting the packages that you install.
Starting point is 00:05:13 So stay diligent out there, but this is another great way to keep things, tidy, secure, exercise, and least privilege. If something does happen, it can help contain the blast radius. If something were to sneak into your CI pipeline and try and exploit something, that it shouldn't. Hopefully, you've narrowed down the scopes for the OIDC tokens so that they couldn't do those actions. Sounds good to me. Yeah.
Starting point is 00:05:34 And William Woodruff is, by the way, from the Astral team. Yes. And UV and all that. So they've thought a little bit about this. Yeah. So, I mean, table stakes, just use this tool. no matter what. It's going to give you at least some level of clarity around your current state of operations for the CICD pipeline. Yeah, I asked at the end of the, the talk Python episode was about,
Starting point is 00:05:58 there's a whole security track at PyCon. I said, let's go through that all the talks there and kind of like talk about the arc that that's telling about Python security, right? Yeah. And at the end, I said, what is one thing people can do to be better at Python security? I think two out of three people said, Sismar. Yeah. Just use it. Yep. And Brett Cannon is Post here is a really just a straight walkthrough of the three, I think three or four things you should just be doing out of the box by default. So follow his instructions. He knows a lot of this stuff, you know, better than we all do.
Starting point is 00:06:29 I trust Brett and Brett will make sure you get trusted publishing in place, but don't just trust it blindly. Okay. Amazing. Michael, what you got? I want to talk about what I thought would be just a small little extra at the end. Oh, hey, everyone. New release, point release, a notebook of Jupyter notebooks and Jupiter Lab.
Starting point is 00:06:47 Nope, nope, it is a lot. And let me just jump to the end here. And I don't need to see a pop-up. That's fun. It says, as large as minor releases get, basically. So Jupyelab... Bump right up against the ceiling. Exactly.
Starting point is 00:07:02 They're like, we almost called her a new release, but we didn't want to update the docs drop down. So it says this Jupyter Lab release includes 68 new features, 97 bug fixes, 38 documentation improvements, 95 contributors, and 100. 171 maintenance tasks. Very minor. I would just call this, like, you know,
Starting point is 00:07:23 consider it a pretty big release, let's say. So there's a couple of things, and I think probably the most efficient ways to just pull up this little diagram that they've annotated of Jupiter's Jupiter Lab. By the way, you can test this out online, and there's a test it in Jupiter Light. Are you familiar to Jupiter Light?
Starting point is 00:07:41 No. So if we go to Jupiter Light, available in Jupiter Light, Let me click that and see, just see what happens. I think glad that that opened a new window. So Jupiter Light is basically a WASM, WebSimply Powered Jupiter, and uses local storage and stuff for it. So, like, I'm pulling up here, and there you have it,
Starting point is 00:08:00 like full-on Jupy Lab, but running Super Light. Like in browser, right? In the browser. That is pretty sweet. Yeah, yeah, like full client side, nothing but just a download there. Well, I think that's a smart move. Yeah, yeah, so you can test this out. Bring your your Jupiter notebook to your data.
Starting point is 00:08:16 wherever it lives. Exactly. It's all powered by Pyrodyde. So you can test these changes out there. But let me pull up the little diagram. And it says you have a new activity bar options, like files or extensions or whatever. There's breadcrum. So like on the left in Jupyter Lab, you've got a file browser.
Starting point is 00:08:33 So you can like open Python or IPY in B files. And now there's a breadcrum that you can edit. MacOS should take this to heart, please, someday, maybe, that you. that you can just type up there in, you know, it'll say you're in this directory and you put your cursor there, and guess what you can do? You could like go to a sub-director or another folder.
Starting point is 00:08:55 Very cool. So that's there. I guess it was missing that it didn't show the creation date. I only showed modified in files before, so now you can figure out the creation dates. You can move the sections in that whole left pan panel, and I guess the right one around as well. You can take stuff out of the sidebar,
Starting point is 00:09:11 like widgets out of the sidebar. That's kind of cool and make more top levels. You can create a feeling that you might like this. Calvin's, you can create this like custom layout here. Yeah, I do like my tiles. Yeah, it's got a kind of a VS code like drop down when you hit play for the debugger. So that kind of drops in right in the middle. So it's easy to understand your debugging and chase that around.
Starting point is 00:09:33 You can add hotkeys from the editor. It has a cell number count. In the debugger, you can filter out your different sources and interact with the kernel. and you can go forwards and backwards in history of your edits. So one of the things that's kind of chaotic, chaotic, chaotic good, I guess, of character of Jupiter is that you can edit and execute things in different orders. Yeah. It's mind-bendy and we'll mess most new people up for sure.
Starting point is 00:10:02 Yes, exactly. It's like, oh, go-to is bad, but maybe you could just manually go to at whim. Anyway, one of the features is you can jump forwards and backwards in terms of last edits. So maybe you edited cell 7 and then cell 22 and then 20. So you can jump around and that through like some UI. So it's like a history order of like where you've been. Yeah, it's like a back forward button. Now now if I could just have something similar in Slack to know where the heck I've been in Slack. That's fair. That's totally fair. Let me just flip through see what else there is. There's a bunch of other things like this is only some of them right. That's just the stuff
Starting point is 00:10:36 they had annotated. The terminal is a little more, how shall we say, coding agent friendly. So So you can open stuff in the terminal. Oh, we should get nerd fonts. I don't know if you can put nerd fonts in there or not. But there's a way they say it, that's not it. Yeah. So the terminal no longer traps keyboard focus, which is interesting. And here we go.
Starting point is 00:10:58 This is the one. Pressing Shift Enter in the terminal now inserts a new line without executing the current line. This matches the behavior of expected by certain terminal applications. I wonder which ones those are. It's a pie, Claude code, etc, etc, right? The annoying thing is that some of the web UI versions of those tools uses like command enter or control enter and not shift enter instead of a standard shift enter. I had to fix that for some folks around here who wanted the consistency between open AI and
Starting point is 00:11:32 anthropic tooling. That's fair. Yeah. Yeah. So I think I'm going to leave it there. There's a bunch more features as you can see and I kind of called out and so on. But yeah, it's if you notebook, and especially if you do stuff with Jupiter, a lot of changes there, people can. I mean, it looks like they got a ton of new features, like a lot of like creature comforts.
Starting point is 00:11:50 That's pretty exciting for folks who are living day in and day out in the Jupyter notebook, Jupy server world. But let's talk about another AI agent that got released very, very reasonable. This is probably within the last two weeks that find folks at Hugging Face, hugging face have released Tao, which is two times pie. And it is a agent built mimicking a lot of pies. I think they were inspired by the fact that how minimalistic pie was, but they wanted Pi to do some other things. And most of it being written in Python, watching it, and teach you how it is working under the cover.
Starting point is 00:12:29 So part of the goals with this coding agent is actually to have small, readable layers, have it output back to you, what it is working on, what is doing. A lot of that gets kind of, if you've ever used cloud code or even pie, you'll see a lot of thinking dot, dot, dot, or, you know, conjugulating whatever the verb of the randomizer put in there for you. But it kind of hides the what's going on under the covers. But here, this is actually the opposite.
Starting point is 00:12:55 They're trying to know hidden machinery. Every moving part is put on the page. I think it's kind of, it's pretty. I tried it out yesterday. The models become streams. You basically want to build an agent loop. So, tau, it's going to be hard not to say pi. Tao is made up of three pieces, the Tao AI, the Tao agent, and the Tao coding.
Starting point is 00:13:16 And any of these pieces are able to be swapped out. So the idea is you could make your own front ends for the Tao coding part of this, build your own TUI, CLI, shell scripts, tools, et cetera, that are on the front of that. What's nice is every part is visible. If you've used, one of the things I liked about Claude Co-work is it on, the sidebar inside of Claude Co-work. It shows you like the to-do list it's putting together for the actions that's going
Starting point is 00:13:42 to take. It shows you which skills have been picked up and used, which connectors got pulled into the context window. This one goes a step further and shows you what tools are currently active in the current window. There's anything else interesting down through here. One thing I wanted, let me just show it. I got it running over here.
Starting point is 00:14:02 I will unshare this bit here and I'll put my terminal in here. here. This will be obviously live, real-time potential danger, but it's kind of pretty. I'm here for it. I'm here for it. So many people say, oh, you should never do demos. I'm like, you know what? No, that makes it real. Let's do it. Yeah, seeing see on a left-hand bar here, you've got details about the session, what provider you're currently running, what level of thinking, number of tools, number of skills. I think this is important because a lot of this can get hidden under the covers when you're using Claude Code, unless you go and investigate and kind of ask it specifically what is using in its current context window.
Starting point is 00:14:38 I like having this available because then you could see something get out of hand. If there's all of a sudden brought in 20 tools and the context window is exploding and you're not sure why you're getting back poor results, this would surface that sooner for you. You can see what skills are currently loaded. Actually, that skill I wrote as part of this session. So I came in and I said, let's build a memory system for my AI agents.
Starting point is 00:15:02 And so memory system then it, I kind of asked it for an explanation of what a memory system would be. And you can see it. It's really more like reading a textbook than it is having it code up the just the code for you. So it really gives you full examples. I'm getting a little bit of notebook vibes. Actually, it's got a little bit of like a storytelling. Yeah.
Starting point is 00:15:23 That's the goal. It's for it to tell you as it goes, teach you. And here it doesn't need to output all this to do its work. It's outputting all this to help you understand. and as me asking it about dictionaries. But then I went in and it's like, okay, from the dictionary, let's start a new, here it is, the memory piece right here. We've got the idea of semantic memory, episodic memory, and procedural memory.
Starting point is 00:15:46 And so it explains each of those terms to you what the goals are, you know, what the memory retrieval loop would be. And this is just the explanation. At some point, then I said, okay, great, build me a simple memory system that understands episodic, semantic, and procedural memory. So then it goes into planning. It looks at what's already inside the system, created the whole first couple modules,
Starting point is 00:16:09 created some documentation, and then it shows me how to run it. At some point, I'm like, oh, no, update agents.md to make sure we're always using UV. So if you want to check out Tao, you can UV install, tool install, tau-dash AI, and that will get you the Tao CLI ready for you to use.
Starting point is 00:16:27 It is, again, very early days. It is only a couple weeks old, But I'm a learner at heart, so I love the idea of having this explained to me so that I understand what's going on. I can make better decisions about the code and I can have fun playing at the same time. So this actually built the skill, installed the skill into the system. And now is using its own skill for memory. So again, that essence of pie where you build your extensions, you make your coding environment the way you want it to be. That's what they're trying to take, but also with more the explainer going on behind the scenes too.
Starting point is 00:16:59 So pretty cool. It actually reminds me a little bit of Hermes, which I talked about last week, in the sense that it's kind of self-improving. Yep. And you can sort of change around the pieces. Honestly, this inspires me a little bit more than Claude, the terminal version. Well, and that's the piece I didn't do yet is like in the docs and talk about it is take this to the next level by establishing what your harness looks like. And then you create a loop. You add the looping part to it to schedule and do work. So I was one step away from I've got memory now. I can now create the loop and have it set it loose on task. Yeah, very neat. Very cool stuff.
Starting point is 00:17:31 I see you've got, yeah, you've got GPT 5.5. Yeah. Have you tried 5.6 sole or any of these? I have not yet, no. I haven't had a chance to. I did the most basic of basic thing. I said slash login open AI and that's what it gave me. Like, let's go.
Starting point is 00:17:47 Perfect. Well, it definitely looks really cool. Yeah, so thanks to the fine folks over Hugging Face. They're still doing great work over there year after year. Love it. Yeah, also I was going to say like, You said it has kind of like just getting started vibes and so on. And I would be a little bit, not concerned, but just hesitant to go all in on something that's like a side project of someone's.
Starting point is 00:18:10 But hugging face. Yeah. And it's already got like 500 GitHub stars. I think I like it. It's beautiful. It does look nice. It shows me all the information I want to see. That's important.
Starting point is 00:18:22 I'm about the experience of my workstation. So this definitely falls in that. Yeah. And I think the other thing is I really like how it shows. you and what it's doing and how it's thinking because it's so easy to just make these things become an easy button turn your brain off and go. But on the other side, it can be an incredible learning thing. You're like, what, okay, I don't make, that is actually new to me. Tell me what that does. Why are you doing this? You know what I mean? If you don't know what's happening, how do you know to ask that?
Starting point is 00:18:48 Well, it's funny because I asked about memories. And so it actually looked into its memories and obviously says user prefers UV. And then I love to execute Python from UV and I created a simple memory memory system. So it's already using its own memory system they built with two prompts. That's awesome. Yeah. It's very cool. Very cool. All right. If you're going to have a some kind of agent, you probably want to run it in the background. So let's talk about Django. It's had a really cool episode with Carlson Gibson over on Talk Python about he basically rewrote Django's async documentation saying it's gotten really out. It was really out of date. And it had a lot of warnings like, oh, you shouldn't do this or this won't perform
Starting point is 00:19:27 that they're actually like, you know what, that's not true. The stuff is really good now. You should probably use Async and Django, but our docs tell people they should be wary. So let me rewrite that. And part of that conversation, we talked about Django's new task framework, which is part of version 6.6. So so often you have got to think, like, all right, well, I'm working on some request. And maybe it's slow, so I could use ASync and await on it potentially. But a better way often is, like, people don't actually even need the response. don't need to wait on this. Like, I'm going to send you a reset email. Email already is oddly asynchronous and non-verifiable. So what are you going to, you're going to send an email and
Starting point is 00:20:06 like, what, wait for a pixel to open before you respond? Like, you can't do that, right? You just got to just send it and let it go. And so a lot of times people would do something like celery or Rabbit MQ or some other mechanism to runs. Yeah, very heavy. Yeah, exactly. It's like you've gone from running like a single worker and a platform as a service to now you've got a DevOps and a virtual private network for your servers to live in and like, it's like a huge jump, right? So this task framework kind of attempts to solve that in a frameworky way. What you can do is it's not exactly a task execution story. It's more of a way to like, I guess, like an adapter or a facade type of design pattern that says, here's how you program tasks
Starting point is 00:20:48 in Django. The task back in that you stick in it means maybe it still goes to celery or maybe it runs in a background thread. I don't know. You will figure that that you configure the thing in different ways. All right. So basically that's how it works. You set up your tasks. You define the backend. There's only one that comes with it,
Starting point is 00:21:05 and it's oddly unsatisfying to me. It's the immediate execution backend, which means like when you can queue a task, it just blocks and executes. It goes, okay, it's in queued when it's done. And really, that's just for execution. As a developer, so you don't have to set up anything. I'll tell you what I wish was actually in there for development,
Starting point is 00:21:23 and for like 75% of all deployments. There's also the dummy back end. They missed a chance to, like, the null back in, like the null pattern. Like, here's a thing you don't have to check for null or see if it's configured, but it just does nothing, right? So this is for, like, testing. So you can enqueue things and so on and like, you know what? No, did nothing happen? Yeah.
Starting point is 00:21:45 Basically, like, a built-in way to say turn off tasks, which is, I would imagine really just for testing. Because anyway, so there's a third-party back-ins, and there's an ecosystem here. It also has async support. Yeah, that's why I was interesting. Yeah, that's pretty neat. So a lot of cool stuff here. You can just put the at task decorator on a function, and it's now a task and so on. This is so nice compared to what it used to be.
Starting point is 00:22:08 So Django has had this level of ability, like with Django channels and async and workers, back-end workers, but the usability of it as a developer was always tricky. Like it wasn't very well published. It was hard to use. You had to do a little bit of a, we did this back in 20, when we first launched the LoudSwarm platform, we had to use background async workers like that to establish web socket connections to things like Discord.
Starting point is 00:22:35 And it was some gymnastics to make it work. This looks so much nicer. So thank you all too, who did, whoever put in the effort to make this usability, and the API, the usability as a developer for this to be so nice. Yeah, it looks really, really nice. And then the community stuff is good. Yeah, Loudswarm being your online conference,
Starting point is 00:22:56 and stuff that you've launched at a very timely time of 2020. Definitely. So for 75% of the people, I would recommend, I would point them at this project by Lincoln Loop called Django Tasks Local. And the idea here is it uses either threading or processing backends. No celery, no Redis, no database, no configuration necessary, right? So this is really cool. You basically just plug this in.
Starting point is 00:23:25 And then when you run it, it just runs in a background thread. And so it really does immediately return and it really does do these things. The one thing that you've really given up here, I guess, depending on what you choose, in thread pool, you know, until you do free thread at Python, you still subject to the guild. But most of these background tasks are not heavily computational. They're talking to a database. They're talking to a SMTP. There's some kind of weight.
Starting point is 00:23:49 Yeah, it's not a lot of CPU. It's mostly probably I. weight or you just need to be unbounded and get a quick response back to your in users. Or you have startup tasks. That was the thing we needed it for. We needed something to happen at Django startup. Oh, interesting. Okay.
Starting point is 00:24:04 So you just fire that off. Yes, you could choose process back in if you really want like true separation. The one thing that you're given up here is durability. Right. Like if you deploy a new version and the task thing is grinding through some tasks and Docker says, time for a new one, goodbye. Yeah. Yeah. Well, you go into it knowing that eyes wide open and you account for, I'm okay if it dies, but I know how to handle recovery.
Starting point is 00:24:28 Yeah, sure. And how most projects, how much back-end traffic do they really have? They're sending an email because you said reset my email or something. But yeah, most sites are, you know, a thousand people at your company use this internal thing and that would be a big deal, you know, or something like that, right? Mm-hmm. It's not Netflix scale or. No, but when you need celery, you know you need celery. And then you can get into more durable cues and retry patterns and those kinds of things. Right. Or temporal or something like that.
Starting point is 00:24:57 Yeah. Yeah. Yep. That's awesome. Yeah. Cool. So check out Django Task and Django Task Local. All right, Calvin.
Starting point is 00:25:04 I got one extra for you. The current release manager for Python 3.14, they've always been looking for fun little puns to do on the fact that this is the pie release of Python. but actually it ended up being a becoming a fix in the dictionary. And Michael, it's not the dictionary you're thinking of. It is actually the Oxford Dictionary. They found a bug in the dictionary in its own citation of a citation usage of Pi symbol from 1706.
Starting point is 00:25:37 So they have upstreamed the fix that's got approved and published. And so because of the messings around and playing with Pi and the latest release of Python, we got stumbled upon an actual markup bug in their own dictionary and got it published. So thanks to Hugo for doing that for us is not the dict. It is the actual dictionary. Okay. I didn't see that coming. Yeah, Oxford English Dictionary.
Starting point is 00:26:04 Not quite a joke, but almost. Almost. Very fun, though, to think that the Python community has gotten a fix upstreamed into the Oxford English dictionary. Well, I sure hope they used Oxford commas when they... You're inciting some flames, Michael. Exactly. Like, rejected, improper use of comma. So I want to talk about for my one extra.
Starting point is 00:26:27 Yeah, I think that's the only thing. I have other stuff, but I'm going to leave it with this. So I'm a big fan of bunny.net. I mean, cloudflare is all the rage, right? I've never used this. Bunny. Bunny.net is awesome. The pricing is great.
Starting point is 00:26:38 It's so easy to use. I use it for CDN. So, for example, when you get, you're going to download of Python bytes, like the weekly episode, that comes through. the CDN for, if I can pull it up, comes through the CDN of bunny.net. But primarily, the reason I chose it, Ian Maurer recommended this to me
Starting point is 00:26:56 is because I want to use it for the courses. So for the course videos, one of the things that's a hassle is like, you can use CDNs a lot. There's a bunch of options there, but it's not very common you can share private files through CDNs, which you can with bunny.net.
Starting point is 00:27:11 So that's super cool, right? So for, like, kind of like an S3 URL, you can sign it. temporarily. Like this URL is good with this special link for 20 minutes. Play it.
Starting point is 00:27:22 Something like that, right? Yeah. And so you can do that here with the, which is really, really great. So that's kind of how, and it's just pays you go,
Starting point is 00:27:29 which is cool. That's not what I want to talk about, though, but that's why I was interested. They announced that this is another thing I use is bunny DNS. That's probably should have pulled up my DNS dashboard
Starting point is 00:27:38 because I've got some ridiculous DNS, ridiculously complicated DNS stuff. That would have been fun to show. But I'm not logged in in on this machine. It'll take too long. So bunny DNS, all you do to use it is you go to a fork bun or hover or name cheap or whatever you're using and you go to your domain and you just change two things.
Starting point is 00:27:57 Just change what's it called it? Name servers. You just change your name server. There's two. Usually you've got to enter for redundancy. Yeah. And then that's it. And so then you're basically running your DS through this really nice DNS management console instead of whatever crappy thing that like code had to get.
Starting point is 00:28:15 you're like why is this so hard so you just like make one change you don't change your provider you don't move your domains you just flip the the name server and you over here and this has really cool things like i would like this key or this domain or this txt whatever right whatever you manage in dns like i want this valid for 15 seconds because i'm testing right now or things like that um that's really cool that's baked into their API platform that's pretty cool yeah yeah so i mean you can put it for an hour or a day or whatever for the time to live but if you're working like while you're setting stuff up, that is so painful. Because if you leave it in a half an hour or an hour, then you change something.
Starting point is 00:28:49 You're like, oh, no, I set it up wrong. Well, I'm going to go to lunch. We'll try it again, hope I get it right next time. But if you put it on five, 15 seconds or whatever, it's just like, try it again, try it again. And it's really, really sweet. Gives you a bunch of cool graphs and stats and analytics. So all this is free. So play with it.
Starting point is 00:29:07 It's cool. I'm a fan of bunny.com. Very cool. Do they have a, do you know if they have a terraform or tofu provider? Fine question? I have no idea. for next time. I do know that they do a Google fonts alternative.
Starting point is 00:29:22 And what's really nice about this is it's, I believe they're a European company. And this is like a privacy first, Google fonts. No tracking, yeah. Exactly, no tracking. And it also means if the only reason you had one of those terrible, you didn't think about the consequences when you made this law, did you cookie banners because you used Google fonts,
Starting point is 00:29:42 you can switch to this and then you don't have to have a cookie banner. which is great. I like that. I like that a lot. If it was Google fonts, the only reason, right? There's obviously other other ones. So anyway, check it out. It's free. I'm a fan. You got any jokes for us, Michael? I do have some jokes. Now, these jokes. They cracked me up. Are you peaked? Oh, I did. I think, I think they're going to be fun. So a lot of times we just have pictures or some, some kind of cartoon or some. These are just, I hesitate to call them dad jokes. I was going to say I think they're good old school dad jokes. Yeah.
Starting point is 00:30:16 So I got three, I picked three, and maybe we'll come back with some more. But, you know, so here we go. Are you ready, Calvin? I'm ready. Hit me. What's the object-oriented way to become wealthy? Inheritance. I mean, OOP is not as popular as it used to be, especially in the Python world.
Starting point is 00:30:33 But I'm definitely a designated laugher for dad jokes. I can't help myself. I know. My daughter and I found like a 200, 200 dad jokes page. once and just sat there all day and ran it. It was great. I mean, think of how rich, like, Java.net people are. Tons of inheritance. Tons. I mean, so much more. So it's so corporate. It's money flows through that. So much inheritance. Is it inheritance? Is it inheritance if it's tech debt? I don't think so. And you spread it out. Everyone's getting inheritance. Like, that's the difference,
Starting point is 00:31:01 right? Spread the love. It's diluted. All right. Next one. This is very Confucius or Neo. To understand what recursion is, you must first understand. hand what recursion is. That one hits. That one hits for sure. You have to sit and think. I still remember my first CS class that I took. I only took a couple because I was a math major, but the first one in the Lisp as well, I'm like, we're going to tell you about recursion. I'm like, first of all, what is this language? Why are there so many parentheses? And why is it always recursion? This is so crazy. Yeah. I only took a couple of CS classes in college as well, but I remember my first time I hit recursion hardcore production problem. I was like,
Starting point is 00:31:42 whoa, this is crazy what it can do. Totally. All right. The last one to take us out of here is three sequel statements walk into a no sequel bar. Soon they walk out. They couldn't find a table. Oh, it's too good. It is good. Some people have a knack for joke telling like this. I'm a consumer of them, not a creator of them. Yes. I'm always impressed with people that can come up with these jokes as well. But I do love them. I love it. That's right. That's awesome.
Starting point is 00:32:10 All right, Calvin. Awesome to spend some time talking Python with you. Yeah. See you later. Thanks, everyone. See you.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.