CSE 341 -- Programming Languages

Autumn 2000

Department of Computer Science and Engineering, University of Washington

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

MiniProject

Version 1.01 of November 15.  Subject to further change.

Programming Systems on the Web

Due dates and times -- Demonstrations: Monday, December 4, 2000 at 1:30 in Sieg 232.  (Prepare your peer evaluations during the demonstration period).  You can also see your own peer evaluations. (Topic proposals are due Monday, November 20 at 5:00. Milestone report M1 is due Wednesday, November 29 by 6:00PM.) Submit the final version of your miniproject electronically before Monday, December 11 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 scripting language for your Paint program (created for Assignment J2).  This language should provide one or more of the following capabilities: (a) ability to create and edit macros within the application, (b) ability to specify constraints on drawing paths, color selections, brush parameters, etc., (c) ability to create, via the language, new, more interesting kinds of brushes that paint in various ways.

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.

A language and interpreter for pinball-machine style program control.  Actions are triggered when the ball hits bumpers or passes rollovers.  The ball may bounce or be directed according to conditions and computations that take place at the bumper.

A language and interpreter for mesh-style parallel programming.  The language should make it easy to program simulations of Conway's game of Life and other cellular logic computations.

A language and interpreter for constraint programming.  This could be a contraint-based drawing program, in which the user gets to specify constraints explicitly.

A language and interpreter for 3-D turtle graphics.

A language and interpreter for specifying advanced chat-room systems.

A language and interpreter for specifying transitions between images in a slide-show type of online presentation.

A language and interpreter for character animation.

A Java reimplementation of the PLAY system originally implemented by Marcia Runyan.

An editor and interpreter for a programming language based upon Bliss symbols.  You would need to come up with some Bliss-like symbols for specifying control, as well as decide upon how Bliss symbols should be used to represent computing actions such as assignment, arithmetic, input and output.

An editor and interpreter for a Video-Village style programming system, in which programs look like board games.

A language and interpreter for demonstrating alternative methods of resolving conflicts when using multiple inheritance.