4.889 Intelligent Interface Software Design Workshop
There are about 45 clips, digitized with Quicktime, that deal with the Iran-Contra hearings. The clips present a variety of points of view, including the Regan Administration, expert witnesses, and others. Each clip is annotated with information describing the speaker, the topic, the dialog, and other information. Rules can be written in a Prolog-like language to compose sequences of clips. You will write new rules and annotations for the existing material, and make extensions to the interface.
Each clip may be played by clicking on it. Double-click starts the clip, single-click stops.
The results of the rule application are displayed in the Montage Rule Bar, as a series of movies, each representing a single clip. A Quicktime viewer centered at the top allows the sequence to be played in its entirety.
Then, load the file load-suture-self.lisp
Ignore the warnings from the compiler.
When it's done loading, select Open from the Suture-Self-Video menu.
First, play with the interface to get a feel for how it works. Create some different VideoWalls by playing with the VideoWall menu. Choose some different relations for the rows and columns. For example, choose group-of-speaker from the Rows menu item and topic-of-dialog from the Columns menu item. Then, select the Create menu item.
Note how the layout changes according to what is retrieved. Play the clips in the cells. Can you understand the categorizations of the clips?
[You may have to know something about the Iran-Contra story to understand the clips out of context. If you are unfamiliar with the background of the Iran-Contra story, we can supply you with a short reading.]
Play with the Montage Rule menu. Shift-click on a clip from the VideoWall. Now, select a rule (e.g., point-counter-point) from the Montage Rule menu. For each rule, try it with a variety of initial clips. Can you understand how the sequences are being put together?
Though the syntax is similar to CLOS, each of the "slots" expands into a Prolog assertion. The slot name is a Prolog predicate.
If you are not familiar with Prolog, or the idea of Logic Programming, you may want to read the chapter on Prolog in Introduction to Artificial Intelligence Programming by Peter Norvig. We can also suggest other references for Prolog.
Try some examples of retrieving information from the annotations.
From the Listener type:
(?- (speaker ?Clip-Name (Oliver North)))
retrieves the names of all clips in which North is speaking.
Type semi-colon repeatedly to see each of the names of the clips.
Type period when you are done.
Practice some retrievals that exercise the taxonomic rules.
(?- (and
(speaker ?Clip-Name ?Speaker)
(group-member ?Speaker
former-administration-insiders)))
finds all clips where former administrations insiders are speaking.
Type semi-colon repeatedly to see each of the names of the clips.
Type period when you are done.
Create the VideoWall that has group-of-speaker as the row relation, and topic-of-dialog as the column relation.
Trace the predicate
(trace topic-of-dialog/2)
[The /2 refers to the fact that this predicate takes 2 arguments, and must be mentioned when you turn on the trace].
Now do the query
(?-
(and (topic-of-dialog ?Clip Secrecy-Issues)
(group-of-speaker ?Clip Administration)))
to see how the VideoWall finds the clips to fill in the cell indexed by Secrecy-Issues and Administration.
Try tracing group-of-speaker/2 and issue the same query. Try it with other cells. The VideoWall rules are in the file vw-rules.lisp.
(?movie-
(point-counter-point sheehan1
?SequenceOfClips))
[The ?movie- form instructs the Prolog compiler to return a playable QuickTime movie. In contrast, the ?- form will simply return a list of variable bindings, rather than a QuickTime movie.]
Rules have the following form:
(<- head condition1 condition2 ... conditionN)
where head and each of the conditions is a list.
Rules can be evaluated into the Listener like any other piece of Lisp code. However, if you change the definition of a rule you must remember to evaluate the following before you evaluate the new definition of the rule:
(clear-predicate 'name-of-rule)
The function clear-predicate deletes the old version of the rule from the database.
Write some new annotations for the existing clips. You can do this by adding Prolog assertions of the following form to the database:
(<- (some-new-property some-clip-name
some-property))
Add a slot to the existing annotations that captures some other aspect of the material. To do this you will need to modify the defclip macro definition and the file annotations.lisp.
Write some new taxonomy rules, and perhaps a new montage rule, that take advantage of the new annotations and make some sequences with it.
For example, you could imagine a hierarchical tree representation rather than a grid representation for presenting the collection of clips. You could use the object-oriented tree grapher in the Lisp examples folder to display a tree of video sequences. Is there some way in which you could graphically represent the rules or annotations themselves?