habiting the net

A detailed summary of technical work I delivered for HistoryPin.org, a project of Shift Collective

At the start of 2025 I embarked on a rewrite of HistoryPin.org for Shift Collective, an Exygy Client and important place on the web where communities self-determine their stories. After being impressed with Cursor’s ability to create a meaningful contribution summary gleaned from the git commit history for SF’s Our415.org code, I let Cursor loose again. Strung together, these terse paragraphs form a pretty reasonable narrativization of my work on the rewrite.

Continue reading →

A detailed summary of technical work I delivered for San Francisco's public benefits portal Our415.org

In the fall of 2024 I joined the Consulting division of Exygy, an agency that delivers web tech solutions for civic and non-profit organizations. My very first assignment was getting a project of the Deparment of Youth and Families – Our415.org – launch-ready. Having a direct impact on families in SF was a very rad proposition, being a resident myself. Bringing a project home that’s close to home. In short time I completed a gaggle of technical work on Our415.

Continue reading →

Language ergonomic studies: Brevity fetish with Ruby

Matz giving us many ways to do things. > I want to make Ruby users free. I want to give them the freedom to choose. People are different. From: 🔗 The Philosophy of Ruby: A Conversation with Yukihiro Matsumoto, Part I def two_lowest(numbers) numbers.min(2).sum end Enumerable methods that can receive an operator as symbol. Glacial autumn breeze whipped up from the 101. I don’t have a brevity fetish, like I know many of you do.

Continue reading →

Language ergonomic studies: 52 card deck

Javascript: const cards = () => ['♥','♠','♣','♦'] .map((suite) => (['2','3','4','5','6','7','8','9','10','J','Q','K','A'].map((card) => suite + card))) Clojure: (defn new-deck [] (for [r [\♥ \♠ \♣ \♦] s [:2 :3 :4 :5 :6 :7 :8 :9 :10 :J :Q :K :A]] [r s]))

Continue reading →