blog.thea.codes
Reflecting on my 2024
Prusa has learned nothing
Split tunneling using Wireguard and namespaces
Building Alan Wake's Angel Lamp
Reflecting on my 2023
My experience building a Voron 2.4
Introducing KiCanvas
A reply to Josef Průša
Reflecting on my 2022
Creating a pick and place control board with the RP2040
Using Python to vectorize artwork for PCBs
A few of my favorite typefaces
Farewell, Google
Talking to gamepads from Python without PyGame
The tools and tech I use to run a one-woman hardware company
Using the SAM D21's brown-out detector
Designing Winterbloom's Castor & Pollux
Opinions after a decade of professional software engineering
The most thoroughly commented linker script (probably)
The Design of the Roland Juno oscillators
Understanding the SAM D21 clocks
We need to talk about GitHub
Getting the most out of the SAM D21's ADC
Reading analog values with the SAMD21's ADC
Phase-shifted PWM on SAMD21
Designing Winterbloom's Big Honking Button
Thoughts on #CircuitPython2020
Lessons learned from building a custom CircuitPython board
Building a stateless API proxy
My personal values
Genesynth: A Sega Genesis-inspired synthesizer
Genesynth part 4: Cleaning up the noisy audio amplifier
Genesynth part 3: proper audio amplification
Genesynth part 2: basic communication
Genesynth part 1: idea and research
Writing a small static site generator
Hello, world, I am Thea
Github-flavored Markdown descriptions on PyPI
My Python testing style guide
Thoughts on empathy & software
A year of open-source @ Google
Opinionated deployment tools & Kubernetes
Docker, procfiles, and health checks
App Engine is (sometimes) the wrong hammer.
Fixing the wrong bug to discover the right one
Managing vendored packages on App Engine