499 Projects
Margaret Lamb
winter 2010

I have three separate project ideas for CISC 499. Please feel free to come and talk with me about any of them. My office hours are listed on my home page, or send mail to make an appointment.

1. Investigating Prolog Graphics Libraries
2. Investigating Fruit, a GUI Library for Haskell
3. Teaching Tool: Computational Complexity

Project 1. Investigating Prolog Graphics Libraries
The Prolog language provides only very simple I/O functions which are a bit awkward to use. As part of my mission to convince students that Prolog is not just a "toy language", I'd like to be able to produce Prolog programs that look good. The SWI-Prolog web page lists a few options for writing GUI applications with Prolog. One approach to write the GUI part in another language such as Java or C++, and the SWI-Prolog page describes communication mechanisms for this purpose. Another is to use a graphical library called XPCE, also described on the SWI-Prolog page.

For this project, you will investigate and compare these options and recommend one as the most suitable for beginning Prolog programmers. What I'm after is a system that allows us to write some simple graphics and is fairly easy to learn and use. Ease of use is more important than fancy features. Deliverables will include a report comparing the options, a non-trivial sample program, and a web site with clear instructions, suitable for interested CISC 260 students. If time and schedules permit, you will give a short presentation of this project during the last week of CISC 260 in the winter term.

A few years ago, a 499 student did a similar project for the Haskell language. You can view his web site at http://astroboyqu.googlepages.com/what%3F

Project 2: Investigating Fruit, a GUI Library for Haskell As mentioned under Project 1, a 499 student did a project about a Haskell graphics library last term. He did a great job, but the library he used -- like most Haskell graphics possibilities -- got its job done by stepping outside of the functional paradigm. The notes on his web page mention a system called Fruit which models user interfaces based on mathematical functions of continuous time. It sounds like it would be possible to program a GUI program entirely within the functional portion of the Haskell language. I would like someone to do a follow-up project to investigate Fruit. Deliverables will include a web page with instructions on how to use Fruit, an example program, a report comparing Fruit to the more imperative stragegy used in the previous project, and possibly a presentation to the CISC 260 class.

The Fruit web site warns that it is a research prototype. If it turns out not to be easily usable, the project would turn into a report on the shortcomings of Fruit plus a shorter investigation into some other possible functional Haskell graphics libraries.

Project 3. Teaching Tool: Computational Complexity
In CISC 121 we introduce the idea of computational complexity, and we return to this concept in many other courses. It's vital to understand the theory of computational complexity, but it's sometimes helpful to supplement that theory with experimentation. Such experimentation is often tedious: you must run an algorithm multiple times with different inputs, measure the execution time, graph or chart the results, and compare the graph or chart with complexities such n2, n log n, etc. Your job will be to create a tool to make this process easier. The basic idea is that a student will supply a Python function to be measured. Your tool will run the function repeatedly and produce a graph of the times required by the function for different sizes of input. It will also analyze these times and decide which standard complexity they match most closely. The graph should show this complexity as well as the actual results. In addition to writing the tool, you will create a set of clear instructions for using the tool, suitable for inclusion on a web site.