The Curious Engineer

All blogs / Software / engineering practice

Coffee on the Keyboard

coffeeonthekeyboard.com

James writes stuff about programming, mostly

Software / engineering practiceEngineering management / careersDistributed systems / cloudAI / ML

Posts
272 from 18 Jun 2009 to 29 Mar 2026
Posting
now and then (4 in the last year)
Kind
personal blog
Feed
https://www.coffeeonthekeyboard.com/rss/

2026 4

  1. There's no such thing as simultaneous
  2. Introducing SPIFFE AuthZ Proxy
  3. LLMs are not neutral tools, using them harms people today
  4. Using Risk Taxonomies to Speed Up Development and Avoid Churn

2025 4

  1. Learn to never have a good idea
  2. Discomfort Needs Safety
  3. Zero-cost Future Proofing: Meaningful Namespaces
  4. Have More Impact by Doing the Right Work

2024 6

  1. Data Sinks and Logic Floats
  2. Advanced Blamelessness is Owning Mistakes without Fear
  3. What do you mean by "bad" software?
  4. Distributed Teams Need Face Time
  5. There's a Difference between "Publicly Available" and "Free as in Speech"
  6. Stuff I've Been Reading - March 1, 2024

2023 17

  1. Debt, Depreciation, and Sustaining Engineering Work
  2. Starring our Monolith in the Role of...
  3. Introducing API Boundaries to Prepare for Bigger Changes
  4. When to use Feature Flags: Extra-Ordinary Unconfidence
  5. Code is Knowledge
  6. Using Timers to Learn
  7. Go Interfaces as Requirements, not Capabilities
  8. Changing the Meaning: Breaking Semantic Changes
  9. Three Models of Value
  10. Constrain Your Data Access for Fun and Scale
  11. Conceptual, Logical and Physical Data Models
  12. Building Extensibility into APIs from the Start
  13. In defense of unit tests
  14. Sliding Windows of Compatibility
  15. Caller-controlled Rollouts
  16. The Creative Power of Zero
  17. Zero Downtime and the Art of Continuous Deployment

2022 7

  1. Tech Debt, Depreciation, and Features
  2. Root Cause, Proximal Cause, or Least Effort to Remediate
  3. Open Source Subway Map
  4. Naming metrics with and without tags
  5. What is "Tech Depreciation?"
  6. So you want to depend on something?
  7. The Triforce of Deployment

2019 1

  1. Unclear Asks are Killing your Team

2015 6

  1. Storing date, time, and timezone for future events
  2. An Object Caching Pattern for Django
  3. For the love of Email
  4. Digging into "that" Python error
  5. Visualizing the 2015 SotU on TodaysMeet
  6. How TodaysMeet Works

2014 11

  1. Testing with Django's Cache
  2. Bounties and Tips
  3. Biweekly-ish Update 07/Nov/2014
  4. Mozilla's Secret Browser
  5. Irregular Update, 24/Oct/2014
  6. Irregular Update 04/Oct/2014
  7. Best Practices for Happy Webhooks
  8. Python StatsD Client Version 3.0
  9. What's Next
  10. On Mozilla and Brendan Eich
  11. Next for NextUp

2013 14

  1. Don't Do, Write
  2. TIC #sttp
  3. Onward.ly!
  4. Valley vs Alley
  5. Pseudonymity and Consequences
  6. Simple out-of-process lock with Python and Memcached
  7. Using supervisorctl with linux permissions but without root or sudo
  8. Quo Vado?
  9. A New Chapter
  10. Our Daily Errors
  11. Just One WebKit
  12. Elegance
  13. Working from Home
  14. Actually Starting an Open Source Project

2012 24

  1. Web Advent
  2. Mozilla's Security Best Practices
  3. Mass Assignment - Security Part 10
  4. Intermission
  5. Stay Up to Date - Basic Security Part 9
  6. Click-Jacking and a little Phishing - Basic Security Part 8
  7. Server Configuration - Basic Security Part 7
  8. Session Fixation and Hijacking - Basic Security Part 6
  9. Access Control - Basic Security Part 5
  10. Injections, SQL and otherwise - Basic Security Part 4
  11. CSRF: Cross-Site Request Forgeries - Basic Security Part 3
  12. XSS: Cross-Site Scripting - Basic Security Part 2
  13. Password Storage - Basic Security Part 1
  14. Best Basic Security Practices (Especially with Django)
  15. Putting My Slides Where My Mouth Is
  16. High MySQL CPU Load Today? Quick Fix
  17. Calling all Mozilla Community Members in New York!
  18. Where are James' Slides?
  19. Why Django Sucks, Except When It Doesn't
  20. That's What He... is Sorry For
  21. Developing a Culture of Testing
  22. Better 632
  23. Not OK
  24. Performance is a Feature

2011 20

  1. Thank You, Steve
  2. So You Want Me to Hire You
  3. Acronyms you should know: MTTD and MTTR
  4. Say hi to Scottbot
  5. Pride and Joy: Firefox 4 is Out!
  6. The Thing About Twitter
  7. A brief SumoDev update
  8. Weekly Update for 11/3/11
  9. Weekly Update 04/03/2011
  10. O Hai Django AdminPlus
  11. SUMO in Q2
  12. The Future of TodaysMeet
  13. The Problem with TodaysMeet
  14. Bleach 1.0rc2
  15. Introducing Waffle for Django
  16. Bleach 1.0rc
  17. Project365: January 6
  18. Broken Social Scene 2010-09-18
  19. 2011 Goals
  20. Top 5 Albums of 2010

2010 30

  1. The future of SUMO development
  2. First Impressions of RockMelt
  3. An End and a Beginning
  4. Django Fixtures with Circular Foreign Keys
  5. Things I Love about Fall
  6. Semi-disconnected this weekend
  7. Moving to New York
  8. Weekly Update for 21/06/2010
  9. Developing at Scale: Database Replication
  10. How Hulu Should Use My Data
  11. Weekly Update for 06/14/2010
  12. Weekly Update for 07/06/2010
  13. Weekly Update for 24/05/2010
  14. Surviving Pac Man
  15. Weekly Update for 17/05/2010
  16. Weekly Update for 10/05/2010
  17. Playing with the Real-Time Web
  18. Farewell, Facebook
  19. Weekly Update for 03/05/2010
  20. Weekly Update for 27/04/2010
  21. Weekly Update for 12/04/2010
  22. Testing with Legacy Data in Django
  23. Weekly(?) Update for 5/4/2010
  24. SUMO's Black Triangle
  25. All Starred Messages in Thunderbird 3
  26. Weekly Update for 3/15/2010
  27. Code-sharing Update
  28. Bleach, HTML sanitizer and auto-linker
  29. The Evolution of SUMO
  30. How to Install VirtualBox Guest Additions in Fedora 12

2009 21

  1. Local Web Development
  2. So You Wanna Help Mozilla?
  3. Mistakes: Importing Data with MySQL
  4. Getting Involved with Mozilla Web Dev
  5. Mozilla Web Development is Open Source
  6. (Don't) Close Firefox with Last Tab
  7. Upgrade Flash in Firefox
  8. Nextup 282
  9. Excitement about HTML5: Forms
  10. What Time Is It There?
  11. Reservations about HTML5
  12. EzGz: WordPress GZip Plugin
  13. Programming in Middle School?
  14. My New Job
  15. Why do I have to learn this?
  16. The Fallacy of the "Singularity"
  17. Google Loves Competition
  18. New Information Processes
  19. WP: Better Search Widget 1.1
  20. Widget l10n
  21. A Personal Update

Undated 107

  1. The fallacy of microservice infrastructures 1344
  2. Open source update bleach 1359
  3. Open source update jingo 1373
  4. Open source update waffle 1358
  5. New year new role 1388
  6. Piefection slides up
  7. Remembering todaysmeet
  8. Small fish big pond using your computer on the msu network 11
  9. Europe 06 12
  10. Hitchhiking 13
  11. December 14
  12. Happy new year 15
  13. February 16
  14. Dublin to paris 17
  15. Travelpunk 18
  16. Counter clockwise 19
  17. Thank you 20
  18. And the big steel rail gonna carry me 21
  19. Mail call 22
  20. Stephen colbert 23
  21. 8 days and counting 24
  22. Happy birthday 25
  23. So long fare well auf 26
  24. Ah paris 27
  25. Ac milan and the geesinks 28
  26. Out of roma 29
  27. Another italian city 30
  28. Deutschland deutschland 31
  29. Home again 32
  30. Css good everything else bad 33
  31. Theres a special place 34
  32. A bleeding heart christmas 35
  33. May you always 36
  34. Localindie 37
  35. Modular 38
  36. Sushi 40
  37. Crazy german 41
  38. Hoodies 42
  39. Voodoo lighthouse 43
  40. No checks cache 44
  41. Photoshop silkscreen effect 45
  42. Victims of capitalism 46
  43. Mysql subqueries 48
  44. Adapting wikiddiction for profit 49
  45. Redesign 50
  46. Reading material anorexic writing 51
  47. Organization 52
  48. Use semantics to guide design 53
  49. Technology conference 2007 54
  50. Picofiction 55
  51. Amazon mp3s 56
  52. Yahoo pipes 57
  53. Crysis 58
  54. How to upgrade or recompile php on rhel5 59
  55. To read a list 60
  56. Charlie browns football duke nukem forever 61
  57. Game independent 62
  58. Wordpress plugin insert ad code 63
  59. Universal accessibility 64
  60. What is universal accessibility part one in a trilogy 66
  61. Assessing accessibility part two in a trilogy 67
  62. Bobby offline 68
  63. Building accessible sites part three in a trilogy 69
  64. Ie8 and version targeting 70
  65. Episode iv a new domain 71
  66. Microsoft listened 72
  67. Winnie cooper answers your math questions 75
  68. Skinningleatherworking 76
  69. Cartwheel 78
  70. Systemoutprintlnhello world 79
  71. The hunt 80
  72. Dr voyeurism or how i learned to stop worrying and love twitter 81
  73. Shortcc makes shortcuts 84
  74. The new blog 89
  75. Better living through memcached 85
  76. The w3c sucks 92
  77. Work pattern designing web sites 93
  78. Your internet classroom 95
  79. Do you designed by 96
  80. Help me scale 97
  81. Computer related injury 98
  82. How do you find new things 99
  83. Exploring the web 102
  84. A twitterers tipping point 103
  85. Expertise and authority 20 104
  86. Organizing css 105
  87. User interface be nice 107
  88. New twitter name 108
  89. Identity 20 a primer 106
  90. Chrome is not a browser 111
  91. Wp plugin better search widget 113
  92. Does the web hate school 123
  93. Connecting php iis 6 and sql server 2005 129
  94. In the shadows of media giants 136
  95. Go vote today 142
  96. Responsible sql how to authenticate 144
  97. Oh the humanity of twitter 155
  98. Stop supporting ie6 163
  99. Why i unfollowed you 169
  100. When to ask when to google 174
  101. Private variables in javascript 177
  102. A twitter turn around 195
  103. Firefox open in blank tab 197
  104. Communities within communities 204
  105. Javascript private static members part 1 208
  106. Social media marketing this is your chance 215
  107. Javascript private static members part 2 218