| NOTE: The projects described on this page are mostly obsolete. I have left them here to give a general idea about the kinds of projects I supervise, and will update the project descriptions soon. Meanwhile, I welcome inquiries about project ideas. |
Home pages for active projects contain information about what the project is an who is participating. Follow the home-page links for more information or drop by to talk about them.
To begin with, I am always open to participating in research or exploratory projects in which I have relevant expertise and interest (not always identical). When considering a request to supervise a project, I consider three things: whether the objectives are well defined and realistic, educational benefit, and motivation on the part of the participant(s). Although it is, of course, desirable for the project idea to be original, most students who are interested in individualized projects come looking for something to do. Below is a list of suggestions and ideas, which I will build as I think of things.
Whether projects are taken from this list or originally conceived, I encourage students to prepare a 2-3 page "prospectus," early on, outlining the work they plan to do.
Except where indicated, the project ideas below are suitable for both undergraduates and graduates. Graduate projects involve more effort per hour of credit than do undergraduate projects. I recommend that graduate students at the Master's level consider doing six credit-hour project, culminating in a significant written report, a Master's Thesis. This kind writing experience is representative of what software professionals must do on the job.
The most successful projects I have supervised have involved a good deal of initiative on the part of the students who did them. They may encounter new programming languages, novel applications, and unusual environments. I expect the student to be able to learn new tools in a self-directed manner, but I also allow for this "learning curve" in my evaluations. I am looking for a level of effort of about 3-4 hours per week, on average, for each semester hour of credit. I require that the work be documented in a technical report, which typically has three parts:
My current main research project involves the implementation of a transformation system for specifying and refining system models and embedded software. The three main software components are: 1) a background editor, written in Scheme, which performs analysis, s-expression transformations, and design management; 2) a front-end user-interface, implemented in Emacs, TCL, Java to visualize interactive transformations; and 3) a metaprogramming environment for integrating other reasoning tools.
There are many software subtasks for students at all levels. Students in systems and compilers probably have the best background to participate. I am especially interested in applying this research to embedded software. There are also several case studies I would like to do, most of which have a significant hardware component.
Streams are a linear, nonterminating data structures, which are used in my research to represent behavior over time. Using a locally developed programming language called Daisy, we have explored modeling communicating hardware and software systems using streams.
One project would be to investigate using similar stream based modeling methods in Scheme, ML, and Haskell. Another would be to do a serious implementation of streams in Scheme, together with supporting functions to visualize these systems.
Undergraduates interested in this project should probably have some background in hardware. For graduate students, this might be an opportunity to learn some elementary hardware design.
The entire project would involve building a prototype computer, connected to a modern development environment (as in the current C335 lab), together with software for program development, single-step instruction execution, and other instructional tools. A student independent project would be to contribute some piece to this larger system, starting with a "mother board" using the FM9001.
Servobot is a simple six-legged robot, which has been used locally for research experimentation in adaptive control. I am interested in developing it a vehicle to teach primary and secondary students about robotics and control.
Develop a graphical user interface in Tcl/Tk (or other tool set) to allow children to design walking gates and experiment with them on Servobot. This project involves the human-computer interaction aspects, including enhancements to the graphic display, improvements to the design environment, and experimentation with different age groups to develop teaching materials.
Each of Servobot's six legs is driven by two servomotor actuators. A Tcl/Tk user interface, currently hosted on a relatively slow PC notebook computer. Although control of the robot is done with simple character stream I/O, Tcl interpreter is too slow do fine-grain control. This project would develop a C language (or Visual Basic or ...) program standing between the GUI and the I/O port that drives the robot. The software has real-time characteristics, but is not overly complex. The hard thing about this project will be to figure out how to set up communication with the GUI.
The hardware instructional lab currently uses Linux PCs to host software for the Logic Engine prototyping board. These PCs are scheduled to be replaced by PCs hosting Windows NT. There are two programs which need to be ported to the new hosts:
B441 students use a graphical editor to program logic-array hardware devices. The front end will be reimplemented in Java (or possibly prototyped in TCL). The back end is a simple file format which is fed to the device programmer. Ultimately, this intermediate file may be replaced by more direct link.
The digital design lab has an assembly language for programming a microcode sequencer. This assembler has been compiled successfully on NT hosts, but could use refinement. Also, the downloading process needs to be reimplemented.
I am developing materials to teach courses in verification and formal methods. As part of this, I want over time to create a collection of software tools that will help students understand how reasoning tools operate. These programs must strick a delicate balance between clarity and performance. Some current and proposed project are listed below:
BDDs are a prevalent data structure in verification software. We have the beginnings of a system linking Scheme to an existing C library for building BDDs. I would like to see this integration carried forward and documented so that students could prototype higher level verification tools in Scheme.
In the research laboratory, we have ongoing projects in architecture to support heap based programming systems. Specifically, we have a hardware prototype for direct execution of compiled Scheme, and are planning a similar project for Java. This project requires a background in hardware.
I am trying to build a program for design using embedded microprocessors, especially in applications to scientific instumentation and robotics. I would be willing to supervise a motivated, highly self-directing student in the exploration of this technology.