The 4999 and 7999 projects that I supervise generally involve a mix of
reading research papers, design and implementation work, and a final writeup of
about 5,000 words. Students should have solid programming experience; taking a
prior 4-level project course is a good idea. A good background for many of these
projects is a course with the number x1y0, where x ≥ 4.
The following are some projects that may be available. Students seeking a
project should think about what they would like to work on before talking to
The Genus programming language (http://www.cs.cornell.edu/projects/genus) is
Java-like language with a powerful new capability for generic programming,
related to Haskell's type classes. Some projects:
- explore how to use the new language features most effectively by
developing libraries for Genus, such as the library of collection classes.
- work on the compiler to improve code quality and support for
is a secure wide-area distributed object store and a big system-building
project. Fabric objects look like Java objects but are secure and are
transparently distributed and persistent.
- Automatically moving computation and data storage to distributed locations
to make programs secure and efficient
- Implementing larger Fabric application to explore how well we can capture
- Studying how to make Fabric's software transactions as efficient as possible
- Upending the conventional wisdom on optimistic concurrency control by
carefully comparing its performance with pessimistic locking.
- Improving the power of policy inference.
- Exploring richer security policy languages.
- Developing an Eclipse plugin for Fabric.
- Developing an Android version of Fabric.
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.
A secure voter client that supports coercion resistance and cut-and-choose style
protection against malicious clients.
Additional tabulation mechanisms to protect against application-level DoS attacks.
Using threshold cryptography to improve availability of the system.
Polyglot: an extensible compiler framework for building extensions
to the Java programming language. Dozens of compilers have been built on top
of Polyglot by research groups all over the world, so work on Polyglot will
immediately be appreciated.
- Add support for Javadoc, so that extended languages can generate documentation easily.
This can be built using Polyglot itself.
- Add support for easy development of Eclipse IDEs for extended languages.
- Add a DEX back end so we can target Java extensions directly to Android.
- Develop a complete tutorial so developers can more easily learn the advanced
features of Polyglot like program analysis, quasiquoting, and in-place translation.
Swift: A system for building secure web applications in
the Jif language. Client-side
secure and efficient to do so.
- partitioning for
- making client-server data synchronization
- 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.
New team members are welcome.
[ CMS web site
| CMS system ]
- redesigning the system architecture for
- adding new scheduling and calendaring features,
- porting it to Fabric.
- 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.
- netview: an intuitive distributed graphical network monitoring tool
- 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.
Some papers on JMatch: [ Iterable Abstract Pattern Matching for Java (PADL'03), Interruptible Iterators (POPL'06) ]
- developing an Eclipse plugin using the Polyglot IDE
- adding support for predicate dispatch
- adding more powerful predicate solving using external solvers (SAT, numerical, ...)
- a more solid implementation of the C++ back end. This implementation
exploits low-level control over the stack to improve performance.
The ultimate graphical diff-merge tool, supporting N-way merging, RCS/CVS support, and
editing. Related to other tools like
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
either IMAP or Fabric. Similar tools do exist now, but are not
transparently distributed. Good sorting, filtering, and filing features
also a must.
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
one of the best languages ever designed.