Undergraduate Research Opportunities

The 490 and 790 projects that I supervise generally involve a mix of reading research papers, design and implementation work, and a final writeup of about 5000 words. Students should have solid programming experience; taking a prior 400-level project course is a good idea. CS412/413 is an especially good background for many of these projects.

The following are some projects that may be available for undergraduates to get involved with via a CS 490 project, or for M.Eng. students to work on as a 790 project. Students seeking a project should think about what they would like to work on before talking to me.

  • Civitas is our new, secure voting system. Civitas is the first voting system implementation that allows voters to vote securely from the remote client of their choice. But we need to build a voter client to allow Civitas to be deployed. Experience with JavaScript will help. There are also deep research problems to be pursued in distributing trust and handling application-level DoS.
  • Fabric is a secure wide-area distributed object store and perhaps the most substantial system-building project we have underway now. Fabric objects look like Java objects but are transparently persistent. The Fabric system will automatically move computation and data storage to distributed locations to make programs secure and efficient.
  • Polyglot: an extensible compiler for building extensions to the Java programming language. There are several interesting projects, such as:
    • Javadoc support for extended languages. This can be built using Polyglot itself.
    • Integration with the Eclipse IDE, probably in collaboration with researchers at IBM TJ Watson.
  • Course Management System. The course management system used by the Computer Science Department and now also hosted at CIT and used by other departments was developed by students. There are many interesting projects, such redesigning the system architecture for high performance, adding new scheduling and calendaring features, and porting it to Fabric. New team members are welcome. [ CMS web siteCMS system ]
  • Swift: A system for building secure web applications in the Jif language. Client-side JavaScript code is automatically generated from Jif code where it is secure and efficient to do so. We are looking at improving client-side security and at making client-server data synchronization more efficient.
  • Hierarchical partitioned searching: The classic single-player game of Sokoban requires hundreds of moves of searching; fortunately, it has some properties that makes it amenable to a new kind of hierarchical searching algorithm. Other games like Go are encouragingly similar. Experience in search algorithms and ML programming is important.
  • DVS: a flexible, lightweight revision control system for large software projects, intended to support versioned directory hierarchies and branched development, yet implemented as a lightweight client running the standard CVS protocol (unlike, say, Subversion). A lot remains to be designed and implemented, but the result should support large, complex development projects better than Subversion or other related tools.
  • netview: an intuitive distributed graphical network monitoring tool
  • Adding reference counting support to Java. This would be done as a Polyglot extension language, possibly implemented in J&. Challenges include reducing reference counting overhead using dataflow analysis.
  • codewriter: a web markup language for high-quality pretty-printing of program code on web pages, so program code fills the available horizontal width while remaining readable.
  • jshell: a shell interface with integrated Java and Windows support, smoothly combining a language-based (console prompt) interface with a icon-based graphical interface.
  • JMatch: pattern matching and logic programming for Java. Possible projects include writing an Eclipse plugin, adding support for checking pattern exhaustiveness, adding support for predicate dispatch, adding more powerful predicate solving (such as a general numerical solver), and finishing the C++ back end that exploits low-level control over the stack. Some papers on JMatch: [ Iterable Abstract Pattern Matching for Java (PADL'03), Interruptible Iterators (POPL'06) ]
  • ngdiff: The ultimate graphical diff-merge tool, supporting N-way merging, RCS/CVS support, and editing. Related to other tools like rcsview, a viewer and editor for version-controlled files under RCS and CVS. Rcsview helps the user to figure out a source file evolved and to identify who's responsible for any given code segment.
  • Distributed Post-Its: instantly create short notes, memos, and reminders that can be created and viewed from anywhere, with multiple open sessions possible at once. Probably sits on top of IMAP. Similar tools do exist now, but are not transparently distributed. Good sorting, filtering, and filing features also a must.
  • Auto-sorter extension for Thunderbird. Filing mail into many folders is too hard. An auto-sorter based on Bayesian principles could set default folders for all incoming mail, greatly simplifying filing of email.
  • Juno-2: this is both a powerful editor for drawings and animations, and a constraint-based programming language. Juno displays a view of the picture as it would appear if printed, and simultaneously displays a program in the Juno-2 programming language that draws the picture. It also allows users to create their own drawing tools. The project is to improve the UI to better support the creation of user-defined tools. This would involve programming in Modula-3, one of the best languages ever designed.