41554 blogs · [ { "id": "01a08754-ef76-7333-99fd-6940495e665a", "title": "Reflecting on my 2025", "url": "https://blog.thea.codes/my-2025", "published_at": "2026-01-02T12:00:00+00:00" }, { "id": "01a08754-ef76-7333-99fd-6940496c7d06", "title": "Reflecting on my 2024", "url": "https://blog.thea.codes/my-2024", "published_at": "2025-01-04T12:00:00+00:00" }, { "id": "01a08754-ef76-7333-99fd-694049a2b0b1", "title": "Prusa has learned nothing", "url": "https://blog.thea.codes/prusa-learned-nothing", "published_at": "2024-11-24T12:00:00+00:00" }, { "id": "01a08754-ef76-7333-99fd-694049a7d5fa", "title": "Split tunneling using Wireguard and namespaces", "url": "https://blog.thea.codes/nordvpn-wireguard-namespaces", "published_at": "2024-11-17T12:00:00+00:00" }, { "id": "01a08754-ef77-72c4-ad7a-df2a00588e71", "title": "Building Alan Wake's Angel Lamp", "url": "https://blog.thea.codes/alan-wake-angel-lamp-build", "published_at": "2024-05-30T12:00:00+00:00" }, { "id": "01a08754-ef77-72c4-ad7a-df2a00b32ebd", "title": "Reflecting on my 2023", "url": "https://blog.thea.codes/my-2023", "published_at": "2023-12-30T12:00:00+00:00" }, { "id": "01a08754-ef77-72c4-ad7a-df2a01277703", "title": "My experience building a Voron 2.4", "url": "https://blog.thea.codes/my-voron-2-experience", "published_at": "2023-07-02T12:00:00+00:00" }, { "id": "01a08754-ef77-72c4-ad7a-df2a01891fb8", "title": "Introducing KiCanvas", "url": "https://blog.thea.codes/introducing-kicanvas", "published_at": "2023-04-20T12:00:00+00:00" }, { "id": "01a08754-ef77-72c4-ad7a-df2a01dfdf5e", "title": "A reply to Josef Průša", "url": "https://blog.thea.codes/a-reply-to-josef-prusa", "published_at": "2023-03-30T12:00:00+00:00" }, { "id": "01a08754-ef77-72c4-ad7a-df2a0265c70e", "title": "Reflecting on my 2022", "url": "https://blog.thea.codes/my-2022", "published_at": "2022-12-27T12:00:00+00:00" }, { "id": "01a08754-ef77-72c4-ad7a-df2a0306e217", "title": "Creating a pick and place control board with the RP2040", "url": "https://blog.thea.codes/starfish-a-control-board-with-the-rp2040", "published_at": "2022-11-04T12:00:00+00:00" }, { "id": "01a08754-ef77-72c4-ad7a-df2a03257920", "title": "Using Python to vectorize artwork for PCBs", "url": "https://blog.thea.codes/raster-vectorization-with-python", "published_at": "2022-08-29T12:00:00+00:00" }, { "id": "01a08754-ef77-72c4-ad7a-df2a0383f0a9", "title": "A few of my favorite typefaces", "url": "https://blog.thea.codes/typefaces-i-love", "published_at": "2021-09-12T12:00:00+00:00" }, { "id": "01a08754-ef77-72c4-ad7a-df2a03dc565e", "title": "Farewell, Google", "url": "https://blog.thea.codes/farewell-google", "published_at": "2021-06-01T12:00:00+00:00" }, { "id": "01a08754-ef77-72c4-ad7a-df2a03e66ed2", "title": "Talking to gamepads from Python without PyGame", "url": "https://blog.thea.codes/talking-to-gamepads-without-pygame", "published_at": "2021-05-22T12:00:00+00:00" }, { "id": "01a08754-ef77-72c4-ad7a-df2a04cf4956", "title": "The tools and tech I use to run a one-woman hardware company", "url": "https://blog.thea.codes/winterblooms-tech-stack", "published_at": "2021-05-16T12:00:00+00:00" }, { "id": "01a08754-ef77-72c4-ad7a-df2a04dfde6d", "title": "Using the SAM D21's brown-out detector", "url": "https://blog.thea.codes/sam-d21-brown-out-detector", "published_at": "2021-04-21T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf84de9668", "title": "Designing Winterbloom's Castor & Pollux", "url": "https://blog.thea.codes/designing-castor-and-pollux", "published_at": "2021-03-31T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf852eed08", "title": "Opinions after a decade of professional software engineering", "url": "https://blog.thea.codes/opinions-after-a-decade", "published_at": "2021-02-02T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf85bfac0a", "title": "The most thoroughly commented linker script (probably)", "url": "https://blog.thea.codes/the-most-thoroughly-commented-linker-script", "published_at": "2021-01-13T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf86945da2", "title": "The Design of the Roland Juno oscillators", "url": "https://blog.thea.codes/the-design-of-the-juno-dco", "published_at": "2020-12-31T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf86e1290f", "title": "Understanding the SAM D21 clocks", "url": "https://blog.thea.codes/understanding-the-sam-d21-clocks", "published_at": "2020-12-02T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf8796734c", "title": "We need to talk about GitHub", "url": "https://blog.thea.codes/we-need-to-talk-about-github", "published_at": "2020-10-12T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf883001d9", "title": "Getting the most out of the SAM D21's ADC", "url": "https://blog.thea.codes/getting-the-most-out-of-the-samd21-adc", "published_at": "2020-07-18T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf88b2237f", "title": "Reading analog values with the SAMD21's ADC", "url": "https://blog.thea.codes/reading-analog-values-with-the-samd-adc", "published_at": "2020-07-08T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf896dd2de", "title": "Phase-shifted PWM on SAMD21", "url": "https://blog.thea.codes/phase-shifted-pwm-on-samd", "published_at": "2020-06-05T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf8a382df6", "title": "Designing Winterbloom's Big Honking Button", "url": "https://blog.thea.codes/designing-big-honking-button", "published_at": "2020-04-25T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf8a4f582d", "title": "Thoughts on #CircuitPython2020", "url": "https://blog.thea.codes/thoughts-on-circuitpython-2020", "published_at": "2020-01-02T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf8b3386f4", "title": "Lessons learned from building a custom CircuitPython board", "url": "https://blog.thea.codes/lessons-learned-from-building-a-circuitpython-board", "published_at": "2019-10-06T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf8c179ff8", "title": "Building a stateless API proxy", "url": "https://blog.thea.codes/building-a-stateless-api-proxy", "published_at": "2019-05-23T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf8d12c638", "title": "My personal values", "url": "https://blog.thea.codes/my-personal-values", "published_at": "2019-05-12T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf8def2177", "title": "Genesynth: A Sega Genesis-inspired synthesizer", "url": "https://blog.thea.codes/genesynth-a-sega-genesis-inspired-synthesizer", "published_at": "2019-01-22T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf8dfc2f7b", "title": "Genesynth part 4: Cleaning up the noisy audio amplifier", "url": "https://blog.thea.codes/genesynth-part-4-cleaning-up-the-noise-in-synth-audio-amplifier", "published_at": "2019-01-09T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf8eac63be", "title": "Genesynth part 3: proper audio amplification", "url": "https://blog.thea.codes/genesynth-part-3-proper-audio", "published_at": "2018-10-29T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf8f8e1c65", "title": "Genesynth part 2: basic communication", "url": "https://blog.thea.codes/genesynth-part-2-basic-communication", "published_at": "2018-09-23T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf908e162b", "title": "Genesynth part 1: idea and research", "url": "https://blog.thea.codes/genesynth-part-1-idea-and-research", "published_at": "2018-06-19T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf908e4776", "title": "Writing a small static site generator", "url": "https://blog.thea.codes/a-small-static-site-generator", "published_at": "2018-05-11T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf910f58d5", "title": "Hello, world, I am Thea", "url": "https://blog.thea.codes/i-am-thea", "published_at": "2018-05-10T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf91b2858c", "title": "Github-flavored Markdown descriptions on PyPI", "url": "https://blog.thea.codes/github-flavored-markdown-on-pypi", "published_at": "2018-04-02T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf91cad97b", "title": "My Python testing style guide", "url": "https://blog.thea.codes/my-python-testing-style-guide", "published_at": "2017-07-15T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf91ef288b", "title": "Thoughts on empathy & software", "url": "https://blog.thea.codes/thoughts-on-empathy-software", "published_at": "2016-07-02T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf928d7d74", "title": "A year of open-source @ Google", "url": "https://blog.thea.codes/a-year-of-open-source-google", "published_at": "2016-03-24T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf934d5e09", "title": "Opinionated deployment tools & Kubernetes", "url": "https://blog.thea.codes/building-a-paas-on-kubernetes", "published_at": "2016-02-10T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf93e75bca", "title": "Docker, procfiles, and health checks", "url": "https://blog.thea.codes/docker-procfiles", "published_at": "2015-08-05T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf94e1ee2e", "title": "App Engine is (sometimes) the wrong hammer.", "url": "https://blog.thea.codes/app-engine-is-the-wrong-hammer", "published_at": "2014-09-25T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf953fec29", "title": "Fixing the wrong bug to discover the right one", "url": "https://blog.thea.codes/fixing-the-wrong-bug", "published_at": "2014-09-14T12:00:00+00:00" }, { "id": "01a08754-ef78-711c-824b-1eaf95fef45a", "title": "Managing vendored packages on App Engine", "url": "https://blog.thea.codes/managing-vendored-packages-on-app-engine", "published_at": "2014-09-02T12:00:00+00:00" } ] posts Claim your blog
Back to Blog - Stargirl (Thea) Flowers
Blog · corpus.blog/blogs/blog.thea.codes/posts

Blog - Stargirl (Thea) Flowers

blog.thea.codes

2026

2025

2024

2023

2022

2021

2020

2019

2018

2017

2016

2015

2014