The Curious Engineer

All blogs / Software / engineering practice

jd:/dev/blog

julien.danjou.info

Two decades of building software, shipping startups, and open source. Opinions included.

Software / engineering practiceAI / MLDevOps / SRE / infrastructurePython

Posts
287 from 15 Jan 2007 to 15 Sep 2026
Posting
weekly (35 in the last year)
Kind
personal blog
Feed
https://julien.danjou.info/rss.xml

2026 32

  1. Low Power Mode Is the Wrong Knob
  2. Every Customer Gets the Same Software. That's Ending.
  3. Art Was Never About the Effort
  4. Your LLM Is Not a Colleague
  5. Steve Yegge Deleted the Wrong Thing
  6. GitHub Actions Isn't a CI
  7. The Human Is the New Bottleneck
  8. The GitHub Platform Era Is Over
  9. Merge Queues Were Built for Humans. Agents Don't Wait.
  10. Agents Write My Code. Agents Review It. I Referee.
  11. Europe's Cloud Problem Isn't the Tech. It's the Mindset.
  12. I Shipped a Rust Binary. I Can't Write Rust.
  13. How Much Of A Library Do You Actually Use?
  14. The Hidden Corruption Tax of AI Delegation
  15. The AI Free Lunch Is (Almost) Over
  16. Twenty Years of Stacking Commits
  17. The Code Review Bottleneck Is You
  18. Fixing Alembic's Multiple Heads Problem with Git
  19. An AI Agent Emailed Me
  20. The SaaSpocalypse Won't Kill SaaS
  21. How to Be a Great Software Engineer in 2026
  22. Your CI Pipeline Wasn't Built for This
  23. The Flow Is Gone
  24. GitHub Is Thinking About Killing Pull Requests
  25. Open Source After the Extraction
  26. Open Source Is Getting Used to Death
  27. How Entire Works Under the Hood
  28. Agent-Written Code Needs More Than Git
  29. So I Will Never Write Code Again
  30. The Pre-AI Timestamp
  31. AI Won’t Kill Juniors. It Will Expose Seniors.
  32. Tech Is the Easy Part

2025 27

  1. GitHub Actions Pricing: The Platform Reality Check
  2. The Future Is Being Built Elsewhere
  3. AI feels like 1999 all over again
  4. 42 Lessons at 42
  5. Building Features One Prompt at a Time
  6. The Em Dash Is Dead
  7. The Synthetic Wave Is Already Here
  8. The Day I Got Custom Table Legs
  9. The Problem with OKRs Isn’t OKRs
  10. AI Is a Human Interface Nightmare
  11. Not Everything is a Hustle
  12. Why We Still Care About Quality
  13. Why Engineers Shouldn’t Decide Your Cloud Strategy
  14. Marc Chagall Never Painted That
  15. Security Starts Where Convenience Ends
  16. Why French Tech Is Playing Not to Lose
  17. From Failure to Focus
  18. Not Just a Job, It’s a Ride
  19. When Great Tech Isn’t Enough
  20. “It’s Complicated” Is Not an Excuse
  21. When Nobody Wants Your Product
  22. The Hidden Cost of Badly Typed Python Wrappers
  23. The $100,000 Mistake
  24. SaaS Pricing is Hard
  25. Why We Left Heroku
  26. Remote Work: Great, But Not Perfect
  27. Reflecting on 2024

2024 26

  1. The Collapse of Social Platforms
  2. Aligning Project Management with Company's Values
  3. SaaS and Work-based Pricing
  4. The Engineer’s Dilemma: What We Did Right at Mergify
  5. There's (almost) no GitLab
  6. What's going on with Dependabot?
  7. Why Stock Options are Terrible for Employees
  8. Why You Need Product Engineers
  9. How To Test Your API Integration
  10. Is GitHub the Future or Becoming Obsolete?
  11. Staying Competitive
  12. How to Be a Great Software Engineer
  13. Launching Byte Brigade
  14. Solving Build vs Buy
  15. Connecting the Dots with AI
  16. Reflecting on the Journey of "Nom d'un Pipeline !"
  17. The Challenges of Merge Queues
  18. Navigating SQL Migrations with Confidence: Introducing sql-compare
  19. A Journey of Embracing Linters
  20. The Biggest Mistake We Made Building Mergify: Navigating the Hiring Minefield
  21. Discovering the Tech Community in Toulouse: A Three-Year Journey
  22. A Decade of Writing Books and Selling 25,000 Copies
  23. The Biggest Mistake We Made Building Mergify: Navigating the Payment System Nightmare
  24. Sponsoring Conferences
  25. Attending Conferences
  26. I used to write

2021 1

  1. Debugging C code on macOS

2020 7

  1. I am a Software Engineer and I am in Charge
  2. Interview: The Performance of Python
  3. Being in Charge
  4. One year of Mergify
  5. Attending FOSDEM 2020
  6. Python Logging with Datadog
  7. Atomic lock-free counters in Python

2019 14

  1. Properly managing your .gitignore file
  2. Finding definitions from a source file and a line number in Python
  3. Sending Emails in Python — Tutorial with Code Examples
  4. Python and fast HTTP clients
  5. Dependencies Handling in Python
  6. The Art of PostgreSQL is out!
  7. Handling multipart/form-data natively in Python
  8. Advanced Functional Programming in Python: lambda
  9. An Introduction to Functional Programming with Python
  10. Writing Your Own Filtering DSL in Python
  11. Python + Memcached: Efficient Caching in Distributed Applications
  12. How to Log Properly in Python
  13. Serious Python released!
  14. Why You Should Care That Your SQL DDL is Transactional

2018 21

  1. Podcast.__init__: Gnocchi, a Time Series Database for your Metrics
  2. A multi-value syntax tree filtering in Python
  3. The Best flake8 Extensions for your Python Project
  4. More GitHub workflow automation
  5. Code Style Checks in Python
  6. High-Performance in Python with Zero-Copy and the Buffer Protocol
  7. Gnocchi 4.3.0 released
  8. Starting your first Python project
  9. How I stopped merging broken code
  10. Stop merging your pull requests manually
  11. A simple filtering syntax tree in Python
  12. Correct HTTP scheme in WSGI with Cloudflare
  13. Lessons from OpenStack Telemetry: Deflation
  14. Lessons from OpenStack Telemetry: Incubation
  15. Is Python a Good Choice for Entreprise Projects?
  16. Gnocchi engine optimization
  17. On blog migration
  18. Scaling a polling Python application with tooz
  19. Scaling a polling Python application with asyncio
  20. Gnocchi 4.2 release
  21. Scaling a polling Python application with parallelism

2017 22

  1. A safe GitHub workflow with Pastamaker
  2. Scaling Python released
  3. Scaling Python: the interviewees
  4. Mastering PostgreSQL
  5. Gnocchi 4.1 is out
  6. My interview with Cool Python Codes
  7. Gnocchi 4 performance
  8. Attending PyCon FR 2017
  9. Gnocchi or Prometheus?
  10. Using Gnocchi with Docker
  11. Easy Python logging with daiquiri
  12. Gnocchi 4 is out
  13. Sending GitHub pull-request from your shell
  14. OpenStack Summit Boston 2017 recap
  15. Gnocchi independence
  16. Python never gives up: the tenacity library
  17. Scalable metrics storage: Gnocchi on Amazon Web Services
  18. Sending your collectd metrics to Gnocchi
  19. FOSDEM 2017, recap
  20. Gnocchi 3.1 unleashed
  21. Scaling Python is on its way
  22. Packaging Python software with pbr

2016 17

  1. Attending OpenStack Summit Ocata
  2. Running an open source and upstream oriented team in agile mode
  3. Gnocchi 3.0 release
  4. AsciiDoc book toolchain released
  5. From decimal to timestamp with MySQL
  6. A retrospective of the OpenStack Telemetry project Newton cycle
  7. The definitive guide to Python exceptions
  8. The bad practice in FOSS projects management
  9. Gnocchi talk at the Paris Monitoring Meetup #6
  10. The Hacker's Guide to Python 3rd edition is out
  11. OpenStack Summit Newton from a Telemetry point of view
  12. Gnocchi 2.1 release
  13. Pifpaf, or how to run any daemon briefly
  14. The OpenStack Schizophrenia
  15. Gnocchi 2.0 release
  16. Timeseries storage and data compression
  17. FOSDEM 2016, recap

2015 17

  1. Profiling Python using cProfile: a concrete case
  2. Gnocchi 1.3.0 release
  3. OpenStack Summit Mitaka from a Telemetry point of view
  4. Benchmarking Gnocchi for fun & profit
  5. Gnocchi talk at OpenStack Paris Meetup #16
  6. My interview in le Journal du Hacker
  7. Visualize your OpenStack cloud: Gnocchi & Grafana
  8. Data validation in Python with voluptuous
  9. Reading LWN.net with Pocket
  10. Ceilometer, Gnocchi & Aodh: Liberty progress
  11. Timezones and Python
  12. Get back up and try again: retrying in Python
  13. OpenStack Summit Liberty from a Ceilometer & Gnocchi point of view
  14. My interview about software tests and Python
  15. The Hacker's Guide to Python, 2nd edition!
  16. Gnocchi 1.0: storing metrics and resources at scale
  17. Hacking Python AST: checking methods declaration

2014 10

  1. Distributed group management and locking in Python with tooz
  2. Python bad practice, a concrete case
  3. Tracking OpenStack contributions in GitHub
  4. OpenStack Ceilometer and the Gnocchi experiment
  5. OpenStack Design Summit Juno, from a Ceilometer point of view
  6. Making of The Hacker's Guide to Python
  7. Doing A/B testing with Apache httpd
  8. The Hacker's Guide to Python released!
  9. OpenStack Ceilometer Icehouse-2 milestone released
  10. Databases integration testing strategies with Python

2013 18

  1. OpenStack Design Summit Icehouse, from a Ceilometer point of view
  2. Python 3.4 single dispatch, a step into generic functions
  3. OpenStack Ceilometer Havana-3 milestone released
  4. Announcing The Hacker's Guide to Python
  5. The definitive guide on how to use static, class or abstract methods in Python
  6. OpenStack Ceilometer Havana-2 milestone released
  7. OpenStack meets Lisp: cl-openstack-client
  8. OpenStack Ceilometer Havana-1 milestone released
  9. Rant about Github pull-request workflow implementation
  10. OpenStack Design Summit Havana, from a Ceilometer point of view
  11. Hy, Lisp in Python
  12. Announcing Climate, the OpenStack capacity leasing project
  13. Ceilometer bug squash day #2
  14. OpenStack Ceilometer and Heat projects graduated
  15. Cloud tools for Debian
  16. Extending Swift with middleware: example with ClamAV
  17. Overriding cl-json object encoding
  18. Integrating cl-irc and cl-async

2012 19

  1. Ceilometer bug squash day #1
  2. Logitech Unifying devices support in UPower
  3. OpenStack France meetup #2
  4. Inside Synaps, a CloudWatch-like implementation for OpenStack
  5. Ceilometer 0.1 released
  6. Gnus notifications
  7. Sony Vaio Z Debian Linux support
  8. Ceilometer, the OpenStack metering project
  9. Emacs configuration published
  10. ERC notifications
  11. Logitech K750 keyboard and Unifying Receiver Linux support
  12. Making the jump: working freelance
  13. How to make Twitter's Bootstrap tabs bookmarkable
  14. OpenStack Swift eventual consistency analysis & bottlenecks
  15. First release of PyMuninCli
  16. mod_defensible 1.5 released
  17. xpyb 1.3 released
  18. Ten years as a Debian developer
  19. Google Calendar notifications using pynotify

2011 16

  1. Using GTK+ stock icons with pynotify
  2. My OpenStack work
  3. New job, new blog
  4. Google Contacts for Emacs
  5. OAuth 2.0 for Emacs
  6. Quitting my job
  7. Python sets comparisons
  8. Why not Lua
  9. Lua workshop at Fabelier/tmplab
  10. Using advanced filter with mod_authnz_ldap
  11. Org contacts now part of org-contrib
  12. My latest contributions to the Emacs' world
  13. Announcing Org-contacts
  14. Naquadah theme for Emacs
  15. OrgCamp Paris 2011 review
  16. Code fontification with Gnus and Org-mode

2010 24

  1. Color contrast correction
  2. Elisp color manipulation routines
  3. Org-mode and holidays
  4. Google Maps for Emacs: moving, caching and home
  5. Icon category support in Org-mode
  6. Transparent GIF support in Emacs 24
  7. No more dashes in Emacs 24 mode-line
  8. Enhancing Emacs mouse avoidance
  9. Why notmuch is not much good
  10. Gnus and Gravatar support
  11. Gnus news is good news!
  12. Emacs, Org, whatever the weather!
  13. Emacs and OfflineIMAP
  14. Emacs, Google Maps and BBDB
  15. Update on rainbow-mode
  16. Porting D-Bus to XCB: story of a failure
  17. M-x google-maps
  18. Announcing rainbow-mode
  19. Desktop notification support for Emacs
  20. Announcing erc-track-score
  21. Thoughts and rambling on the X protocol
  22. Making startup-notification XCB native
  23. Announcing muse-blog
  24. Entering the Emacs world

2009 9

  1. Python cairo and XCB support
  2. Teething troubles
  3. Courier to Dovecot migration
  4. Various news: what happend during summer
  5. TODO list management
  6. Upgrading to dovecot 1.2: hello Sieve!
  7. Taking the other direction
  8. OpenOffice is better as a pager than as a text processor
  9. startup-notification ported to XCB

2008 5

  1. Rants about Lua
  2. Security bug found in Imlib2
  3. The eggtray problem
  4. Unexpected VARMon new release
  5. ATL1E support in Linux 2.6.26-1

2007 2

  1. EWMH and XRandR
  2. Kicking out Web spammers with DNSBL