The Curious Engineer

All blogs / Python

Armin Ronacher's Thoughts and Writings

lucumr.pocoo.org

PythonRustAI / MLEssays / personalEngineering blogs

Posts
350 from 19 Apr 2007 to 29 Oct 2026
Posting
weekly (54 in the last year)
Kind
personal blog
Feed
https://lucumr.pocoo.org/feed.atom

2026 44

  1. Custom Voices With Qwen3-TTS
  2. What is Codemode
  3. October
  4. Deser: Rethinking Rust Serialization
  5. September
  6. Interpreting Pangram
  7. P(doom)
  8. Astra for Coding: Why Are We Doing This Again?
  9. Latent Powers
  10. Anger, Anxiety and Agency
  11. August
  12. Fast and Hard Code
  13. What Is Reasoning
  14. Codeberg Divides
  15. July
  16. The Tower Keeps Rising
  17. Better Models: Worse Tools
  18. The Coming Loop
  19. June
  20. Dangerous Technology For Americans Only
  21. Gaslighting Openness
  22. Communities of Not
  23. Clanker: A Word For The Machine
  24. May
  25. Building Pi With Pi
  26. Pushing Local Models With Focus And Polish
  27. Content for Content’s Sake
  28. Before GitHub
  29. April
  30. Equity for Europeans
  31. The Center Has a Bias
  32. Mario and Earendil
  33. Absurd In Production
  34. Some Things Just Take Time
  35. March
  36. AI And The Ship of Theseus
  37. The Final Bottleneck
  38. February
  39. A Language For Agents
  40. Pi: The Minimal Agent Within OpenClaw
  41. January
  42. Colin and Earendil
  43. Agent Psychosis: Are We Going Insane?
  44. Porting MiniJinja to Go With an Agent

2025 44

  1. Advent of Slop: A Guest Post by Claude
  2. A Year Of Vibes
  3. What Actually Is Claude Code’s Plan Mode?
  4. Skills vs Dynamic MCP Loadouts
  5. Let’s Destroy The European Union!
  6. December
  7. LLM APIs are a Synchronization Problem
  8. Agent Design Is Still Hard
  9. Absurd Workflows: Durable Execution With Just Postgres
  10. November
  11. Regulation Isn’t the European Trap — Resignation Is
  12. Building an Agent That Leverages Throwaway Code
  13. October
  14. 90 percent
  15. September
  16. What’s a Foreigner?
  17. 996
  18. Passkeys and Modern Authentication
  19. Your MCP Doesn’t Need 30 Tools: It Needs Code
  20. August
  21. In Support Of Shitty Types
  22. Agentic Coding Things That Didn’t Work
  23. July
  24. From Async/Await to Virtual Threads
  25. Welcoming The Next Generation of Programmers
  26. Tools: Code Is All You Need
  27. My First Open Source AI Generated Library
  28. June
  29. We Can Just Measure Things
  30. Agentic Coding Recommendations
  31. GenAI Criticism and Moral Quandaries
  32. AI Changes Everything
  33. I’m Leaving Sentry
  34. March
  35. Rust Any Part 3: Finally we have Upcasts
  36. Bridging the Efficiency Gap Between FromStr and String
  37. Ugly Code and Dumb Things
  38. February
  39. Seeking Purity
  40. Fat Rand: How Many Lines Do You Need To Generate A Random Number?
  41. How I Use AI: Meet My Promptly Hired Model Intern
  42. January
  43. Build It Yourself
  44. Automatic Server Reloading in Rust on Change: What is listenfd/systemfd?

2024 29

  1. Reflecting on Life
  2. December
  3. Constraints are Good: Python’s Metadata Dilemma
  4. Playground Wisdom: Threads Beat Async/Await
  5. What if My Tribe Is Wrong?
  6. November
  7. Make It Ephemeral: Software Should Decay and Lose Data
  8. The Inevitability of Mixing Open Source and Money
  9. October
  10. FSL: A Better Business/Open Source Balance Than AGPL
  11. September
  12. Accidental Spending: A Case For an Open Source Tax?
  13. Multiversion Python Thoughts
  14. Progress
  15. MiniJinja: Learnings from Building a Template Engine in Rust
  16. August
  17. Rye and uv: August is Harvest Season for Python Packaging
  18. What is Self Hosted? What is a Stack?
  19. June
  20. Your Node is Leaking Memory? setTimeout Could be the Reason
  21. Using Rust Macros for Custom VTables
  22. May
  23. Skin in the Game
  24. March
  25. On Tech Debt: My Rust Library is now a CDO
  26. Austria: A Fearful Country In Need Of A Vision
  27. February
  28. Rye Grows With UV
  29. Rye: A Vision Continued

2023 14

  1. The Life and Death of Open Source Companies
  2. Untyped Python: The Python That Was
  3. December
  4. Bundleless: Not Doing Things Makes You Fast
  5. FSL: A License For the Bazaar, Not the Cathedral
  6. Post Covid Remote Work Doesn’t Work As Well
  7. November
  8. EuroRust 2023 Reflections: What’s a Conference For?
  9. October
  10. Lessons from a Pessimist: Make Your Pessimism Productive
  11. March
  12. I Think AI Would Kill my Wife
  13. February
  14. Everybody is More Complex Than They Seem

2022 13

  1. A Better Way to Borrow in Rust: Stack Tokens
  2. Scaling Mastodon is Impossible
  3. November
  4. You Can’t Do That: Abstracting over Ownership in Rust with Higher-Rank Type Bounds. Or Can You?
  5. September
  6. Congratulations: We Now Have Opinions on Your Open Source Contributions
  7. July
  8. A Non Fungible Future
  9. Uninitialized Memory: Unsafe Rust is Too Hard
  10. January
  11. Dependency Risk and Funding
  12. Rust Any Part 2: As-Any Hack
  13. Rust Any Part 1: Extension Maps in Rust

2021 4

  1. Rust Adventures: Abusing Serde
  2. November
  3. Be Humble
  4. February

2020 11

  1. How to WASM DWARF
  2. November
  3. USB-C Hubs and Ethernet
  4. July
  5. My Standard Desktop
  6. May
  7. Temporary Contact Number based Contact Tracing
  8. April
  9. App Assisted Contact Tracing
  10. I’m not feeling the async pressure
  11. January

2019 6

  1. Open Source Migrates With Emotional Distress
  2. December
  3. Open Source, SaaS and Monetization
  4. November
  5. Updated Thoughts on Trust Scaling
  6. July

2018 4

  1. Python
  2. July
  3. You can’t Rust that
  4. March

2017 2

  1. Diversity in Technology and Open Source
  2. June

2016 12

  1. Be Careful with Python’s New-Style String Format
  2. December
  3. Be Careful About What You Dislike
  4. November
  5. I don’t understand Python’s Asyncio
  6. October
  7. Rust and Rest
  8. July
  9. A Europe For Our Children
  10. May
  11. Micropackages and Open Source Trust Scaling
  12. March

2015 19

  1. Introducing Lektor — A Static File Content Management System For Python
  2. December
  3. Python’s Hidden Regular Expression Gems
  4. November
  5. The End of Safe Harbor and a Scary Path Forward
  6. October
  7. Samsung Pay’s MST Transactions and Merchant’s Ability to Detect “Cloned” Magstripe Tracks
  8. August
  9. On Countries, Citizenships, Residence and Paying Taxes
  10. Rust for Python Programmers
  11. May
  12. Unintended Affordances (or why I believe encrypting everything is a bad idea)
  13. April
  14. Bitcoin is Not a Good Consumer Product
  15. Nameko for Microservices
  16. The Sentry in my Life
  17. March
  18. Why I Don’t Hate Git: Hidden Consistency
  19. February

2014 19

  1. Improved Error Handling in Rust
  2. The Future of Payments and Open Source Support
  3. November
  4. Don’t Panic! The Hitchhiker’s Guide to Unwinding
  5. On Error Handling in Rust
  6. A Fresh Look at Rust
  7. October
  8. Revenge of the Types
  9. August
  10. The Python I Would Like To See
  11. Everything you did not want to know about Unicode in Python 3
  12. May
  13. A Case for Upserts
  14. February
  15. On Programming Communities
  16. Python on Wheels
  17. January
  18. UCS vs UTF-8 as Internal String Encoding
  19. More About Unicode in Python 2 and 3

2013 22

  1. Stop Being Cute and Clever
  2. December
  3. Emotional Programming in Open Source
  4. My Favorite Database is the Network
  5. November
  6. Beautiful Native Libraries
  7. August
  8. Licensing in a Post Copyright World
  9. July
  10. Application Mimetypes and Encodings
  11. The Updated Guide to Unicode on Python
  12. Say “Yes” to JavaScript
  13. New Werkzeug and Flask Releases
  14. June
  15. My Slides Workflow
  16. May
  17. Porting to Python 3 Redux
  18. Start Writing More Classes
  19. February
  20. What was my 2012
  21. January
  22. OSX as Transparent Wifi MITM Proxy

2012 18

  1. SQL is Agile
  2. December
  3. Death by Million Cubes
  4. November
  5. Such a Little Thing: The Semicolon in Rust
  6. October
  7. Websockets 101
  8. September
  9. About the Lack of Updates
  10. Open Source Financing
  11. August
  12. Codec Confusion in Python
  13. Stateless and Proud in the Realtime World
  14. ZeroMQ: Disconnects are Good for You
  15. June
  16. Python Packaging: Hate, hate, hate everywhere
  17. Appreciating Design
  18. February

2011 22

  1. The Problem with Implicit Scoping in CoffeeScript
  2. Thoughts on Python 3
  3. December
  4. Battlelog: Modern Web Applications are Here
  5. November
  6. Dealing with the Python Import Blackbox
  7. September
  8. WSGI and the Pluggable Pipe Dream
  9. July
  10. SQLAlchemy and You
  11. “Eppur si muove!”* - Dealing with Timezones in Python
  12. Python and the Principle of Least Astonishment
  13. Flask at PyCon 2011
  14. March
  15. Dealing with JavaScript’s Automatic Semicolon Insertion
  16. February
  17. Be careful with exec and eval in Python
  18. Python, the Web and Little Things on my Mind
  19. Writing Forwards Compatible Python Code
  20. January
  21. Things are not as easy as they seem
  22. A Recap

2010 25

  1. Common Mistakes as Python Web Developer
  2. Open Source and Games
  3. Not So Stupid Template Languages
  4. December
  5. Computing in Perspective
  6. Collections in C
  7. New Blog
  8. November
  9. The Lazy User is OpenID’s Security Issue
  10. August
  11. Git and Mercurial Branching
  12. Sharing Vim Tricks
  13. July
  14. Licenses dammed Licenses
  15. June
  16. Opening The Flask
  17. WSGI on Python 3
  18. May
  19. April 1st Post Mortem
  20. April
  21. Porting to Python 3 — A Guide
  22. February
  23. Pros and Cons about Python 3
  24. January
  25. Status Update 2010

2009 16

  1. Pro/Cons about Werkzeug, WebOb and Django
  2. August
  3. Singletons and their Problems in Python
  4. July
  5. free VS free
  6. C++ Pitfalls
  7. April
  8. Going back to Windows
  9. March
  10. “STD” stands for Sleazy, Tattered and Dead
  11. The 1000% Speedup, or, the stdlib sucks
  12. Are you sure you want to use GPL?
  13. February
  14. The Sad State of MySQL Python
  15. January
  16. Opinionated Frameworks

2008 18

  1. Apologies to Github
  2. September
  3. Bitbucket is no Bit bucket
  4. Mono isn’t just for Apes
  5. August
  6. Deploying Python Web Applications
  7. July
  8. Whitespace Sensitivity
  9. The Pythonistas are Wrong
  10. April
  11. Use OS X you Git!
  12. There’s Music, And then there is Progressive
  13. March
  14. How not to do XML
  15. February
  16. Mercurial for Subversion Users
  17. January
  18. Python Template Engine Comparison

2007 8

  1. Django’s Problems and Why 2.0 is a Bad Idea
  2. December
  3. Why Python Sucks
  4. June
  5. Getting Started with WSGI
  6. May
  7. Digital Fortress — Stranger Than Fiction
  8. April