A Python enthusiast and entrepreneur. Host of @talkpython and @pythonbytes podcasts, founder of Talk Python Training. #Python Software Foundation Fellow. Based in Portland, OR USA.
Public Key
npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Profile Code
nprofile1qqsynpwu26qjy6yvv9ghk5g22f65f5xlnjq09e7q49jurnx77xgwujqpz4mhxue69uhhyetvv9ujuerfw36x7tnsw43qz9thwden5te0wfjkccte9ekk7um5wgh8qatzn88ffu
Show more details
Published at
2026-08-21T16:38:23Z Event JSON
{
"id": "ec52de3656958734f2d28f4a94623bc8988a319d0b12eb0d1bd9dbcbd1c23f1a" ,
"pubkey": "4985dc568122688c61517b510a527544d0df9c80f2e7c0a965c1ccdef190ee48" ,
"created_at": 1787330303 ,
"kind": 0 ,
"tags": [
[
"proxy",
"https://fosstodon.org/users/mkennedy",
"activitypub"
],
[
"client",
"Mostr",
"31990:6be38f8c63df7dbf84db7ec4a6e6fbbd8d19dca3b980efad18585c46f04b26f9:mostr",
"wss://relay.ditto.pub"
]
],
"content": "{\"name\":\"Michael Kennedy\",\"about\":\"A Python enthusiast and entrepreneur. Host of @talkpython and @pythonbytes podcasts, founder of Talk Python Training. #Python Software Foundation Fellow. Based in Portland, OR USA.\",\"picture\":\"https://cdn.fosstodon.org/accounts/avatars/109/308/653/219/940/104/original/39abdc53118fbc01.jpg\",\"banner\":\"https://cdn.fosstodon.org/accounts/headers/109/308/653/219/940/104/original/0a235c8d13a45a13.jpg\",\"nip05\":\"[email protected] \",\"fields\":[[\"Talk Python\",\"@talkpython\"],[\"Python Bytes\",\"@pythonbytes\"],[\"Writing\",\"https://mkennedy.codes\"],[\"Courses\",\"https://training.talkpython.fm\"]]}" ,
"sig": "6429c7ab871ce46dabc6b2a5d8f32c80b1818954d6a5ea3b67e13f12b22e20ca87b199eb7c9ea72b4f6bf6eb0dba59ec02af8f57e9d2eff881476c49a1a14cb5"
}
Last Notes npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…36pt @nprofile…45xu It's out. :) https://talkpython.fm/episodes/show/552/astral-joins-openai npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…36pt @nprofile…45xu Hey Gavin! Yes, I am very excited about that episode. I had to make it a private recording. In order to be the most genuine, the team wanted to review what we discussed. So it was super guarded public stream or record first, review, then publish a deeper look. I did the later. So maybe it'll be out on YouTube and podcast either this or next week. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…6g2s Thanks for coming on the podcast Chris! :) npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…78kg Thanks and interesting. First and third article are just speculation though. They didn't have access to the model. The third says “No Glasswing partner has confirmed a single specific finding" though I think Firefox counts as findings. The second one didn't say it didn't work. Just that their system of scaffolding seemed to do much of the discovery already. (1/2) npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…78kg Thanks Adam. It did seem to find significant issues in Firefox: https://arstechnica.com/ai/2026/04/mozilla-anthropics-mythos-found-271-zero-day-vulnerabilities-in-firefox-150/ npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy Any recommendations on who to invite for a "self-hosted apps" topic on @nprofile…45xu? They don't need to be the creator of a self hosted app necessarily, but Python-leaning and experienced in self-hosting web apps is the key. (You can invite yourself). npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…ppug Hey Eric, sorry about that! Not sure what is up. There were some changes to the API that may have caused an issue. Can you try again? If that doesn't work, delete the app from your phone and reinstall it? If that STILL doesn't work, let me know and I'll check the logs for issues. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…agqa Hi Peter. Interesting idea. I haven't checked it out yet. Will give the idea some thought. Thanks. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy New essay: Cutting Python Web App Memory Over 31% I reduced Python web app memory by 3.2 GB using async workers, import isolation, the Raw+DC database pattern, and disk caching. Detailed before and after numbers for each technique. https://mkennedy.codes/posts/cutting-python-web-app-memory-over-31-percent/ npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…xl2p Thanks Paul! I watched a video version of this. Pretty interesting... npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…3xx2 @nprofile…5t7f Hey Tim. Thanks for the feedback. I just counted and of the last 8 episodes we had 25 main topics that we not AI and 6 that were. That's 20%. I feel like how central Python is to AI and how much AI is transforming the dev industry, 20% of the topics relating to AI is prety low-key and not "AI Bytes” (1/2) npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy Claude and I are having fun tonight. 🐠🐟 https://cdn.fosstodon.org/media_attachments/files/116/288/685/229/966/615/original/48893e3627d972ed.png npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…tv5n @nprofile…xl2p @nprofile…dgx8 Definitely. I actually thought about you on the episode, Brett, when we were having a conversation. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…xl2p @nprofile…dgx8 Your wish is my command Paul. :) Glad we could cover it! npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…5raw BTW, I don't see how FastAPI lifecycles apply. Maybe I'm missing something. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…5raw I totally agree that it should NOT try to teach structured concurrency. Just talk about how asyncio.create_task() works. But I feel like it does a poor job at that. It should NOT worry about TaskGroup, but it should cover what that function does. The FULL docs are literally 129 words for creating tasks in Python. That is not enough depth IMO. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…5raw Plus the comment adds: "a new alternative leveraging structural concurrency” Do I want this? Not sure actually. Does it apply here? The docs are VERY brief on this important function and leave a lot of reading between the lines for me. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…5raw I think it's not fire-and-forget friendly. It says: Note asyncio.TaskGroup.create_task() is a new alternative leveraging structural concurrency; it allows for waiting for a group of related tasks with strong safety guarantees. The “waiting for a group" means wait, not just let it rip. So I don't think it applies. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…5raw Hey man. Good to know. I was thinking more about how code that used to be totally solid kind of are not now. The official recommendation from Python is to use the set() trick + callback. Right in the docs for create_task(). npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy New essay: Fire and forget (or never) with Python’s asyncio https://mkennedy.codes/posts/fire-and-forget-or-never-with-python-s-asyncio/ npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…xl2p Hey. That's an interesting idea. I'd be up for a video together some time the next few weeks if you'd like to bounce these ideas around. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…xl2p Cool, then share your meta glasses recording? Just kidding. :p npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy New essay: What hyper-personal software looks like. https://mkennedy.codes/posts/what-hyper-personal-software-looks-like/ npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…e0z0 Thanks! For 3.14, nothing in particular that comes to mind. But it's an app, not a library. Since it's install with uv (hat tip to @nprofile…hs8m and team), I can pick any version of Python I want and uv handles it. So I figured modern Python is the best choice. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy Just added a new feature to Tallyman. Pass --image and you'll get a nice, sharable summary of your project. https://mkennedy.codes/tools/tallyman/ npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…e47p @nprofile…ec5a If it ONLY meant the OG term, yes, I wouldn't have chosen it at all. But “In the 2010s, the word broadened its meaning to refer to performing other activities without preparation (such as taking an exam without studying) or doing something without a metaphorical layer of protection (such as going for a run without wearing headphones).” (1/2) npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy The modern meaning of the term is inline with the intent of the article. I'm sure there are plenty of other terms that we use daily that have sketchy origins. (2/2) npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…e47p @nprofile…ec5a Ah, yeah. I see. I guess my life is too sheltered. :) Let me think about it a bit. Maybe I’ll rename it. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…e47p @nprofile…ec5a Interesting David. I only know it from TikTok and my kids’ YouTube channels. Things like: I raw dogged the trans-Atlantic flight Which means, I just sat there, didn’t watch the TV, listen to music. Just took in the experience in the raw. Do you know it in other meanings? npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…ec5a What's wrong with raw dog? It's an irreverent term to talk about going "basic" in a world of many supports (music, tiktok, etc.) The article is about going back to the basics and doing things manually for data access. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy New essay. This is an interesting one: Going raw dog on the database https://mkennedy.codes/posts/going-raw-dog-on-the-database/ npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy Just launched a new open source project. Tallyman: A command-line tool that gives you a real picture of your codebase - not just raw line counts, but where your effort actually lives. It groups results into meaningful categories like Code, Design, Docs, Specs, and Data. https://github.com/mikeckennedy/tallyman npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…975x Hey Mario. 100%. Even if your goal is just to talk about the downsides of a thing, it's important everyone agrees on what they are talking about. Or then end up talking past each other. I think that happens a lot in the AI conversations BTW. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy New essay: It's not vibe coding - Agentic engineering https://mkennedy.codes/posts/its-not-vibe-coding-agentic-engineering/ npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…wt2h @nprofile…6rzr No, where did I say that people were making this up? npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…wt2h @nprofile…6rzr My point is the that the complaint Pierre has (which you're jumping on) has nothing to do with what I'm discussing. Having 1.2M bots attack a site is not a matter of tweaking a robots.txt. It's basically a cyber attack. And actors such as those don't care if you express desire for or against letting them in. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…6rzr Hey Pierre, that is rough. Holding off 1.2M requests is not easy. But I seriously doubt that any company/group willing to send 1.2M machines against a site (for what? to get the copyright content maybe?), would read the /robots.txt and say “Ah, hold on everyone. They asked us not to do this.” It sucks and whoever is behind it should ***-off but I don't feel it really falls into the same discussion. I appreciate your sharing this. Was news to me. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy I just added an MCP server to @nprofile…45xu If you want to use the entire 10 year catalog of episodes, transcripts, guests, etc as part of your #AI / #LLM exploration. #python Just visit https://talkpython.fm/api/mcp/docs npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…w846 Nice. Yes, I just find reading/using requirements.txt to be easiest on git diffs and are the most general for teaching too (you don't have to pick a toolchain and understand it to use it). So I generally stick to that. I have used it on one or two packages lately. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…w846 Thanks! From their about: Scan your uv.lock file for dependencies with known vulnerabilities I typically don't use ‘uv.lock’ so I'm out unfortunately. :) npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy New essay: Python Supply Chain Security Made Easy #python https://mkennedy.codes/posts/python-supply-chain-security-made-easy/ npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…608x Hey Taylor, thanks! I know of multiviewer but thought it only worked on live and not replays. I always watch the replays so I can pause, go back, skip 1hr rain delays, etc. I'll give it a second look. :) npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…nsfg @nprofile…2mp2 @nprofile…es35 Thanks Mario! I invited the Litestar guys. :) npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…2mp2 @nprofile…nsfg @nprofile…es35 I'm thinking a panel show. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy I created a "music for coding" soundtrack for my latest course. Crazy idea, but came out great! Give it a listen and download it here. Let me know what you think. #python https://mkennedy.codes/posts/this-course-has-its-own-soundtrack/ npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…hvaw Ha! I think the course might count as important :) thanks Paul. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy New course: #Agentic #AI Programming for #Python Devs and Data Scientists This is an awesome, no hype, practical course to get you started and successful with agentic AI coding with tools such as Cursor and Claude. I hope you love it! https://training.talkpython.fm/courses/agentic-ai-programming-for-python npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…tvt2 My screenshot is just pls, not nutshell. Nutshell is new to me. The icons aren't too bad because they usually have a file extension (e.g. .md) next to the icon. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy I thought it’d be fun to focus on something so minuscule as the basic ls command (that’d dir for my windows friends). https://mkennedy.codes/posts/show-me-your-ls/ npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy New essay: Primed: Should You Hype Your AI Before You Start? https://mkennedy.codes/posts/primed-should-you-hype-your-ai-before-you-start/ #python #ai npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…ds4f Hey Gavin. I just added the PDF to the Gumroad content you get there when you buy it (if you already did, check your account there). Thanks. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy New blog post: @nprofile…f7j7 in Production book is out! https://mkennedy.codes/posts/talk-python-in-production-book-is-out/ #python npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…59az Hey Sergi, yes definitely. I'm working on that this week. :) npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy So awesome to see the final edition of the book. Had to take this photo in the library, right? Get it at https://talkpython.fm/books/python-in-production/buy #python https://cdn.fosstodon.org/media_attachments/files/115/334/054/202/234/455/original/09dce4a6e7facc55.jpeg npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…wv6j Yeah. I'd love to hear your thoughts on compare / contrast. I think there will be a lot of take aways for your setup regardless. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…uzmd @nprofile…f7j7 Thanks Gerbrand! Those simple setups go a lot farther than most people give them credit for. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy About some of their hosting choice. For us, we get 99.999% up time with a simpler setup. That about 30-40 seconds of downtime per month (month!). That may or may not match what need. But nothing precludes a load balancer and two servers or whatever. But you might not need it. Anyway, that's why it's not its own chapter. (2/2) npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy A new article, enjoy! #ai #python "Goodbye Wordpress and thanks AI" https://mkennedy.codes/posts/goodbye-wordpress-thanks-ai/ npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy I just made an interesting GitHub repo public. Could that mean the book is coming soon? Hmm. ;) #python #cloud https://github.com/mikeckennedy/talk-python-in-production-devops-book npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy @nprofile…hefl Hey Jeff. I’m only using the web chat from ChatGPT. It’s Claude for me in dev-land. The web chat seems to keep falling back to lower level models and failing to fully process my prompts. Prompts that used to work perfectly seem to glitch out now and I’m pretty sure it’s because the need the better models to run where as the “router” in GTP 5 takes it to a lower one. That’s my guess so far. npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy Oh god, Chat! What do I now Chat? https://cdn.fosstodon.org/media_attachments/files/114/179/503/302/668/531/original/9a0ba70402120c4f.png npub1fxzac45pyf5gcc230dgs55n4gngdl8yq7tnup2t9c8xdauvsaeyq5dlmm2 Michael Kennedy Need some advice Mastodon friends: I have an old wordpress.com blog that I keep around only so the links stay alive. It is effectively a static website. Any advice / tools to download everything (images, html, css, etc) into a static file structure I can publish to somewhere like Netlify? Thanks!