Increasingly interesting things can now be done with computer systems. Here are some applications I'd like to help realize.
Evolutionary Software Development
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 / Romance||Often grows out of other associations, can be negative for enemies.|
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.
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.