41554 blogs · [ { "id": "01a07df4-1a04-72d4-ae82-bbcf333ff5f5", "title": "What the pls?", "url": "https://mkennedy.codes/posts/what-the-pls/", "published_at": "2026-06-28T18:53:44+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf3383c2f6", "title": "Cutting Python Web App Memory Over 31%", "url": "https://mkennedy.codes/posts/cutting-python-web-app-memory-over-31-percent/", "published_at": "2026-04-01T15:52:18+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf3408bfeb", "title": "Raw+DC Database Pattern: A Retrospective", "url": "https://mkennedy.codes/posts/raw-dc-a-retrospective/", "published_at": "2026-03-30T15:31:17+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf34f95ba5", "title": "Fire and Forget at Textual", "url": "https://mkennedy.codes/posts/fire-and-forget-at-textual/", "published_at": "2026-03-29T16:37:44+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf35f9163d", "title": "Replacing Flask with Robyn wasn't worth it", "url": "https://mkennedy.codes/posts/replacing-flask-with-robyn-wasnt-worth-it/", "published_at": "2026-03-23T16:31:19+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf3686f8e6", "title": "Use Chameleon templates in the Robyn web framework", "url": "https://mkennedy.codes/posts/use-chameleon-templates-in-the-robyn-web-framework/", "published_at": "2026-03-19T23:18:41+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf36fa2cac", "title": "Fire and forget (or never) with Python’s asyncio", "url": "https://mkennedy.codes/posts/fire-and-forget-or-never-with-python-s-asyncio/", "published_at": "2026-03-19T03:22:27+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf376d1ccf", "title": "Will AI Kill Open Source?", "url": "https://mkennedy.codes/posts/will-ai-kill-open-source/", "published_at": "2026-03-12T18:39:47+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf3845f173", "title": "What hyper-personal software looks like", "url": "https://mkennedy.codes/posts/what-hyper-personal-software-looks-like/", "published_at": "2026-03-06T19:32:30+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf38db33c1", "title": "Raw+DC: The ORM pattern of 2026?", "url": "https://mkennedy.codes/posts/raw-dc-the-orm-pattern-of-2026/", "published_at": "2026-02-10T03:29:08+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf3939f049", "title": "Your Terminal Tabs Are Fragile. I Built Something Better.", "url": "https://mkennedy.codes/posts/your-terminal-tabs-are-fragile-i-built-something-better/", "published_at": "2026-02-06T02:54:46+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf399274d3", "title": "It's not vibe coding: Agentic engineering", "url": "https://mkennedy.codes/posts/its-not-vibe-coding-agentic-engineering/", "published_at": "2026-02-06T00:21:01+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf399d1961", "title": "Blocking AI crawlers might be a bad idea", "url": "https://mkennedy.codes/posts/why-hiding-from-ai-crawlers-is-a-bad-idea/", "published_at": "2026-01-21T20:04:53+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf39baf71d", "title": "Always activate the venv (a shell script)", "url": "https://mkennedy.codes/posts/always-activate-the-venv-a-shell-script/", "published_at": "2026-01-07T18:15:37+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf39c44524", "title": "Python Numbers Every Programmer Should Know", "url": "https://mkennedy.codes/posts/python-numbers-every-programmer-should-know/", "published_at": "2025-12-31T19:49:00+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf3a9dd54e", "title": "DevOps Python Supply Chain Security", "url": "https://mkennedy.codes/posts/devops-python-supply-chain-security/", "published_at": "2025-12-26T23:53:11+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf3ab59bd9", "title": "Python Supply Chain Security Made Easy", "url": "https://mkennedy.codes/posts/python-supply-chain-security-made-easy/", "published_at": "2025-12-23T00:16:49+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf3b0a12cf", "title": "This Course Has Its Own Soundtrack", "url": "https://mkennedy.codes/posts/this-course-has-its-own-soundtrack/", "published_at": "2025-10-25T15:00:31+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf3b41ec4a", "title": "AI Usage TUI", "url": "https://mkennedy.codes/posts/ai-usage-tui/", "published_at": "2025-10-24T15:51:10+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf3bd75e5d", "title": "Course: Agentic AI for Python Devs", "url": "https://mkennedy.codes/posts/agentic-ai-programming-for-python-devs-course/", "published_at": "2025-10-23T21:48:52+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf3c09ab55", "title": "Show me your ls", "url": "https://mkennedy.codes/posts/show-me-your-ls/", "published_at": "2025-10-14T20:24:59+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf3cbbe395", "title": "Primed: Should You Hype Your AI Before You Start?", "url": "https://mkennedy.codes/posts/primed-should-you-hype-your-ai-before-you-start/", "published_at": "2025-10-14T00:44:50+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf3d935bbd", "title": "Talk Python in Production book is out!", "url": "https://mkennedy.codes/posts/talk-python-in-production-book-is-out/", "published_at": "2025-10-12T05:12:52+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf3e8064e6", "title": "Goodbye Wordpress, thanks AI", "url": "https://mkennedy.codes/posts/goodbye-wordpress-thanks-ai/", "published_at": "2025-09-30T23:55:13+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf3f5dc54f", "title": "Roosevelt's Man in the Arena, But for Developers", "url": "https://mkennedy.codes/posts/roosevelt-s-man-in-the-arena-but-for-developers/", "published_at": "2025-05-19T21:40:56+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf3fba0680", "title": "Sunsetting Search?", "url": "https://mkennedy.codes/posts/sunsetting-search/", "published_at": "2025-03-26T23:52:39+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf401af784", "title": "Michael's Top Trends of 2024 for Python Web Devs", "url": "https://mkennedy.codes/posts/michaels-top-trends-of-2024-for-python-web-devs/", "published_at": "2024-12-21T16:54:32+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf40df774e", "title": "Talk Python migrated to Quart web framework", "url": "https://mkennedy.codes/posts/talk-python-migrated-from-pyramid-to-quart-web-framework/", "published_at": "2024-11-19T18:04:03+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf41a61452", "title": "Blue Skies ahead (follow me there)", "url": "https://mkennedy.codes/posts/blue-skies-ahead-follow-me-there/", "published_at": "2024-11-16T17:58:15+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf41d5b36f", "title": "Introducing chameleon-flask package", "url": "https://mkennedy.codes/posts/introducing-the-chameleon-flask-package/", "published_at": "2024-11-09T16:17:10+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf4239f08c", "title": "Talk Python has moved to Hetzner", "url": "https://mkennedy.codes/posts/talk-python-has-moved-to-hetzner/", "published_at": "2024-11-07T04:47:43+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf4320da95", "title": "Opposite of Cloud Native is?", "url": "https://mkennedy.codes/posts/opposite-of-cloud-native-is-stack-native/", "published_at": "2024-11-05T21:47:36+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf43adf695", "title": "Search Talk Python from your address bar", "url": "https://mkennedy.codes/posts/search-talk-python-from-your-browsers-address-bar/", "published_at": "2024-10-16T15:57:07+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf43d9e305", "title": "We Must Replace uWSGI With Something Else", "url": "https://mkennedy.codes/posts/we-must-replace-uwsgi-with-something-else-but-with-what/", "published_at": "2024-10-03T19:12:37+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf43f27ad0", "title": "Let's go easy on PyPI, OK?", "url": "https://mkennedy.codes/posts/lets-go-easy-on-pypi-ok/", "published_at": "2024-09-28T17:04:38+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf4447e7f2", "title": "Passkeys are great, careful of the lock-in", "url": "https://mkennedy.codes/posts/passkey-great-but-careful-of-the-lock-in/", "published_at": "2024-09-25T02:43:42+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf449e61b3", "title": "Docker images using uv's python", "url": "https://mkennedy.codes/posts/python-docker-images-using-uv-s-new-python-features/", "published_at": "2024-09-05T22:12:04+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf452b1fb5", "title": "Keynote: The State of Python in 2024", "url": "https://mkennedy.codes/posts/keynote-the-state-of-python-in-2024-pycon-philippines/", "published_at": "2024-04-05T00:35:23+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf459832a6", "title": "Use Custom Search Engines Way More", "url": "https://mkennedy.codes/posts/you-should-use-custom-search-engines-way-more/", "published_at": "2024-01-28T17:04:10+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf45b47e9f", "title": "Unsolicited Advice for Mozilla and Firefox", "url": "https://mkennedy.codes/posts/michael-kennedys-unsolicited-advice-for-mozilla-and-firefox/", "published_at": "2024-01-12T06:25:39+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf45c01d7e", "title": "AI Features a Waste of Time?", "url": "https://mkennedy.codes/posts/ai-features-a-waste-of-time/", "published_at": "2024-01-06T01:15:38+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf467ad9a3", "title": "Hide Those Terminal Secrets!", "url": "https://mkennedy.codes/posts/hide-those-terminal-secrets/", "published_at": "2023-12-04T19:59:55+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf473b30e4", "title": "Don't Sweat the Ad Blocker Drama", "url": "https://mkennedy.codes/posts/dont-sweat-the-ad-blocker-drama/", "published_at": "2023-11-28T21:05:08+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf4758ebd4", "title": "You Can Ignore This Post", "url": "https://mkennedy.codes/posts/github-gitignore-repo-is-open-to-all/", "published_at": "2023-05-25T17:43:38+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf47c9abef", "title": "Rebuilding Mobile Apps at Talk Python", "url": "https://mkennedy.codes/posts/mobile-apps-at-talk-python-python-flutter/", "published_at": "2023-05-15T18:12:00+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf47ddda72", "title": "Dev on the Road", "url": "https://mkennedy.codes/posts/dev-on-the-road-leaving-your-laptop-at-home/", "published_at": "2023-01-09T18:40:00+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf4887b583", "title": "Welcome back RSS", "url": "https://mkennedy.codes/posts/welcome-back-rss/", "published_at": "2023-01-03T00:00:00+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf48bcb970", "title": "Paying for search in 2022, am I crazy?", "url": "https://mkennedy.codes/posts/paying-for-search-in-2022-am-i-crazy/", "published_at": "2022-12-13T00:00:00+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf49b03f0f", "title": "Sometimes, You Should Build It Yourself", "url": "https://mkennedy.codes/posts/sometimes-you-should-build-it-yourself/", "published_at": "2022-12-08T00:00:00+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf4a564485", "title": "Properly Factor Your Jinja HTML Code with Jinja Partials", "url": "https://mkennedy.codes/posts/properly-factor-your-jinja-html-code-with-jinja-partials/", "published_at": "2022-12-03T00:00:00+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf4a66999c", "title": "Black Friday: A Lesson in Python Performance", "url": "https://mkennedy.codes/posts/black-friday-almost-melted-servers/", "published_at": "2022-11-24T00:00:00+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf4a8235d5", "title": "Python 3.11 in 100 Seconds", "url": "https://mkennedy.codes/posts/python-311-in-100-seconds/", "published_at": "2022-11-20T00:00:00+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf4adeb68c", "title": "Mastodon First: My New Social Attitude", "url": "https://mkennedy.codes/posts/mastodon-first-my-new-social-attitude/", "published_at": "2022-11-19T00:00:00+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf4aeea781", "title": "Installing Mastodon as a Progressive Web App (PWA)", "url": "https://mkennedy.codes/posts/installing-mastodon-as-a-progressive-web-app-pwa/", "published_at": "2022-11-18T00:00:00+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf4bae7bb6", "title": "20% Faster Python with a Single GC Tweak", "url": "https://mkennedy.codes/posts/python-gc-settings-change-this-and-make-your-app-go-20pc-faster/", "published_at": "2022-11-17T00:00:00+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf4ca7bd3d", "title": "Hassling Spammers", "url": "https://mkennedy.codes/posts/hassling-spammers/", "published_at": "2022-11-16T00:00:00+00:00" }, { "id": "01a07df4-1a04-72d4-ae82-bbcf4d5db907", "title": "Python's Entire Codebase Leaked", "url": "https://mkennedy.codes/posts/python-source-code-has-been-leaked/", "published_at": "2022-11-13T00:00:00+00:00" } ] posts Claim your blog
Back to Michael Kennedy
Blog · corpus.blog/blogs/mkennedy.codes/posts

Michael Kennedy

mkennedy.codes

2026

2025

2024

2023

2022