I am a computer scientist, systems architect, and software engineer. I am fascinated by the prospect of making computers intelligent assistants to help people be in control of their relationships with other people and institutions, increase their joy in life, and exercise greater wisdom in their actions.
I work for Ontology Works, Inc. We develop an ontological deductive database system. I also work on the XGP project, a combination of Cocoa, ObjectiveC, and gprolog on the Macintosh. For details on my professional background you can look at my resume.
The major projects I have been involved in are summarized here .
Computing interests
- Programming language design:
Programming languages vary wildly in their usefulness for meeting the goals of particular projects. There are many factors that contribute to a successful software project, but the choice of programming language seems to rarely be based on the usefulness of that language. Rather, issues of what language is widely used in the industry, or current fashions in education, or other external factors.
It should be possible to measure relative merit of different languages directly with respect to specific goals. These measurements would be use to help in selecting programming languages for specific projects and in making design choices for development programming languages.
- Logic programming:
The logic programming paradigm has several features that make it a clearly distinct approach to programming language design: unification, resolution, and nondeterminism. Other important but less distinctive features include single assignment, symbolic computing, no pointers, and builtin list handling. Prolog, the most widely used logic programming language, additionally has a remarkably flexible and expressive syntax.
- Visual programming:
Visual programming is an approach to programming where the source of a program is presented visually, or more precisely, diagrammatically. One such approach is a "data flow" program where the source presentation is in the form of a network of lines and boxes. Each box is an operation with 0, 1, or many inputs and 0, 1, or many outputs. The lines indicates data "flowing" from one operator's output to another operator's input. For instance, an addition operator would take two inputs and produce a single output.
This kind of presentation can be very easy for a programmer to work with, although there are many challenges in having a well-designed presentation and editing environment. One such challenge is how to display a moderately complex program in the limited "real estate" of a computer screen.
- Artificial intelligence:
I am primarily interested in logic and symbol based approaches to artificial intelligence. Some of the areas of AI that are particular interesting are common sense reasoning, situation theory, theorem proving, and natural language.
- Database systems:
A crucial part of many computing projects is managing large quantities of complexly structured data. I am interested in database systems as part of supporting work in AI. I have worked in three data management projects, Multics data management, the Digital Archaeology setflow system, and the Ontology Works Knowledge Server.
The Multics data management project was interesting for integrating basic data management services with a paged and segmented virtual file system in a highly-secure general purpose operating system.
The setflow project built an application that used novel approaches to several aspects of data management. The basic goal was to build a system for convenient exploration and analysis of large quantities of data from varied sources. The focus on analysis lead to several different answers to standard issues in data management. The setflow system lays out data on disk in continuous segments and uses a rapid buffer reading and writing procedure to process entire tables of data. The basic data model is based on extended set theory instead of the classical set theory based relational model; this supports explicit handling of order in data that the relational model does not allow. Transactions are executed without acquiring any transaction-level locks (i.e. no locks are held for the duration of a transaction). The setflow programming language has a number of unusual features: it is data-flow based and highly parallel; there is a global optimization mechanism that allows the system to avoid reexecuting parts of a function that have already been executed.
The Ontology Works Knowledge Server project has created an ontology-driven deductive database system. This system is highly parallel. It supports ontologies specified using a form Common Logic extended with temporal reasoning and quantification over predicates. The Knowledge Server provides the basic database ACID services.
- Software engineering:
There are many issues in software engineering: how to organize the work of programming, including development environments, software repositories, programming-in-the-large tools, and development processes (especially test-driven development).
Papers
"XGP: from UNIX Command Line to Mac IDE" presented at ADHOC 2005/MacHack 20.
Using 3D Tubes to Solve the Intersecting Line Representation Problem
Analytic Assessment of Visual Programming Languages (unpublished draft)
Masters Thesis: Automated Reasoning with Situation Theory (.sit or .zip file of several PDFs)
PhD Thesis: Seeing the Logic of Programming With Sets (several PDFs in .sit or .zip file)
Simple Software Measurement for PROLOG.(unpublished draft)
SPARCL: A Logic Programming Language Built on Sets
A Visual Logic Programming Language Based on Sets and Partitioning Constraints.