Programming Interests

Increasingly interesting things can now be done with computer systems. Here are some applications I'd like to help realize.

Ambient Computing

Computational Semiotics

Computer-Aided Rhetoric

Evolutionary Software Development

Extensible Programming

Useful Social Networks

Note: "Social Networking" refers to Internet services in which each user supplies a list of their buddies. One's online social network consists of one's buddies and their buddies, and their buddies' buddies, et cetera. Various such services already exist but users usually lose interest after the first few visits. There are various reasons for this disconnect, including lack of profitable ways to interact with the people in your network, and lack of clearly-defined relationships with people you don't know personally.

In my recent work at MMIM Networks we tried to make online social networks relevant by providing applications such as photo sharing and on-line dating. This was a valid idea, and various companies are likely to bring some of this functionality to market over the next year or so.
However, it struck me that there's a whole dimension of social networking that hasn't yet been explored: defining more clearly what it means to be someone's buddy.
Human relationships can be factored into combinations of

Family Unchanging except for marriage, adoption or estrangement
Teacher-Student / Boss-Worker Defines a hierarchy
Co-worker Intensity depends on degree of risk-sharing.
Interest-based associations. Vary wildly in intensity.
Friendship / RomanceOften grows out of other associations, can be negative for enemies.

Relationships change over time. Each has a definite beginning, but can change in quality and intensity. Relationships are often asymmetric. E.g. one party likes the other more than the other likes them. Also, hierarchical relationships are usually asymmetrical, with the many students having stronger feelings (awe, veneration, fear, rebellion) for the instructor than the instructor feels for any of this term's crop of students.
What are the possible qualities of a relationship? As people grow to know each other, they develop an increasingly multifaceted view of each other, often on an unconscious level. Useful and accurate information about the relationship might be elicited with a well-designed human interface, but there's a tradeoff between accuracy, completeness and user effort. One current approach to describing relationships is the FOAF knows record, which just asserts that there is some kind of relationship between the person owning the record and another person. This is part of the "semantic web" concept, in which facts about the relationship are supposed to be inferred from other records that refer to the two parties involved.
Efforts are being made to get more specific, but the idea of multiple orthogonal relationship dimensions, having a given quality and intensity at any given point in time, and changing over time, are not yet captured.

Given an accurate and complete set of this Relationship data, genealogical and friend-finder applications become easy to write. The difficulty is in giving people the tools and incentives to enter the considerable amount of data this involves.
FOAF records are entered on each user's web directory for crawling by


There is no simple algorithm for passing trust around a network. If A trusts B and B trusts C, there is no basis for assuming that A must trust C.

Checkers versus Generators: The Salieri Approach

Many of the computational problems that interest me would require years to solve and advances in AI research. However, there is usually a related problem that can be solved more easily: instead of making the computer do something that would require creativity, give the computer the ability to recognize correct solutions to the problem.

Let's say we want a program that can write a short stories. An easier goal is to write a program that can recognize whether a short story is good or not - start with spelling and grammar checkers, move up to structure analyzers, and finish of by deciding whether the story has attributes found in good short stories, writing recognizers for those attributes as necessary.

The process of writing a recognizer should shed light on the larger creative problem, while producing useful software en route. For instance, if the short story checker could give an intelligent critique, e.g. "The character Anna does not develop, and is sympathetic in scene 12 but hostile in scene 15", this would be a great writing and editing tool.

Story Navigation

Let's say we have a database of facts tagged with time, location, indications of who is involved and how, and causal relationships between the facts. Let's say a viewer would like to explore the data set: this is usually done with charts and graphs, but for data sets in which you have a small number of complex subjects related by numerous causal relationships, a textual story presentation may be superior to data graphics.

The question is, can we come up with a story generator? Let's say the reader picks one of the subjects and asks how reader in (usually statements of the form "agent says noun has property-x with probability-y") stored in an XML file, with various time and place tags attached. using some information coding system that encodes the facts (usually a statement that some noun has some property). If we go through the story from the point of view of one of the characters, and that character meets another, we might click on that character's name and see a number of options: backgrounder, full name, family tree, graph of relationships with other characters, or pivot. Pivot shifts the point of the view of the story to that character. Control-Clicking on other text allows one to expand and contract a narrative from point-form executive summary to fine detail.