technically a blog
If you have comments, questions, or feedback, you can email my personal email. To get new posts and support my work, subscribe to the newsletter. There is also an RSS feed.
- 2024-12-16: Estimating projects sells them short (and that's okay)
- 2024-12-09: Parsing MIDI messages in Rust
- 2024-12-02: Evolving my ergonomic setup (or, my laptop with extra steps)
- 2024-11-25: Terminology isn't universal
- 2024-11-18: Using Talon in a game jam
- 2024-11-11: Supporting coworkers, employees, and friends in this time
- 2024-11-04: Parsing arguments in Rust with no dependencies
- 2024-10-28: They want your ethics for $105
- 2024-10-21: Debugging my wife's alarm clock
- 2024-10-14: Making Rust builds fail from YAML config mistakes
- 2024-10-07: Licensing can be joyful (and legally dubious)
- 2024-10-06: Asheville
- 2024-09-30: Rust needs a web framework for lazy developers
- 2024-09-23: What I tell people new to on-call
- 2024-09-16: Personnel update
- 2024-09-09: Making progress on side projects with content-driven development
- 2024-09-02: Reasons to write design docs
- 2024-08-26: Using search as a primary datastore since the docs said not to
- 2024-08-19: Sometimes, I can't talk
- 2024-08-12: You should make a new programming language
- 2024-08-05: First impressions of Gleam: lots of joys and some rough edges
- 2024-07-29: Integrate rest into your work and practice
- 2024-07-25: Resting is hard
- 2024-07-22: TIL: testing in the future using the faketime command
- 2024-07-15: Approximating the Sierpinski Triangle on my CNC
- 2024-07-08: Why I kept my startup job for seven years (and counting)
- 2024-07-01: Testing a WebSocket that could hang open for hours
- 2024-06-29: TIL: 8 versions of UUID and when to use them
- 2024-06-24: If it never breaks, you're doing it wrong
- 2024-06-17: What's hidden behind "just implementation details"
- 2024-06-10: Affirmations for bloggers
- 2024-06-03: My portable ergonomic setup
- 2024-05-27: Instead of "auth", we should say "permissions" and "login"
- 2024-05-20: Rust's iterators optimize nicely—and contain a footgun
- 2024-05-13: Getting buy-in to get things done
- 2024-05-06: I'm hopeful but wary of "empathic" AI
- 2024-04-29: Gaining depth perception
- 2024-04-22: The only two log levels you need are INFO and ERROR
- 2024-04-15: The origin and virtues of semicolons in programming languages
- 2024-04-08: It's getting hard to use and recommend Firefox, I'm afraid for the free web
- 2024-04-01: Decaf is good, actually
- 2024-03-31: Start to finish on self-publishing a technical book
- 2024-03-25: When to use cute names or descriptive names
- 2024-03-18: Procrastinating on my side project by torturing databases
- 2024-03-14: Achieving awful compression with digits of pi
- 2024-03-11: Work on tasks, not stories
- 2024-03-04: Building a demo of the Bleichenbacher RSA attack in Rust
- 2024-02-26: "Help, I see a problem and no one is prioritizing it!"
- 2024-02-19: Go slow to go fast
- 2024-02-12: Great management and leadership books for the technical track
- 2024-02-05: Too much of a good thing: the trade-off we make with tests
- 2024-01-29: Automating my backups with restic and anacron
- 2024-01-21: I'm scared, and hopeful, and you can help
- 2024-01-19: The most important goal in designing software is understandability
- 2024-01-15: RSA is deceptively simple (and fun)
- 2024-01-08: Are any of your features the steak on the menu?
- 2024-01-06: TIL: enabling features on transitive dependencies (Rust)
- 2024-01-01: I found some of my first code! Annotating and reflecting on robotics code from 2009.
- 2023-12-29: Reflecting on 2023, preparing for 2024
- 2023-12-22: My reference was dropped, why is the compiler complaining about multiple borrows?
- 2023-12-18: Three days of Advent of Code in Hurl
- 2023-12-15: Lessons from implementing Hurl
- 2023-12-11: Insights and questions from the original waterfall paper
- 2023-12-04: Profiling Rust programs the easy way
- 2023-11-27: Why do companies hire people to be idle a lot of the time?
- 2023-11-19: Building a digital vigil for those we've lost
- 2023-11-13: Introducing Yet Another Rust Resource (or YARR!)
- 2023-11-06: Accessibility is a requirement, not a feature
- 2023-10-30: That time I wrote malware and got caught
- 2023-10-23: Unpacking some Rust ergonomics: getting a single Result from an iterator of them
- 2023-10-16: Estimates are about time, so let's cut to the chase
- 2023-10-09: A student asked how I keep us innovative. I don't.
- 2023-10-02: What would a web app canary look like?
- 2023-09-25: Making it fast shouldn't be the last step
- 2023-09-18: "Help, iterators made my Rust program slower!"
- 2023-09-11: A systematic approach to debugging
- 2023-09-04: OpenAI fixed their unsafe policy around names
- 2023-08-28: Changing my relationship with GitHub Copilot
- 2023-08-21: The phrase "good enough" isn't fit for purpose
- 2023-08-14: Writing a basic code formatter
- 2023-08-11: Fiction as a lens into technological change
- 2023-08-07: A few weird ways of displaying git hashes
- 2023-07-31: Throw away your first draft of your code
- 2023-07-24: Recovering from a lost disk: how I setup, backup, and restore dev machines
- 2023-07-17: Writing Hurl's grammar, twice
- 2023-07-10: Impact of remote-code execution vulnerability in LangChain
- 2023-07-03: Using git mailmap when names change (or you mess up your email)
- 2023-06-26: Write more "useless" software
- 2023-06-19: Introducing Hurl, a terrible (but cute) idea for a language
- 2023-06-12: Optimize sprint points to get nowhere fast
- 2023-06-05: Units in Go and Rust show philosophical differences
- 2023-05-29: Email addresses are not primary user identities
- 2023-05-22: We deserve to know if something was generated by AI
- 2023-05-15: It's easier to code review Rust than Python
- 2023-05-10: Visualizing the FIDE World Chess Championship
- 2023-05-08: Your app doesn't need to know my gender
- 2023-05-01: You should be using hackdays to supercharge your roadmap
- 2023-04-24: Rust allows redeclaring local variables to great benefit
- 2023-04-17: Scheduling visits from the muse
- 2023-04-10: Feature flags and authorization abstract the same concept
- 2023-04-03: Coding with LLMs can lead to more and better software
- 2023-03-27: Different topologies for an org chart, wrong answers only
- 2023-03-20: Betraying vim for the IDEs of March
- 2023-03-14: Approximating pi using... a cake?
- 2023-03-06: Getting people to tell you you're wrong
- 2023-02-27: If software engineering roles were chess pieces, what would they be?
- 2023-02-20: What's in my software engineering tool belt?
- 2023-02-13: A systems design perspective on why chess.com's servers have been melting
- 2023-02-06: What's the difference between references and pointers in Rust?
- 2023-01-30: Does technology have a right to exist? (No.)
- 2023-01-23: Speeding up queries 1000x by sorting my bitmaps
- 2023-01-16: Why Rust's learning curve seems harsh, and ideas to reduce it
- 2023-01-09: Names should be cute, not descriptive
- 2023-01-02: A confusing lifetime error related to Rust's lifetime elision
- 2022-12-28: Reflecting on 2022, Looking Ahead to 2023
- 2022-12-19: return "reflections on a batch";
- 2022-12-16: Working with Rust in (neo)vim
- 2022-12-10: RC Week 12: What's Next, and Speedrunning Crafting Interpreters
- 2022-12-07: Building Molecule Reader in one day
- 2022-12-03: RC Week 11: Learning is best when multiplayer
- 2022-12-01: Tech systems amplify variety and that's a problem
- 2022-11-25: RC Week 10: Thankful for Family, Missing my Family
- 2022-11-22: Measuring the overhead of HashMaps in Rust
- 2022-11-19: RC Week 9: Parallels of Proofs and Programs
- 2022-11-16: I'm moving my projects off GitHub
- 2022-11-12: RC Week 8: Life happens, and databases are hard
- 2022-11-08: Open source licenses as a reflection of values
- 2022-11-04: RC Week 7: Four habits to improve as a programmer
- 2022-11-04: Paper review: C-store
- 2022-10-29: RC Week 6: Halfway done, wrote a parser!
- 2022-10-28: My first impressions from a few weeks with Lean and Coq
- 2022-10-27: Paper review: Concurrency Control Performance Modeling
- 2022-10-21: RC Week 5: Wrapping up projects and starting a new one
- 2022-10-18: Alpha-beta pruning illustrated by the smothered mate
- 2022-10-14: RC Week 4: Gratitude and emotions
- 2022-10-11: Paper review: The Gamma Database Project
- 2022-10-08: RC Week 3: Returning to Math
- 2022-10-06: Starting my (overkill) homelab
- 2022-10-01: Paper Review: Architecture of a Database System
- 2022-09-30: RC Week 2: Pairing is Awesome
- 2022-09-28: Rounding in Python
- 2022-09-24: RC Week 1: Getting Unexpected Extrovert Energy
- 2022-09-11: I'm taking a sabbatical and attending Recurse Center!
- 2022-07-09: Running an Effective Book Club at Work
- 2021-07-03: Where are we going from here? Software engineering needs formal methods
- 2021-02-01: Drawbacks of developing in containers
- 2021-01-11: Lessons from my first (very bad) on-call experience
- 2021-01-04: Load testing is hard, and the tools are... not great. But why?
- 2020-12-22: Tech salaries probably aren't dropping from remote work
- 2020-12-08: Solving my fun, frustrating docker-machine error
- 2020-10-14: What's "good" code and does it matter?
- 2020-07-26: Where is the source code for ping?
- 2020-05-15: Parallel assignment: a Python idiom cleverly optimized
- 2020-04-29: Terminology matters: let's stop calling it a "sprint"
- 2019-02-27: Gmail's "Smart Compose" feature should be considered harmful
- 2018-12-31: Books I Read in 2018
- 2018-11-02: Kill the crunch time heroics
- 2018-10-26: Avoid multitasking to write better code
- 2018-09-14: Distractions Cause Bad Code
- 2018-09-07: Don't Disrupt Things; Fix Them
- 2018-08-31: Even bad estimates are valuable if you use them right
- 2018-08-23: Topologies of Remote Teams
- 2018-06-02: How I Work Remotely
- 2017-09-02: The bittersweet end of a year of independence
- 2017-08-07: On Estimates, Time, and Evidence
- 2017-07-30: PyOhio
- 2017-01-21: Growing Teams and Baking Bread
- 2016-11-12: Functional Programming and Big Data
- 2016-10-12: Security of the Infinity Ergodox on Mac OS
- 2016-09-26: Consider Part-Time Work
- 2016-08-21: Starting a New Chapter
- 2016-04-05: [Talk] Scaling Graphs
- 2016-03-15: [Review] "The Circle" by Dave Eggers
- 2016-03-07: Surveillance, Schools, and Our Children
- 2016-02-19: Fight Burnout, Go For a Run
- 2015-07-13: [Review] "Data and Goliath" by Bruce Schneier
- 2015-03-08: In Defense of the Midwest
- 2015-02-22: How Cryptology Can Fix Identity Theft
- 2015-02-22: The Beginning of Something
Want to become a better programmer?
Join the Recurse Center!
Want to hire great programmers?
Hire via Recurse Center!