I study and practice computer programming and philosophy.

I am concerned for the well-being of the disadvantaged and for humanity's future.

I am working to apply what I learn from my studies to benefit those for whom I am concerned.

My current work focuses on applying principles of functional programming and type driven design to improve development, build, and release infrastructure. Our watchwords are determinism, reliability, reproducibility, and receptivity.

My active side-projects involve writing programs in OCaml and doing research at the intersection of programming language theory, type theory, critical philosophy, semiotics, and cybernetics.

My studies of programming have been focused on the declarative paradigms of logic programming, functional programming, and constraint programming.

My philosophical studies have recently been focused on the philosophy of logic (especially structuralist logic), the philosophy of mathematics (especially early 20th c., constructivism, and category-theoretic foundations), Kant's critical system (especially in relation to the modern axiomatic method and type theory), semiotics (especially the work of C.S. Peirce and Goguen's work in algebraic semiotics), and the foundations of analytic philosophy. I have also studied German idealism, critical theory, phenomenology, literary theory, philosophy of language, and early modern philosophy.

We believe that programming can be, and should be, an intellectually rewarding activity; that a good programming language is a powerful conceptual tool — a tool for organizing, expressing, experimenting with, and even communicating one's thoughts ... we think that programming can be, and should be, part of the problem solving process itself; that thoughts should be organized as programs, so that consequences of a complex set of assumptions can be investigated by "running" the assumptions; that a conceptual solution to a problem should be developed hand-in-hand with a working program that demonstrates it and exposes its different aspects.

— Sterling & Shapiro, The Art of Prolog

Open Source Projects I've Contributed To


Dune is "a composable build system for OCaml". I've contributed to the design and implementation of the CLI tooling.


ATD "stands for Adaptable Type Definitions. It is a syntax for defining cross-language data types" written in OCaml. I extended a small language feature.


Eliom is an OCaml framework for client/server web apps. I've helped correct and improve some documentation.


Vyconf is a software appliance configuration framework written in OCaml and under development in connection with the network operating system VyOS. I contributed to the code that parses the VyOS configuration language.


A few of these projects are completed. Several are dormant (but not dead). Several are still under active development.

My Synechepedia

My Synechepedia is a scrapbook/log/personal-wiki/homepage collecting notes, ideas, plans, excerpts and records of my activities.


Consolate is an ongoing (but paused) experiment in the modular design of modal console applications, written in OCaml.

Coding Made Easy at IS 62 K (Ditmas)

Coding Made Easy at IS 62 K was a New York Cares project partnered with the after-school program at Ditmas Junior High. Over the course of 14 weeks, we provided students with tutoring and guidance on basic programming concepts, techniques, and technologies in a relaxed and fun environment. I helped launch this project in my capacity as a New York Cares Volunteer Team Leader. I coordinated the volunteers, tailored the curriculum to the needs of each individual student, and provided hands-on instruction and support on a weekly basis.


tokenize.pl is a simple Prolog tokenization utility. It provides a straightforward, and very limited, tool for the tokenization of text. tokenize.pl is available as a package from the standard SWI-Prolog package repository.


protelog.pl is an experimental library of Prolog syntax extensions, It is under irregular but ongoing development.


sml-utils is an ongoing project. It is comprised of Standard ML modules (compatible with SML/NJ) facilitating functionality that I have found useful or interesting during the course of my experiments with, and studies of, SML.

The tilde.town web ring

I was an active participant in the early days of tilde.town and wrote most of the code for the tilde.town web ring.


I am a moderator of, and frequent contributor to, /r/prolog. The subreddit is dedicated to logic programming generally, but it is dominated by slow motion discussions of Prolog. At the moment, the bulk of our activity focuses on helping beginners get acquainted with the language and figure out their homework problems.


I founded /r/futurebeats, establishing the basic ethos, recruiting the initial moderators, and working out the core norms with the earliest community members. Since then, a group of active and talented moderators and contributers have built up a small online ecosystem, with this subreddit at its center. I continue to moderate and contribute to the community. Over the years, the subreddit has grown to over 60,000 subscribers and something like a musical genre has formed in relation to it.

This site runs on SWI-Prolog 7.3.