CSE 341 -- Programming Languages

Winter 2000

Department of Computer Science and Engineering, University of Washington

Steve Tanimoto (instructor) and Jeremy Baer (teaching assistant).

MiniProject

Version 1.00 of February 18, with due-date revision on March 4.  Subject to further change.

Programming Systems on the Web

Due dates and times -- Demonstrations: Wednesday, March, 8, 2000 at 10:30 in Sieg 232.  (Topic proposals are due Thursday, February 24 at 5:00. Milestone report M1 is due Friday, March 3.) Submit the final version of your miniproject electronically before Friday, March 10 at 6:00 PM by filling out an online submission form

 

Title: Programming Systems on the Web

Purposes:  To design an end-user programming system and implement it in Lisp, Java, Perl or a combination of those.  To explore an alternative programming language paradigm to the function, object-oriented and scripting paradigms covered in class.

Instructions:   1. Choose a class of computations that your users will be able to specify.  There are lots of possibilities here including types of simulations, animations, mathematical computations, or ways to process text or images, or ways to search for information on the web.
2. Refine that class of computations so that it is a rich one (with more than a finite number of possible programs), but one that hangs together as a coherent set.
3. Write a description of that set of computations and what the fundamental primitives will be in the programming language or programming system.
4. Identify the paradigm or approach that your programming system will use: rule-based, control-flow, data-flow, textual language with parsing, textual language embedded in Lisp, programming by demonstration, etc.
5. Implement the user's editor for programs in your language.  If you are doing some kind of diagrammatic language, then your J2 applet can be a good starting point for this.
6. Implement the execution environment for your user's programs.  If the programs will control the behavior of objects in a microworld, then implement this microworld, possibly using your J2 applet as the starting point for an implementation that lets the user configure the simulation environment.
7. Connect the programming part of your system with the interpretation/execution part, so that the programs can be run by the user.

Project Requirements:  1. programming system. (User gets to edit and run some kind of programs).
2. defined class of computations, suitably rich.  (not limited to a finite set of possible programs and executions).
3. implement in Lisp, Java, or Perl. (or a combination, if that helps).
4. identifiable programming approach such as rule-based, data-flow, functional, etc.
5. nontrivial programs possible in the system -- language should include means for specifying controlled repetition in the computation, means for conditional execution.
6. deployed on the web, so that users can write programs in your system via a web browser.
7. interesting demo example saved and editable and runnable by any user.

Programming style:  Comment your code clearly.

Possible topics include, but are not limited to, the following:

A visual rule-based language for controlling the behaviors of objects in a 2-D microworld.  An example of this type of programming system is the AgentBuilder project of Robinson and Cook that ended up, after some polishing the next quarter,  being published in a conference proceedings.  Here is a Pong game created using AgentBuilder.  The Stagecast Creator product demonstrated in class is another example of this sort of programming system.

A programming-by-demonstration environment for traditional numeric algorithms such as factorial, fibonnaci numbers, etc.  The ToonTalk system, demonstrated in class, goes well beyond traditional numeric algorithms, but might give you some ideas.

A data-flow programming system for numeric computations.  The Prograph language is a good example of such a system.

A visual programming language of some sort.

A computer-based language for specifying animations that help people communicate informally in the Internet. Here's an example called Vedo-Vedi.

A programming language and interpreter for directing the activity of a World Wide Web spider.  The user would write or draw small programs that control how a spider searches the web.

A system that lets the user draw image processing algorithms as diagrams.  One box or icon could represent loading an image from a URL on the server, and other boxes or icons might represent typical image processing operations such as resizing, changing contrast, adding two images, mosaicing two or more images together, and displaying an image.  Arrows would indicate ordering of operations.