The final project for this course is a team effort to get DITTO up on the Web,
i.e., to make it possible for someone using a Web browser such as Netscape to
type in that they're interested in butterflies with claws, and get back a page
of relevant stories from the class story base.
For a quick primer on the Web, click
here,
but there's tons of stuff out there on Web. I particularly like the resources at
The
Art of HTML.
This project is only for students at B or higher in the current standing. The
others have to do the basics first.
Click
here
to see the current set of teams. Email your TA to join a team or change the one
you're on.
Click
here
to go to the DITTO Web server. Warning: this server is very unstable.
Here's a rough sketch of the different parts of DITTO, and how they relate to
different Web page interfaces. The flow of events is from left to right until
the first set of stories is seen after which the Dialog Manager and the user
may either decide to see more stories or return to the page that discusses the
animal being designed, i.e., the page that initially says "What kind of animal
do you want?"
Here are some of the things that will need to be done, and who can or should do
them. More will surely be discovered. Some of these tasks are major, some are
easy.
- Bring up the
CL-HTTP
server. Requires a good Mac with MCL 3.0, and, of course, connection to the
Internet. Student(s) must be A level, in case they become so busy with this
that they have no chance to send me any more code. (Done!)
- Send me email about tasks to do. Volunteering to do them is even nicer,
but optional. Everyone can do this.
- Interface (forms) design. This application needs forms that users can fill
in. One or two people need to do the HTML coding for these forms. Not open to
students still needing to demonstrate basic Lisp or AI skills.
- Lisp routines to generate HTML code. HTML tags have a very simple
structure: <tag-name>...text...</tag-name>. Utility
functions are needed to take strings, such as story texts, and format them in
this form. One tricky bit is that certain special characters need to be
replaced with special codes, e.g., a string quote (") in the string
has to be replaced with " (that semicolon is part of the
name).
- Parsing phrases. The parser needs lots of phrases defined.
- External story text database. While MOPs, indices, and story names need to
be in memory, the actual texts for stories can be kept on disk and retrieved on
demand. This can save a lot of memory and is pretty easy to do. What you do is
write code to read files with defstory forms and store in memory where
each story is defined, using Common Lisp's file-position function.
Then later when a story is needed, you use file-position again to jump
to that point in the file and get the text. Xlisp-stat's help function
works that way and is quite quick after a minor pause to index locations.
Especially valuable for students needing to demonstrate Lisp skills.
- Story retriever. Given a parsed description of an animal with a feature
for a given action, retrieve stories that are "same feature, different action"
and "different feature, same action." Especially valuable for students needing
to demonstrate AI skills.
- Dialog manager. Given an input like "I want a butterfly that can fight,"
the first response should be a page witha new form asking "What do you want it
fight with?" and some followup answer templates, such as "I want it to fight
with its ..." There's some code for defining such response and answer templates
already. It needs to be updated and integrated into the system. The output
needs to be coordinated with the HTML people. Especially valuable for students
needing to demonstrate Lisp skills.