Richard G. McDaniel

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.
Wean Hall 8112
: +1 (412) 268-3066
FAX: +1 (412) 681-5739
6017 Stanton Ave., Apt. 1, Pittsburgh PA 15206
: +1 (412) 661-1759
Brad Myers
David Garlan
Associated Projects:
Curriculum Vitae, postscript, pdf, ascii
TOCHI (submitted for review) - Gamut: Creating Complete Applications Using Only Programming-by-Demonstration postscript
CHI'99 - Getting More Out of Programming-by-Demonstration, abstract, postscript
Job Interview Slides, powerpoint
IUI'98 - Building Applications Using Only Demonstration, abstract, slides, postscript
Demo for UIST'97 - Gamut: Demonstrating Whole Applications, postscript
UIST'96 - Easily Adding Animations to Interfaces Using Constraints, postscript
CHI'96 Doctoral Consortium - Improving Communication In Programming-by-Demonstration, html, postscript, slides
AAAI'96 Spring Symposium - Using Better Communication To Improve Programming-by-Demonstration, ascii, postscript
User Study Experiment - Making Games By Demonstration, postscript
Thesis Proposal - Improving Programming-by-Demonstration with Better Semantic Expression, abstract, postscript, slides, small slides
Tech Report - Amulet's Dynamic and Flexible Prototype-Instance Object and Constraint System in C++, abstract, postscript
INTERCHI'93 - Marquise: Creating Complete User Interfaces by Demonstration, abstract, postscript


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.


Creating Whole Applications Using Only Programming-by-Demonstration

by Richard G. McDaniel

The Thesis, 370 pages, 2.8Mb
  • Source Code
  • Windows Binary
  • Tutorial
    Basic Tutorial
    Extra Tutorial
  • Experimental Tasks
    Pawn Race