<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Llm on BlueberryPy</title><description>Recent content in Llm on BlueberryPy</description><link>https://blueberrypy.netlify.app/tags/llm/</link><language>en-us</language><item><title>This Month for Pythonistas - April 2026</title><link>https://blueberrypy.netlify.app/post/this-month-for-pythonistas-2026-04/</link><guid isPermaLink="true">https://blueberrypy.netlify.app/post/this-month-for-pythonistas-2026-04/</guid><description>&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; datetime &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; date&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(date.today().year, date.today().month)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 2026 4&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img alt=&quot;issue-2026-04&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1280&quot; height=&quot;708&quot; src=&quot;/_astro/splash.B5_2pwJJ_lLOzs.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Welcome back Pythonistas! This is the April 2026 issue of “This Month for Pythonistas”, bringing you curated Python news, tutorials, articles, podcasts and community highlights.&lt;/p&gt;
&lt;p&gt;Before we continue, please note that this blog is synced across the following platforms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberry-py.github.io/blog/post/this-month-for-pythonistas-2026-04/&quot;&gt;Github Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberrypy.netlify.app/post/this-month-for-pythonistas-2026-04/&quot;&gt;Netlify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberrypy.onrender.com/post/this-month-for-pythonistas-2026-04/&quot;&gt;Render&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberrypy-blog.vercel.app/post/this-month-for-pythonistas-2026-04/&quot;&gt;Vercel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ready? Let’s get started!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;events--social&quot;&gt;Events &amp;amp; Social&lt;/h2&gt;
&lt;h3 id=&quot;reflecting-on-five-years-as-the-psfs-first-cpython-developer-in-residence&quot;&gt;&lt;a href=&quot;https://pyfound.blogspot.com/2026/04/reflecting-on-five-years-as-psfs-first.html&quot;&gt;Reflecting on Five Years as the PSF’s First CPython Developer in Residence&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The article reflects on &lt;em&gt;Łukasz Langa&lt;/em&gt;’s nearly five-year tenure as the PSF’s first CPython Developer in Residence, highlighting contributions like transitioning to GitHub issues, automating the CLA process, introducing free threading, and modernizing the interactive shell. The role will continue with Meta’s sponsorship through mid-2027. The position has expanded from one to five full-time engineers, ensuring its stability. Łukasz expresses gratitude to the Steering Council and excitement about moving to Vancouver while joining Meta, emphasizing ongoing commitment to the Python community.&lt;/p&gt;
&lt;h3 id=&quot;djangocon-europe-2026&quot;&gt;DjangoCon Europe 2026&lt;/h3&gt;
&lt;p&gt;DjangoCon Europe goes to Athens, Greece this year, from April 15th to 19th. More info can be found &lt;a href=&quot;https://2026.djangocon.eu/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;introducing-gpt55&quot;&gt;&lt;a href=&quot;https://openai.com/index/introducing-gpt-5-5/&quot;&gt;Introducing GPT‑5.5&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;OpenAI released GPT-5.5 which excels in coding, knowledge work, scientific research and cybersecurity, matching GPT-5.4’s latency with stronger performance. It has higher token efficiency and stricter safeguards. Now available for Plus/Pro/Business/Enterprise users; API versions launch soon. GPT-5.5 Pro delivers better accuracy for complex tasks.&lt;/p&gt;
&lt;h3 id=&quot;introducing-claude-opus-47&quot;&gt;&lt;a href=&quot;https://www.anthropic.com/news/claude-opus-4-7&quot;&gt;Introducing Claude Opus 4.7&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://www.anthropic.com/_next/image?url=https%3A%2F%2Fwww-cdn.anthropic.com%2Fimages%2F4zrzovbb%2Fwebsite%2F96ea2509a90e527642c822303e56296a07bcfce4-1920x1080.png&amp;amp;w=3840&amp;amp;q=75&quot; alt=&quot;claude-opus-4.7&quot;&gt;&lt;/p&gt;
&lt;p&gt;Claude Opus 4.7, Anthropic’s latest model, is now generally available. It significantly advances Opus 4.6 in advanced software engineering, handling difficult coding tasks with greater autonomy, precision, and consistency. The model also features substantially improved vision, higher-resolution image understanding, and more creative, professional outputs. It demonstrates stronger reasoning, better instruction following, and enhanced multimodal capabilities. With safeguards for cybersecurity and expanded access across products and cloud platforms, Opus 4.7 aims to accelerate complex workflows while maintaining reliability and safety.&lt;/p&gt;
&lt;h3 id=&quot;qwen36-plus-towards-real-world-agents&quot;&gt;&lt;a href=&quot;https://qwen.ai/blog?id=qwen3.6&quot;&gt;Qwen3.6-Plus: Towards Real World Agents&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://qianwen-res.oss-accelerate.aliyuncs.com/Qwen3.6/Figures/3.6_plus_banner.png&quot; alt=&quot;qwen3.6-plus-image&quot;&gt;&lt;/p&gt;
&lt;p&gt;Qwen has launched &lt;em&gt;Qwen3.6-Plus&lt;/em&gt;, a major upgrade featuring dramatically enhanced agentic coding capabilities and improved multimodal reasoning. The model now supports a 1M context window by default and excels in complex tasks like frontend development, terminal operations, and automated task execution. It demonstrates state-of-the-art performance across coding benchmarks (SWE-bench, Terminal-Bench 2.0), general agent tasks, and multimodal understanding (MMMU, document analysis, video reasoning).&lt;/p&gt;
&lt;h3 id=&quot;glm-51-towards-long-horizon-tasks&quot;&gt;&lt;a href=&quot;https://z.ai/blog/glm-5.1&quot;&gt;GLM-5.1: Towards Long-Horizon Tasks&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;GLM-5.1 is Z.ai’s next-generation flagship model designed for agentic engineering tasks with significantly improved coding capabilities. It achieves state-of-the-art performance on SWE-Bench Pro and leads on NL2Repo and Terminal-Bench 2.0 benchmarks. Unlike previous models that plateau early, GLM-5.1 excels at long-horizon optimization, demonstrated by achieving 6× better results over 600 iterations on vector database optimization, sustaining 3.6× speedup over 1,000+ turns on ML workloads, and building a complete Linux desktop environment over 8 hours through continuous refinement.&lt;/p&gt;
&lt;h3 id=&quot;kimi-k26-advancing-open-source-coding&quot;&gt;&lt;a href=&quot;https://www.kimi.com/blog/kimi-k2-6&quot;&gt;Kimi K2.6: Advancing Open-Source Coding&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://kimi-file.moonshot.cn/prod-chat-kimi/kfs/4/2/2026-04-20/1d7j2jpl3v89kkei5mq70?x-tos-process=image%2Fauto-orient%2C1%2Fstrip%2Fignore-error%2C1&quot; alt=&quot;kimi-k2.6&quot;&gt;&lt;/p&gt;
&lt;p&gt;Kimi K2.6 is an open-source model from Moonshot featuring advanced coding, long-horizon execution, and agent swarm capabilities. It demonstrates significant improvements over K2.5 in complex engineering tasks, autonomously handling multi-step workflows across programming languages like Rust, Go, and Python. The model excels at long-running tasks—such as optimizing financial engines and deploying models—with strong tool-calling accuracy (96.60%). K2.6 also enables coding-driven frontend design and full-stack development, while its &lt;em&gt;Agent Swarm&lt;/em&gt; architecture scales to 300 sub-agents executing 4,000 coordinated steps. Used in proactive agents like &lt;em&gt;OpenClaw&lt;/em&gt; and &lt;em&gt;Hermes&lt;/em&gt;, it supports 24/7 autonomous operations and collaborative multi-agent systems through Claw Groups, achieving state-of-the-art performance on benchmarks like SWE-Bench and Terminal-Bench 2.0.&lt;/p&gt;
&lt;h3 id=&quot;the-next-evolution-of-the-agents-sdk&quot;&gt;&lt;a href=&quot;https://openai.com/en-US/index/the-next-evolution-of-the-agents-sdk/&quot;&gt;The next evolution of the Agents SDK&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The article discusses the next evolution of OpenAI’s Agents SDK, introducing enhanced capabilities for building AI agents. The updated SDK enables developers to create agents that can inspect files, execute commands, edit code, and handle long-term tasks within controlled sandbox environments. Key features include configurable memory, sandbox-aware orchestration, filesystem tools, MCP integration for tool use, and native sandbox execution with providers like Blaxel and Daytona. The architecture separates harness from compute, supports durable execution through snapshotting, and provides standardized primitives for building reliable, scalable agent systems with improved security and performance.&lt;/p&gt;
&lt;h2 id=&quot;new-versions&quot;&gt;New Versions&lt;/h2&gt;
&lt;h3 id=&quot;python-3150a8-3144-and-31313-are-out&quot;&gt;&lt;a href=&quot;https://blog.python.org/2026/04/python-3150a8-3144-31313/&quot;&gt;Python 3.15.0a8, 3.14.4 and 3.13.13 are out!&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;3.15.0 alpha 8 is expected to be the last alpha build before beta 1 comes out in May 2026. You can find the full release schedule of Python 3.15 &lt;a href=&quot;https://peps.python.org/pep-0790/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;3.14.4 and 3.13.13 are bug fix releases for Python 3.14 and 3.13 respectively, both with binary as well as tarball distributions.&lt;/p&gt;
&lt;h2 id=&quot;tutorials&quot;&gt;Tutorials&lt;/h2&gt;
&lt;h3 id=&quot;deeplearningais-efficient-inference-with-sglang-text-and-image-generation&quot;&gt;DeepLearning.ai’s &lt;a href=&quot;https://www.deeplearning.ai/short-courses/efficient-inference-with-sglang-text-and-image-generation/&quot;&gt;Efficient Inference with SGLang: Text and Image Generation&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;In this course, you’ll build a clear mental model of how inference works (from input tokens to generated output) and learn why the memory bottleneck exists. From there, you’ll implement the KV cache from scratch to store and reuse intermediate attention values within a single request. Then you’ll go further with RadixAttention, SGLang’s approach to sharing KV cache across requests by identifying common prefixes using a radix tree. Finally, you’ll apply these same optimization principles to image generation using diffusion models.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;deeplearningais-spec-driven-development-with-coding-agents-from-paul-everitt&quot;&gt;DeepLearning.ai’s &lt;a href=&quot;https://www.deeplearning.ai/short-courses/spec-driven-development-with-coding-agents/&quot;&gt;Spec-Driven Development with Coding Agents&lt;/a&gt; from Paul Everitt&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;In this course, you’ll write project constitutions, plan and validate features in iterative loops, and apply the same repeatable workflow to both fresh and legacy codebases. You’ll also see how specs preserve context across agent sessions, reduce cognitive debt, and improve intent fidelity, keeping your agent aligned with what you actually want.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;deeplearningais-building-multimodal-data-pipelines-from-snowflake&quot;&gt;DeepLearning.ai’s &lt;a href=&quot;https://www.deeplearning.ai/short-courses/building-multimodal-data-pipelines/&quot;&gt;Building Multimodal Data Pipelines&lt;/a&gt; from Snowflake&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Images, audio, and video make up a growing share of the data companies generate today, but most pipelines are still built for structured data alone. This course teaches you to build AI-powered pipelines that process multimodal data and turn it into LLM-ready text.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;realpythons-variables-in-python-usage-and-best-practices&quot;&gt;RealPython’s &lt;a href=&quot;https://realpython.com/python-variables/&quot;&gt;Variables in Python: Usage and Best Practices&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://realpython.com/cdn-cgi/image/width=1920,format=auto/https://files.realpython.com/media/UPDATE-Variables-in-Python_Watermarked.7d8b51f3adad.jpg&quot; alt=&quot;realpython-variables-in-python&quot;&gt;&lt;/p&gt;
&lt;p&gt;In Python, “variables” are symbolic names that refer to objects or values stored in memory, created by assigning a value with the &lt;code&gt;=&lt;/code&gt; operator. They are dynamically typed, so their type can change through reassignment, and naming follows rules like using letters, digits, and underscores but not starting with a digit, with snake_case preferred for readability. Variables can be used in expressions, as counters, accumulators, flags, loop variables, or data storage, and they exist in scopes (global, local, non-local, built-in) that determine accessibility. Python also supports type hints, multiple assignment, iterable unpacking, assignment expressions, and pattern matching for creating variables, while attributes in classes provide namespace-like behavior, and &lt;code&gt;del&lt;/code&gt; can remove variables from scope.&lt;/p&gt;
&lt;h2 id=&quot;articles&quot;&gt;Articles&lt;/h2&gt;
&lt;h3 id=&quot;cutting-python-web-app-memory-over-31&quot;&gt;&lt;a href=&quot;https://mkennedy.codes/posts/cutting-python-web-app-memory-over-31-percent/&quot;&gt;Cutting Python Web App Memory Over 31%&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The article from &lt;em&gt;Michael Kennedy&lt;/em&gt; details how Michael Kennedy reduced his Python web app memory usage from 1,988 MB to 472 MB (over 31% reduction, saving 3.2 GB total) using five key techniques: migrating to Quart (async Flask) with a single Granian worker, replacing the MongoEngine ODM with a Raw+DataClass database pattern, isolating the search indexer into a subprocess (cutting it from 708 MB to 22 MB), moving heavy library imports like boto3 and pandas from global to local function-level imports, and shifting in-memory caches to disk-based caching using the diskcache library.&lt;/p&gt;
&lt;h3 id=&quot;python-introducing-profiling-explorer&quot;&gt;&lt;a href=&quot;https://adamj.eu/tech/2026/04/03/python-introducing-profiling-explorer/&quot;&gt;Python: introducing profiling-explorer&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The author introduces &lt;strong&gt;profiling-explorer&lt;/strong&gt;, a new Python tool for exploring profiling data from pstats files generated by Python’s built-in profilers. It provides a web-based interface with features like dark mode, sortable columns, search filtering, and navigation between callers and callees. The tool was motivated by the author’s optimization work where the command-line pstats interface felt clunky. The article also explains Python’s three profilers — profile (deprecated), profiling.tracing (cProfile), and the new sampling profiler Tachyon in Python 3.15 — and provides instructions for generating pstats files and using profiling-explorer to analyze them, sponsored by Rippling.&lt;/p&gt;
&lt;h3 id=&quot;django-fixing-a-memory-leak-from-python-314s-incremental-garbage-collection&quot;&gt;&lt;a href=&quot;https://adamj.eu/tech/2026/04/20/django-python-3.14-incremental-gc/&quot;&gt;Django: fixing a memory “leak” from Python 3.14’s incremental garbage collection&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The article details an out-of-memory error encountered when running Django migrations on Python 3.14, specifically on a resource-constrained Heroku server. Python 3.14 introduced &lt;strong&gt;incremental garbage collection&lt;/strong&gt; to reduce pause times, but this algorithm struggled with Django’s cyclical objects, causing memory usage to spike beyond limits. The author implemented a workaround by extending Django’s migrate command to force full garbage collection after each migration using &lt;code&gt;gc.collect()&lt;/code&gt;, which resolved the issue. Coincidentally, the Python core team announced they would revert incremental garbage collection in Python 3.14.5 due to widespread memory concerns, validating the problem and rendering the workaround temporary.&lt;/p&gt;
&lt;h3 id=&quot;using-a-pdbrc-file-to-customize-the-python-debugger&quot;&gt;&lt;a href=&quot;https://treyhunner.com/2026/04/customizing-pdb-with-pdbrc/&quot;&gt;Using a &lt;code&gt;~/.pdbrc&lt;/code&gt; file to customize the Python Debugger&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The article explores customizing Python’s built-in debugger (pdb) via a &lt;code&gt;.pdbrc&lt;/code&gt; configuration file. It details how to set up persistent aliases, command shortcuts, and environment adjustments to streamline debugging workflows. The author provides practical examples, such as defining custom commands and automating routine tasks, demonstrating how &lt;code&gt;.pdbrc&lt;/code&gt; enhances productivity by reducing repetitive input. The piece also touches on best practices for organizing configurations and ensuring compatibility across different debugging sessions, making pdb more adaptable to individual developer preferences and complex project requirements.&lt;/p&gt;
&lt;h3 id=&quot;building-a-python-library-in-2026&quot;&gt;&lt;a href=&quot;https://stephenlf.dev/blog/python-library-in-2026/&quot;&gt;Building a Python Library in 2026&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This blog post provides a comprehensive guide to building Python libraries in 2026, emphasizing modern tools and best practices. The author recommends using &lt;strong&gt;uv&lt;/strong&gt; from Astral as the central tool for project initialization, dependency management, building, and publishing. Key components include: a standard &lt;code&gt;src&lt;/code&gt; layout, &lt;code&gt;pyproject.toml&lt;/code&gt; metadata, linting/formatting with &lt;strong&gt;ruff&lt;/strong&gt;, type checking with &lt;strong&gt;mypy&lt;/strong&gt; (or alternatives), testing with &lt;strong&gt;pytest&lt;/strong&gt; and coverage, CI enforcement via GitHub Actions, and pre-commit hooks. The author also explores publishing options beyond PyPI and examines real-world implementations from OpenAI and Polars, demonstrating how these tools streamline modern Python package development.&lt;/p&gt;
&lt;h3 id=&quot;why-pylocktoml-includes-digital-attestations&quot;&gt;&lt;a href=&quot;https://snarky.ca/why-pylock-toml-includes-digital-attestations/&quot;&gt;Why pylock.toml includes digital attestations&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This blog post from &lt;em&gt;Brett Cannon&lt;/em&gt; explains why &lt;code&gt;pylock.toml&lt;/code&gt; includes digital attestations to enhance Python package security. Triggered by a recent PyPI project hack, the author highlights how &lt;em&gt;trusted publishing&lt;/em&gt; allows continuous deployment systems to securely upload packages without exposing credentials. Digital attestations verify that a package genuinely originated from its expected CD system. When recorded in &lt;code&gt;pylock.toml&lt;/code&gt;, publisher details for each package enable automated or manual verification to detect suspicious changes, such as missing or altered attestation data. Ultimately, the author recommends maintainers adopt trusted publishing with attestations, use lock files like &lt;code&gt;pylock.toml&lt;/code&gt;, and regularly review attestation consistency to catch potential supply chain attacks.&lt;/p&gt;
&lt;h3 id=&quot;continual-learning-for-ai-agents&quot;&gt;&lt;a href=&quot;https://blog.langchain.com/continual-learning-for-ai-agents/&quot;&gt;Continual learning for AI agents&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The blog post from Langchain explains that continual learning for AI agents can occur at three distinct layers: the model (weight updates using techniques like SFT or RL), the harness (optimizing the code and tools around the model), and the context (updating configuration, instructions, skills, or memory). While most discussions focus on model-level learning, the harness and context layers offer practical ways to improve agents over time. Traces — the full execution logs of agents — are central to all approaches, enabling analysis and improvement. The harness can be refined by reviewing traces to suggest code changes, while context can be updated at agent, user, or organization levels, either offline or in real-time. Tools like LangSmith and frameworks like Deep Agents support these patterns, allowing AI systems to continuously learn and adapt.&lt;/p&gt;
&lt;h3 id=&quot;pixi-one-package-manager-for-python-and-cc-libraries&quot;&gt;&lt;a href=&quot;https://codecut.ai/uv-pixi-comparison/&quot;&gt;pixi: One Package Manager for Python and C/C++ Libraries&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The article compares &lt;strong&gt;uv&lt;/strong&gt; and &lt;strong&gt;pixi&lt;/strong&gt; as Python package managers, explaining that while uv excels at fast dependency resolution and lockfiles for pure Python projects from PyPI, it cannot install compiled C/C++ system libraries like GDAL, requiring separate OS package managers. &lt;strong&gt;pixi&lt;/strong&gt; solves this by managing both Python packages from PyPI and compiled libraries from conda-forge in a single tool, with automatic lockfiles, multi-platform support, built-in task running, and project-level environments. The author recommends using uv for simple Python projects and pixi when working with compiled dependencies, geospatial libraries, or needing unified package management across platforms.&lt;/p&gt;
&lt;h3 id=&quot;learning-rust-made-me-a-better-python-developer&quot;&gt;&lt;a href=&quot;https://belderbos.dev/blog/rust-made-me-a-better-python-developer/&quot;&gt;Learning Rust Made Me a Better Python Developer&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Learning Rust improved the author’s Python development by forcing explicit thinking about data ownership, error handling, and edge cases. Rust’s compiler enforces strict patterns that prevent common bugs: ownership rules stop unexpected mutations, Result types make failure explicit in return types, and exhaustive pattern matching ensures all cases are handled. Though Python’s type system can approximate these concepts, Rust’s compiler builds a disciplined reflex. The author now writes cleaner, more predictable Python — asking who owns data before mutating, modeling errors explicitly, and treating all possible states — even though Rust and Python serve different roles (performance vs. orchestration) and aren’t direct competitors.&lt;/p&gt;
&lt;h3 id=&quot;what-every-dev-should-know-about-ai-sandboxes&quot;&gt;&lt;a href=&quot;https://read.engineerscodex.com/p/every-dev-should-know-about-ai-sandboxes&quot;&gt;What every dev should know about AI sandboxes&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;AI sandboxes are critical for safely running AI agents, protecting production systems from potentially harmful actions. The threat model has evolved: agents may confidently execute wrong instructions, not just malicious attacks. Isolation levels range from lightweight containers (fast but share kernel) to MicroVMs (hardware-level isolation but slower), gVisor (userspace kernel), OS-level primitives like Bubblewrap (zero overhead), and simulated environments. Trade-offs exist between speed and security. Vendors like E2B (Firecracker-based), Modal (gVisor), and Daytona (container-based) offer solutions. Building your own sandbox is discouraged unless it’s your core product, as managing security, observability, and lifecycle complexity distracts from primary goals.&lt;/p&gt;
&lt;h3 id=&quot;long-running-agents&quot;&gt;&lt;a href=&quot;https://addyosmani.com/blog/long-running-agents/&quot;&gt;Long-running Agents&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Long-running agents are AI systems that maintain progress across hours, days, or weeks, overcoming the limitations of traditional chat-based agents that forget and fail over long tasks. They require solving three core problems: finite context windows, lack of persistent state, and unreliable self-verification. Leading approaches from Anthropic, Cursor, and Google converge on decoupling the model’s reasoning loop from execution sandboxes and durable session logs, while implementing patterns like checkpoint-and-resume, memory banks, and separate evaluators to ensure reliability. These systems enable economically feasible delegation of complex, multi-day work, though challenges remain around cost, security, alignment drift, and defining work that can survive autonomous execution.&lt;/p&gt;
&lt;h3 id=&quot;scaling-managed-agents-decoupling-the-brain-from-the-hands&quot;&gt;&lt;a href=&quot;https://www.anthropic.com/engineering/managed-agents&quot;&gt;Scaling Managed Agents: Decoupling the brain from the hands&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Anthropic’s &lt;em&gt;Managed Agents&lt;/em&gt; service decouples the “brain” (Claude and its harness) from the “hands” (execution sandboxes) and the “session” (event log) through stable, general-purpose interfaces. This architecture — inspired by operating system virtualization — addresses the fragility of earlier monolithic designs where components were tightly coupled in single containers. By treating each component as interchangeable “cattle” rather than precious “pets”, the system gains reliability, security (credentials are isolated from execution), and performance (reducing time-to-first-token by 60-90%). The meta-harness design is opinionated about interfaces but unopinionated about specific implementations, allowing it to evolve alongside model improvements.&lt;/p&gt;
&lt;h3 id=&quot;multi-agent-coordination-patterns-five-approaches-and-when-to-use-them&quot;&gt;&lt;a href=&quot;https://claude.com/blog/multi-agent-coordination-patterns&quot;&gt;Multi-agent coordination patterns: Five approaches and when to use them&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The Claude blog outlines five multi-agent coordination patterns for teams building AI systems. The generator-verifier pattern loops output between generation and validation for quality-critical work. Orchestrator-subagent uses a lead agent to delegate clear, bounded subtasks. Agent teams employ persistent workers for independent, long-running parallel work. Message bus routes events through publish-subscribe for evolving pipelines. Shared state lets agents collaborate through a common knowledge store. The authors recommend starting with orchestrator-subagent as the simplest pattern, then evolving as needs clarify, emphasizing that patterns are building blocks often combined in production systems rather than mutually exclusive choices.&lt;/p&gt;
&lt;h3 id=&quot;managing-context-in-long-run-agentic-applications&quot;&gt;&lt;a href=&quot;https://slack.engineering/managing-context-in-long-run-agentic-applications/&quot;&gt;Managing context in long-run agentic applications&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://slack.engineering/wp-content/uploads/sites/7/2026/03/investigation_notebook.png&quot; alt=&quot;slack-engineering-investigation-notebook&quot;&gt;&lt;/p&gt;
&lt;p&gt;The article discusses managing context in long-running agentic systems, focusing on Slack’s approach to maintaining coherence across multi-agent investigations. It addresses challenges posed by limited language model context windows and proposes three complementary channels: the Director’s Journal for structured memory, the Critic’s Review for credibility-scored findings, and the Critic’s Timeline for consolidated, evidence-based chronology. These mechanisms enable specialized agent roles while preserving alignment and creativity, allowing systems to operate effectively over extended interactions. The solution emphasizes online summarization rather than accumulating message history, ensuring scalability and trustworthiness.&lt;/p&gt;
&lt;h3 id=&quot;components-of-a-coding-agent&quot;&gt;&lt;a href=&quot;https://magazine.sebastianraschka.com/p/components-of-a-coding-agent&quot;&gt;Components of A Coding Agent&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This article by Sebastian Raschka explains the core components of coding agents (like Claude Code and Codex CLI) that make LLMs more effective for programming tasks. The author describes six key building blocks:&lt;/p&gt;
&lt;p&gt;(1) Live Repo Context - understanding the project structure and environment;
(2) Prompt Shape and Cache Reuse - efficiently packaging and caching stable information;
(3) Tool Access and Use - enabling structured tool calls with validation;
(4) Minimizing Context Bloat - compressing and deduplicating history;
(5) Structured Session Memory - maintaining both full transcripts and distilled working memory;
and (6) Delegation with Subagents - splitting tasks into bounded subtasks.&lt;/p&gt;
&lt;p&gt;The article emphasizes that the harness layer often matters as much as the underlying model itself, explaining why coding agents feel significantly more capable than the same models in plain chat interfaces.&lt;/p&gt;
&lt;h3 id=&quot;all-your-agents-are-going-async&quot;&gt;&lt;a href=&quot;https://zknill.io/posts/all-your-agents-are-going-async/&quot;&gt;All your agents are going async&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The post argues that AI agents are shifting from synchronous chat to asynchronous, background workflows, breaking HTTP request‑response transport. Async agents need durable state and push-based delivery because they outlive connections, push unprompted updates, switch devices, and serve multiple users. Current solutions like Anthropic Channels, Cloudflare Sessions, and OpenClaw’s WhatsApp model address state or delivery but often rely on polling or custom backends. The author advocates a durable, realtime session layer—bi‑directional, multi‑device, and resilient—that separates conversation state from transport, enabling reliable async collaboration between humans and agents.&lt;/p&gt;
&lt;h3 id=&quot;why-were-rethinking-cache-for-the-ai-era&quot;&gt;&lt;a href=&quot;https://blog.cloudflare.com/rethinking-cache-ai-humans/&quot;&gt;Why we’re rethinking cache for the AI era&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Cloudflare’s analysis reveals that 32% of network traffic originates from automated sources, including AI bots and crawlers. Unlike human users, AI traffic exhibits high-volume sequential requests targeting long-tail content across websites, significantly raising cache miss rates and straining CDN infrastructure. This has caused real-world impacts like Wikipedia’s 50% surge in bandwidth usage and service slowdowns across platforms like SourceHut and Fedora. Current cache algorithms such as LRU struggle under AI’s constant scanning behavior. Cloudflare proposes AI-aware solutions including alternative cache replacement algorithms (SEIVE, S3FIFO), machine learning-based caching, and ultimately a separate cache layer dedicated to AI traffic to maintain performance for human users.&lt;/p&gt;
&lt;h3 id=&quot;your-harness-your-memory&quot;&gt;&lt;a href=&quot;https://blog.langchain.com/your-harness-your-memory/&quot;&gt;Your harness, your memory&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://storage.ghost.io/c/97/88/97889716-a759-46f4-b63f-4f5c46a13333/content/images/size/w1248/format/webp/2026/04/image--9--1.png&quot; alt=&quot;langchain-deep-agents&quot;&gt;&lt;/p&gt;
&lt;p&gt;Agent harnesses — the systems that coordinate LLMs with tools and data — are becoming the standard way to build AI agents, and they are fundamentally tied to memory management. Using closed, proprietary harnesses means surrendering control of your agent’s memory to third parties, which creates significant lock-in. Memory is what allows agents to learn from interactions and deliver personalized experiences, making it a crucial competitive advantage. The article argues that both memory and harnesses should be open and independently owned to maintain flexibility and avoid platform dependency. To address this, the author introduces Deep Agents as an open-source, model-agnostic framework that gives developers full control over their agents’ memory storage and retrieval.&lt;/p&gt;
&lt;h3 id=&quot;oh-memories-whered-you-go&quot;&gt;&lt;a href=&quot;https://weaviate.io/blog/engram-internal-use-case&quot;&gt;Oh Memories, Where’d You Go&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Engram&lt;/em&gt; is Weaviate’s memory product (in private preview) designed to store context beyond what fits in Claude Code’s built-in MEMORY.md file (~200 lines). The author tested it by building an MCP server integration but initially found Claude ignored Engram because MEMORY.md loads with zero latency. The solution involved categorizing memories (communication-style, domain-context, tool-preferences, workflow) and integrating at specific session lifecycle points. Testing showed Engram excelled at “decision archaeology” (30% faster with reasoning chains recalled), but failed on planning tasks where Claude defaults to forward-moving. Key improvements needed include fire-and-forget saves, automatic memory capture pipelines, and deterministic retrieval hooks at session start.&lt;/p&gt;
&lt;h3 id=&quot;the-spec-layer&quot;&gt;&lt;a href=&quot;https://blog.matt-rickard.com/p/the-spec-layer&quot;&gt;The Spec Layer&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The blog advocates for spec-driven development (SDD) to constrain AI agents’ execution freedom and prevent “wrong kind of correct” mistakes. Unlike humans, agents make locally valid errors like disabling tests or reusing existing patterns. Written specs provide durable intent that narrows choices at implementation time. Historical protocol examples (RFCs for IP, HTTP, TLS, HTML) demonstrate how specs enable multiple implementations over decades. The ideal spec should be declarative, layered, and cheap to revise, with mechanical enforcement moved to lint, schemas, and tests. The goal is a narrow interface between human intent and machine execution: smaller specs, harder checks, and less guessing.&lt;/p&gt;
&lt;h3 id=&quot;i-still-prefer-mcp-over-skills&quot;&gt;&lt;a href=&quot;https://david.coffee/i-still-prefer-mcp-over-skills/&quot;&gt;I Still Prefer MCP Over Skills&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The author argues that MCP (Model Context Protocol) is superior to Skills for connecting LLMs to external services because it’s an API abstraction where the LLM only needs to know the “what”, not the “how”. MCP offers zero-install remote usage, seamless auto-updates, proper authentication handling, true portability, sandboxing, and smart tool discovery. Skills, however, require CLI installation, can’t work in many environments like ChatGPT or Perplexity, create deployment and secret management nightmares, and bloat the context window. He concludes that MCP should be the standard for connecting to services, while Skills should only be used for teaching LLMs knowledge about existing tools or workflows — not as replacements for actual service connectors.&lt;/p&gt;
&lt;h3 id=&quot;the-beginning-of-programming-as-well-know-it&quot;&gt;&lt;a href=&quot;https://bitsplitting.org/2026/04/01/the-beginning-of-programming-as-well-know-it/&quot;&gt;The Beginning of Programming as We’ll Know It&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The article discusses the impact of AI coding assistants on the programming profession. While AI tools like Claude and Codex can now complete significant coding tasks in minutes, the author argues that human programmers remain essential during this transitional period. Humans bring unique qualities like taste, wisdom, and caution that AI lacks. The author emphasizes that AI-generated code must be reviewed and corrected by humans before it can be considered real work. Despite AI’s impressive capabilities, there’s a “reality distortion field” around AI outputs that can mislead developers. The conclusion is that programmers who embrace AI while maintaining skepticism and human oversight will be better equipped than ever, while those who refuse these tools will fall behind.&lt;/p&gt;
&lt;h3 id=&quot;the-cult-of-vibe-coding-is-insane&quot;&gt;&lt;a href=&quot;https://bramcohen.com/p/the-cult-of-vibe-coding-is-insane&quot;&gt;The Cult Of Vibe Coding Is Insane&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This article criticizes the “vibe coding” trend where developers avoid examining underlying code, instead relying solely on vague AI conversations. After Claude’s source code leak revealed poor quality, the author argues that “pure vibe coding” is a myth — human contributions still occur through language and infrastructure frameworks. Bad software isn’t inevitable with AI; it’s a conscious choice. The author explains that AI excels at cleaning up technical debt when given proper guidance through collaborative dialogue, and developers should actively steer AI toward high-quality outcomes rather than accepting mediocrity. The core message: poor software quality is a decision, not a necessity.&lt;/p&gt;
&lt;h3 id=&quot;claude-is-not-your-architect-stop-letting-it-pretend&quot;&gt;&lt;a href=&quot;https://www.hollandtech.net/claude-is-not-your-architect/&quot;&gt;Claude Is Not Your Architect. Stop Letting It Pretend.&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The article warns against using AI like Claude as a software architect, arguing that while AI agents are excellent implementers, they cannot make real architectural decisions. AI is “pathologically agreeable” — always validating ideas enthusiastically without the crucial ability to say “no” or push back on complexity. It produces generic “Jenga tower” architectures that look sound but aren’t tailored to specific teams, constraints, or production realities. The real danger is that engineers are reduced to implementing AI-designed tickets, while accountability vanishes — when systems fail, humans stay up debugging decisions they didn’t make. The solution: humans must design, AI must implement.&lt;/p&gt;
&lt;h2 id=&quot;podcasts&quot;&gt;Podcasts&lt;/h2&gt;
&lt;h3 id=&quot;-corepy&quot;&gt;🥝 core.py&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://open.spotify.com/episode/5pD08pb1Tt7Z7k2ZSIdih9&quot;&gt;Episode 29: Is CPython developed with AI now?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-realpython-podcast&quot;&gt;🐍 RealPython Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/290/&quot;&gt;Episode 290: Advice on Managing Projects &amp;amp; Making Python Classes Friendly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/291/&quot;&gt;Episode 291: Reassessing the LLM Landscape &amp;amp; Summoning Ghosts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/292/&quot;&gt;Episode 292: Becoming a Better Python Developer Through Learning Rust&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-python-bytes-podcast&quot;&gt;🥧 Python Bytes Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/476/common-themes&quot;&gt;#476 Common themes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/477/lazy-frozen-and-31-lighter&quot;&gt;#477 Lazy, Frozen, and 31% Lighter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-talk-python-to-me&quot;&gt;🦜 Talk Python to me&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/543/deep-agents-langchains-sdk-for-agents-that-plan-and-delegate&quot;&gt;#543: Deep Agents: LangChain’s SDK for Agents That Plan and Delegate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/544/wheel-next-packaging-peps&quot;&gt;#544: Wheel Next + Packaging PEPs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/545/owasp-top-10-2025-list-for-python-devs&quot;&gt;#545: OWASP Top 10 (2025 List) for Python Devs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/546/self-hosting-apps-for-python-people&quot;&gt;#546: Self hosting apps for Python people&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-vs-code-insiders-podcast&quot;&gt;🚀 VS Code Insiders Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.vscodepodcast.com/21&quot;&gt;Episode 21: Inside The Agent Loop with Pierce Boggan&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;repositories&quot;&gt;Repositories&lt;/h2&gt;
&lt;h3 id=&quot;nousresearchhermes-agent-mit&quot;&gt;&lt;a href=&quot;https://github.com/NousResearch/hermes-agent&quot;&gt;NousResearch/hermes-agent&lt;/a&gt; (MIT)&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;The self-improving AI agent built by Nous Research. It’s the only agent with a built-in learning loop — it creates skills from experience, improves them during use, nudges itself to persist knowledge, searches its own past conversations, and builds a deepening model of who you are across sessions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;dropseedplain-bsd-3&quot;&gt;&lt;a href=&quot;https://github.com/dropseed/plain&quot;&gt;dropseed/plain&lt;/a&gt; (BSD-3)&lt;/h3&gt;
&lt;p&gt;Forked from Django, &lt;code&gt;plain&lt;/code&gt; is an opinionated Python web framework which is ready for the AI Agent age. You can visit their &lt;a href=&quot;https://plainframework.com/&quot;&gt;official website&lt;/a&gt; for more information.&lt;/p&gt;
&lt;h3 id=&quot;smelloscopesmello-mit&quot;&gt;&lt;a href=&quot;https://github.com/smelloscope/smello&quot;&gt;smelloscope/smello&lt;/a&gt; (MIT)&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Capture outgoing HTTP requests from your Python code and browse them in a local web dashboard — including gRPC calls made by Google Cloud libraries.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;As we wrap up this journey together, I want to take a moment to express my gratitude for your reading. If you’ve enjoyed this issue and would like to help sustain this blog, please consider &lt;a href=&quot;https://github.com/blueberry-py/blog/stargazers&quot;&gt;starring this blog on github&lt;/a&gt;, it would be great motivation for me to keep updating!&lt;/p&gt;
&lt;p&gt;Alright, that concludes the April Edition of “This Month for Pythonistas”. Thank you again for reading my post. I hope you enjoy it or find something useful. Happy coding and see you in May! 👋&lt;/p&gt;
</description><pubDate>Thu, 30 Apr 2026 13:00:00 GMT</pubDate><category>python</category><category>python</category><category>news</category><category>podcast</category><category>AI</category><category>llm</category><category>linux</category><category>blog</category><author>Zeyang Lin</author></item><item><title>This Month for Pythonistas - March 2026</title><link>https://blueberrypy.netlify.app/post/this-month-for-pythonistas-2026-03/</link><guid isPermaLink="true">https://blueberrypy.netlify.app/post/this-month-for-pythonistas-2026-03/</guid><description>&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; datetime &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; date&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(date.today().year, date.today().month)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 2026 3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img alt=&quot;issue-2026-03&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/splash.D9t4tBm8_Hz967.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Welcome back Pythonistas! This is the March 2026 issue of “This Month for Pythonistas”, bringing you curated Python news, tutorials, articles, podcasts and community highlights.&lt;/p&gt;
&lt;p&gt;Time flies! It has been a whole year since the first issue of “This Month for Pythonistas”. I’m excited to kick off another year of informative content and community engagement, and I can’t wait to see what you have in store for this month.&lt;/p&gt;
&lt;p&gt;Before we continue, please note that this blog is synced across the following platforms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberry-py.github.io/blog/post/this-month-for-pythonistas-2026-03/&quot;&gt;Github Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberrypy.netlify.app/post/this-month-for-pythonistas-2026-03/&quot;&gt;Netlify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberrypy.onrender.com/post/this-month-for-pythonistas-2026-03/&quot;&gt;Render&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberrypy-blog.vercel.app/post/this-month-for-pythonistas-2026-03/&quot;&gt;Vercel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ready? Let’s get started!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;events--social&quot;&gt;Events &amp;amp; Social&lt;/h2&gt;
&lt;h3 id=&quot;openai-acquires-astral&quot;&gt;&lt;a href=&quot;https://openai.com/index/openai-to-acquire-astral/&quot;&gt;OpenAI acquires Astral&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;OpenAI has announced its acquisition of Astral, the company behind popular Python developer tools including &lt;em&gt;uv&lt;/em&gt;, &lt;em&gt;Ruff&lt;/em&gt;, and &lt;em&gt;ty&lt;/em&gt;. This deal aims to integrate these widely-used open source tools into OpenAI’s Codex ecosystem, which has grown to over 2 million weekly active users with 3x user growth and 5x increased usage since the start of the year. The acquisition will help expand Codex beyond simple code generation to participate in the entire software development workflow, from planning changes to maintaining software over time. The deal is subject to regulatory approval, and Astral’s team will join OpenAI’s Codex team after closing.&lt;/p&gt;
&lt;p&gt;Astral founder &lt;em&gt;Charlie Marsh&lt;/em&gt; announced that this acquisition will accelerate their mission to make programming more productive by combining Astral’s tooling expertise with AI innovation at the frontier of software development. OpenAI will continue supporting Astral’s open source tools after the deal closes, maintaining their commitment to building in the open alongside the Python community for broader ecosystem impact.&lt;/p&gt;
&lt;h3 id=&quot;pycon-us-2026-schedule-revealed&quot;&gt;&lt;a href=&quot;https://us.pycon.org/2026/schedule/&quot;&gt;PyCon US 2026 Schedule Revealed&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The PyCon US 2026 schedule has been released! Besides, the keynote speakers are announced: Lin Qiao, Pablo Galindo Salgado, amanda casari, Rachell Calhoun, as well as Tim Schilling.&lt;/p&gt;
&lt;h3 id=&quot;the-python-insider-blog-has-moved&quot;&gt;&lt;a href=&quot;https://blog.python.org/2026/03/the-python-insider-blog-has-moved/&quot;&gt;The Python Insider Blog Has Moved!&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;em&gt;Python Insider&lt;/em&gt; official blog has moved from Blogger to &lt;strong&gt;blog.python.org&lt;/strong&gt;, with all 307 past posts migrated and old URLs auto-redirecting; RSS readers will update automatically without action. Shifting to Markdown/Git pull requests lowered contribution barriers vs. the prior Blogger/Google account setup. New site features include filtered/paginated posts, author/tag pages, Ctrl+K search, dark mode, and static Astro hosting.&lt;/p&gt;
&lt;h3 id=&quot;guido-van-rossum-interviews-thomas-wouters&quot;&gt;&lt;a href=&quot;https://gvanrossum.github.io/interviews/ThomasWouters.html&quot;&gt;Guido van Rossum Interviews Thomas Wouters&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This interview with &lt;strong&gt;Thomas Wouters&lt;/strong&gt;, conducted by &lt;strong&gt;Guido van Rossum&lt;/strong&gt;, chronicles Wouters’ journey from discovering Python via LambdaMOO in the late 1990s to becoming a core Python developer. He contributed augmented assignment operators (+=) and range literals (PEP 203), while participating in pivotal discussions about backward compatibility and nested scopes that led to future imports. Wouters reflects on the friendly Python community during the Usenet era, mentioning key figures like Tim Peters, Fredrik Lundh, and Jeremy Hilton. He also discusses the founding of the Python Software Foundation in 2001 and the challenges of organizing the first PyCon, highlighting how Python evolved from individual use to corporate deployment while maintaining its collaborative spirit.&lt;/p&gt;
&lt;h3 id=&quot;guido-van-rossum-interviews-brett-cannon&quot;&gt;&lt;a href=&quot;https://gvanrossum.github.io/interviews/BrettCannon.html&quot;&gt;Guido van Rossum Interviews Brett Cannon&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This interview with Python core developer &lt;strong&gt;Brett Cannon&lt;/strong&gt;, also conducted by &lt;strong&gt;Guido van Rossum&lt;/strong&gt;, explores Brett’s journey into the Python community. In 2000, philosophy student Brett discovered Python at UC Berkeley while seeking an object-oriented language for a CS course. After reading the tutorial and an O’Reilly book, he fell in love with the language. During a gap year before grad school, he submitted a pure-Python &lt;code&gt;strptime&lt;/code&gt; implementation to python-dev, which led to his first core contribution in 2002. He volunteered to write the python-dev summaries, became PSF member, gained commit rights in April 2003, and was involved in major projects like importlib and Python 3 (PEP 3000/3100). Brett reflects on the early community’s small, passionate nature, the transition from volunteer contributions to paid maintainers, and Python’s evolution through CVS, Subversion, Mercurial, and Git on SourceForge to GitHub.&lt;/p&gt;
&lt;h3 id=&quot;py-ai-conference&quot;&gt;&lt;a href=&quot;https://luma.com/i3cbt3sz&quot;&gt;Py AI Conference&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Hosted on March 10th at San Francisco, California, this one-day conference is for Python teams shipping AI to production. Keynote speakers include ​Guido van Rossum, Sebastián Ramírez (FastAPI) and more.&lt;/p&gt;
&lt;h3 id=&quot;gemini-31-flash-lite-built-for-intelligence-at-scale&quot;&gt;&lt;a href=&quot;https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-3-1-flash-lite/&quot;&gt;Gemini 3.1 Flash-Lite: Built for intelligence at scale&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://storage.googleapis.com/gweb-uniblog-publish-prod/images/gemini-3.1_flash_Lite_blog_keywo.width-2200.format-webp.webp&quot; alt=&quot;gemini-3-1-flash-lite&quot;&gt;&lt;/p&gt;
&lt;p&gt;Google has launched &lt;strong&gt;Gemini 3.1 Flash-Lite&lt;/strong&gt;, its fastest and most cost-efficient AI model in the Gemini 3 series. Priced at just $0.25 per million input tokens and $1.50 per million output tokens, it delivers 2.5x faster response times and 45% higher output speed compared to its predecessor 2.5 Flash. The model achieves a 1432 Elo score and outperforms competitors on reasoning and multimodal benchmarks. Available via Google AI Studio and Vertex AI, Flash-Lite is optimized for high-volume workloads like translation, content moderation, and UI generation, with adaptive thinking levels for developer control.&lt;/p&gt;
&lt;h3 id=&quot;gemini-embedding-2-our-first-natively-multimodal-embedding-model&quot;&gt;&lt;a href=&quot;https://blog.google/innovation-and-ai/models-and-research/gemini-models/gemini-embedding-2/&quot;&gt;Gemini Embedding 2: Our first natively multimodal embedding model&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://storage.googleapis.com/gweb-uniblog-publish-prod/images/gemini-2_embedding_keyword_blog_.width-2200.format-webp.webp&quot; alt=&quot;gemini-embedding-2&quot;&gt;&lt;/p&gt;
&lt;p&gt;Google has also released Gemini Embedding 2, its first natively multimodal embedding model that maps text, images, videos, audio, and documents into a single unified embedding space, supporting over 100 languages. The model handles up to 8192 text tokens, 6 images, 120 seconds of video, native audio without transcription, and PDFs up to 6 pages per request. It supports interleaved multi-modal inputs in a single request and uses Matryoshka Representation Learning to offer flexible output dimensions (3072, 1536, or 768).&lt;/p&gt;
&lt;h3 id=&quot;introducing-gpt54&quot;&gt;&lt;a href=&quot;https://openai.com/index/introducing-gpt-5-4/&quot;&gt;Introducing GPT‑5.4&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;OpenAI has launched GPT-5.4, their most powerful and efficient frontier model for professional workloads. The model combines advanced reasoning, programming, and agent capabilities with native computer use functionality and 1M token context support. GPT-5.4 introduces “Thinking mode” in ChatGPT, providing transparent reasoning plans, and features improved web search, tool search, and higher accuracy with 33% reduced hallucinations. Performance benchmarks show significant improvements across knowledge work, coding, and complex tasks.&lt;/p&gt;
&lt;h3 id=&quot;minimax-m27-early-echoes-of-self-evolution&quot;&gt;&lt;a href=&quot;https://www.minimax.io/news/minimax-m27-en&quot;&gt;MiniMax M2.7: Early Echoes of Self-Evolution&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://www.minimax.io/_next/image?url=https%3A%2F%2Ffilecdn.minimax.chat%2Fpublic%2F86637d58-0e78-44f5-bb08-d149ed0c4418.png&amp;amp;w=2048&amp;amp;q=75&quot; alt=&quot;minimax-m2.7&quot;&gt;&lt;/p&gt;
&lt;p&gt;MiniMax M2.7 is a groundbreaking AI model that deeply participates in its own self-evolution, capable of building complex agent harnesses and completing elaborate productivity tasks. It excels in professional software engineering with 56.22% accuracy on SWE-Pro benchmark, demonstrates top-tier office software capabilities with the highest ELO score among open-source models (1495 on GDPval-AA), and maintains 97% skill adherence across 40 complex skills. The model shows enhanced character consistency and emotional intelligence for entertainment applications.&lt;/p&gt;
&lt;h2 id=&quot;new-versions&quot;&gt;New Versions&lt;/h2&gt;
&lt;h3 id=&quot;python-3150-alpha-7&quot;&gt;Python 3.15.0 alpha 7&lt;/h3&gt;
&lt;p&gt;This is &lt;a href=&quot;https://www.python.org/downloads/release/python-3150a7/&quot;&gt;the seventh&lt;/a&gt; and possiblly the second last alpha release for 3.15 series before the scheduled beta phase begins in May 2026.&lt;/p&gt;
&lt;p&gt;Besides, Python &lt;a href=&quot;https://blog.python.org/2026/03/python-31213-31115-31020/&quot;&gt;3.12.13, 3.11.15 and 3.10.20&lt;/a&gt;, the security bugfix releases for 3.12, 3.11 and 3.10 respectively with only tarball distributions, are also available.&lt;/p&gt;
&lt;h2 id=&quot;tutorials&quot;&gt;Tutorials&lt;/h2&gt;
&lt;h3 id=&quot;deeplearningais-agent-memory-building-memory-aware-agents-from-oracle&quot;&gt;DeepLearning.ai’s &lt;a href=&quot;https://www.deeplearning.ai/short-courses/agent-memory-building-memory-aware-agents/&quot;&gt;Agent Memory: Building Memory-Aware Agents&lt;/a&gt; from Oracle&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;You’ll design a complete memory system that stores and retrieves different memory types, scales tool access using semantic search, and builds write-back loops that allow agents to update their own memory autonomously. By the end, you’ll have assembled a fully stateful Memory Aware Agent that loads prior context at startup, assembles relevant context, state, tools, and outputs and improves across sessions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;real-pythons-pydantic-ai-build-type-safe-llm-agents-in-python&quot;&gt;Real Python’s &lt;a href=&quot;https://realpython.com/pydantic-ai/&quot;&gt;Pydantic AI: Build Type-Safe LLM Agents in Python&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://realpython.com/cdn-cgi/image/width=1920,format=auto/https://files.realpython.com/media/Pydantic-AI-Typed-LLM-Agents-with-Structured-Outputs_Watermarked.043c8afd949c.jpg&quot; alt=&quot;realpython-pydantic-ai&quot;&gt;&lt;/p&gt;
&lt;p&gt;Pydantic AI is a Python framework for building type-safe LLM agents that return validated, structured outputs using Pydantic models. It eliminates the need for error-prone string parsing by defining schemas with type hints, letting the framework handle validation automatically. The framework uses &lt;code&gt;@agent.tool&lt;/code&gt; decorator to register Python functions that LLMs can invoke based on user queries and docstrings. It also supports dependency injection with &lt;code&gt;deps_type&lt;/code&gt; for type-safe runtime context like database connections without using global state.&lt;/p&gt;
&lt;h2 id=&quot;articles&quot;&gt;Articles&lt;/h2&gt;
&lt;h3 id=&quot;thoughts-on-openai-acquiring-astral-and-uvruffty&quot;&gt;&lt;a href=&quot;https://simonwillison.net/2026/Mar/19/openai-acquiring-astral&quot;&gt;Thoughts on OpenAI acquiring Astral and uv/ruff/ty&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;uv stands out as the most impactful tool with 126 million+ monthly downloads, becoming essential for Python environment management. The author discusses potential risks of a major company owning critical infrastructure, parallels to Anthropic’s Bun acquisition, and concerns about OpenAI’s limited track record maintaining open source projects. The author notes that due to permissive licensing, forking remains a viable exit strategy if maintenance deteriorates after the transition.&lt;/p&gt;
&lt;h3 id=&quot;python-315s-jit-is-now-back-on-track&quot;&gt;&lt;a href=&quot;https://fidget-spinner.github.io/posts/jit-on-track.html&quot;&gt;Python 3.15’s JIT is now back on track&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Python 3.15’s JIT compiler has achieved its performance goals ahead of schedule, delivering 11-12% speed improvements on macOS AArch64 and 5-6% on x86_64 Linux compared to the interpreter. The article recounts how the original JIT in Python 3.13 and 3.14 was often slower than the interpreter, and funding cuts to the Faster CPython team made the project’s future uncertain. The author attributes the revival to community-led development, lucky technical choices like trace recording with dual dispatch and reference count elimination, and strong teamwork. Daily performance tracking and breaking complex problems into manageable tasks helped attract contributors, transforming the JIT from an opaque project into something newcomers could contribute to.&lt;/p&gt;
&lt;h3 id=&quot;the-optimization-ladder&quot;&gt;&lt;a href=&quot;https://cemrehancavdar.com/2026/03/10/optimization-ladder/&quot;&gt;The Optimization Ladder&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This article presents a comprehensive benchmark of Python optimization techniques, demonstrating a spectrum of approaches from simple to complex. CPython’s dynamic design makes it fundamentally slow (177-875x slower than C for compute benchmarks). The “optimization ladder” shows increasing speedups at higher effort levels: upgrading Python (1.4x), alternative runtimes like PyPy/GraalPy (6-66x), compilation tools like Mypyc (2.4-14x), Numba (56-135x), Cython (99-124x), and JAX (up to 1,633x). For real-world JSON processing, gains were more modest. The author emphasizes that the choice depends on your specific problem - Python as an orchestration layer with NumPy can achieve near-compiled speeds, while pure compute loops benefit most from aggressive optimization.&lt;/p&gt;
&lt;h3 id=&quot;when-to-make-a-class-in-python&quot;&gt;&lt;a href=&quot;https://www.pythonmorsels.com/when-are-classes-used/&quot;&gt;When to make a class in Python&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This article outlines when to use Python classes. Most developers first use classes when required by frameworks like Django for database models. Classes excel at bundling related data and functionality — for example, replacing functions passing a shared server object with an &lt;code&gt;IMAPChecker&lt;/code&gt; class. They also clarify data, like shutil’s terminal size class over a bare tuple. While much Python code avoids custom classes, classes improve readability by grouping state and methods together.&lt;/p&gt;
&lt;h3 id=&quot;invent-your-own-comprehensions-in-python&quot;&gt;&lt;a href=&quot;https://www.pythonmorsels.com/custom-comprehensions/&quot;&gt;Invent your own comprehensions in Python&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This article explains how to create “custom comprehensions” in Python using generator expressions. While Python has built-in comprehensions for lists, sets, and dictionaries, it lacks tuple, frozenset, and other specialized collection comprehensions.&lt;/p&gt;
&lt;p&gt;The solution is to pass generator expressions to callable functions or classes that accept iterables. For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tuple(n**2 for n numbers)&lt;/code&gt; acts as a “tuple comprehension”&lt;/li&gt;
&lt;li&gt;&lt;code&gt;frozenset(w.strip(...) for w in words)&lt;/code&gt; acts as a “frozenset comprehension”&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Counter(w.strip(...) for w in words)&lt;/code&gt; acts as a “Counter comprehension”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Generator expressions also work with reducer functions like &lt;code&gt;sum()&lt;/code&gt;, &lt;code&gt;any()&lt;/code&gt;, &lt;code&gt;all()&lt;/code&gt;, and &lt;code&gt;join()&lt;/code&gt;. The key insight is that &lt;strong&gt;any&lt;/strong&gt; iterable-accepting callable can essentially become a custom comprehension tool.&lt;/p&gt;
&lt;h3 id=&quot;fire-and-forget-or-never-with-pythons-asyncio&quot;&gt;&lt;a href=&quot;https://mkennedy.codes/posts/fire-and-forget-or-never-with-python-s-asyncio/&quot;&gt;Fire and forget (or never) with Python’s asyncio&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The article discusses a critical issue with fire-and-forget tasks in Python’s asyncio. Starting in Python 3.12, &lt;code&gt;asyncio.create_task()&lt;/code&gt; can silently garbage collect tasks before they execute because the event loop only maintains weak references. This means tasks that aren’t explicitly referenced may never run, creating subtle bugs. The solution is to store task references in a set and register a &lt;code&gt;done_callback&lt;/code&gt; to clean them up after completion. This non-obvious workaround violates Python’s “one obvious way” principle but prevents tasks from disappearing mid-execution, ensuring reliable background task execution in async applications.&lt;/p&gt;
&lt;h3 id=&quot;reinventing-pythons-asyncio&quot;&gt;&lt;a href=&quot;https://blog.baro.dev/p/reinventing-pythons-asyncio&quot;&gt;Reinventing Python’s AsyncIO&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The author discusses reinventing Python’s &lt;code&gt;asyncio&lt;/code&gt; due to its complexity and limitations around the GIL. After discovering &lt;em&gt;tinyio&lt;/em&gt; — a simple event loop implementation — the author created &lt;code&gt;TonIO&lt;/code&gt;, a new async runtime built in Rust centered on two simple primitives: Event and Waiter. Unlike asyncio, TonIO leverages free-threaded Python to run code across multiple threads without worrying about the main thread. Benchmarks show TonIO is 2-3.5x faster than asyncio for both computation and I/O operations. The author advocates for “reinventing the wheel” to truly understand low-level concepts, encouraging developers to build rather than just ship code.&lt;/p&gt;
&lt;h3 id=&quot;what-pythons-asyncio-primitives-get-wrong-about-shared-state&quot;&gt;&lt;a href=&quot;https://www.inngest.com/blog/no-lost-updates-python-asyncio&quot;&gt;What Python’s asyncio primitives get wrong about shared state&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This blog post discusses problems with Python’s asyncio primitives (Event, Condition, Queue) when coordinating concurrent tasks around shared state.&lt;/p&gt;
&lt;p&gt;The author explains that while &lt;code&gt;asyncio.Condition&lt;/code&gt; seems to solve the problem of waiting for specific states, it suffers from a &lt;strong&gt;lost update&lt;/strong&gt; bug under real concurrency: when a state changes rapidly (e.g., “closing” → “closed” in the same event loop tick), consumers wake up and check against the &lt;em&gt;current&lt;/em&gt; value, missing the intermediate state they were waiting for.&lt;/p&gt;
&lt;p&gt;The solution is &lt;strong&gt;per-consumer queues&lt;/strong&gt;: instead of waking consumers and asking “is the current state what you want?”, buffer every state transition into each consumer’s queue. This ensures no intermediate states are missed.&lt;/p&gt;
&lt;p&gt;The author provides a &lt;code&gt;ValueWatcher&lt;/code&gt; class implementation (about 300 lines) with features like thread safety, timeouts, predicate-based matching, and atomic registration.&lt;/p&gt;
&lt;h3 id=&quot;cli-subcommands-with-lazy-imports&quot;&gt;&lt;a href=&quot;https://snarky.ca/subcommands-with-lazy-imports/&quot;&gt;CLI subcommands with lazy imports&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Brett Cannon’s article discusses using lazy imports (PEP 810 in Python 3.15) with CLI subcommands to improve startup performance. While lazy imports allow importing only needed modules per subcommand, traditional argparse patterns break this: storing lazy imports in dicts or as default function arguments triggers their reification, defeating the purpose. Solutions include using a match statement instead of a dict for dispatching, or wrapping lazy imports in lambdas to add an indirection layer. Both approaches prevent accidental reification while keeping code organized.&lt;/p&gt;
&lt;h3 id=&quot;the-story-of-pythons-lazy-imports-why-it-took-three-years-and-two-attempts&quot;&gt;&lt;a href=&quot;https://techlife.blog/posts/the-story-of-pythons-lazy-imports-why-it-took-three-years-and-two-attempts/&quot;&gt;The Story of Python’s Lazy Imports: Why It Took Three Years and Two Attempts&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This blog post tells the story of Python’s lazy imports feature, which took three years and two attempts to implement. The problem: running simple commands like &lt;code&gt;mytool --help&lt;/code&gt; forces Python to load heavy libraries (PyTorch, NumPy, pandas) even when unnecessary. Companies like Meta and Hudson River Trading built their own forks with lazy imports, achieving 50-70% startup time improvements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PEP 690&lt;/strong&gt; (2022) proposed a global &lt;code&gt;-L&lt;/code&gt; flag to make all imports lazy by default, but the Steering Council rejected it, fearing it would create “two Pythons” and break the ecosystem.&lt;/p&gt;
&lt;p&gt;At the 2023 Language Summit, Thomas Wouters was the only attendee who said he could “never” support lazy imports.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PEP 810&lt;/strong&gt; (2025) changed the design: instead of a global flag, it uses an opt-in &lt;code&gt;lazy import&lt;/code&gt; keyword with proxy objects—avoiding changes to Python’s internal dictionary structure. Wouters himself became a co-author. The Steering Council unanimously accepted PEP 810 in November 2025, and it will arrive in Python 3.15.&lt;/p&gt;
&lt;h3 id=&quot;python-type-checker-comparison-typing-spec-conformance&quot;&gt;&lt;a href=&quot;https://pyrefly.org/blog/typing-conformance-comparison/&quot;&gt;Python Type Checker Comparison: Typing Spec Conformance&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This article compares Python type checkers’ conformance to the typing specification, presenting test pass rates: Pyright (97.8%), Zuban (96.4%), Pyrefly (87.8%), mypy (58.3%), and ty (53.2%). It explains that conformance measures how closely checkers follow formal typing rules, with lower conformance forcing developers to work around limitations. However, the article notes conformance has limitations — it doesn’t assess type inference, narrowing behavior, performance, IDE integration, error clarity, or third-party package support. The conclusion recommends considering multiple factors beyond conformance when selecting a type checker, as overall developer experience depends on many dimensions.&lt;/p&gt;
&lt;h3 id=&quot;rewriting-a-20-year-old-python-library&quot;&gt;&lt;a href=&quot;https://www.b-list.org/weblog/2026/mar/23/20-year-library/&quot;&gt;Rewriting a 20-year-old Python library&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The author recounts rewriting &lt;code&gt;akismet&lt;/code&gt;, a 20-year-old Python library for spam filtering originally created by Michael Foord. The rewrite, completed in 2024-2025, separated the library into &lt;code&gt;SyncClient&lt;/code&gt; and &lt;code&gt;AsyncClient&lt;/code&gt; classes to support both synchronous and asynchronous operations, introduced an enum-based response system to handle “blatant” spam detection, and switched from requests to httpx for better async support and testability. The codebase was reorganized into multiple files, added comprehensive type hints, pytest fixtures, and test client variants. The author dedicated the work to Foord, who passed away in 2025, hoping to honor his legacy by ensuring the library remains maintainable for decades to come.&lt;/p&gt;
&lt;h3 id=&quot;replacing-tox-with-uv&quot;&gt;&lt;a href=&quot;https://blog.changs.co.uk/replacing-tox-with-uv.html&quot;&gt;Replacing tox with UV&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This blog post discusses replacing tox with UV for testing Python libraries across multiple Python versions. The author was upgrading libraries to Python 3.10+ and needed to run tests on different Python versions. While tox and nox are common tools for this, UV offers a more convenient single-tool solution.&lt;/p&gt;
&lt;p&gt;Key features of UV for testing include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Using &lt;code&gt;uv run -p 3.10 pytest&lt;/code&gt; to test with specific Python versions&lt;/li&gt;
&lt;li&gt;Specifying extras and dependency groups with &lt;code&gt;--extra&lt;/code&gt; and &lt;code&gt;--group&lt;/code&gt; flags&lt;/li&gt;
&lt;li&gt;Overriding package versions with &lt;code&gt;--with&lt;/code&gt; or &lt;code&gt;-w&lt;/code&gt; options&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;--isolated&lt;/code&gt; to avoid contaminating the development virtual environment&lt;/li&gt;
&lt;li&gt;Running tests in parallel with commands like &lt;code&gt;parallel &quot;uv run -p {} --isolated pytest&quot; ::: 3.{10..14}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The author concludes that while tox remains useful, UV provides a faster, more streamlined approach for debugging version incompatibilities.&lt;/p&gt;
&lt;h3 id=&quot;unit-testing-your-codes-performance-part-2-catching-speed-changes&quot;&gt;&lt;a href=&quot;https://pythonspeed.com/articles/speed-unit-tests/&quot;&gt;Unit testing your code’s performance, part 2: Catching speed changes&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This article presents a technique for using unit tests to detect performance changes in code by measuring CPU instruction counts rather than elapsed time. The method involves using libraries like &lt;code&gt;py-perf-event&lt;/code&gt; or Valgrind’s &lt;code&gt;Cachegrind&lt;/code&gt; to count instructions during test runs. If the instruction count changes beyond a threshold, the test fails, providing early warning to developers before committing changes. The approach requires reducing noise through consistent environments, hash seeds, and disabling ASLR. While not a replacement for benchmarks, these tests offer immediate feedback during development. The technique has caveats: it may not work in virtualized CI, and results vary across hardware, but can help catch accidental performance regressions early.&lt;/p&gt;
&lt;h3 id=&quot;defense-in-depth-a-practical-guide-to-python-supply-chain-security&quot;&gt;&lt;a href=&quot;https://bernat.tech/posts/securing-python-supply-chain/&quot;&gt;Defense in Depth: A Practical Guide to Python Supply Chain Security&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The article offers a practical guide to Python supply chain security, advocating defense in depth. Key strategies: use ruff security linting; pin dependencies with cryptographic hashes via uv; run &lt;code&gt;pip-audit&lt;/code&gt; in CI; generate SBOMs with CycloneDX; adopt Trusted Publishing (OIDC) instead of long-lived tokens; audit GitHub Actions with zizmor; consider delayed ingestion for internal mirrors. It covers threats like dependency confusion, account takeover, and malicious packages, and provides a phased implementation roadmap. The core message: no single control is perfect, so layer multiple defenses.&lt;/p&gt;
&lt;h3 id=&quot;building-shared-coding-guidelines-for-ai-and-people-too&quot;&gt;&lt;a href=&quot;https://stackoverflow.blog/2026/03/26/coding-guidelines-for-ai-agents-and-people-too/&quot;&gt;Building shared coding guidelines for AI (and people too)&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This StackOverflow blog post explains how to create effective coding guidelines for AI coding agents. Unlike human developers who absorb tacit knowledge, AI agents lack contextual understanding and require explicit, unambiguous instructions. Guidelines should cover naming conventions, formatting, error handling, and comments using clear, simple language without idioms. Providing both correct and incorrect code examples, plus a “gold standard” reference file, helps agents learn patterns. Errors should be treated as feedback to iteratively improve guidelines collaboratively with the team. Ultimately, these guidelines should be stored in agent configuration files while still using traditional tools like linters to catch basics.&lt;/p&gt;
&lt;h3 id=&quot;when-ai-writes-the-worlds-software-who-verifies-it&quot;&gt;&lt;a href=&quot;https://leodemoura.github.io/blog/2026/02/28/when-ai-writes-the-worlds-software.html&quot;&gt;When AI Writes the World’s Software, Who Verifies It?&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This post notes AI is already writing a growing share of global software — 25-30% of Google/Microsoft’s new code, plus a 100k-line C compiler in two weeks. It warns unvetted AI code risks widespread security flaws and supply chain attacks, with current poor software quality costing the US $2.4T annually. The solution is formal mathematical proofs, and Lean has emerged as the leading platform to guarantee correct, secure AI-generated code.&lt;/p&gt;
&lt;h3 id=&quot;ai-coding-is-gambling&quot;&gt;&lt;a href=&quot;https://notes.visaint.space/ai-coding-is-gambling/&quot;&gt;AI Coding is Gambling&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;AI coding generates impressive initial results but behaves like gambling — pulling a slot machine hoping for a jackpot. While AI makes codebase changes trivial and reduces cognitive burden, it often produces plausible yet flawed solutions. The process is addictive but lacks the traditional coding rewards: deep thinking, clever problem-solving, and the satisfaction of making things work. AI offloads the mental work that nurtures the soul, transforming coding from creative problem-solving into mindless slot-pulling, leaving developers to merely clean up poorly implemented code rather than genuinely building solutions.&lt;/p&gt;
&lt;h3 id=&quot;is-ai-killing-software-engineering-jobs&quot;&gt;&lt;a href=&quot;https://codemanship.wordpress.com/2026/03/02/is-ai-killing-software-engineering-jobs/&quot;&gt;Is AI Killing Software Engineering Jobs?&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The article argues that AI is not responsible for declining software engineering jobs. The downturn actually began in May 2022, before ChatGPT’s launch, triggered by rising interest rates following pandemic-era cheap money. Hiring has been recovering (~5% growth recently). The apparent job shortage stems from reduced employee churn and fear-driven narratives, not AI replacing engineers. Despite layoffs, the developer population continued growing. Businesses claiming to replace engineers with AI still hire them. The author criticizes fear-mongering “AI thought leaders” and predicts demand will recover as it has after previous bust cycles, addressing the temporary pain of those who lost jobs.&lt;/p&gt;
&lt;h3 id=&quot;reports-of-codes-death-are-greatly-exaggerated&quot;&gt;&lt;a href=&quot;https://stevekrouse.com/precision&quot;&gt;Reports of code’s death are greatly exaggerated&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The article argues against the notion that AI will eliminate coding. The author explains that English specifications feel precise until complexity reveals their vagueness, using examples like collaborative text editors. The solution to managing complexity is abstraction—compressing many details into single concepts. Even with AGI, code will remain essential because human thinking requires precise abstractions to master complexity, similar to how ChatGPT hasn’t replaced novelists. AI will actually enhance coding by helping create better abstractions and higher-quality code, not make it obsolete. The article concludes that code is just getting started, not dying.&lt;/p&gt;
&lt;h3 id=&quot;read-less-steer-more&quot;&gt;&lt;a href=&quot;https://blog.ezyang.com/2026/03/read-less-steer-more/&quot;&gt;Read Less, Steer More&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The blog post argues that with AI coding agents, developers should focus less on reading generated code and more on steering the AI precisely. The author recommends treating AI as a fast typist executing your specifications rather than as an autonomous teammate, demanding justification when something doesn’t make sense. “Vibe coding” is a trap — instead, maintain active involvement to reduce cognitive burden. Beginners should practice without “accept edits” to train intuition, while recognizing that genuine discovery still requires human-speed creation and cannot be rushed. The key mindset shift: don’t accommodate the AI’s output; steer it to match your exact vision.&lt;/p&gt;
&lt;h3 id=&quot;design-me-a-highly-resilient-database&quot;&gt;&lt;a href=&quot;https://nikogura.com/DatabaseDesign.html&quot;&gt;“Design Me a Highly Resilient Database”&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This article argues that there’s no such thing as a “highly resilient database” in the abstract — it always depends on the specific use case. The author recounts failing a job interview by asking clarifying questions about data types, query patterns, and failure modes instead of simply naming a database like “Cassandra”. The piece explains that different databases serve different purposes: PostgreSQL provides ACID compliance essential for financial transactions, Cassandra handles write-heavy workloads with eventual consistency for IoT data, and Redis works best for caching. The author emphasizes that the CAP theorem forces tradeoffs between consistency and availability, and choosing the wrong database — like eventual consistency for ledgers — can lead to audit failures and regulatory issues. The right approach starts with questions, not product names.&lt;/p&gt;
&lt;h2 id=&quot;podcasts&quot;&gt;Podcasts&lt;/h2&gt;
&lt;h3 id=&quot;-realpython-podcast&quot;&gt;🐍 RealPython Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/287/&quot;&gt;Episode 287: Crafting and Editing In-Depth Tutorials at Real Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/288/&quot;&gt;Episode 288: Automate Exploratory Data Analysis &amp;amp; Invent Python Comprehensions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/289/&quot;&gt;Episode 289: Limitations in Human and Automated Code Review&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-python-bytes-podcast&quot;&gt;🥧 Python Bytes Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/471/the-orm-pattern-of-2026/&quot;&gt;#471 The ORM pattern of 2026?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/472/monorepos&quot;&gt;#472 Monorepos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/473/a-clean-room-rewrite/&quot;&gt;#473 A clean room rewrite?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/474/astral-to-join-openai/&quot;&gt;#474 Astral to join OpenAI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/475/haunted-warehouses&quot;&gt;#475 Haunted warehouses&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-talk-python-to-me&quot;&gt;🦜 Talk Python to me&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/538/python-in-digital-humanities&quot;&gt;#538: Python in Digital Humanities&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/539/catching-up-with-the-python-typing-council&quot;&gt;#539: Catching up with the Python Typing Council&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/540/modern-python-monorepo-with-uv-and-prek&quot;&gt;#540: Modern Python monorepo with uv and prek&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/541/monty-python-in-rust-for-ai&quot;&gt;#541: Monty - Python in Rust for AI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/542/zensical-a-modern-static-site-generator&quot;&gt;#542: Zensical - a modern static site generator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-pybites-podcast&quot;&gt;🍕 Pybites Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pybitespodcast.com/1501156/episodes/18764761-218-why-python-developers-are-learning-rust&quot;&gt;#218: Why Python developers are learning Rust&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-vs-code-insiders-podcast&quot;&gt;🚀 VS Code Insiders Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.vscodepodcast.com/20&quot;&gt;Episode 20: Autopilot Mode with Justin Chen&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;repositories&quot;&gt;Repositories&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/agentscope-ai/ReMe&quot;&gt;agentscope-ai/ReMe&lt;/a&gt; (Apache-2.0)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ReMe is a memory management framework designed for AI agents, providing both file-based and vector-based memory systems.&lt;/p&gt;
&lt;p&gt;It tackles two core problems of agent memory: limited context window (early information is truncated or lost in long conversations) and stateless sessions (new sessions cannot inherit history and always start from scratch).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/alibaba/OpenSandbox&quot;&gt;alibaba/OpenSandbox&lt;/a&gt; (Apache-2.0)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;OpenSandbox is a general-purpose sandbox platform for AI applications, offering multi-language SDKs, unified sandbox APIs, and Docker/Kubernetes runtimes for scenarios like Coding Agents, GUI Agents, Agent Evaluation, AI Code Execution, and RL Training.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/NVIDIA/OpenShell&quot;&gt;NVIDIA/OpenShell&lt;/a&gt; (Apache-2.0)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;OpenShell is the safe, private runtime for autonomous AI agents. It provides sandboxed execution environments that protect your data, credentials, and infrastructure — governed by declarative YAML policies that prevent unauthorized file access, data exfiltration, and uncontrolled network activity.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Gen-Verse/OpenClaw-RL&quot;&gt;Gen-Verse/OpenClaw-RL&lt;/a&gt; (Apache-2.0)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;OpenClaw-RL is a fully asynchronous reinforcement learning framework that turns everyday conversations into training signals for personalized AI agents, and supports training general agents with large-scale environment parallelization.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;As we wrap up this journey together, I want to take a moment to express my gratitude for your reading. If you’ve enjoyed what you just read and would like to help sustain this blog, consider &lt;a href=&quot;https://github.com/blueberry-py/blog/stargazers&quot;&gt;starring this blog on github&lt;/a&gt;, it would be great motivation for me to keep updating the blogs!&lt;/p&gt;
&lt;p&gt;Alright, that concludes the March Edition of “This Month for Pythonistas”. Thank you again for reading my post. I hope you enjoy it or find something useful. Happy coding and see you next month! 👋&lt;/p&gt;
</description><pubDate>Tue, 31 Mar 2026 13:00:00 GMT</pubDate><category>python</category><category>python</category><category>news</category><category>podcast</category><category>AI</category><category>GPT</category><category>LLM</category><category>linux</category><author>Zeyang Lin</author></item><item><title>This Month for Pythonistas - February 2026</title><link>https://blueberrypy.netlify.app/post/this-month-for-pythonistas-2026-02/</link><guid isPermaLink="true">https://blueberrypy.netlify.app/post/this-month-for-pythonistas-2026-02/</guid><description>&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; datetime &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; date&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(date.today().year, date.today().month)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 2026 2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img alt=&quot;issue-2026-02&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/splash.Bx5VHkhC_Z1j9LBy.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Welcome back Pythonistas! This is the February 2026 issue of “This Month for Pythonistas”, bringing you curated Python news, tutorials, articles, podcasts and community highlights.&lt;/p&gt;
&lt;p&gt;Before we continue, please note that this blog is synced across the following platforms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberry-py.github.io/blog/post/this-month-for-pythonistas-2026-02/&quot;&gt;Github Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberrypy.netlify.app/post/this-month-for-pythonistas-2026-02/&quot;&gt;Netlify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberrypy.onrender.com/post/this-month-for-pythonistas-2026-02/&quot;&gt;Render&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberrypy-blog.vercel.app/post/this-month-for-pythonistas-2026-02/&quot;&gt;Vercel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ready? Let’s get started!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;events--social&quot;&gt;Events &amp;amp; Social&lt;/h2&gt;
&lt;h3 id=&quot;python-unplugged&quot;&gt;&lt;a href=&quot;https://lp.jetbrains.com/python-unplugged/&quot;&gt;Python Unplugged&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Python Unplugged is a free online conference bringing together the leading voices of the Python community. It would be live on Youtube on 4th of March, 2026 from 11:00 am to 6:30 pm CET.&lt;/p&gt;
&lt;h3 id=&quot;introducing-claude-opus-46&quot;&gt;&lt;a href=&quot;https://www.anthropic.com/news/claude-opus-4-6&quot;&gt;Introducing Claude Opus 4.6&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Anthropic has released &lt;strong&gt;Claude Opus 4.6&lt;/strong&gt;, its “most capable” AI model yet. The new flagship significantly improves coding, planning, and agentic task execution, with enhanced ability to work autonomously on complex, long-running projects. It features a 1M token context window (first for Opus-class) and achieves state-of-the-art results on key benchmarks including Terminal-Bench 2.0, Humanity’s Last Exam, and GDPval-AA, outperforming competitors by wide margins. Despite intelligence gains, Opus 4.6 maintains excellent safety with low misaligned behavior and minimal over-refusals. The model is available now on claude.ai, the API, and major cloud platforms with new developer features including adaptive thinking, effort controls, and context compaction.&lt;/p&gt;
&lt;h3 id=&quot;introducing-gpt-53-codex&quot;&gt;&lt;a href=&quot;https://openai.com/index/introducing-gpt-5-3-codex/&quot;&gt;Introducing GPT-5.3-Codex&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;OpenAI has launched &lt;strong&gt;GPT-5.3-Codex&lt;/strong&gt;, a highly capable agentic coding model that is 25% faster and sets new industry records on coding benchmarks like SWE-Bench Pro (56.8%) and Terminal-Bench 2.0 (77.3%). It can build complex games and handle professional tasks beyond coding, including data analysis and presentations. Notably, this model helped accelerate its own development. GPT-5.3-Codex offers real-time interactive steering, strong cybersecurity capabilities classified as “High capability,” and is available through paid ChatGPT plans and API access.&lt;/p&gt;
&lt;h3 id=&quot;glm-5-from-vibe-coding-to-agentic-engineering&quot;&gt;&lt;a href=&quot;https://z.ai/blog/glm-5&quot;&gt;GLM-5: From Vibe Coding to Agentic Engineering&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;GLM-5 is Z.ai’s latest model targeting complex systems engineering and long-horizon agentic tasks. It scales up to 744B parameters (40B active) with 28.5T tokens of training data, integrating &lt;em&gt;DeepSeek Sparse Attention&lt;/em&gt; for efficiency. A novel asynchronous RL infrastructure called “slime” improves training. GLM-5 achieves best-in-class performance among open-source models on reasoning, coding, and agent benchmarks, ranking #1 on Vending Bench 2 with a $4,432 final balance. It’s open-sourced under MIT license, available via API, and supports local deployment with compatibility for Claude Code and OpenClaw.&lt;/p&gt;
&lt;h3 id=&quot;minimax-m25-built-for-real-world-productivity&quot;&gt;&lt;a href=&quot;https://www.minimax.io/news/minimax-m25&quot;&gt;MiniMax M2.5: Built for Real-World Productivity.&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;MiniMax introduces M2.5, a new AI model extensively trained with reinforcement learning in complex real-world environments. It achieves state-of-the-art performance in coding (80.2% SWE-Bench Verified), tool use, search (76.3% BrowseComp), and office work. M2.5 completes tasks 37% faster than its predecessor M2.1, matching Claude Opus 4.6’s speed while costing only 10% as much. At $1 per hour (100 tokens/sec) or $0.30 (50 tokens/sec), it offers extremely cost-effective AI for productivity applications.&lt;/p&gt;
&lt;h3 id=&quot;nano-banana-2-combining-pro-capabilities-with-lightning-fast-speed&quot;&gt;&lt;a href=&quot;https://blog.google/innovation-and-ai/technology/ai/nano-banana-2/&quot;&gt;Nano Banana 2: Combining Pro capabilities with lightning-fast speed&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Google DeepMind has launched Nano Banana 2, a new AI image generation model that combines the advanced capabilities of Nano Banana Pro with the speed of Gemini Flash. The model offers enhanced features including advanced world knowledge with real-time information, subject consistency for up to five characters and 14 objects, precise instruction following, production-ready specs (512px to 4K), and improved visual fidelity.&lt;/p&gt;
&lt;h3 id=&quot;hello-entire-world&quot;&gt;&lt;a href=&quot;https://entire.io/blog/hello-entire-world/&quot;&gt;Hello Entire World&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Entire&lt;/strong&gt;, a new company backed by a $60 million seed round, aiming to create the world’s next developer platform for AI‑driven coding agents. Their first product, the &lt;strong&gt;Entire CLI&lt;/strong&gt;, introduces “Checkpoints” – a Git‑compatible primitive that automatically records an agent’s full context (prompts, transcripts, token usage, tool calls, etc.) with each commit, storing it on a dedicated branch. This makes AI‑generated code traceable, easier to review, and reusable across sessions, while reducing token waste and supporting multiple agents. The CLI is open‑source, supports Claude Code and Gemini now, and will expand to other models. The vision is an AI‑native, open, and scalable software‑development lifecycle.&lt;/p&gt;
&lt;h2 id=&quot;new-versions&quot;&gt;New Versions&lt;/h2&gt;
&lt;h3 id=&quot;python-3150-alpha-6&quot;&gt;Python 3.15.0 alpha 6&lt;/h3&gt;
&lt;p&gt;This &lt;a href=&quot;https://www.python.org/downloads/release/python-3150a6/&quot;&gt;sixth alpha build&lt;/a&gt; of 3.15 arrives in the middle of February.&lt;/p&gt;
&lt;p&gt;Additionally, &lt;em&gt;Python 3.14.3&lt;/em&gt; and &lt;em&gt;3.13.12&lt;/em&gt; (both being bugfix releases) are also available.&lt;/p&gt;
&lt;h3 id=&quot;transformers-5&quot;&gt;transformers 5&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Transformers v5&lt;/strong&gt; was released as a major upgrade, with support for over 400 model architectures (up from ~40 in v4) and 750,000+ model checkpoints. Key improvements include 20-30% faster inference, a new modular architecture that simplifies adding models, streamlined tokenizers and image processors, and native quantization support. It also introduces a built-in HTTP server (&lt;code&gt;transformers serve&lt;/code&gt;) for easy deployment. The library now integrates tightly with popular inference engines like vLLM and SGLang, and supports GGUF files for local execution. Existing v4 checkpoints remain compatible, though PyTorch-only support means Flax/TensorFlow have been deprecated.&lt;/p&gt;
&lt;h3 id=&quot;isort-8&quot;&gt;isort 8&lt;/h3&gt;
&lt;p&gt;isort 8 drops support of Python 3.9, and fixes a number of issues.&lt;/p&gt;
&lt;h2 id=&quot;tutorials&quot;&gt;Tutorials&lt;/h2&gt;
&lt;h3 id=&quot;deeplearningais-agent-skills-with-anthropic-by-anthropic&quot;&gt;Deeplearning.ai’s &lt;a href=&quot;https://www.deeplearning.ai/short-courses/agent-skills-with-anthropic/&quot;&gt;Agent Skills with Anthropic&lt;/a&gt; by Anthropic&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;In this course, you’ll learn how skills work, explore best practices for creating them, and build skills for different use cases. You’ll see skills in action across Claude.ai, Claude Code, the Claude API, and the Claude Agent SDK, and learn how to combine them with MCP and subagents for complex workflows.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;deeplearningais-a2a-the-agent2agent-protocol-by-google-cloud-and-ibm&quot;&gt;Deeplearning.ai’s &lt;a href=&quot;https://www.deeplearning.ai/short-courses/a2a-the-agent2agent-protocol/&quot;&gt;A2A: The Agent2Agent Protocol&lt;/a&gt; by Google Cloud and IBM&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;In this course, you’ll build a healthcare multi-agent system with three specialized agents using different frameworks. You’ll wrap each agent in an A2A server, build A2A clients to communicate with them, and orchestrate them into sequential and hierarchical workflows. You’ll see how A2A complements MCP: while MCP connects agents to external data systems, A2A enables agents to collaborate with each other.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;articles&quot;&gt;Articles&lt;/h2&gt;
&lt;h3 id=&quot;pep-814--add-frozendict-built-in-type&quot;&gt;&lt;a href=&quot;https://peps.python.org/pep-0814/&quot;&gt;PEP 814 – Add frozendict built-in type&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;PEP 814 is &lt;strong&gt;accepted&lt;/strong&gt;. This PEP proposes adding an immutable &lt;code&gt;frozendict&lt;/code&gt; built-in type to Python 3.15. It implements the Mapping protocol, preserves insertion order, and is hashable when all keys/values are hashable. Unlike &lt;code&gt;MappingProxyType&lt;/code&gt;, it’s truly immutable and hashable, making it safe for use with &lt;code&gt;@functools.lru_cache()&lt;/code&gt; and as dictionary keys. It supports union operators (|, |=) and can replace mutable dicts in stdlib constants for safety. Unlike &lt;code&gt;collections.frozenmap&lt;/code&gt;, frozendict maintains insertion order and provides O(1) lookups. The implementation shares code with dict but is not a subclass to prevent mutation via dict methods.&lt;/p&gt;
&lt;h3 id=&quot;from-python-33-to-today-ending-15-years-of-subprocess-polling&quot;&gt;&lt;a href=&quot;https://gmpy.dev/blog/2026/event-driven-process-waiting&quot;&gt;From Python 3.3 to today: ending 15 years of subprocess polling&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;For 15 years, Python’s &lt;code&gt;subprocess&lt;/code&gt; module and &lt;code&gt;psutil&lt;/code&gt; used busy-loop polling to wait for processes, causing unnecessary CPU usage and latency. The author replaced this with event-driven approaches: using &lt;code&gt;pidfd_open()&lt;/code&gt; with &lt;code&gt;poll()&lt;/code&gt; on Linux (kernel 5.3+), &lt;code&gt;kqueue()&lt;/code&gt; on BSD/macOS, and existing mechanisms on Windows. This eliminates busy-looping - the process blocks until the kernel signals process termination or timeout. Measurements show dramatic reduction in CPU context switches (from 258+ to just 2). The improvement first landed in &lt;code&gt;psutil&lt;/code&gt; and was contributed upstream to CPython.&lt;/p&gt;
&lt;h3 id=&quot;speeding-up-pillows-open-and-save&quot;&gt;&lt;a href=&quot;https://hugovk.dev/blog/2026/faster-pillow/&quot;&gt;Speeding up Pillow’s open and save&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This blog post by Hugo van Kemenade details performance improvements to Pillow’s image open/save operations using Python 3.15’s &lt;em&gt;Tachyon&lt;/em&gt; profiler. Previously, Pillow would import many image format plugins unnecessarily even when only one format was needed. A new file extension-to-plugin mapping enables lazy loading, only importing relevant plugins. Results: PNG opening 2.6x faster, WebP opening 14x faster, PNG saving 2.2x faster, and WebP saving 7.9x faster. These optimizations will be included in Pillow 12.2.0, making image processing more efficient especially for command-line tools.&lt;/p&gt;
&lt;h3 id=&quot;is-it-a-class-or-a-function&quot;&gt;&lt;a href=&quot;https://www.pythonmorsels.com/class-or-function/&quot;&gt;Is it a class or a function?&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The article explains that in Python both classes and functions are &lt;em&gt;callables&lt;/em&gt; — they’re invoked with parentheses and may return a value. Examples: &lt;code&gt;print&lt;/code&gt; and &lt;code&gt;sum&lt;/code&gt; are built‑in functions; &lt;code&gt;str&lt;/code&gt;, &lt;code&gt;list&lt;/code&gt;, &lt;code&gt;bool&lt;/code&gt;, &lt;code&gt;enumerate&lt;/code&gt;, and &lt;code&gt;type&lt;/code&gt; are classes that behave like functions, returning new objects when called. Because the user‑facing syntax is the same, Python programmers often call any callable a “function” even when it’s technically a class. This fuzzy terminology fits Python’s duck‑typing philosophy: what matters is the object’s behavior (being callable), not its exact implementation.&lt;/p&gt;
&lt;h3 id=&quot;anatomy-of-a-python-function&quot;&gt;&lt;a href=&quot;https://www.mostlypython.com/anatomy-of-a-python-function/&quot;&gt;Anatomy of a Python Function&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The article explains the terminology for a Python function’s parts. The &lt;strong&gt;function body&lt;/strong&gt; is everything indented after the definition. The &lt;strong&gt;function definition&lt;/strong&gt; runs from &lt;code&gt;def&lt;/code&gt; to the end of the body, though many think it ends at the colon. The first line (from &lt;code&gt;def&lt;/code&gt; to the colon) is called the &lt;strong&gt;function header&lt;/strong&gt; by the author; others may call it a &lt;strong&gt;declaration&lt;/strong&gt;, but not a &lt;strong&gt;signature&lt;/strong&gt;. A &lt;strong&gt;signature&lt;/strong&gt; consists only of the parameter list and return annotation, as defined by PEP 362. Clear naming matters for type‑checking and communication.&lt;/p&gt;
&lt;h3 id=&quot;switch-case-in-python-its-not-match-case&quot;&gt;&lt;a href=&quot;https://www.pythonmorsels.com/switch-case-in-python/&quot;&gt;switch-case in Python? It’s not match-case!&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Python lacks a traditional switch-case statement, though it has &lt;code&gt;match-case&lt;/code&gt; from Python 3.10. However, &lt;code&gt;match-case&lt;/code&gt; is designed for structural pattern-matching (matching iterables, dictionaries, objects, and nested patterns), not simple value-based switching. For basic switch-case needs, &lt;code&gt;if-elif&lt;/code&gt; chains are more readable and require less indentation. When mapping input values to outputs, dictionaries are typically the best alternative. The article advises using &lt;code&gt;match-case&lt;/code&gt; only for advanced pattern-matching scenarios, not as a direct replacement for switch statements found in other languages. Most Python programmers are unfamiliar with &lt;code&gt;match-case&lt;/code&gt;, so simpler constructs are usually preferable.&lt;/p&gt;
&lt;h3 id=&quot;making-pyrefly-diagnostics-18x-faster&quot;&gt;&lt;a href=&quot;https://pyrefly.org/blog/2026/02/06/performance-improvements/&quot;&gt;Making Pyrefly Diagnostics 18x Faster&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Pyrefly achieved an 18x performance improvement in diagnostic updates through two key optimizations. The first was implementing fine-grained dependency tracking, which reduces module invalidation from 2000+ to just 100+ by tracking exactly which types are used rather than all imports. The second was streaming diagnostics directly to the IDE as files are rechecked, rather than waiting for the entire recheck process to complete. These changes reduce diagnostic update time from ~3.6 seconds to under 200ms on an M4 Macbook Pro, making type errors refresh instantly after saving a file. The team continues prioritizing speed, memory efficiency, and functionality as they approach the v1 release.&lt;/p&gt;
&lt;h3 id=&quot;better-python-tests-with-inline-snapshot&quot;&gt;&lt;a href=&quot;https://pydantic.dev/articles/inline-snapshot&quot;&gt;Better Python tests with &lt;code&gt;inline-snapshot&lt;/code&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The article introduces &lt;code&gt;inline-snapshot&lt;/code&gt;, a Python testing library that automatically manages test data. Instead of manually writing assertions for complex data structures, developers use &lt;code&gt;snapshot()&lt;/code&gt; placeholders that get auto-populated when running &lt;code&gt;pytest --inline-snapshot=fix&lt;/code&gt;. This eliminates tedious maintenance when data changes. The library pairs well with &lt;code&gt;dirty-equals&lt;/code&gt; to handle dynamic fields like timestamps via &lt;code&gt;IsInt()&lt;/code&gt; and &lt;code&gt;IsNow()&lt;/code&gt;. Snapshots can even be nested within complex structures. The underlying &lt;code&gt;executing&lt;/code&gt; library enables automatic source code updates by inspecting Python AST.&lt;/p&gt;
&lt;h3 id=&quot;django-profile-memory-usage-with-memray&quot;&gt;&lt;a href=&quot;https://adamj.eu/tech/2026/01/29/django-profile-memray/&quot;&gt;Django: profile memory usage with &lt;code&gt;Memray&lt;/code&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This blog post explains how to profile and reduce memory usage in Django projects using &lt;code&gt;Memray&lt;/code&gt;, a memory profiler from Bloomberg. The author demonstrates profiling the Django “check” command, generating flame graphs to visualize allocations, and identifying that importing &lt;code&gt;numpy.random&lt;/code&gt; consumed 5.7MB (23% of peak 25.2MB). By replacing &lt;code&gt;numpy.random&lt;/code&gt; with Python’s built-in &lt;code&gt;random.shuffle()&lt;/code&gt;, memory usage dropped 22% to 19.4MB. The post also offers solutions like deferred imports, lazy imports (upcoming in Python 3.15), and provides a Zsh one-liner for faster iteration. The key takeaway: Memray helps pinpoint and eliminate unnecessary memory bloat in Django applications.&lt;/p&gt;
&lt;h3 id=&quot;implementing-local-first-agentic-ai-a-practical-guide&quot;&gt;&lt;a href=&quot;https://blog.logrocket.com/local-first-agentic-ai-guide/&quot;&gt;Implementing local-first agentic AI: A practical guide&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This article provides a practical guide for implementing local-first agentic AI using Small Language Models (SLMs) in privacy-sensitive environments. It presents an enterprise use case: an HR triage system that processes sensitive employee reports. The system uses a three-stage pipeline: intent detection (classifying issues like harassment or burnout), planning (creating remediation steps), and tool execution (performing actions like opening HR cases). Key models include &lt;code&gt;sentence-transformers/all-MiniLM-L6-v2&lt;/code&gt; (~90M), &lt;code&gt;Phi-3-mini&lt;/code&gt; (~3.8B), and &lt;code&gt;Function Gemma&lt;/code&gt; (~2B). The “Local First, Cloud Last” architecture runs on modest hardware without GPUs, offering privacy, cost efficiency, and auditability while avoiding cloud latency and compliance risks. SLMs require precise prompt engineering but enable easy local testing without paid tokens, making them ideal for enterprise workloads with strict data locality constraints.&lt;/p&gt;
&lt;h3 id=&quot;agent-trace-capturing-the-context-graph-of-code&quot;&gt;&lt;a href=&quot;https://cognition.ai/blog/agent-trace&quot;&gt;Agent Trace: Capturing the Context Graph of Code&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://agent-trace.dev/&quot;&gt;&lt;strong&gt;Agent Trace&lt;/strong&gt;&lt;/a&gt; is an open, vendor-neutral specification for recording AI contributions alongside human authorship in version-controlled codebases. It solves the modern problem of context loss by linking each code change to its originating conversation and context, rather than just storing line differences like traditional git. This enables powerful engineering management tools (blaming AI vs humans, PR breakdowns, dashboards) and significantly improves AI agent performance by making context retrievable, reducing wasted inference time. The spec represents a shift where context—not lines of code—becomes the precious resource in the AI era.&lt;/p&gt;
&lt;h2 id=&quot;podcasts&quot;&gt;Podcasts&lt;/h2&gt;
&lt;h3 id=&quot;-realpython-podcast&quot;&gt;🐍 RealPython Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/283/&quot;&gt;Episode 283: Improving Your GitHub Developer Experience&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/284/&quot;&gt;Episode 284: Running Local LLMs With Ollama and Connecting With Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/285/&quot;&gt;Episode 285: Exploring MCP Apps &amp;amp; Adding Interactive UIs to Clients&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/286/&quot;&gt;Episode 286: Overcoming Testing Obstacles With Python’s Mock Object Library&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-python-bytes-podcast&quot;&gt;🥧 Python Bytes Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/468/a-bolt-of-django&quot;&gt;#468 A bolt of Django&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/469/commands-out-of-the-terminal&quot;&gt;#469 Commands, out of the terminal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/470/a-jolting-episode&quot;&gt;#470 A Jolting Episode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-talk-python-to-me&quot;&gt;🦜 Talk Python to me&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/536/fly-inside-fastapi-cloud&quot;&gt;#536: Fly inside FastAPI Cloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/537/datastar-modern-web-dev-simplified&quot;&gt;#537: Datastar: Modern web dev, simplified&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-pybites-podcast&quot;&gt;🍕 Pybites Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pybitespodcast.com/1501156/episodes/18609456-214-building-useful-ai-from-classroom-to-real-business-impact&quot;&gt;#214: Building useful AI - from classroom to real business impact&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pybitespodcast.com/1501156/episodes/18654038-215-arthur-pastel-on-creating-actionable-optimisations-with-codspeed&quot;&gt;#215: Arthur Pastel on creating actionable optimisations with CodSpeed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pybitespodcast.com/1501156/episodes/18691634-216-resolving-our-own-git-mess&quot;&gt;#216: Resolving our own git mess&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pybitespodcast.com/1501156/episodes/18698592-217-revisiting-quiet-links-with-tim-gallati&quot;&gt;#217: Revisiting Quiet Links with Tim Gallati&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;vs-code-insiders-podcast&quot;&gt;VS Code Insiders Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.vscodepodcast.com/19&quot;&gt;Episode 19: Subagents: Parallel Execution and Context Isolation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;repositories&quot;&gt;Repositories&lt;/h2&gt;
&lt;h3 id=&quot;volcengineopenviking-apache-20&quot;&gt;&lt;a href=&quot;https://github.com/volcengine/OpenViking&quot;&gt;volcengine/OpenViking&lt;/a&gt; (Apache 2.0)&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://openviking.ai/&quot;&gt;OpenViking&lt;/a&gt; is a context database designed specifically for AI Agents which unifies the management of context (memory, resources, and skills) that Agents need through a file system paradigm, enabling hierarchical context delivery and self-evolving.&lt;/p&gt;
&lt;h3 id=&quot;nevamind-aimemu-apache-20&quot;&gt;&lt;a href=&quot;https://github.com/NevaMind-AI/memU&quot;&gt;NevaMind-AI/memU&lt;/a&gt; (Apache 2.0)&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;memU&lt;/code&gt; is a memory framework built for 24/7 proactive agents. It is designed for long-running use and greatly reduces the LLM token cost of keeping agents always online, making always-on, evolving agents practical in production systems. memU continuously captures and understands user intent. Even without a command, the agent can tell what you are about to do and act on it by itself.&lt;/p&gt;
&lt;h2 id=&quot;have-time-for-some-fun&quot;&gt;Have time for some fun?&lt;/h2&gt;
&lt;h3 id=&quot;kena-scars-of-kosmora-is-announced-during-state-of-play&quot;&gt;Kena: Scars of Kosmora is announced during &lt;em&gt;State of Play&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.playstation.com/tachyon/2026/02/dc57cf4a6e860a184aab3403caed4b1002316736.png?resize=1088%2C612&amp;amp;crop_strategy=smart&amp;amp;zoom=1&quot; alt=&quot;Kena: Scars of Kosmora&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.playstation.com/2026/02/12/kena-scars-of-kosmora-announced-for-ps5-and-pc-out-2026/&quot;&gt;Kena: Scars of Kosmora&lt;/a&gt;, the second chapter of Kena’s adventure, brings our Spirit Guide to the mysterious realm of Kosmora, an island “full of buried secrets from a tragic past”. You can watch the announcement trailer &lt;a href=&quot;https://www.youtube.com/watch?v=12EQpTwn4lY&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It is expected to launch on PlayStation 5 and PC later this year.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;As we wrap up this journey together, I want to take a moment to express my gratitude for your reading. If you’ve enjoyed what you just read and would like to help sustain this blog, consider &lt;a href=&quot;https://github.com/blueberry-py/blog/stargazers&quot;&gt;starring this blog on github&lt;/a&gt;, it would be great motivation for me to keep updating the blogs!&lt;/p&gt;
&lt;p&gt;Alright, that concludes the February Edition of “This Month for Pythonistas”. Thank you again for reading my post. I hope you enjoy it or find something useful. Happy coding and see you in March! 👋&lt;/p&gt;
</description><pubDate>Sat, 28 Feb 2026 13:00:00 GMT</pubDate><category>python</category><category>python</category><category>news</category><category>podcast</category><category>llm</category><category>linux</category><author>Zeyang Lin</author></item><item><title>This Month for Pythonistas - January 2026</title><link>https://blueberrypy.netlify.app/post/this-month-for-pythonistas-2026-01/</link><guid isPermaLink="true">https://blueberrypy.netlify.app/post/this-month-for-pythonistas-2026-01/</guid><description>&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; datetime &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; date&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(date.today().year, date.today().month)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 2026 1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img alt=&quot;issue-2026-01&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/splash.DGhLuMvf_Z1AuGkc.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Welcome back Pythonistas and Happy New Year 🎉! This is the first issue of 2026, and I’m excited to kick off another year of “This Month for Pythonistas” with curated Python news, tutorials, articles, podcasts and community highlights. And as a “special” issue it would cover also retrospectives of 2025 and expectations for 2026.&lt;/p&gt;
&lt;p&gt;Before we continue, please note that this blog is synced across the following platforms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberry-py.github.io/blog/post/this-month-for-pythonistas-2026-01/&quot;&gt;Github Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberrypy.netlify.app/post/this-month-for-pythonistas-2026-01/&quot;&gt;Netlify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberrypy.onrender.com/post/this-month-for-pythonistas-2026-01/&quot;&gt;Render&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberrypy-blog.vercel.app/post/this-month-for-pythonistas-2026-01/&quot;&gt;Vercel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ready? Let’s get started!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;events--social&quot;&gt;Events &amp;amp; Social&lt;/h2&gt;
&lt;h3 id=&quot;europython-2026-location-revealed&quot;&gt;EuroPython 2026 Location Revealed&lt;/h3&gt;
&lt;p&gt;EuroPython 2026 will take place in Kraków, Poland from 13th to 19th July, 2026. The CFP (Call for Proposals) is open now until 15th of February. This is also the 25th anniversary of EuroPython. Learn more &lt;a href=&quot;https://ep2026.europython.eu/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;anthropic-invests-15-million-in-the-python-software-foundation-and-open-source-security&quot;&gt;&lt;a href=&quot;https://pyfound.blogspot.com/2025/12/anthropic-invests-in-python.html&quot;&gt;Anthropic invests $1.5 million in the Python Software Foundation and open source security&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Anthropic invests $1.5M over two years in the Python Software Foundation (PSF). Funds will enhance Python ecosystem security (e.g., automated PyPI package reviews to ward off supply-chain attacks) and sustain the PSF’s core work supporting CPython, its global community and infrastructure.&lt;/p&gt;
&lt;h3 id=&quot;2026-python-developers-survey&quot;&gt;&lt;a href=&quot;https://surveys.jetbrains.com/s3/python-developers-survey-2026&quot;&gt;2026 Python Developers Survey&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This is the nineth official Developer Survey by PSF, in partnership with JetBrains. Completing the survey contributes to understanding the state of Python development and the Python community.&lt;/p&gt;
&lt;h3 id=&quot;pep-686---make-utf-8-mode-default&quot;&gt;&lt;a href=&quot;https://peps.python.org/pep-0686/&quot;&gt;PEP 686 - Make UTF-8 mode default&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;PEP 686 is &lt;em&gt;Final&lt;/em&gt;. Starting from Python 3.15, Python will use UTF-8 mode by default in text encoding. This change represents a significant step toward modernizing Python’s text handling while maintaining backward compatibility through opt-out mechanisms and warnings.&lt;/p&gt;
&lt;h2 id=&quot;new-versions&quot;&gt;New Versions&lt;/h2&gt;
&lt;h3 id=&quot;python-3150-alpha-5&quot;&gt;Python 3.15.0 alpha 5&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://devguide.python.org/_static/release-cycle.svg&quot; alt=&quot;python-release-cycle&quot;&gt;&lt;/p&gt;
&lt;p&gt;Here comes the &lt;a href=&quot;https://www.python.org/downloads/release/python-3150a5/&quot;&gt;fifth&lt;/a&gt; of &lt;del&gt;seven&lt;/del&gt; eight planned alpha releases of Python 3.15, just a couple of days after alpha 4 was released.&lt;/p&gt;
&lt;h3 id=&quot;pandas-300&quot;&gt;Pandas 3.0.0&lt;/h3&gt;
&lt;p&gt;Pandas 3.0.0 is the long-awaited major release which brings significant improvements to pandas, but also features some potentially breaking changes. The release notes can be found &lt;a href=&quot;https://pandas.pydata.org/docs/whatsnew/v3.0.0.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;fastmcp-300-beta-1&quot;&gt;FastMCP 3.0.0 beta 1&lt;/h3&gt;
&lt;p&gt;FastMCP 3.0 introduces a redesigned framework for building Model Context Protocol servers. Built around three primitives — Components, Providers, and Transforms — it transforms from simple tool servers into dynamic “Context Applications” that intelligently manage information for AI agents. Read more at &lt;a href=&quot;https://www.jlowin.dev/blog/fastmcp-3-whats-new&quot;&gt;What’s New in FastMCP 3.0&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;tutorials&quot;&gt;Tutorials&lt;/h2&gt;
&lt;h3 id=&quot;deeplearningais-document-ai-from-ocr-to-agentic-doc-extraction-from-landingai&quot;&gt;Deeplearning.ai’s &lt;a href=&quot;https://www.deeplearning.ai/short-courses/document-ai-from-ocr-to-agentic-doc-extraction/&quot;&gt;Document AI: From OCR to Agentic Doc Extraction&lt;/a&gt; from LandingAI&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;This course shows you how to build agentic workflows that process documents the way humans do: breaking them into parts, examining each piece carefully, and extracting information through multiple iterations.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;deeplearningais-gemini-cli-code--create-with-an-open-source-agent-from-google&quot;&gt;Deeplearning.ai’s &lt;a href=&quot;https://www.deeplearning.ai/short-courses/gemini-cli-code-and-create-with-an-open-source-agent/&quot;&gt;Gemini CLI: Code &amp;amp; Create with an Open-Source Agent&lt;/a&gt; from Google&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;In this course, you’ll apply Gemini CLI to software development and creative tasks by building features for an AI conference. You’ll develop a website session catalog, create a data dashboard combining local and cloud data sources, and generate social media content from recordings. You’ll master context management, integrate MCP servers, and orchestrate across multiple services with Gemini CLI extensions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;realpythons-how-to-build-a-personal-python-learning-roadmap&quot;&gt;RealPython’s &lt;a href=&quot;https://realpython.com/build-python-learning-roadmap/&quot;&gt;How to Build a Personal Python Learning Roadmap&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;This tutorial will help you craft a personal Python learning roadmap so you can track your progress and stay accountable to your goals and timeline.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;articles&quot;&gt;Articles&lt;/h2&gt;
&lt;h3 id=&quot;python-numbers-every-programmer-should-know&quot;&gt;&lt;a href=&quot;https://mkennedy.codes/posts/python-numbers-every-programmer-should-know/&quot;&gt;Python Numbers Every Programmer Should Know&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This article from Michael Kennedy outlines key Python performance and memory metrics for developers. Latency benchmarks include fast attribute reads (14 ns), dict lookups (22 ns), and FastAPI’s quick JSON responses (8.63 µs). Memory usage notes are striking: small ints/floats take 28/24 bytes, empty Python processes use ~15.7 MB, and slots-class instances (5 attributes) consume 212 bytes (vs 694 bytes for regular classes). Other stats highlight list append speed (28.7 ns) and SQLite query efficiency. These numbers aid in optimizing performance-sensitive algorithms.&lt;/p&gt;
&lt;h3 id=&quot;recent-optimizations-in-pythons-reference-counting&quot;&gt;&lt;a href=&quot;https://rushter.com/blog/python-refcount/&quot;&gt;Recent optimizations in Python’s Reference Counting&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The article discusses Python 3.14+ optimizations for reference counting in CPython. It introduces a new bytecode instruction &lt;code&gt;LOAD_FAST_BORROW&lt;/code&gt; that avoids incrementing reference counts when loading local variables in hot loops, reducing memory management overhead. This optimization uses static lifetime analysis to ensure safety - borrowed references must be consumed within one code block, used for simple operations, and the source value can’t change during execution. The optimization is similar to Rust’s lifetime analysis and immutable borrowing concept. Additionally, there are ongoing efforts to eliminate redundant reference counting in JIT compiled code, though this is experimental and disabled by default.&lt;/p&gt;
&lt;h3 id=&quot;the-hidden-cost-of-python-dictionaries-and-3-safer-alternatives&quot;&gt;&lt;a href=&quot;https://codecut.ai/hidden-cost-python-dictionaries-safer-alternatives/&quot;&gt;The Hidden Cost of Python Dictionaries (And 3 Safer Alternatives)&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This article explains the hidden dangers of Python dictionaries: typos in keys cause silent bugs, and type errors lead to data corruption. It presents three safer alternatives with increasing protection:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;NamedTuple&lt;/strong&gt; – Fixed structure with IDE autocomplete; immutable&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;dataclass&lt;/strong&gt; – Mutable fields, safe defaults, custom validation via &lt;code&gt;__post_init__&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pydantic&lt;/strong&gt; – Runtime type enforcement, automatic type coercion, built-in constraints&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The author recommends using dicts for quick prototyping and Pydantic for production code where safety matters.&lt;/p&gt;
&lt;h3 id=&quot;implicit-string-concatenation&quot;&gt;&lt;a href=&quot;https://www.pythonmorsels.com/implicit-string-concatenation/&quot;&gt;Implicit string concatenation&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Python automatically concatenates string literals placed next to each other without any operator - called “implicit string concatenation”. This feature is mainly used for breaking long strings across multiple lines using parentheses for implicit line continuation. However, it can cause bugs when commas are accidentally omitted in lists or function calls. The article recommends avoiding this feature in favor of explicit concatenation with &lt;code&gt;+&lt;/code&gt; or using multiline strings with &lt;code&gt;textwrap.dedent()&lt;/code&gt;, and suggests using linters to prevent accidental usage.&lt;/p&gt;
&lt;h3 id=&quot;what-async-really-means-for-your-python-web-app&quot;&gt;&lt;a href=&quot;https://hackeryarn.com/post/async-python-benchmarks/&quot;&gt;What async really means for your python web app?&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Python async web benchmarks reveal surprising results: synchronous Django with database connection pooling consistently outperforms async alternatives. Testing static content, database reads, and contentious writes shows that FastAPI excels only when it’s the sole bottleneck. For typical web services that directly access databases, the database — not the web service — is usually the bottleneck. Async Django shows 10x slower performance than sync Django for static content, while database pooling eliminates sync latency issues without code changes. The article concludes that for most services directly connecting to databases, optimized sync configurations deliver better performance than async alternatives.&lt;/p&gt;
&lt;h3 id=&quot;asyncio-is-neither-fast-nor-slow&quot;&gt;&lt;a href=&quot;https://blog.changs.co.uk/asyncio-is-neither-fast-nor-slow.html&quot;&gt;Asyncio is neither fast nor slow&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This article critiques misleading benchmarks comparing Python’s async vs sync web frameworks. The author discovered that performance discrepancies often stem from implementation bugs (like SQLAlchemy fetching all results) rather than &lt;code&gt;asyncio&lt;/code&gt; itself. After proper configuration, async and sync perform similarly.&lt;/p&gt;
&lt;p&gt;The key takeaway: &lt;code&gt;asyncio&lt;/code&gt;’s advantage isn’t speed but resource efficiency — achieving comparable performance without extra threads/processes. The author advises against taking benchmarks at face value and encourages testing for your specific requirements. Performance depends more on implementation details and connection pools than the async/sync paradigm itself.&lt;/p&gt;
&lt;h3 id=&quot;how-to-type-hint-a-decorator-in-python&quot;&gt;&lt;a href=&quot;https://www.blog.pythonlibrary.org/2026/01/14/how-to-type-hint-a-decorator-in-python/&quot;&gt;How to Type Hint a Decorator in Python&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This article explains how to properly type hint Python decorators. Using &lt;code&gt;TypeVar&lt;/code&gt; causes mypy errors. Instead, use &lt;code&gt;ParamSpec&lt;/code&gt; with &lt;code&gt;TypeVar&lt;/code&gt; to capture generic parameter and return types. For Python 3.12+, &lt;strong&gt;PEP 695&lt;/strong&gt; offers simplified syntax using square brackets (e.g., &lt;code&gt;def info[**P, R]&lt;/code&gt;) to implicitly declare &lt;code&gt;ParameterSpec&lt;/code&gt;. Both approaches maintain type safety for decorated functions while preserving their original signatures.&lt;/p&gt;
&lt;h3 id=&quot;static-protocols-in-python-behaviour-over-inheritance&quot;&gt;&lt;a href=&quot;https://patrickm.de/static-protocols-in-python/&quot;&gt;Static Protocols in Python: Behaviour Over Inheritance&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This article explains static protocols in Python - a way to check object behavior rather than inheritance. Protocols enable structural typing where objects are validated by having required methods/attributes, not by class hierarchy. The author contrasts this with traditional “goose typing” using &lt;code&gt;isinstance()&lt;/code&gt;, showing how protocols reduce coupling and enable static type checking. A real-world ML example demonstrates using a Predictable protocol for models with predict_top_k methods. Static protocols (Python 3.8+) provide type safety while maintaining flexibility, allowing different coding styles to work together without complex inheritance trees. They catch errors at development time rather than runtime.&lt;/p&gt;
&lt;h3 id=&quot;unit-testing-your-codes-performance-part-1-big-o-scaling&quot;&gt;&lt;a href=&quot;https://pythonspeed.com/articles/big-o-tests/&quot;&gt;Unit testing your code’s performance, part 1: Big-O scaling&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This article explains how to unit test your Python code’s performance by testing Big-O scalability. It introduces the &lt;code&gt;bigO&lt;/code&gt; library to empirically determine and test algorithm complexity. The author demonstrates how to track function performance, generate reports showing time/memory bounds (like O(n) or O(n²)), and write automated tests that fail when scalability changes. This approach catches critical performance regressions where algorithms become less efficient, which is especially important for processing large datasets. The method is presented as a starting point for performance testing, with plans to cover additional efficiency testing in future articles.&lt;/p&gt;
&lt;h3 id=&quot;how-we-made-pythons-packaging-library-3x-faster&quot;&gt;&lt;a href=&quot;https://iscinumpy.dev/post/packaging-faster/&quot;&gt;How we made Python’s packaging library 3x faster&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Python’s &lt;code&gt;packaging&lt;/code&gt; library was optimized to achieve 3x faster performance in version 26.0rc1. Key improvements include: Version construction became 2x faster, SpecifierSet operations up to 3x faster, and some operations up to 5x faster. Optimizations involved removing redundant &lt;code&gt;NamedTuple&lt;/code&gt; structures, eliminating duplicate &lt;code&gt;Version&lt;/code&gt; creation, using faster regex patterns, replacing &lt;code&gt;singledispatch&lt;/code&gt; with &lt;code&gt;if&lt;/code&gt; statements, and implementing better caching. The team used Python 3.15’s statistical profiler and PyPI metadata to measure performance. These changes significantly speed up dependency resolution for tools like pip, which creates millions of &lt;code&gt;Version&lt;/code&gt; objects during package installation.&lt;/p&gt;
&lt;h3 id=&quot;webassembly-as-a-python-extension-platform&quot;&gt;&lt;a href=&quot;https://nullprogram.com/blog/2026/01/01/&quot;&gt;WebAssembly as a Python extension platform&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This blog post explores using WebAssembly (Wasm) as a Python extension platform. The author discusses two main use cases: (1) replacing Python functions with faster C-compiled-to-Wasm code for 10x performance improvements, and (2) embedding secure crypto libraries like Monocypher in Python applications. Key challenges include handling pointers as unsigned integers, managing memory allocation between host and guest, and working around wasmtime-py limitations.&lt;/p&gt;
&lt;p&gt;The author provides detailed examples showing how to create Python bindings for Wasm modules while avoiding common pitfalls like negative pointer arithmetic. Despite rough edges like large binary sizes and API instability, this approach enables distributing architecture-independent Python packages without requiring native toolchains.&lt;/p&gt;
&lt;h3 id=&quot;the-emperor-has-no-clothes-how-to-code-claude-code-in-200-lines-of-code&quot;&gt;&lt;a href=&quot;https://www.mihaileric.com/The-Emperor-Has-No-Clothes/&quot;&gt;The Emperor Has No Clothes: How to Code Claude Code in 200 Lines of Code&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This article reveals that AI coding assistants like Claude Code aren’t magic — they’re built on a simple 200-line Python architecture. The core concept is a conversation loop between an LLM and a toolbox of three essential functions: read files, list files, and edit files.&lt;/p&gt;
&lt;p&gt;The process works by having the LLM decide when to use tools, sending structured tool calls, executing them locally, and feeding results back. The LLM never directly touches the filesystem—it just requests actions that your code performs.&lt;/p&gt;
&lt;p&gt;While production tools add features like better error handling, streaming, and more tools, the fundamental architecture remains this simple request-execute-respond cycle. The author demonstrates how anyone can build a functional coding agent using this straightforward pattern, proving that sophisticated AI coding tools are built on surprisingly simple foundations.&lt;/p&gt;
&lt;h3 id=&quot;the-future-of-software-development-is-software-developers&quot;&gt;&lt;a href=&quot;https://codemanship.wordpress.com/2025/11/25/the-future-of-software-development-is-software-developers/&quot;&gt;The Future of Software Development is Software Developers&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The article argues that despite claims that AI (especially LLMs) will replace software developers, history shows new technologies don’t reduce programming needs but increase demand. The hard part of programming is translating human ambiguity into precise code, which AI struggles with. LLMs often slow development and produce unreliable code. While AI may assist in prototyping or inline completion, developers will remain essential. The current AI hype will likely fade, and businesses should hire and train developers now. The future will see AI as a tool, not a replacement, with more demand for skilled programmers.&lt;/p&gt;
&lt;h3 id=&quot;agent-native-architectures&quot;&gt;&lt;a href=&quot;https://every.to/guides/agent-native&quot;&gt;Agent-native Architectures&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This guide outlines a revolutionary approach to software development where AI agents are first-class citizens, not just add-ons. The core principle: build applications where features aren’t code you write, but outcomes you describe that agents achieve using tools in loops.&lt;/p&gt;
&lt;p&gt;Five key principles govern this architecture: &lt;strong&gt;Parity&lt;/strong&gt; (agents can do everything users can via UI), &lt;strong&gt;Granularity&lt;/strong&gt; (atomic tools enable flexible composition), &lt;strong&gt;Composability&lt;/strong&gt; (new features emerge from prompt combinations), &lt;strong&gt;Emergent capability&lt;/strong&gt; (agents accomplish unanticipated tasks), and &lt;strong&gt;Improvement over time&lt;/strong&gt; (apps get better through context and prompt refinement).&lt;/p&gt;
&lt;p&gt;The approach shifts from traditional feature-by-feature development to creating a capable foundation and observing what users request, then formalizing patterns. Files serve as the universal interface due to their transparency and agent-friendliness.&lt;/p&gt;
&lt;p&gt;This architecture enables applications that are simple to start but endlessly powerful, discover latent user demand organically, and improve without code updates. The ultimate test: can your agent accomplish domain-specific outcomes you never explicitly built features for?&lt;/p&gt;
&lt;h3 id=&quot;demystifying-evals-for-ai-agents&quot;&gt;&lt;a href=&quot;https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents&quot;&gt;Demystifying evals for AI agents&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This article explains how to effectively evaluate AI agents, whose autonomy and flexibility make them harder to assess than traditional models. Good evaluations prevent reactive debugging cycles by catching issues before they affect users.&lt;/p&gt;
&lt;p&gt;The authors outline a comprehensive evaluation framework with key components: tasks (individual tests), trials (multiple attempts), graders (scoring logic), transcripts (complete interaction records), and evaluation harnesses (infrastructure). They recommend combining three grader types: code-based (fast, objective), model-based (flexible, nuanced), and human (gold standard validation).&lt;/p&gt;
&lt;p&gt;Different agent types require tailored approaches: coding agents use unit tests and static analysis; conversational agents need multidimensional scoring including interaction quality; research agents require groundedness and coverage checks; computer use agents need outcome verification in real environments.&lt;/p&gt;
&lt;p&gt;The article provides a practical roadmap: start early with 20-50 real-world tasks, build robust harnesses with stable environments, design thoughtful graders, and maintain long-term through transcript review. When combined with production monitoring, A/B testing, and user feedback, evaluations create a comprehensive quality system that accelerates development rather than slowing it down.&lt;/p&gt;
&lt;h3 id=&quot;how-to-build-self-improving-coding-agents&quot;&gt;How to build self-improving coding agents&lt;/h3&gt;
&lt;h4 id=&quot;part-1&quot;&gt;&lt;a href=&quot;https://ericmjl.github.io/blog/2026/1/17/how-to-build-self-improving-coding-agents-part-1/&quot;&gt;Part 1&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;To build self-improving coding agents without changing model weights, the author proposes modifying the agent’s environment using two key levers: &lt;strong&gt;AGENTS.md&lt;/strong&gt; as repository memory and &lt;strong&gt;skills&lt;/strong&gt; as reusable playbooks.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; helps agents navigate codebases quickly through code maps and encodes repo-specific corrections and norms, preventing repeated mistakes. When agents discover mismatches or receive user feedback, they should update the documentation automatically, creating a durable feedback loop. This operational approach reduces repetitive guidance and makes agents improvement without constant babysitting.&lt;/p&gt;
&lt;h4 id=&quot;part-2&quot;&gt;&lt;a href=&quot;https://ericmjl.github.io/blog/2026/1/18/how-to-build-self-improving-coding-agents-part-2/&quot;&gt;Part 2&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The second explores “skills” for coding agents—reusable prompt folders (&lt;code&gt;SKILL.md&lt;/code&gt; + assets) that streamline repetitive tasks. Skills explicitly define when to use them, steps to follow, and expected outputs. Examples include GitHub debugging, release announcements, ML model reports, and domain-specific troubleshooting. Skills evolve through iteration and feedback, making them easier to refine than starting from scratch. While distribution is less mature than MCP servers, tools like OpenSkills now help with installation and updates.&lt;/p&gt;
&lt;h4 id=&quot;part-3&quot;&gt;&lt;a href=&quot;https://ericmjl.github.io/blog/2026/1/19/how-to-build-self-improving-coding-agents-part-3/&quot;&gt;Part 3&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Part 3 combines repo memory (&lt;code&gt;AGENTS.md&lt;/code&gt;) and skills into a practice with a maturity model: ad hoc prompting → repo-local memory → global personal skills → shared team skills. Watch agent traces to identify patterns—repo-specific go into &lt;code&gt;AGENTS.md&lt;/code&gt;, reusable workflows become skills. Markdown becomes executable when agents turn instructions into tool calls. The key distinction: &lt;code&gt;AGENTS.md&lt;/code&gt; for how a repo works; skills for repeatable, on-demand procedures. The meta skill is metacognition—watching yourself work to systematize repeated tasks. Coding agents are evolving beyond coding tools into general-purpose teammates across all intellectual work.&lt;/p&gt;
&lt;h3 id=&quot;ai-writes-code-faster-your-job-is-still-to-prove-it-works&quot;&gt;&lt;a href=&quot;https://addyosmani.com/blog/code-review-ai/&quot;&gt;AI writes code faster. Your job is still to prove it works.&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;AI accelerates coding but shifts the burden from writing to proving code works. By 2026, 30% of senior developers ship mostly AI-generated code, which has 75% more logic errors. Solo developers rely on automated testing as safety nets, while teams use human review for security, context, and accountability. AI generates 45% of code with security flaws and increases PR volume by 18%, creating review bottlenecks. The new “PR contract” requires authors to provide evidence of working code through tests and manual verification. AI serves as first-pass reviewer, but human judgment remains essential for quality control and responsibility.&lt;/p&gt;
&lt;h3 id=&quot;ai-makes-exploration-cheap-not-decisions-easy&quot;&gt;&lt;a href=&quot;https://www.nucleate.dev/blog/ai-makes-exploration-cheap-not-decisions-easy&quot;&gt;AI Makes Exploration Cheap, Not Decisions Easy&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;AI makes exploration cheaper, not decisions easier. The key insight is that AI accelerates the exploration phase of creative work, allowing designers and developers to try more options in less time, but it doesn’t eliminate the need for human judgment.&lt;/p&gt;
&lt;p&gt;Great work requires “wasted work” - trying multiple approaches that don’t work to discover what does. AI compresses this process from days/weeks to hours, enabling rapid prototyping and experimentation. However, AI cannot make final decisions because it lacks context about users, brand, constraints, and past experiences.&lt;/p&gt;
&lt;p&gt;The human role shifts to Director-Curator-Craftsman: setting vision, selecting from AI-generated abundance, and applying taste and judgment. The real benefit is faster learning - each failed attempt teaches something valuable about the problem.&lt;/p&gt;
&lt;p&gt;The trap is letting AI make decisions for you. Instead, use AI to multiply exploration, then apply critical thinking to choose the best option. Your value lies in knowing what should get built and why, not in the mechanical production work.&lt;/p&gt;
&lt;h3 id=&quot;top-python-libraries-of-2025&quot;&gt;&lt;a href=&quot;https://tryolabs.com/blog/top-python-libraries-2025&quot;&gt;Top Python libraries of 2025&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Tryolabs’ 11th 2025 top Python libraries list balances LLM-focused tools and broader ecosystem innovations (performance, security, dev experience). It includes 10 top general picks (e.g., Rust-powered &lt;code&gt;ty&lt;/code&gt; type checker) and 10 AI/ML/Data tools, plus runners-up for each category to reflect real-world AI system building.&lt;/p&gt;
&lt;h3 id=&quot;pypi-in-2025-a-year-in-review&quot;&gt;&lt;a href=&quot;https://blog.pypi.org/posts/2025-12-31-pypi-2025-in-review/&quot;&gt;PyPI in 2025: A Year in Review&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The PyPI 2025 Year in Review highlights major growth and security improvements. Key statistics: over 3.9 million new files, 130,000 new projects, 1.92 exabytes transferred. Security enhancements included improved 2FA (52% of active users), trusted publishing (50,000+ projects), email verification, phishing protection, and zipfile security. Organizations grew to 7,742 created with 9,059 projects managed. The team processed 2,000+ malware reports (66% resolved in 4 hours), handled 2,221 account recoveries, and resolved 500+ name retention requests. New features included project archiving, new Terms of Service, and enhanced incident reporting transparency.&lt;/p&gt;
&lt;h3 id=&quot;2025-the-year-in-llms&quot;&gt;&lt;a href=&quot;https://simonwillison.net/2025/Dec/31/the-year-in-llms/&quot;&gt;2025: The year in LLMs&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;2025 was a transformative year for LLMs, with key trends including “reasoning” as a dominant feature—models like OpenAI’s o3 and o4-mini excelled in multi-step problem-solving and tool integration. Agents emerged critical, particularly coding agents (e.g., Claude Code, Codex CLI) handling asynchronous tasks, generating $1B in run-rate revenue. Chinese open-weight models (GLM-4.7, Qwen3) outperformed competitors, ranking highly. Prompt-driven image editing tools (GPT-4o, Google’s Nano Banana) drove viral adoption. Meta’s Llama 4 underperformed, and long tasks advanced, with models completing hours-long assignments. Agents streamlined search, and async coding tools became mainstream. Leadership shifted, with OpenAI and Google innovating, while Chinese models challenged Western dominance.&lt;/p&gt;
&lt;h3 id=&quot;five-takes-to-end-2025&quot;&gt;&lt;a href=&quot;https://parkerortolani.blog/2025/12/30/five-takes-to-end.html&quot;&gt;Five Takes to End 2025&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Parker Ortolani’s year-end tech analysis covers five key takes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OpenAI risks distraction by over-productizing instead of focusing on core AI models;&lt;/li&gt;
&lt;li&gt;Google’s dominance is resurgent with successful AI initiatives;&lt;/li&gt;
&lt;li&gt;departing Apple designer Alan Dye deserves more credit for his influential 12-year tenure;&lt;/li&gt;
&lt;li&gt;software-on-demand through AI coding tools is disrupting traditional app development;&lt;/li&gt;
&lt;li&gt;while Apple delivered excellent hardware in 2025, they must launch a spectacular AI Siri in 2026 after delays.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;software-engineering-in-2026&quot;&gt;&lt;a href=&quot;https://benjamincongdon.me/blog/2025/12/29/Software-Engineering-in-2026/&quot;&gt;Software Engineering in 2026&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The article explores how 2025’s AI coding advances will reshape software engineering in 2026. LLM tools have significantly reduced the marginal cost of producing quality code, shifting bottlenecks elsewhere. Key changes expected: infrastructure abstractions become more valuable, CI infrastructure needs higher quality, human-guided abstractions grow crucial for preventing technical debt, code review must evolve to focus on high-impact decisions, and project timeline estimates will increase in variance. While building code becomes cheaper, operating systems and high-value projects remain less LLM-amenable, requiring deeper human expertise.&lt;/p&gt;
&lt;h3 id=&quot;17-predictions-for-ai-in-2026&quot;&gt;&lt;a href=&quot;https://www.understandingai.org/p/17-predictions-for-ai-in-2026&quot;&gt;17 predictions for AI in 2026&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This article presents 17 AI predictions from experts with confidence scores, focusing on technology advancement and economic impact. Key predictions include Big Tech exceeding $500B in capital expenditures, OpenAI/Anthropic hitting 2026 revenue goals ($30B/$15B), context windows stabilizing around 1M tokens, and US GDP growth remaining under 3.5%.&lt;/p&gt;
&lt;p&gt;Other notable predictions include Tesla offering driverless taxi service, Chinese companies potentially surpassing Waymo’s robotaxi fleet, and AI avoiding major catastrophes.&lt;/p&gt;
&lt;p&gt;Overall, the authors expect steady AI improvement but modest real-world economic impacts, dismissing both AI bubble fears and rapid “fast takeoff” scenarios, instead predicting gradual integration across industries.&lt;/p&gt;
&lt;h2 id=&quot;podcasts&quot;&gt;Podcasts&lt;/h2&gt;
&lt;h3 id=&quot;-corepy&quot;&gt;🥝 core.py&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://open.spotify.com/episode/5PR5PeuIb4f2Qyo4w9hTli&quot;&gt;Episode 28: 2025 In Review&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-realpython-podcast&quot;&gt;🐍 RealPython Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/278/&quot;&gt;Episode 278: PyCoder’s Weekly 2025 Top Articles &amp;amp; Hidden Gems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/279/&quot;&gt;Episode 279: Coding Python With Confidence: Beginners Live Course Participants&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/280/&quot;&gt;Episode 280: Considering Fast and Slow in Python Programming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/281/&quot;&gt;Episode 281: Continuing to Improve the Learning Experience at Real Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/282/&quot;&gt;Episode 282: Testing Python Code for Scalability &amp;amp; What’s New in pandas 3.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-python-bytes-podcast&quot;&gt;🥧 Python Bytes Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/464/malicious-package-no-build-for-you&quot;&gt;#464 Malicious Package? No Build For You!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/465/stack-overflow-is-cooked&quot;&gt;#465 Stack Overflow is Cooked&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/466/psf-lands-1.5-million&quot;&gt;#466 PSF Lands $1.5 million&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/467/toads-in-my-ai&quot;&gt;#467 Toads in my AI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-talk-python-to-me&quot;&gt;🦜 Talk Python to me&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/533/web-frameworks-in-prod-by-their-creators&quot;&gt;#533: Web Frameworks in Prod by Their Creators&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/534/diskcache-your-secret-python-perf-weapon&quot;&gt;#534: diskcache: Your secret Python perf weapon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/535/pyview-real-time-python-web-apps&quot;&gt;#535: PyView: Real-time Python Web Apps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-pybites-podcast&quot;&gt;🍕 Pybites Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pybitespodcast.com/1501156/episodes/18354849-210-codeflash-and-continuous-python-performance-with-saurabh-misra&quot;&gt;#210: Codeflash and continuous Python performance with Saurabh Misra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pybitespodcast.com/1501156/episodes/18492644-211-keeping-the-joy-in-coding-a-new-year-s-resolution&quot;&gt;#211: Keeping the joy in coding - a new year’s resolution&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pybitespodcast.com/1501156/episodes/18532295-212-elmer-bulthuis-on-rust-webassembly-and-sustainable-design&quot;&gt;#212: Elmer Bulthuis on Rust, WebAssembly, and Sustainable Design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pybitespodcast.com/1501156/episodes/18564716-213-seven-software-engineering-tips-to-make-real-progress-this-year&quot;&gt;#213: Seven Software Engineering Tips to Make Real Progress This Year&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-vs-code-insiders-podcast&quot;&gt;🚀 VS Code Insiders Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.vscodepodcast.com/18&quot;&gt;Episode 18: Orchestrating Multiple Agents in VS Code with Ben &amp;amp; Peng&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;repositories&quot;&gt;Repositories&lt;/h2&gt;
&lt;h3 id=&quot;adamchainztprof-mit&quot;&gt;&lt;a href=&quot;https://github.com/adamchainz/tprof&quot;&gt;adamchainz/tprof&lt;/a&gt; (MIT)&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;tprof&lt;/code&gt; is a targeting profiler for Python 3.12+ that only measures the time spent in specified target functions. You can use it to measure your program before and after an optimization to see if it made any difference, with a quick report on the command line.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;As we wrap up this journey together, I want to take a moment to express my gratitude for your reading. If you’ve enjoyed what you just read and would like to help sustain this blog, consider &lt;a href=&quot;https://github.com/blueberry-py/blog/stargazers&quot;&gt;starring this blog on github&lt;/a&gt;, it would be great motivation for me to keep updating the blogs!&lt;/p&gt;
&lt;p&gt;Alright, that concludes the January Edition of “This Month for Pythonistas”. Thank you again for reading my post. I hope you enjoy it or find something useful. Happy coding and see you in February! 👋&lt;/p&gt;
</description><pubDate>Sat, 31 Jan 2026 04:00:00 GMT</pubDate><category>python</category><category>python</category><category>news</category><category>podcast</category><category>ai</category><category>agentic</category><category>llm</category><category>linux</category><author>Zeyang Lin</author></item><item><title>This Month for Pythonistas - November 2025</title><link>https://blueberrypy.netlify.app/post/this-month-for-pythonistas-2025-11/</link><guid isPermaLink="true">https://blueberrypy.netlify.app/post/this-month-for-pythonistas-2025-11/</guid><description>&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; datetime &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; date&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(date.today().year, date.today().month)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;# 2025 11&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img alt=&quot;issue-2025-11&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1280&quot; height=&quot;720&quot; src=&quot;/_astro/splash.C7Un_SmT_GxBhd.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;Welcome back Pythonistas! I’m glad to see you back reading the ninth issue of my “This month for Pythonistas” series which curates the news, articles, tutorials, podcasts, and more Python stuff worth noting in this month.&lt;/p&gt;
&lt;p&gt;Before we continue, please note that this blog is synced across the following platforms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberry-py.github.io/blog/post/this-month-for-pythonistas-2025-11/&quot;&gt;Github Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberrypy.netlify.app/post/this-month-for-pythonistas-2025-11/&quot;&gt;Netlify&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberrypy.onrender.com/post/this-month-for-pythonistas-2025-11/&quot;&gt;Render&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blueberrypy-blog.vercel.app/post/this-month-for-pythonistas-2025-11/&quot;&gt;Vercel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ready? Let’s get started!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;events--social&quot;&gt;Events &amp;amp; Social&lt;/h2&gt;
&lt;h3 id=&quot;pycon-us-2026-cfp-is-open&quot;&gt;PyCon US 2026 CFP is Open&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&quot;PyCon-US-2026&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1080&quot; height=&quot;1080&quot; src=&quot;/_astro/pyconus2026.yKrFO_F9_2e6UjS.webp&quot;&gt;&lt;/p&gt;
&lt;p&gt;The 2026 PyCon US &lt;a href=&quot;https://us.pycon.org/2026/speaking/guidelines/&quot;&gt;call for proposals&lt;/a&gt; (CFP) for Talks, Charlas, Tutorials and Posters is open until &lt;strong&gt;December 19th, 2025&lt;/strong&gt;. Don’t miss out on the largest Python conference in the world!&lt;/p&gt;
&lt;h3 id=&quot;pycon-ireland-2025&quot;&gt;PyCon Ireland 2025&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://s3.python.ie/images/Dublin_Skyline_2025-screen-size.width-800.png&quot; alt=&quot;PyCon-Ireland-2025&quot;&gt;&lt;/p&gt;
&lt;p&gt;PyCon Ireland this year took place November 15-16 in UCD O’Reilly Hall, Dublin, featuring two talk tracks and two workshop tracks on both days.&lt;/p&gt;
&lt;h3 id=&quot;20th-anniversary-of-first-ever-django-release&quot;&gt;20th anniversary of first ever Django release&lt;/h3&gt;
&lt;p&gt;For the past twenty years, Django has shipped over 440 releases, making it among the most popular and successful Python web frameworks. You can read more about it &lt;a href=&quot;https://www.djangoproject.com/weblog/2025/nov/19/twenty-years-of-django-releases/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;new-versions&quot;&gt;New Versions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Python 3.15.0 alpha 2&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is the second developer preview of the upcoming Python 3.15 release. It is available for download &lt;a href=&quot;https://www.python.org/downloads/release/python-3150a2/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Django 6.0 RC 1&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Django 6.0 release candidate 1 is &lt;a href=&quot;https://www.djangoproject.com/download/6.0rc1/tarball/&quot;&gt;now available&lt;/a&gt;. The provisional release notes can be found &lt;a href=&quot;https://docs.djangoproject.com/en/dev/releases/6.0/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Provided no major bugs are discovered that can’t be solved in the next two weeks, Django 6.0 will be released on or around &lt;em&gt;December 3&lt;/em&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pytest 9.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;pytest 9.0 brings significant improvements including native TOML configuration support, a new strict mode for better testing practices, and the long-awaited subtests feature.&lt;/p&gt;
&lt;h2 id=&quot;tutorials&quot;&gt;Tutorials&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;DeepLearning.ai’s &lt;a href=&quot;https://www.deeplearning.ai/short-courses/jupyter-ai-coding-in-notebooks/&quot;&gt;Jupyter AI: AI Coding in Notebooks&lt;/a&gt; by Andrew Ng and Brian Granger&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;In this course, you’ll build a book research assistant using the Open Library API, and create a stock market data analysis workflow, all with the help of Jupyter AI. You’ll learn how to provide API documentation as context so the LLM generates accurate syntax for code that wasn’t part of its pretraining.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;DeepLearning.ai’s &lt;a href=&quot;https://www.deeplearning.ai/short-courses/semantic-caching-for-ai-agents/&quot;&gt;Semantic Caching for AI Agents&lt;/a&gt; from Redis&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;In this course, you’ll build a semantic cache that makes your AI agents faster and more cost-effective by recognizing when different questions mean the same thing. For example, when someone asks “How do I get a refund?” and another asks “I want my money back”， your cache will reuse the answer instead of making another API call, reducing the need for redundant model calls.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;DeepLearning.ai’s &lt;a href=&quot;https://www.deeplearning.ai/courses/design-develop-and-deploy-multi-agent-systems-with-crewai/&quot;&gt;Design, Develop, and Deploy Multi-Agent Systems with CrewAI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Disclaimer: This course contains a small portion of content which requires a paid PRO subscription to access.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Learn how to build multi-agent systems that automate complex, end-to-end workflows. You’ll create intelligent agent teams that plan, reason, and collaborate using tools, memory, and guardrails, and learn how to scale them for production.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;RealPython’s &lt;a href=&quot;https://realpython.com/python-markitdown/&quot;&gt;Python MarkItDown: Convert Documents Into LLM-Ready Markdown&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;The MarkItDown library lets you quickly turn PDFs, Office files, images, HTML, audio, and URLs into LLM-ready Markdown. In this tutorial, you’ll compare MarkItDown with Pandoc, run it from the command line, use it in Python code, and integrate conversions into AI-powered workflows.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://cookbook.openai.com/examples/build_a_coding_agent_with_gpt-5.1&quot;&gt;Build a coding agent with GPT 5.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;In this guide, we’ll use the Agents SDK to build a coding agent that can scaffold a brand-new app from a prompt and refine it through user feedback.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;articles&quot;&gt;Articles&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.jetbrains.com/pycharm/2025/10/why-performance-matters-in-python-development/&quot;&gt;Why Performance Matters in Python Development&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Disclaimer: This article contains promotional content regarding JetBrains products.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The blog from JetBrains emphasizes Python performance optimization as a strategic business imperative, not just technical concern. Despite Python’s interpreted nature and GIL limitations, most bottlenecks stem from code-level inefficiencies. Performance impacts user experience, scalability, infrastructure costs, and development velocity. Key optimization areas include algorithmic improvements, proper data structures, I/O batching, and appropriate parallelism (threading for I/O-bound, multiprocessing for CPU-bound tasks). The article dispels myths about Python being universally slow, emphasizing profiling-driven optimization over intuition.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://mergify.com/blog/await-is-not-a-context-switch-understanding-python-s-coroutines-vs-tasks&quot;&gt;&lt;code&gt;await&lt;/code&gt; is Not a Context Switch: Understanding Python’s Coroutines vs Tasks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This blog post clarifies a critical distinction in Python’s &lt;code&gt;asyncio&lt;/code&gt;: unlike JavaScript or C#, awaiting a coroutine does not automatically yield control to the event loop. In Python, &lt;code&gt;await&lt;/code&gt; synchronously executes a coroutine until a suspension occurs; true concurrency and interleaving mainly happen with explicitly created Tasks (&lt;code&gt;asyncio.create_task&lt;/code&gt;). This means critical sections without internal &lt;code&gt;await&lt;/code&gt; statements are atomic relative to the event loop. Understanding this prevents unnecessary locking, as race conditions only occur at specific suspension points, not at every &lt;code&gt;async&lt;/code&gt; function call.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pythonmorsels.com/__slots__/&quot;&gt;&lt;code&gt;__slots__&lt;/code&gt; for optimizing classes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Python classes store instance attributes in a &lt;code&gt;__dict__&lt;/code&gt; dictionary by default, allowing dynamic addition but consuming memory. Defining &lt;code&gt;__slots__ = (&apos;attr1&apos;, &apos;attr2&apos;, ...)&lt;/code&gt; replaces &lt;code&gt;__dict__&lt;/code&gt; with a fixed, efficient array-like structure. Benefits: restricts attributes (no extras allowed), reduces memory usage (e.g., from 271KB to 176KB for 1M Point objects), and speeds up attribute lookups. Ideal for classes with many instances or frequent access.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codecut.ai/regex-pregex-pyparsing-text-pattern-matching-guide/&quot;&gt;Choose the Right Text Pattern Tool: Regex, Pregex, or Pyparsing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This article compares three Python text pattern matching tools: regex (regular expressions), pregex (human-readable regex alternative), and pyparsing (grammar-based parsing). It teaches when to use each tool for extracting emails, phone numbers, and parsing structured data. The guide helps developers choose the right approach for different text processing scenarios in Python.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.paulox.net//2025/11/14/how-to-use-uuidv7-in-python-django-and-postgresql/&quot;&gt;How to use UUIDv7 in Python, Django and PostgreSQL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This guide explains using UUIDv7 – time-ordered IDs for better index locality than UUIDv4 – in Python 3.14 (&lt;code&gt;uuid.uuid7()&lt;/code&gt;), Django 5.2 models, and PostgreSQL 18 (native &lt;code&gt;uuidv7()&lt;/code&gt; generation and &lt;code&gt;uuid_extract_timestamp()&lt;/code&gt; via GeneratedFields). Covers setup, migrations, client-side (SQLite) vs. DB-side generation, testing, and considerations for other databases like MySQL/Oracle. Recommends masking (UUIDv47) for public APIs to hide timestamps.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://jacobtomlinson.dev/posts/2025/python-package-managers-uv-vs-pixi/&quot;&gt;Python package managers: uv vs pixi?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This post compares Python package managers uv (fast Rust pip reimplementation for PyPI) and pixi (next-gen conda for PyPI + conda-forge). uv suits scripts, apps, libraries; pixi excels in AI/CUDA/science with compiled deps. Historical evolution: pip → conda binaries → mamba speed → declarative locking. Author’s recommendations: uv for most, pixi for GPU/research, conda+uv for interdependent libs.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://openai.com/index/gpt-5-1-for-developers/&quot;&gt;Introducing GPT-5.1 for developers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;OpenAI has released GPT-5.1 for the API platform, a model designed to balance intelligence and speed for agentic and coding tasks. It features adaptive reasoning, where the model dynamically adjusts thinking time based on task complexity—processing simple requests significantly faster while remaining persistent on difficult problems.&lt;/p&gt;
&lt;p&gt;Key updates include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;No Reasoning Mode: A setting for ultra-low latency tasks like tool calling and search, behaving like a standard non-reasoning model but with GPT-5.1’s intelligence base.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Extended Prompt Caching: Supports up to 24-hour cache retention to lower costs and latency for long-context workflows.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;New Developer Tools: Introduces &lt;code&gt;apply_patch&lt;/code&gt; for reliable, structure-aware code editing and a &lt;code&gt;shell&lt;/code&gt; tool for executing local commands.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;GPT-5.1 utilizes a more steerable coding personality and outperforms GPT-5 on benchmarks like SWE-bench Verified (76.3%). It is available immediately to developers on paid tiers, with pricing matching GPT-5. Specialized &lt;code&gt;codex&lt;/code&gt; versions were also released for agentic coding workflows.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.google/products/gemini/gemini-3/&quot;&gt;A new era of intelligence with Gemini 3&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://storage.googleapis.com/gweb-uniblog-publish-prod/images/gemini_3_webdev_arena_leaderboar.width-1000.format-webp.webp&quot; alt=&quot;gemini-3-pro-tops-webdev-arena&quot;&gt;&lt;/p&gt;
&lt;p&gt;Google has introduced Gemini 3, its most intelligent and capable AI model to date. Gemini 3 Pro delivers state-of-the-art performance in multimodal reasoning, coding, and long-horizon planning, outperforming previous models on major benchmarks like Humanity’s Last Exam.&lt;/p&gt;
&lt;p&gt;Key features include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Enhanced Reasoning: The model offers deeper nuance and reduced sycophancy. A new Deep Think mode, coming soon to Ultra subscribers, pushes reasoning capabilities even further for complex problem-solving.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Developer Tools: Google launched &lt;strong&gt;Antigravity&lt;/strong&gt;, a new agentic development platform where AI agents can autonomously plan, code, and validate software.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Practical Applications: Gemini 3 helps users learn by synthesizing diverse inputs (like video and text), build complex apps via “vibe coding,” and handle multi-step planning tasks for daily life.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Gemini 3 is available immediately across Google products, including the Gemini app, AI Studio, Vertex AI, and within Google Search’s AI Mode. The release emphasizes robust safety testing and improved resistance to misuse.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://cloud.google.com/blog/topics/developers-practitioners/where-to-use-sub-agents-versus-agents-as-tools&quot;&gt;ADK architecture: When to use sub-agents versus agents as tools&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This blog post compares &lt;em&gt;sub-agents&lt;/em&gt; vs. &lt;em&gt;agents as tools&lt;/em&gt; in multi-agent AI systems. Agents as tools are stateless, reusable for discrete tasks (e.g., NL2SQL, DB execution) with isolated context. Sub-agents are stateful, collaborative for complex workflows (e.g., data visualization, travel planning) sharing parent context. Decision matrix: Use tools for low-complexity/reusable tasks; sub-agents for high-complexity/stateful processes. Real-world cases include data analysis and trip planning.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://martinfowler.com/articles/llm-learning-loop.html&quot;&gt;The Learning Loop and LLMs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The article argues that software development is fundamentally a learning process, not an assembly line. While LLMs excel at removing friction and generating code, they cannot replace the essential learning loop of observe-experiment-apply. True expertise comes from hands-on experience and understanding, not just AI-generated solutions. LLMs are best used as brainstorming partners, not autonomous builders, to avoid the “maintenance cliff” where systems become unmaintainable due to lack of deep understanding.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://octomind.dev/blog/why-agents-do-not-write-most-of-our-code-a-reality-check&quot;&gt;why agents DO NOT write most of our code - a reality check&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The article provides a reality check on AI coding agents. Despite building AI agents themselves, Octomind finds that most of their code is still written by humans. Through practical experiments, the author reveals that AI agents struggle with maintaining codebase mental models, produce overly verbose code (1000+ line PRs), lack self-reflection about their limitations, and often miss critical issues like transaction handling. While AI is valuable for brainstorming, debugging, and small tasks, the dream of agents writing most production code remains far from reality.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://stefaniemolin.com/articles/open-source/becoming-a-core-developer/&quot;&gt;Becoming a Core Developer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Stefanie Molin became a numpydoc core developer by creating a pre-commit hook for docstring validation. Starting from fixing docstrings at a Scikit-Learn sprint, she developed &lt;code&gt;AstValidator&lt;/code&gt; using Python’s &lt;code&gt;ast&lt;/code&gt; module for static analysis, avoiding code execution. This led to numpydoc-validation (v1.6.0+), with CLI linting and config via &lt;code&gt;pyproject.toml&lt;/code&gt;. After PR merge and improvements, she joined as core dev in April 2024.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://newsletter.pragmaticengineer.com/p/what-caused-the-large-aws-outage&quot;&gt;What caused the large AWS outage?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A major AWS outage on October 20, 2025 was caused by a DynamoDB DNS failure in us-east-1. The 14-hour incident started when race conditions between DNS enactors emptied DynamoDB’s DNS records, making the database appear offline. This cascaded to EC2’s droplet management system, causing capacity shortages and network connectivity issues that took 12+ hours to fully resolve.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.cloudflare.com/18-november-2025-outage/&quot;&gt;Cloudflare outage on November 18, 2025&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On November 18, 2025, Cloudflare experienced a significant outage starting at 11:20 UTC that disrupted traffic across its network, causing widespread HTTP 5xx errors for customer websites and impacting services like Workers KV, Access, and the Dashboard.&lt;/p&gt;
&lt;p&gt;The outage was not caused by a cyberattack but by an internal configuration error. A change to database permissions caused a query to generate duplicate entries in a “feature file” used by Cloudflare’s Bot Management system. This doubling in file size exceeded a hardcoded memory limit within the core proxy software, causing the system to crash (panic) globally.&lt;/p&gt;
&lt;p&gt;Cloudflare engineers initially suspected a DDoS attack but soon identified the corrupt file. They resolved the issue by halting the bad file’s propagation and manually reverting to a known good version. Core traffic began flowing normally by 14:30 UTC, and all systems were fully restored by 17:06 UTC. Cloudflare has apologized and is implementing new safeguards, such as stricter file validation and global kill switches, to prevent future occurrences.&lt;/p&gt;
&lt;h2 id=&quot;podcasts&quot;&gt;Podcasts&lt;/h2&gt;
&lt;h3 id=&quot;-realpython-podcast&quot;&gt;🐍 RealPython Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/273/&quot;&gt;Episode 273: Advice for Writing Maintainable Python Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/274/&quot;&gt;Episode 274: Preparing Data Science Projects for Production&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://realpython.com/podcasts/rpp/275/&quot;&gt;Episode 275: Building a FastAPI Application &amp;amp; Exploring Python Concurrency&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-python-bytes-podcast&quot;&gt;🥧 Python Bytes Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/456/youre-so-wrong&quot;&gt;#456 You’re so wrong&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/457/tapping-into-http&quot;&gt;#457 Tapping into HTTP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/458/i-will-install-linux-on-your-computer&quot;&gt;#458 I will install Linux on your computer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pythonbytes.fm/episodes/show/459/inverted-dependency-trees&quot;&gt;#459 Inverted dependency trees&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-talk-python-to-me&quot;&gt;🦜 Talk Python to me&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/526/building-data-science-with-foundation-llm-models&quot;&gt;#526: Building Data Science with Foundation LLM Models&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/527/mcp-servers-for-python-devs&quot;&gt;#527: MCP Servers for Python Devs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://talkpython.fm/episodes/show/528/python-apps-with-llm-building-blocks&quot;&gt;#528: Python apps with LLM building blocks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-pybites-podcast&quot;&gt;🍕 Pybites Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pybitespodcast.com/1501156/episodes/17969765-204-the-science-of-open-science-with-leah-wasser-founder-of-pyopensci&quot;&gt;#204: The science of open science - with Leah Wasser, founder of pyOpenSci&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pybitespodcast.com/1501156/episodes/18047967-205-building-reactive-python-notebooks-with-marimo&quot;&gt;#205: Building reactive Python notebooks with Marimo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pybitespodcast.com/1501156/episodes/18217165-the-power-of-one-clear-goal-kishan-patel-on-building-a-developer-mindset&quot;&gt;#206: The Power of One Clear Goal: Kishan Patel on building a Developer Mindset&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-vs-code-insiders-podcast&quot;&gt;🚀 VS Code Insiders Podcast&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.vscodepodcast.com/12&quot;&gt;Episode 12: Behind the Scenes of VS Code’s Planning Agent with Bhavya U&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.vscodepodcast.com/13&quot;&gt;Episode 13: Beyond the Keynote: VS Code at GitHub Universe 2025&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.vscodepodcast.com/14&quot;&gt;Episode 14: Designing for Everyone: Accessibility in VS Code with Megan Rogge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.vscodepodcast.com/15&quot;&gt;Episode 15: Taming AI Assisted Coding Models with Eleanor Berger&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;repositories&quot;&gt;Repositories&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/hyperflask/hyperflask&quot;&gt;hyperflask&lt;/a&gt; (MIT)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;hyperflask is a Flask-based (very) opiniated full-stack web framework where all the tech choices have been made. It combines multiple Flask extensions and frontend libraries into a seamless experience.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/langchain-ai/deepagents&quot;&gt;langchain-ai/deepagents&lt;/a&gt; (MIT)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Primarily inspired by Claude Code, deepagents is an agent harness built on langchain and langgraph, which is equipped with a planning tool, a filesystem backend, and the ability to spawn subagents - making them well-equipped to handle complex agentic tasks.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MoonshotAI/kimi-cli&quot;&gt;MoonshotAI/kimi-cli&lt;/a&gt; (Apache 2.0)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kimi CLI is yet another command-line agent but built within Python ecosystem unlike other Claude Code-alike tools. Apart from agentic coding, it can also be switched to “shell mode” where you can run (some of) shell commands.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/MemMachine/MemMachine&quot;&gt;MemMachine&lt;/a&gt; (Apache 2.0)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MemMachine is a open-source, “universal” memory layer for AI agents which persists across multiple sessions, agents, and large language models. It provides Python SDK, RESTful API as well as MCP for easy integration with agents.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/OpenRouterTeam/python-sdk&quot;&gt;OpenRouterTeam/python-sdk&lt;/a&gt; (Apache 2.0)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is OpenRouter’s official Python SDK, a type-safe toolkit for building AI applications with access to 300+ language models through a unified API. You can find the docs &lt;a href=&quot;https://openrouter.ai/docs/sdks/python&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;have-time-for-some-fun&quot;&gt;Have time for some fun?&lt;/h2&gt;
&lt;h3 id=&quot;golden-joystick-awards-2025&quot;&gt;Golden Joystick Awards 2025&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://cdn.mos.cms.futurecdn.net/pqnA52wxB3ZWa6sVPJvyJZ-1200-80.jpg.webp&quot; alt=&quot;golder-joystick-ultimate-game-of-the-year&quot;&gt;&lt;/p&gt;
&lt;p&gt;The Golden Joystick Awards revealed its winners for 2025 on November 20th! Congratulations to the winners, especially &lt;strong&gt;Clair Obscure Expedition 33&lt;/strong&gt; which was crowned the Ultimate Game of the Year (UGOTY) along with other six thophies, for their outstanding contributions to the video game industry!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;As we wrap up this journey together, I want to take a moment to express my gratitude for your reading. If you’ve enjoyed what you just read and would like to help sustain this blog, consider &lt;a href=&quot;https://github.com/blueberry-py/blog/stargazers&quot;&gt;starring this blog on github&lt;/a&gt;, it would be great motivation for me to keep updating the blogs!&lt;/p&gt;
&lt;p&gt;Alright, that concludes the November Edition of “This Month of Pythonistas”. Thank you again for reading my post. I hope you enjoy it or find something useful. Happy coding and see you in December!&lt;/p&gt;
</description><pubDate>Sun, 30 Nov 2025 13:00:00 GMT</pubDate><category>python</category><category>python</category><category>cli</category><category>linux</category><category>podcast</category><category>news</category><category>agentic</category><category>llm</category><category>ai</category><author>Zeyang Lin</author></item><item><title>[one-liner] Install Ollama</title><link>https://blueberrypy.netlify.app/post/one-liner-ollama/</link><guid isPermaLink="true">https://blueberrypy.netlify.app/post/one-liner-ollama/</guid><description>&lt;h2 id=&quot;one-liner-series-ollama&quot;&gt;One-Liner series: Ollama&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://ollama.com/download&quot;&gt;source: ollama.com&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;install-on-ubuntu&quot;&gt;Install on Ubuntu&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; https://ollama.com/install.sh&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; sudo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;install-a-specific-version&quot;&gt;Install a specific version&lt;/h4&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; https://ollama.com/install.sh&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; OLLAMA_VERSION&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;0.2.5&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; sudo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;alternative-source-possibly-not-up-to-date-with-offical-release&quot;&gt;Alternative source (possibly not up-to-date with offical release)&lt;/h4&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;pip&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; modelscope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;modelscope&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; download&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --model=modelscope/ollama-linux&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --local_dir&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ./ollama-linux&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ollama-linux&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;chmod&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; +x&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ./ollama-modelscope-install.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;./ollama-modelscope-install.sh&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;update-on-ubuntu&quot;&gt;Update on Ubuntu&lt;/h3&gt;
&lt;p&gt;Run the same command as above&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; https://ollama.com/install.sh&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; sudo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;uninstall-on-ubuntu&quot;&gt;Uninstall on Ubuntu&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; systemctl&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; stop&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ollama&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; systemctl&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; disable&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ollama&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; rm&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; /etc/systemd/system/ollama.service&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; rm&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; $(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;which&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ollama&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; rm&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -r&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; /usr/share/ollama&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; userdel&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ollama&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; groupdel&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; ollama&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
</description><pubDate>Wed, 17 Jul 2024 05:33:41 GMT</pubDate><category>llm</category><category>AI</category><category>linux</category><category>ollama</category><category>AI</category><category>Llama</category><category>llm</category><category>linux</category><category>ubuntu</category><author>Zeyang Lin</author></item></channel></rss>