Richard G. McDaniel

Research:

My research involves understanding and developing tools that help people
make software. Presently, this interest is focused on tools for
nonprogrammers, and more specifically on using programming-by-demonstration.
My latest project is
Gamut, which is an advanced
programming-by-demonstration
tool for building games. With Gamut, it is possible to create complex,
original application behaviors without writing in a programming language.

Research

My latest work is my thesis called, "Building Whole Applications Using
Programming-by-Demonstration." The thesis is available below. It is quite
long so I have divided it into separate postscript sections for each chapter.
There is also an ascii text abstract
available. In this thesis, I created a tool called
Gamut which can be used to build games using only
programming-by-demonstration.

My latest paper about Gamut will be presented at CHI this year in May. The
postscript version of this paper is available
here as well as an abstract. I have also
presented a paper at the International Conference on Intelligent User
Interfaces (IUI'98). The postscript version of
this paper is available and so is the
abstract. The CHI paper talks mostly about
the interaction techniques in Gamut whereas the IUI paper is concerned more
with the inferencing algorithms.

A shorter paper which summarizes the user interface aspects of the work
was accepted by the AAAI Spring Symposium is
also available. Gamut was also presented at the
CHI'96 Doctoral Consortium and demonstrated at The Symposium For User
Interface Software and Technology (UIST'97)
both of which included small two-page papers.

I have also done other research in programming by demonstration. One of my
earlier tools is Marquise which Brad
Myers and I worked on together. Marquise was written for the Garnet
system and layed much of the ground work for later creating Gamut which is
a much more sophisticated system.

In theory, you can download and play with Gamut yourself. The source code
is available in the table below. One selection contains the entire source of
Gamut which can be compiled on both Unix and Windows platforms. The other
zip file contains a binary file for the Windows version which ought to run on
both Windows 95 and NT. To uncompress the files for the PC, you will need the
winzip application. If you compile Gamut for yourself, you can find the
Makefile information in the directory amulet\bin\. To build Gamut, I used
Visual C/C++ and the needed project files should be in the bin directory. To
run Gamut, you can drag out the exe file onto your desktop and set the
shortcut properties to point to the correct directory. The "Start in:"
directory should be named amulet\samples\gamut (not amulet\bin). You will
also need to create an environment variable named AMULET_DIR with the value
c:\amulet. The binary version contains three directories and no source code.
It also provides a set of test and sample .gam files that I created using the
system. Most of these "games" were used for debugging so they are not really
worth playing. Consult the manuals for your system to see
how this is done. Note that Gamut is a prototype system which I am creating
only to prove the points in my thesis. It does not come with a manual or any
support.

I have also done work for the Amulet project including writing a new
object and constraint system which constitutes
the object system for all of Amulet. In this system, our group experimented
with the ability to incorporate multiple constraint systems into a single
object system. In Amulet, we now have three kinds of constraints that can
run simultaneously: a normal one-way constraint system based on the constraint
system or Garnet; a multi-way constraint system that can produce values for
multiple object variables at once; and a animation constraint system which
can interpolate values smoothly to provide animated effects. The animation
constraint system was presented in a paper at UIST'96 and is available
here.