The Curious Engineer

All blogs / Software / engineering practice

ntietz.com blog

ntietz.com/blog

Software / engineering practiceRustPythonEssays / personal

Posts
218 from 22 Feb 2015 to 17 Jun 2026
Posting
monthly (13 in the last year)
Kind
personal blog
Feed
https://ntietz.com/atom.xml

2026 11

  1. Where I've been, and the future of this blog
  2. Let yourself fall down more
  3. You can't always fix it
  4. Binding port 0 to avoid port collisions
  5. TIL: Docker log rotation
  6. Using an engineering notebook
  7. Some good English word datasets
  8. Making niche solutions is the point
  9. 3D printing my laptop ergonomic setup
  10. Bayes theorem and how we talk about medical tests
  11. Reflecting on 2025, preparing for 2026

2025 26

  1. A new system for organizing my writing and projects
  2. Automating updates to a digital vigil
  3. Interview with a new hosting provider founder
  4. Custom for designing, off-the-shelf for shipping
  5. Visualizing distributions with pepperoni pizza (and javascript)
  6. Covers as a way of learning music and code
  7. That boolean should probably be something else
  8. Proving that every program halts
  9. Taking a break
  10. Measuring my Framework laptop's performance in 3 positions
  11. The five stages of incident response
  12. Python is an interpreted language with a compiler
  13. Typing using my keyboard (the other kind)
  14. Shadowing in Python gave me an UnboundLocalError
  15. Big endian and little endian
  16. Who are your teammates?
  17. Stewardship over ownership
  18. Some things that make Rust lifetimes hard to learn
  19. Your product shouldn't require showing my legal name
  20. Can I ethically use LLMs?
  21. What's in a ring buffer? And using them in Rust
  22. Summarizing our recommendations for software documentation
  23. Bright lights in dark times
  24. My writing process, and how I keep it sustainable
  25. Beginning of a MIDI GUI in Rust
  26. Great things about Rust that aren't just performance

2024 60

  1. Reflecting on 2024, preparing for 2025
  2. Feel, don't think
  3. Estimating projects sells them short (and that's okay)
  4. Parsing MIDI messages in Rust
  5. Evolving my ergonomic setup (or, my laptop with extra steps)
  6. Terminology isn't universal
  7. Using Talon in a game jam
  8. Supporting coworkers, employees, and friends in this time
  9. Parsing arguments in Rust with no dependencies
  10. They want your ethics for $105
  11. Debugging my wife's alarm clock
  12. Making Rust builds fail from YAML config mistakes
  13. Licensing can be joyful (and legally dubious)
  14. Asheville
  15. Rust needs a web framework for lazy developers
  16. What I tell people new to on-call
  17. Personnel update
  18. Making progress on side projects with content-driven development
  19. Reasons to write design docs
  20. Using search as a primary datastore since the docs said not to
  21. Sometimes, I can't talk
  22. You should make a new programming language
  23. First impressions of Gleam: lots of joys and some rough edges
  24. Integrate rest into your work and practice
  25. Resting is hard
  26. TIL: testing in the future using the faketime command
  27. Approximating the Sierpinski Triangle on my CNC
  28. Why I kept my startup job for seven years (and counting)
  29. Testing a WebSocket that could hang open for hours
  30. TIL: 8 versions of UUID and when to use them
  31. If it never breaks, you're doing it wrong
  32. What's hidden behind "just implementation details"
  33. Affirmations for bloggers
  34. My portable ergonomic setup
  35. Instead of "auth", we should say "permissions" and "login"
  36. Rust's iterators optimize nicely—and contain a footgun
  37. Getting buy-in to get things done
  38. I'm hopeful but wary of "empathic" AI
  39. Gaining depth perception
  40. The only two log levels you need are INFO and ERROR
  41. The origin and virtues of semicolons in programming languages
  42. It's getting hard to use and recommend Firefox, I'm afraid for the free web
  43. Decaf is good, actually
  44. Start to finish on self-publishing a technical book
  45. When to use cute names or descriptive names
  46. Procrastinating on my side project by torturing databases
  47. Achieving awful compression with digits of pi
  48. Work on tasks, not stories
  49. Building a demo of the Bleichenbacher RSA attack in Rust
  50. "Help, I see a problem and no one is prioritizing it!"
  51. Go slow to go fast
  52. Great management and leadership books for the technical track
  53. Too much of a good thing: the trade-off we make with tests
  54. Automating my backups with restic and anacron
  55. I'm scared, and hopeful, and you can help
  56. The most important goal in designing software is understandability
  57. RSA is deceptively simple (and fun)
  58. Are any of your features the steak on the menu?
  59. TIL: enabling features on transitive dependencies (Rust)
  60. I found some of my first code! Annotating and reflecting on robotics code from 2009.

2023 56

  1. Reflecting on 2023, preparing for 2024
  2. My reference was dropped, why is the compiler complaining about multiple borrows?
  3. Three days of Advent of Code in Hurl
  4. Lessons from implementing Hurl
  5. Insights and questions from the original waterfall paper
  6. Profiling Rust programs the easy way
  7. Why do companies hire people to be idle a lot of the time?
  8. Building a digital vigil for those we've lost
  9. Introducing Yet Another Rust Resource (or YARR!)
  10. Accessibility is a requirement, not a feature
  11. That time I wrote malware and got caught
  12. Unpacking some Rust ergonomics: getting a single Result from an iterator of them
  13. Estimates are about time, so let's cut to the chase
  14. A student asked how I keep us innovative. I don't.
  15. What would a web app canary look like?
  16. Making it fast shouldn't be the last step
  17. "Help, iterators made my Rust program slower!"
  18. A systematic approach to debugging
  19. OpenAI fixed their unsafe policy around names
  20. Changing my relationship with GitHub Copilot
  21. The phrase "good enough" isn't fit for purpose
  22. Writing a basic code formatter
  23. Fiction as a lens into technological change
  24. A few weird ways of displaying git hashes
  25. Throw away your first draft of your code
  26. Recovering from a lost disk: how I setup, backup, and restore dev machines
  27. Writing Hurl's grammar, twice
  28. Impact of remote-code execution vulnerability in LangChain
  29. Using git mailmap when names change (or you mess up your email)
  30. Write more "useless" software
  31. Introducing Hurl, a terrible (but cute) idea for a language
  32. Optimize sprint points to get nowhere fast
  33. Units in Go and Rust show philosophical differences
  34. Email addresses are not primary user identities
  35. We deserve to know if something was generated by AI
  36. It's easier to code review Rust than Python
  37. Visualizing the FIDE World Chess Championship
  38. Your app doesn't need to know my gender
  39. You should be using hackdays to supercharge your roadmap
  40. Rust allows redeclaring local variables to great benefit
  41. Scheduling visits from the muse
  42. Feature flags and authorization abstract the same concept
  43. Coding with LLMs can lead to more and better software
  44. Different topologies for an org chart, wrong answers only
  45. Betraying vim for the IDEs of March
  46. Approximating pi using... a cake?
  47. Getting people to tell you you're wrong
  48. If software engineering roles were chess pieces, what would they be?
  49. What's in my software engineering tool belt?
  50. A systems design perspective on why chess.com's servers have been melting
  51. What's the difference between references and pointers in Rust?
  52. Does technology have a right to exist? (No.)
  53. Speeding up queries 1000x by sorting my bitmaps
  54. Why Rust's learning curve seems harsh, and ideas to reduce it
  55. Names should be cute, not descriptive
  56. A confusing lifetime error related to Rust's lifetime elision

2022 30

  1. Reflecting on 2022, Looking Ahead to 2023
  2. return "reflections on a batch";
  3. Working with Rust in (neo)vim
  4. RC Week 12: What's Next, and Speedrunning Crafting Interpreters
  5. Building Molecule Reader in one day
  6. RC Week 11: Learning is best when multiplayer
  7. Tech systems amplify variety and that's a problem
  8. RC Week 10: Thankful for Family, Missing my Family
  9. Measuring the overhead of HashMaps in Rust
  10. RC Week 9: Parallels of Proofs and Programs
  11. I'm moving my projects off GitHub
  12. RC Week 8: Life happens, and databases are hard
  13. Open source licenses as a reflection of values
  14. RC Week 7: Four habits to improve as a programmer
  15. Paper review: C-store
  16. RC Week 6: Halfway done, wrote a parser!
  17. My first impressions from a few weeks with Lean and Coq
  18. Paper review: Concurrency Control Performance Modeling
  19. RC Week 5: Wrapping up projects and starting a new one
  20. Alpha-beta pruning illustrated by the smothered mate
  21. RC Week 4: Gratitude and emotions
  22. Paper review: The Gamma Database Project
  23. RC Week 3: Returning to Math
  24. Starting my (overkill) homelab
  25. Paper Review: Architecture of a Database System
  26. RC Week 2: Pairing is Awesome
  27. Rounding in Python
  28. RC Week 1: Getting Unexpected Extrovert Energy
  29. I'm taking a sabbatical and attending Recurse Center!
  30. Running an Effective Book Club at Work

2021 4

  1. Where are we going from here? Software engineering needs formal methods
  2. Drawbacks of developing in containers
  3. Lessons from my first (very bad) on-call experience
  4. Load testing is hard, and the tools are... not great. But why?

2020 6

  1. Tech salaries probably aren't dropping from remote work
  2. Solving my fun, frustrating docker-machine error
  3. What's "good" code and does it matter?
  4. Where is the source code for ping?
  5. Parallel assignment: a Python idiom cleverly optimized
  6. Terminology matters: let's stop calling it a "sprint"

2019 1

  1. Gmail's "Smart Compose" feature should be considered harmful

2018 8

  1. Books I Read in 2018
  2. Kill the crunch time heroics
  3. Avoid multitasking to write better code
  4. Distractions Cause Bad Code
  5. Don't Disrupt Things; Fix Them
  6. Even bad estimates are valuable if you use them right
  7. Topologies of Remote Teams
  8. How I Work Remotely

2017 4

  1. The bittersweet end of a year of independence
  2. On Estimates, Time, and Evidence
  3. Pyohio 2017
  4. Growing Teams and Baking Bread

2016 8

  1. Functional Programming and Big Data
  2. Security of the Infinity Ergodox on Mac OS
  3. Consider Part-Time Work
  4. Starting a New Chapter
  5. [Talk] Scaling Graphs
  6. [Review] "The Circle" by Dave Eggers
  7. Surveillance, Schools, and Our Children
  8. Fight Burnout, Go For a Run

2015 4

  1. [Review] "Data and Goliath" by Bruce Schneier
  2. In Defense of the Midwest
  3. How Cryptology Can Fix Identity Theft
  4. The Beginning of Something