Armin Ronacher's Thoughts and Writings
- 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
- Custom Voices With Qwen3-TTS
- What is Codemode
- October
- Deser: Rethinking Rust Serialization
- September
- Interpreting Pangram
- P(doom)
- Astra for Coding: Why Are We Doing This Again?
- Latent Powers
- Anger, Anxiety and Agency
- August
- Fast and Hard Code
- What Is Reasoning
- Codeberg Divides
- July
- The Tower Keeps Rising
- Better Models: Worse Tools
- The Coming Loop
- June
- Dangerous Technology For Americans Only
- Gaslighting Openness
- Communities of Not
- Clanker: A Word For The Machine
- May
- Building Pi With Pi
- Pushing Local Models With Focus And Polish
- Content for Content’s Sake
- Before GitHub
- April
- Equity for Europeans
- The Center Has a Bias
- Mario and Earendil
- Absurd In Production
- Some Things Just Take Time
- March
- AI And The Ship of Theseus
- The Final Bottleneck
- February
- A Language For Agents
- Pi: The Minimal Agent Within OpenClaw
- January
- Colin and Earendil
- Agent Psychosis: Are We Going Insane?
- Porting MiniJinja to Go With an Agent
2025 44
- Advent of Slop: A Guest Post by Claude
- A Year Of Vibes
- What Actually Is Claude Code’s Plan Mode?
- Skills vs Dynamic MCP Loadouts
- Let’s Destroy The European Union!
- December
- LLM APIs are a Synchronization Problem
- Agent Design Is Still Hard
- Absurd Workflows: Durable Execution With Just Postgres
- November
- Regulation Isn’t the European Trap — Resignation Is
- Building an Agent That Leverages Throwaway Code
- October
- 90 percent
- September
- What’s a Foreigner?
- 996
- Passkeys and Modern Authentication
- Your MCP Doesn’t Need 30 Tools: It Needs Code
- August
- In Support Of Shitty Types
- Agentic Coding Things That Didn’t Work
- July
- From Async/Await to Virtual Threads
- Welcoming The Next Generation of Programmers
- Tools: Code Is All You Need
- My First Open Source AI Generated Library
- June
- We Can Just Measure Things
- Agentic Coding Recommendations
- GenAI Criticism and Moral Quandaries
- AI Changes Everything
- I’m Leaving Sentry
- March
- Rust Any Part 3: Finally we have Upcasts
- Bridging the Efficiency Gap Between FromStr and String
- Ugly Code and Dumb Things
- February
- Seeking Purity
- Fat Rand: How Many Lines Do You Need To Generate A Random Number?
- How I Use AI: Meet My Promptly Hired Model Intern
- January
- Build It Yourself
- Automatic Server Reloading in Rust on Change: What is listenfd/systemfd?
2024 29
- Reflecting on Life
- December
- Constraints are Good: Python’s Metadata Dilemma
- Playground Wisdom: Threads Beat Async/Await
- What if My Tribe Is Wrong?
- November
- Make It Ephemeral: Software Should Decay and Lose Data
- The Inevitability of Mixing Open Source and Money
- October
- FSL: A Better Business/Open Source Balance Than AGPL
- September
- Accidental Spending: A Case For an Open Source Tax?
- Multiversion Python Thoughts
- Progress
- MiniJinja: Learnings from Building a Template Engine in Rust
- August
- Rye and uv: August is Harvest Season for Python Packaging
- What is Self Hosted? What is a Stack?
- June
- Your Node is Leaking Memory? setTimeout Could be the Reason
- Using Rust Macros for Custom VTables
- May
- Skin in the Game
- March
- On Tech Debt: My Rust Library is now a CDO
- Austria: A Fearful Country In Need Of A Vision
- February
- Rye Grows With UV
- Rye: A Vision Continued
2023 14
- The Life and Death of Open Source Companies
- Untyped Python: The Python That Was
- December
- Bundleless: Not Doing Things Makes You Fast
- FSL: A License For the Bazaar, Not the Cathedral
- Post Covid Remote Work Doesn’t Work As Well
- November
- EuroRust 2023 Reflections: What’s a Conference For?
- October
- Lessons from a Pessimist: Make Your Pessimism Productive
- March
- I Think AI Would Kill my Wife
- February
- Everybody is More Complex Than They Seem
2022 13
- A Better Way to Borrow in Rust: Stack Tokens
- Scaling Mastodon is Impossible
- November
- You Can’t Do That: Abstracting over Ownership in Rust with Higher-Rank Type Bounds. Or Can You?
- September
- Congratulations: We Now Have Opinions on Your Open Source Contributions
- July
- A Non Fungible Future
- Uninitialized Memory: Unsafe Rust is Too Hard
- January
- Dependency Risk and Funding
- Rust Any Part 2: As-Any Hack
- Rust Any Part 1: Extension Maps in Rust
2021 4
2020 11
2019 6
2018 4
2017 2
2016 12
2015 19
- Introducing Lektor — A Static File Content Management System For Python
- December
- Python’s Hidden Regular Expression Gems
- November
- The End of Safe Harbor and a Scary Path Forward
- October
- Samsung Pay’s MST Transactions and Merchant’s Ability to Detect “Cloned” Magstripe Tracks
- August
- On Countries, Citizenships, Residence and Paying Taxes
- Rust for Python Programmers
- May
- Unintended Affordances (or why I believe encrypting everything is a bad idea)
- April
- Bitcoin is Not a Good Consumer Product
- Nameko for Microservices
- The Sentry in my Life
- March
- Why I Don’t Hate Git: Hidden Consistency
- February
2014 19
- Improved Error Handling in Rust
- The Future of Payments and Open Source Support
- November
- Don’t Panic! The Hitchhiker’s Guide to Unwinding
- On Error Handling in Rust
- A Fresh Look at Rust
- October
- Revenge of the Types
- August
- The Python I Would Like To See
- Everything you did not want to know about Unicode in Python 3
- May
- A Case for Upserts
- February
- On Programming Communities
- Python on Wheels
- January
- UCS vs UTF-8 as Internal String Encoding
- More About Unicode in Python 2 and 3
2013 22
- Stop Being Cute and Clever
- December
- Emotional Programming in Open Source
- My Favorite Database is the Network
- November
- Beautiful Native Libraries
- August
- Licensing in a Post Copyright World
- July
- Application Mimetypes and Encodings
- The Updated Guide to Unicode on Python
- Say “Yes” to JavaScript
- New Werkzeug and Flask Releases
- June
- My Slides Workflow
- May
- Porting to Python 3 Redux
- Start Writing More Classes
- February
- What was my 2012
- January
- OSX as Transparent Wifi MITM Proxy
2012 18
- SQL is Agile
- December
- Death by Million Cubes
- November
- Such a Little Thing: The Semicolon in Rust
- October
- Websockets 101
- September
- About the Lack of Updates
- Open Source Financing
- August
- Codec Confusion in Python
- Stateless and Proud in the Realtime World
- ZeroMQ: Disconnects are Good for You
- June
- Python Packaging: Hate, hate, hate everywhere
- Appreciating Design
- February
2011 22
- The Problem with Implicit Scoping in CoffeeScript
- Thoughts on Python 3
- December
- Battlelog: Modern Web Applications are Here
- November
- Dealing with the Python Import Blackbox
- September
- WSGI and the Pluggable Pipe Dream
- July
- SQLAlchemy and You
- “Eppur si muove!”* - Dealing with Timezones in Python
- Python and the Principle of Least Astonishment
- Flask at PyCon 2011
- March
- Dealing with JavaScript’s Automatic Semicolon Insertion
- February
- Be careful with exec and eval in Python
- Python, the Web and Little Things on my Mind
- Writing Forwards Compatible Python Code
- January
- Things are not as easy as they seem
- A Recap
2010 25
- Common Mistakes as Python Web Developer
- Open Source and Games
- Not So Stupid Template Languages
- December
- Computing in Perspective
- Collections in C
- New Blog
- November
- The Lazy User is OpenID’s Security Issue
- August
- Git and Mercurial Branching
- Sharing Vim Tricks
- July
- Licenses dammed Licenses
- June
- Opening The Flask
- WSGI on Python 3
- May
- April 1st Post Mortem
- April
- Porting to Python 3 — A Guide
- February
- Pros and Cons about Python 3
- January
- Status Update 2010
2009 16
- Pro/Cons about Werkzeug, WebOb and Django
- August
- Singletons and their Problems in Python
- July
- free VS free
- C++ Pitfalls
- April
- Going back to Windows
- March
- “STD” stands for Sleazy, Tattered and Dead
- The 1000% Speedup, or, the stdlib sucks
- Are you sure you want to use GPL?
- February
- The Sad State of MySQL Python
- January
- Opinionated Frameworks
2008 18
- Apologies to Github
- September
- Bitbucket is no Bit bucket
- Mono isn’t just for Apes
- August
- Deploying Python Web Applications
- July
- Whitespace Sensitivity
- The Pythonistas are Wrong
- April
- Use OS X you Git!
- There’s Music, And then there is Progressive
- March
- How not to do XML
- February
- Mercurial for Subversion Users
- January
- Python Template Engine Comparison