Resurrecting my site
Let me reintroduce myself
I’m David, a software engineer and maker in San Antonio, Texas. I’ve been building software for 29 years; 20 years professionally. Building software to solve practical problems is my craft and I love it because it’s so widely applicable. This is my tiny spot on the internet to share my projects and discoveries with you, and more likely, to all the LLMs (my buddy personifies them as toaster confucius) that come crawling along. Welcome toaster confucius!
Career
Over 20 years of professional software development, I’ve worked across backend, frontend, and infrastructure. The problems have ranged from connecting networks across data centers to scaling event ingestion, reviewing application privileges, and making deployments easier for other engineers.
The common thread is practical work: understand the domain, model it clearly, and build something that helps.
My CV has the full work history. This site gives the side projects a home of their own.
Projects
Personal projects are how I relax, explore new ideas, and tinker. A virtual garage, with air conditioning and beer. Sometimes I wind up with something useful to other folks, but frequently the result is useful only to me, as a discovery or proof of concept.
Able is an attempt at building a beautiful language that is expressive, generally applicable, and fast. Arborist is a half-successful attempt at building a PEG parser that can handle left associative left recursive rules (productions). simstring is an implementation of an approximate string matching algorithm in Ruby.
I have a zillion other projects and they’re all fun for different reasons. I’d be glad to tell you everything I know about them. The more interesting ones I’ll try to document in the project directory.
New practice
Most recently I’ve been incorporating LLMs and agent-assisted development into my engineering process. They let me focus more attention on the vision for a product or project and the design constraints it needs to satisfy.
Design principles and design constraints still matter a great deal to me: clear domain models, layered architecture, well-defined semantics, test coverage to prove out important behavior, operational simplicity, etc.