Planet Python - Latest News Tracking & Analysis


Latest News Politics , Business , Finance , Technology , World News & Opinion & Tracking & Analysis.

United States of America
Website
🇺🇸 english
Technology
#38
Planet Python

Planet Python

Primary focus: Technology


Recent Reportage

Latest coverage from Planet Python

Hugo van Kemenade: Security: line goes up

Like many other projects, CPython is experiencing a huge increase in security reports. CVEs per year Last month, PSF Security Developer-in-Residence Seth Larson posted a chart of CVEs per year, showing a large increase in 2026: But this only represents the output of security work, and doesn’t show all the work dealing with incoming reports. Many are closed and dealt with as non-security bug reports instead; many are closed as neither security nor bug reports. Let’s reveal some of this unseen work by the Python Security Response Team (PSRT). GHSAs by month Here are the number of incoming GitHub Security Advisories (GHSA) reports created since July 2024: GHSAs by year Here is the same thing by year, and remembering we’re only halfway through 2026: Email reports by month We’ve only fairly recently been encouraging new reports be made via GHSA. Before this, they were usually made by email. The next chart is the number of email discussions (or threads) and participants by month: Thanks Big thanks to Seth for all his work as Security Developer-in-Residence: helping shepherd all these reports, developing a security policy to improve the quality of incoming reports and help us assess them, and defining PSRT membership and responsibilities via PEP 811 to build an active team. All this would be much harder without his guidance! And thanks to Alpha-Omega for sponsoring his position at the PSF.

6 hours ago

Talk Python to Me: #555: Marimo Pair - A Canvas for Agent + Developers Collaboration

Coding agents have gotten really good at one kind of work. You scope a feature, edit some files, run the tests, ship it. It all happens on disk. But that is not how data work feels. You load something, you look at it, you run a cell, you watch how it responds, and you decide the next move from whatever is sitting in memory. And until now, your agent couldn't see any of that. It only saw the files. Never the live state. <br/> <br/> This episode, that wall comes down. marimo pair drops a coding agent right inside a running notebook, with full access to every variable Python is holding in memory. The notebook becomes a shared canvas. You point, it runs the code. You tell it to zoom in on the Picasso paintings, and the chart just updates. No MCP tools to wire up, no schema to describe. Just Python, and an agent that can finally see what you see. Trevor Manz is back to walk us through it.<br/> <br/> <strong>Episode sponsors</strong><br/> <br/> <a href='https://talkpython.fm/sentry'>Sentry Error Monitoring, Code talkpython26</a><br> <a href='https://talkpython.fm/training'>Talk Python Courses</a><br/> <br/> <h2 class=links-heading mb-4>Links from the show</h2> <div><strong>marimo pair</strong>: <a href=https://marimo.io/pair?featured_on=talkpython target=_blank >marimo.io/pair</a><br/> <br/> <strong>Course transcripts announcement</strong>: <a href=https://talkpython.fm/blog/posts/announcing-german-subtitles-on-courses/ target=_blank >talkpython.fm/blog</a><br/> <br/> <strong>anywidget: Jupyter Widgets made easy</strong>: <a href=https://talkpython.fm/episodes/show/530/anywidget-jupyter-widgets-made-easy target=_blank >talkpython.fm</a><br/> <strong>marimo</strong>: <a href=https://marimo.io/?featured_on=talkpython target=_blank >marimo.io</a><br/> <strong>blog</strong>: <a href=https://marimo.io/blog/marimo-pair?featured_on=talkpython target=_blank >marimo.io</a><br/> <strong>GitHub</strong>: <a href=https://github.com/marimo-team/marimo-pair?featured_on=talkpython target=_blank >github.com</a><br/> <strong>given this</strong>: <a href=https://martinalderson.com/posts/wall-street-lost-285-billion-because-of-13-markdown-files/?featured_on=talkpython target=_blank >martinalderson.com</a><br/> <strong>llms.txt</strong>: <a href=https://talkpython.fm/llms.txt target=_blank >talkpython.fm</a><br/> <strong>mcp</strong>: <a href=https://talkpython.fm/ai-integration target=_blank >talkpython.fm</a><br/> <strong>cli</strong>: <a href=https://talkpython.fm/blog/posts/talk-python-now-has-a-cli/ target=_blank >talkpython.fm</a><br/> <strong>open issues</strong>: <a href=https://github.com/marimo-team/marimo-pair/issues?featured_on=talkpython target=_blank >github.com</a><br/> <strong>Discord</strong>: <a href=https://marimo.io/discord?featured_on=talkpython target=_blank >marimo.io</a><br/> <strong>Marimo Pair</strong>: <a href=https://marimo.io/pair?featured_on=talkpython target=_blank >marimo.io</a><br/> <strong>OpenCode</strong>: <a href=https://opencode.ai?featured_on=talkpython target=_blank >opencode.ai</a><br/> <strong>AI Tooling for Software Engineers in 2026</strong>: <a href=https://newsletter.pragmaticengineer.com/p/ai-tooling-2026?featured_on=talkpython target=_blank >newsletter.pragmaticengineer.com</a><br/> <br/> <strong>Watch this episode on YouTube</strong>: <a href=https://www.youtube.com/watch?v=6LAQnnW-gTY target=_blank >youtube.com</a><br/> <strong>Episode 555 deep-dive</strong>: <a href=https://talkpython.fm/episodes/show/555/marimo-pair-a-canvas-for-agent-developers-collaborationtakeaways-anchor target=_blank >talkpython.fm/555</a><br/> <strong>Episode transcripts</strong>: <a href=https://talkpython.fm/episodes/transcript/555/marimo-pair-a-canvas-for-agent-developers-collaboration target=_blank >talkpython.fm</a><br/> <br/> <strong>Theme Song: Developer Rap</strong><br/> <strong> Served in a Flask </strong>: <a href=https://talkpython.fm/flasksong target=_blank >talkpython.fm/flasksong</a><br/> <br/> <strong>---== Don't be a stranger ==---</strong><br/> <strong>YouTube</strong>: <a href=https://talkpython.fm/youtube target=_blank ><i class=fa-brands fa-youtube></i> youtube.com/@talkpython</a><br/> <br/> <strong>Bluesky</strong>: <a href=https://bsky.app/profile/talkpython.fm target=_blank >@talkpython.fm</a><br/> <strong>Mastodon</strong>: <a href=https://fosstodon.org/web/@talkpython target=_blank ><i class=fa-brands fa-mastodon></i> @talkpython@fosstodon.org</a><br/> <strong>X.com</strong>: <a href=https://x.com/talkpython target=_blank ><i class=fa-brands fa-twitter></i> @talkpython</a><br/> <br/> <strong>Michael on Bluesky</strong>: <a href=https://bsky.app/profile/mkennedy.codes?featured_on=talkpython target=_blank >@mkennedy.codes</a><br/> <strong>Michael on Mastodon</strong>: <a href=https://fosstodon.org/web/@mkennedy target=_blank ><i class=fa-brands fa-mastodon></i> @mkennedy@fosstodon.org</a><br/> <strong>Michael on X.com</strong>: <a href=https://x.com/mkennedy?featured_on=talkpython target=_blank ><i class=fa-brands fa-twitter></i> @mkennedy</a><br/></div>

9 hours ago

Rodrigo Girão Serrão: itertools cheatsheet

Cheatsheet with visual diagrams that explain how the iterables from itertools work. This cheatsheet contains diagrams that explain how the iterables from the module itertools work in a visual way. Download this cheatsheet Download this cheatsheet

12 hours ago

Publishing Activity

Daily article output trend

Mike C. Fletcher: PyVRML97 2.3.4b1

Continuing on with the Open Source work. PyVRML97 2.3.4b1 is almost all build and CI process updates. There are a few minor fixes for modern Python's where bool can't be used as a list index and a change for NumPy 2.x array comparison failures. This beta is mostly just so that we can pull it from OpenGLContext's alpha when it's released.

1 day ago

Bob Belderbos: Learning New Skills in the AI Era (vBrownBag)

I joined the vBrownBag podcast with Damian to talk about how to actually learn a new language or skill when an agent can write the code before you finish typing the prompt. Keep the friction in The thread running through the whole conversation is friction. Agents are close to slot machines: a bit of dopamine, the path of least resistance, and suddenly you are delegating the thinking, not just the typing. The weeks where I hand off the most are the weeks I come out least happy with my own skills. So I keep deliberate friction in the loop. I built coding platforms for Python and Rust with no AI in them, on purpose, so you still write the code in the browser without assistance. When you are learning something, you have to go through the cycles at least once before you let an agent do it for you. That is also why I can lean on agents more in Python (20 years of programming in, I can smell-test the output) than in a language I am still new to. The litmus test is simple: how well do I understand the thing I am shipping? AI to explain, not AI to do AI is remarkable at explaining a specific concept. It is dangerous as a crutch for deeper understanding. The distinction I keep drawing: use it to explain, not to do the work you signed up to learn. We got into where the silent errors hide. Reviewed code can look completely plausible and still be only 70 right, because you never went deep enough to feel the wrong part (I also discussed this recently on complexity.fm). On a recent project the app worked and returned good results, but it was silently never searching the second half of every chunk (see here). That is the failure mode I see most with students shipping AI-built code, which is why I keep coming back to rubber-stamping AI PRs as the real risk. Learn by building, with tests as the guide When people ask how to learn Rust (or anything) without losing ownership, the shape is always the same: Read enough to get the concepts (the first six to eight chapters of the Rust book, not all 600 pages). Pick a real project you have a stake in, then break it into digestible pieces. Write the tests first so you have a definition of done that guides each step. Contrast sources: read the reference in parallel, and compare answers across models. In the Rust cohort we build a JSON parser this way: tokenizer first, then bindings with PyO3, then benchmarking. Several students beat the C parser on performance (see here and here). This only happens because they owned every line instead of having an agent generate it. Watch the full conversation: Watch on YouTube The line I keep repeating: AI is an accelerator, not a compass. Start with your own thinking, then let it help, and keep a high enough bar that you never accept the first draft. Keep reading The AI accelerator needs direction AI Doesn't Change What Software Engineering Is Learning Rust made me a better Python developer Thanks Damian / vBrownBag for having me on. If you want to stay technical without outsourcing the thinking, that is exactly what we work on in the Rust and agentic AI cohorts.

1 day ago

Christian Ledermann: Buzzword Bingo: An Experiment in Spec-Driven AI Development

This is a submission for Weekend Challenge: Passion Edition What I Built I built Buzzword Bingo, a multiplayer bingo game for conferences, webinars and meetings where players mark off the inevitable buzzwords as they appear. The application allows someone to create a game, share a link with participants, and let everyone play along on their own unique bingo board. The first player to complete a row, column or diagonal wins. Under the hood, though, the game itself was almost secondary. The real goal was to answer a question I had been wondering about for a while: How far can I push Claude with specification-driven development while still achieving reliable type coverage and maintaining the coding standards I expect from a production Python project? The project became an experiment in AI-assisted software engineering, strict typing, and how much guidance modern coding agents actually need to produce maintainable software. Demo Live demo coming soon. Repository: bsbingo on GitHub Code Repository: bsbingo GitHub repository How I Built It Specification Driven Development The project followed a specification-driven approach using Speckit. Rather than iterating directly in code, I created specifications describing what the system should do and allowed Claude to implement them. A big accelerator for the project was using scaf for the initial bootstrap. Rather than spending the first few hours wiring together repository structure, CI, containerization, infrastructure, and developer tooling, I started from a production-oriented foundation and focused on shaping it to match my own preferences. Having Kubernetes manifests, Terraform, deployment pipelines, and modern Python tooling available from day one made it much easier to concentrate on the actual experiment: how far specification-driven development and AI coding agents could take the application. I ended up needing three major specifications: Project scaffolding Starting from a project generated with scaf. Refining the generated structure to match my personal preferences. Adding all the infrastructure and tooling I typically expect in a modern project. Backend implementation Django models and business logic. Server-rendered templates. HTMX interactions. Capability URL based authorization. Frontend implementation Visual styling and user experience. Responsive layouts. End-to-end testing using Playwright. Django Without the JavaScript Framework The application uses: Django HTMX Django templates PostgreSQL HTMX turned out to be an excellent fit for this type of application. Most interactions consist of: clicking a square, sending a POST request, returning an updated HTML fragment, swapping it into the page. No client-side state management was required. Capability URLs One design decision I particularly liked was using capability URLs instead of authentication. Each board receives a unique UUID: /board/5b97b663-1f2f-4e54-8d2f-f45f3272f870/ Possession of the URL grants access to that board. This removes the need for: user accounts, sessions, authentication, authorization logic. For a lightweight conference game this felt like the right trade-off. Going All-In On Type Safety I care a lot about clean code and strong typing in Python, so I decided to push the type system as far as possible. Instead of relying on a single type checker, I combined: ty zuban pyrefly This was paired with a strict ruff configuration with almost every rule enabled. One of the goals of the experiment was to see whether Claude could operate effectively within these constraints. What Worked This instruction worked surprisingly well: Prefer precise, narrow types (Enum, NewType, TypedDict, dataclasses with Final or Literal fields) over Any, untyped dict or list, or stringly-typed values. Illegal states should be unrepresentable in the type system rather than guarded against only at runtime. Once Claude had a few examples to follow, it started producing significantly better type annotations and more expressive domain models. Pre-commit hooks proved to be the first line of defence, catching issues before they ever reached CI. Linters, formatters, and all three type checkers ran automatically on every commit, providing rapid feedback and keeping the codebase consistent throughout the experiment. To avoid spending time hand-crafting the configuration, I used pc-init to generate a strict .pre-commit-config.yaml tailored for modern Python projects. This ensured that formatting, linting, and type checking became part of the development workflow rather than an afterthought. What Didn't Work Claude struggled with this instruction: All Python code MUST be fully type-annotated; untyped function signatures and untyped module-level values are not permitted. Instead of fixing missing annotations, it occasionally attempted to disable checks in pyproject.toml. Some manual intervention and code review were required to steer it back towards the desired standards. The experience reinforced an observation I've made repeatedly with coding agents: Agents optimize for making the error disappear, not necessarily for preserving your engineering constraints. If you care about those constraints, you still need strong feedback loops. Type Checker Observations Running all three type checkers together was still faster than a single mypy run. Interestingly, they complemented each other rather than duplicating effort: ty found some issues the others missed. pyrefly found different classes of problems. zuban felt the closest to mypy and was by far the easiest to configure. The newer type-checking ecosystem is still catching up with mypy in terms of documentation and examples, so reaching the level of strictness I wanted involved a fair amount of experimentation. Prize Categories Not submitting for any specific prize category. The real prize was finding out how far AI-assisted, specification-driven development can be pushed before human review becomes the limiting factor.

1 day ago

Mike C. Fletcher: PyOpenGL 4.0.0a1

I've been trying to make some time for Open Source projects again. I've been using LLMs for much of the coding because the vast bulk of it at this point is just grunt work. First up is PyOpenGL. The tests the LLM produced turned up a bunch of bugs in the core that have lain dormant for years because the endpoints weren't getting used. The LLM tests are not particularly fun or interesting, but they did a pretty good job of finding wrapping errors. They also exercised GLES and EGL enough to make it far more reasonable to actually use those two interfaces. Shout out to glfw python library for working cleanly on the Wayland only environment. Definitely helped to find the hidden GLX dependencies we had throughout the Linux platform implementation. One of the biggest ones there was the GLUT library. The other thing that came out was the GLE library being legacy (compatibility) OpenGL. PyOpenGL 4.0.0a1 is classified as a major release mostly because of the abandonment of old Pythons (<3.9) and old Numpy (<2). Other than that there's mostly just bug-fixes that came from the new test suites. GLU* gluUnProject4 missing arguments* gluNewQuadric/gluQuadricCallback fix the callback mechanism to work like Nurbs code* gluTessVertex/gluTessBeginPolygon and combine callback, original object return fixes* gluGetNurbsProperty added, allocates the output* gluNurbsCallbackData(EXT) argtype fix glGet Sizes* sizing tables regenerated based on results from size probing, lots of incorrect sizes fixed; note that these fixes are constrained to extensions I happen to have access to on my platforms* fix the code generator's constant generation* glGetPolygonStipple fixed size output* glGetCompressedTexImage glGetTexImageCompressed was ignoring level and using an ARB constant Wrappers* remove double wrapping on glGetHistogramParameter{f,i}vEXT, glGenVertexArrays, glDrawBuffersEXT (which was also mis-named glDrawBuffers)* glHistogram double wrapped as well, which was crashing vertex_array_object on import which was then causing higher level code to treat the extension as unsupported 64-bit Integer Arrays* GL_INT64 / GL_UNSIGNED_INT64 new array types for all of the array handlers No-Numpy Operation* ctypesarrays zeros/ones handler* a few spots where GLchar arrays were needed as return types* gl(Get)ProgramNamedParameter*NV input size fix* glGetActiveAttribARB optional bufSize parameter added* ARB.vertex_shader allow passign in size parameter* allow passing a ctypes char_p as shader-text GLES* images module for GLES* friendly wrappers mimicing the GL ones for lots of endpoints* glGetString/glGetStringi restype fix* Normalising of GLES extension names to the GL_* form (same as GL) General Bug Fixes* Large constant wrapping fix* Caching of extension/version data per-context* Core/version extension handles cases where VERSION is not the *first* token* ShaderProgram.retrieve() fix for unpacking glGetProgramBinary* input-or-output converter for args that can be either* ArrayDatatype.get_ffi_argtype etc PyPy specific mechanisms for array interactions Logging* make the log decorator more type-check friendly Packaging* License declaration fixes for more modern packaging tools There shouldn't be many significant regressions, as almost everything is a correctness fix, but there's a lot of new code, particularly for the GLES improvements. The alpha is up now for those who want to test the changes against their codebase, but this is an alpha release, so there may be more significant code changes as we move toward a 4.0.0 final release. There's still some work to do on the OpenGLContext release, but the teaser image above should give you an idea where it's going. It's a direct render of the Khronos sample asset A Beautiful Game

1 day ago

Python⇒Speed: 6× faster binary search: from compiled code to mechanical sympathy

How do you speed up computational Python code? A common, and useful, starting point is: Pick a good algorithm. Use a compiled language to write a Python extension. Maybe add parallelism so you can use multiple CPU cores. But what if you need more speed? Consider the following real problem, one of the steps in scikit-learn’s gradient histogram boosting algorithm: You have a large array of floating point numbers. You want to assign them to the integer range 0-254, spread out evenly. scikit-learn implements this by splitting up the full range of float values into 255 buckets, creating a sorted array of bucket boundaries, and then using binary search to choose the appropriate bucket for each value. The binary search is implemented in a compiled language, and it can run in parallel on multiple cores. Recently, as part of my work at Quansight, and inspired by two posts by Paul Khuong, I sped up this implementation significantly. How? By making sure the code wasn’t fighting against the CPU. In this article I’m going to walk you through that speed-up, demonstrated on a simplified example. Then I’m going to demonstrate a series of additional optimizations, with the final version running 6× faster than the original one. It’s worth knowing that I will be speeding through mentions of many different low-level hardware topics: instruction-level parallelism, branch (mis)prediction, memory caches, SIMD, and more. This is only one article, it can only briefly introduce you to what’s possible, it can’t function as an in-depth tutorial. So I’ll talk about how you can learn more about these topics at the end of the article. Read more...

3 days ago

Mike Driscoll: An Intro to Spiel – Creating Presentations in Your Terminal with Python

Have you ever wanted to create a presentation in your computer’s terminal? While this is an uncommon need, a clever open source developer has provided a solution to this problem! The project is called Spiel, and while it is currently archived, the idea is pretty cool. Spiel uses the Rich package to create the slides for your presentation. Note: while the GitHub page doesn’t explain why the project is archived, it appears to use a very old version of Textual which cannot be upgraded. Let’s spend a little time learning how this all works. Installing Spiel According to the Spiel GitHub page, you can try Spiel without even installing it if you have docker installed. Here’s how to try Spiel: docker run -it --rm ghcr.io/joshkarpel/spiel However, for the purposes of this tutorial, you really should install Spiel. To do that, you will be using pip. Open up your terminal and run the following: pip install spiel Feel free to create a Python virtual environment first if you don’t want to install Spiel into your global Python packages. Once you have Spiel installed, you can check that it is working by running the Spiel demo, like this: spiel demo present If that works, you are good to go! Creating Your Presentation The documentation gives a good example of how to create a one-slide presentation. Here’s their example: from rich.console import RenderableType from spiel import Deck, present deck = Deck(name=Your Deck Name) @deck.slide(title=Slide 1 Title) def slide_1() -> RenderableType: return Your content here! if __name__ == __main__: present(__file__) According to the documentation, there are two ways to add slides: Use the decorator like in the example above Use `deck.add_slides()` and pass in one or more Slide objects Here is a more complete example that creates a couple of custom slides: from rich.align import Align from rich.console import RenderableType from rich.style import Style from rich.text import Text from spiel import Deck, Slide, present def make_slide( title_prefix: str, text: Text, ) -> Slide: def content() -> RenderableType: return Align(text, align=center, vertical=middle) return Slide(title=f{title_prefix} Slide, content=content) deck = Deck(Test Deck) title_slide = make_slide(title_prefix=First, text=Text(Python 101 - All About Lists, style=Style(color=blue))) intro_slide = make_slide(title_prefix=Second, text=Text(A Python list is, style=Style(color=red)) ) deck.add_slides(title_slide, intro_slide) if __name__ == __main__: present(__file__) When you run this code in your terminal, you will see something like this: You can move to the next or previous slide using the arrow keys on your keyboard. If you want to exit, press CTRL+C. Wrapping Up Spiel seems like a neat package. It’s a shame that it is currently archived. Hopefully, the author will reopen it at some point, or someone else will pick up the torch. In the meantime, you can easily use it in a Python virtual environment and give it a try. The post An Intro to Spiel – Creating Presentations in Your Terminal with Python appeared first on Mouse Vs Python.

3 days ago

Talk Python to Me: #554: Trustworthy AI in Healthcare and Longevity

You ask an AI a question and it answers with total confidence. Most of the time, a confidently wrong answer is just an annoyance. But what if the question is medical, and there's a real patient on the other end? In that world, a hallucination isn't a bug, it's a patient-safety event. Sumit Gundawar is a London-based software engineer who builds the clinical platform for a UK longevity and aesthetic-medicine clinic, and his whole argument is that in high-stakes AI, the model is the easy part. Earning trust is the real engineering. We dig into grounding, refusal logic, human-in-the-loop design, and the messy frontier of longevity and biohacking, plus a live demo of an assistant that refuses to answer when it can't back up the claim. Let's get into it.<br/> <br/> <strong>Episode sponsors</strong><br/> <br/> <a href='https://talkpython.fm/sixfeetup'>Six Feet Up</a><br> <a href='https://talkpython.fm/training'>Talk Python Courses</a><br/> <br/> <h2 class=links-heading mb-4>Links from the show</h2> <div><strong>Guest</strong><br/> <strong>Sumit Gundawar</strong>: <a href=https://www.linkedin.com/in/sumit-gundawar-759470129/?featured_on=talkpython target=_blank >linkedin.com</a><br/> <br/> <strong>Course transcripts announcement</strong>: <a href=https://talkpython.fm/blog/posts/announcing-german-subtitles-on-courses/ target=_blank >talkpython.fm/blog</a><br/> <br/> <strong>Sumit Gundawar - JAX London Speaker</strong>: <a href=https://jaxlondon.com/speaker/sumit-gundawar/?featured_on=talkpython target=_blank >jaxlondon.com</a><br/> <strong>Anthropic</strong>: <a href=https://anthropic.com/?featured_on=talkpython target=_blank >anthropic.com</a><br/> <strong>OpenAI Platform</strong>: <a href=https://platform.openai.com/?featured_on=talkpython target=_blank >platform.openai.com</a><br/> <strong>Anthropic</strong>: <a href=https://anthropic.com/?featured_on=talkpython target=_blank >anthropic.com</a><br/> <strong>LangChain</strong>: <a href=https://langchain.com/?featured_on=talkpython target=_blank >langchain.com</a><br/> <strong>OWASP</strong>: <a href=https://owasp.org/?featured_on=talkpython target=_blank >owasp.org</a><br/> <strong>Pydantic</strong>: <a href=https://pydantic.dev/?featured_on=talkpython target=_blank >pydantic.dev</a><br/> <strong>EU AI Act - Regulatory Framework</strong>: <a href=https://digital-strategy.ec.europa.eu/en/policies/regulatory-framework-ai?featured_on=talkpython target=_blank >digital-strategy.ec.europa.eu</a><br/> <strong>HIPAA - HHS</strong>: <a href=https://www.hhs.gov/hipaa?featured_on=talkpython target=_blank >www.hhs.gov</a><br/> <strong>NHS</strong>: <a href=https://www.nhs.uk/?featured_on=talkpython target=_blank >www.nhs.uk</a><br/> <strong>Llama</strong>: <a href=https://llama.com/?featured_on=talkpython target=_blank >llama.com</a><br/> <strong>Qwen - QwenLM on GitHub</strong>: <a href=https://github.com/QwenLM?featured_on=talkpython target=_blank >github.com</a><br/> <strong>OpenAI Platform</strong>: <a href=https://platform.openai.com/?featured_on=talkpython target=_blank >platform.openai.com</a><br/> <strong>Hugging Face</strong>: <a href=https://huggingface.co/?featured_on=talkpython target=_blank >huggingface.co</a><br/> <strong>Llama</strong>: <a href=https://llama.com/?featured_on=talkpython target=_blank >llama.com</a><br/> <strong>Granola</strong>: <a href=https://www.granola.ai/?featured_on=talkpython target=_blank >www.granola.ai</a><br/> <strong>HIPAA - HHS</strong>: <a href=https://www.hhs.gov/hipaa?featured_on=talkpython target=_blank >www.hhs.gov</a><br/> <strong>CodeRabbit</strong>: <a href=https://www.coderabbit.ai/?featured_on=talkpython target=_blank >www.coderabbit.ai</a><br/> <strong>Cursor Origin</strong>: <a href=https://cursor.com/origin?featured_on=talkpython target=_blank >cursor.com</a><br/> <strong>GitHub Status</strong>: <a href=https://www.githubstatus.com/?featured_on=talkpython target=_blank >www.githubstatus.com</a><br/> <strong>Midjourney Medical</strong>: <a href=https://www.midjourney.com/medical?featured_on=talkpython target=_blank >www.midjourney.com</a><br/> <strong>Neko Health</strong>: <a href=https://www.nekohealth.com/?featured_on=talkpython target=_blank >www.nekohealth.com</a><br/> <strong>CERN</strong>: <a href=https://home.cern/?featured_on=talkpython target=_blank >home.cern</a><br/> <strong>ATLAS Experiment</strong>: <a href=https://atlas.cern/?featured_on=talkpython target=_blank >atlas.cern</a><br/> <br/> <strong>Watch this episode on YouTube</strong>: <a href=https://www.youtube.com/watch?v=pp2v9paEoq4 target=_blank >youtube.com</a><br/> <strong>Episode 554 deep-dive</strong>: <a href=https://talkpython.fm/episodes/show/554/trustworthy-ai-in-healthcare-and-longevitytakeaways-anchor target=_blank >talkpython.fm/554</a><br/> <strong>Episode transcripts</strong>: <a href=https://talkpython.fm/episodes/transcript/554/trustworthy-ai-in-healthcare-and-longevity target=_blank >talkpython.fm</a><br/> <br/> <strong>Theme Song: Developer Rap</strong><br/> <strong> Served in a Flask </strong>: <a href=https://talkpython.fm/flasksong target=_blank >talkpython.fm/flasksong</a><br/> <br/> <strong>---== Don't be a stranger ==---</strong><br/> <strong>YouTube</strong>: <a href=https://talkpython.fm/youtube target=_blank ><i class=fa-brands fa-youtube></i> youtube.com/@talkpython</a><br/> <br/> <strong>Bluesky</strong>: <a href=https://bsky.app/profile/talkpython.fm target=_blank >@talkpython.fm</a><br/> <strong>Mastodon</strong>: <a href=https://fosstodon.org/web/@talkpython target=_blank ><i class=fa-brands fa-mastodon></i> @talkpython@fosstodon.org</a><br/> <strong>X.com</strong>: <a href=https://x.com/talkpython target=_blank ><i class=fa-brands fa-twitter></i> @talkpython</a><br/> <br/> <strong>Michael on Bluesky</strong>: <a href=https://bsky.app/profile/mkennedy.codes?featured_on=talkpython target=_blank >@mkennedy.codes</a><br/> <strong>Michael on Mastodon</strong>: <a href=https://fosstodon.org/web/@mkennedy target=_blank ><i class=fa-brands fa-mastodon></i> @mkennedy@fosstodon.org</a><br/> <strong>Michael on X.com</strong>: <a href=https://x.com/mkennedy?featured_on=talkpython target=_blank ><i class=fa-brands fa-twitter></i> @mkennedy</a><br/></div>

3 days ago