|
Research Opportunities
for Undergraduates
and Grad Students |
|
Research Opportunities for Students
I am open to project proposals from any student on just about any topic,
though I prefer to work on problems in areas that match up with my current
research interests. Currently, these include software development and tools
that support programmers; programming languages; patterns as a means of
documenting knowledge; object-oriented and functional programming; and
artificial intelligence, especially knowledge systems.
Below is a list of topics or project possibilities that may interest you.
If so, please contact me to discuss the opportunity in greater detail!
Some of the projects, as described, may be more appropriate as either an
undergraduate project or a graduate project. If you are at the other level
but are interested, please do contact me. We may be able to frame the
problem at the level required for your work. Likewise, some of these
projects may be better suited to a team of two or more students. Again,
we can find ways to partition the task, if you are interested!
- Work on a program to play Progressive Chess. This project
has a lot of potential facets for exploring: search,
parallel processing, database interaction, software design,
.... We can tailor the project to your interests.
- Write a program for pairing players and teams in a competition,
following the
Swiss System
for tournaments.
(I have a book and plenty of information on the system.)
- Write a program for rating players or teams in a competition,
following the
Elo System.
(I have a book and plenty of information on the system.)
- Write a compiler or a language processing for any language
of interest, including Javascript.
- Refactor
Huckster,
a simple PowerPoint-like program written in Java.
- Write a plug-in for
Eclipse,
an open-source software development tool written in Java.
- Several years ago, a French exchange student wrote a Java program
that enables programmers to build structured matchers, a
sort of intelligent agent for classifying data. This program
offers several opportunities for projects, including:
- Refactor the program and extend it with missing
functionality.
- Add a graphical user interface to the existing Java
implementation.
- Write a "class browser" for Java programs, preferably in Java.
A class browser is a program that lets the user view a Java
class in a structured way, looking at methods one-by-one,
viewing only public (or protected, or private) members, etc.
- Design an interactive web site for a research group or on-line
community or course or .... I'm not thinking of just a bunch
of HTML pages, but a well-designed site that allows the users
to interact with the material and each other.
- Build a web crawler with some intelligence--an agent that acts for
its user.
- Use a Java framework to build a small application or two,
and document the process of using the framework in a set
of patterns.
- Refactor a medium to large Java program, documenting the process you
use in a set of patterns.
- Study some "real" programs written in an object-oriented
or functional programming style and document the common
patterns they contain.
- Study existing AI systems to identify common patterns in their
design and implementation. Your task would include writing up
the pattern(s) in a common form. I'm looking for someone to
work with me on a study of the systems re-implemented in Norvig's
"Paradigms of Artificial Intelligence Programming" book, as well
as studying other systems.
- Write a program, with or without a graphical user interface,
that allows programmers to build certain other kinds of
intelligent system, such as hierarchical classifiers.
My languages of choice are Ruby, Scheme/Lisp, Java, and Squeak,
in that order.
- Implement a database front-end that can do simple inferencing over
the data. For example, such a front-end might respond to general
queries such as "does patient <x> have a fever?" by looking
up the patient's body temperature and evaluating it.
- Re-implement of an AI system of interest, with an eye on the design
and programming patterns used. I have a couple of systems in mind,
including HYPO, a case-based legal reasoner. My implementation
languages of choice would be Java, Scheme/Lisp, and Smalltalk, in
that order.
- Do a task analysis of a problem of interest, especially a problem that
requires (1) creating or using arguments or (2) teaching a person how
to do something.
- Experiment with search and knowledge-based techniques in game playing,
especially board games (such as checkers, Othello, or chess) and card
games (such as blackjack, poker, or bridge).
- Study system design in terms of patterns and architectures. Your task
would involve reading about several, comparing and contrasting them,
and doing a small implementation to demonstrate the ideas.
- Document knowledge from some area of CS using patterns. An example is
Roundabout, my pattern language for writing recursive programs, as I
present it in 810:154. You could pick just about any course, just
about any body of knowledge to document.
- Document knowledge from just about any area of your academic or
professional experience using patterns.
Eugene Wallingford ====
wallingf@cs.uni.edu ====
December 7, 2009