Potential 15-413 Course Projects

Magnetic Levitation Haptic Consortium

http://www.msl.ri.cmu.edu/projects/haptic_consortium/
Ralph Hollis
rhollis at cs
C/C++ with OpenGL or Open Inventor, FLTK, or such

We are building systems that may well revolutionize the field of haptic (sense of touch) interaction with computers. The project is sponsored by NSF, and we are exploring the possibility of spinning it off as a commercial enterprise.  Our current clients are researchers at Stanford, Purdue, U. Utah, Rutgers, CMU, and Harvard.

We currently have a CS senior, Matt Pucevich, who has developed a very nice server-side Application Programming Interface (API) running on the system under the QNX RTOS.  Our Ph.D. student, Bert Unger, is also available for help with ddomain knowledge and programming. Now we need to develop Windows and Linux client side code for 1) a set of diagnostic utilities and tools, and 2) a small set of visual/haptic demonstration programs that highlight the system's capabilities.

For the first aspect, we envision a well-designed graphical panel with buttons, sliders, and displays where the user could interact with a magnetic levitation haptic system to exercise its capabilities.  For example, the device has three optical sensors that report its position and orientation.  Rather than just seeing a string of numbers, we want some graphic objects such as three boxes with a spot that moves around in them depending on reported position.  This could be accomplished, for example, by using a tookit such as FLTK and calling functions in the existing API.

For the second aspect, we would like to see several small demo programs created, subject only to limits of the imagination.  For example,
feeling a key inserted and turned in a lock, stirring a bowl of pudding, creating a race car gear shift, etc. We currently have several examples to look at for guidance.

In summary, the project (or projects) are well within the capabilities of bright CMU undergraduates, and we think they should be a lot of fun (while breaking new ground).  We would love to have some CS students working in our happy lab (See http://www.msl.ri.cmu.edu/) :)

A Flash-based Flowchart Simulator for teaching Programming Methodology (was RAPTOR)

http://www.usafa.af.mil/df/dfcs/bios/mcc_html/raptor.cfm
Tom Cortina
tcortina at cs
Flash/ActionScript

I'm teaching a new pilot course this Fall for H&SS students called 15-105 Principles of Computation.  The idea is to give an introduction to computer _science_ rather than computer _programming_ in language X. Although the course has some programming concepts content, students don't learn how to program in a specific language with specific syntax. Currently, as part of this course, I'm going to use a tool called RAPTOR developed at the US Air Force Academy.  This tool, which runs on PCs only, allows students to draw flowcharts and simulate them.  The interface is graphical, so students can drag and drop symbols for assignment statements, decision boxes, etc.  The interface forces them to put the symbols only in places in the current flowchart that make sense (so they can't write flowcharts that won't execute).  It also hides much of the syntax required in regular programming.  The idea here is to let students experiment with the algorithmic/problem-solving process that we  go through without having to deal with all the syntax-related issues of a real language.

I would like to have a tool like this but one that works on the web (using Flash and ActionScript) so students can use the tool without concern about what computer they're working on.  The tool should be designed so that a core set of flowchart icons are available initially, supporting a base set of data types (integers, floating point, strings, arrays, boolean, char), but the design should be made in such a way that new icons, data structures and functionality can be added afterwards in a straight-forward, open manner.  Future versions might include flowchart icons to include graphics, audio or other multimedia features into flowcharts.

Mobile Phone Messaging

Scott Carter / Jennifer Mankoff
sacarter at cs dot berkeley dot edu (note that Scott is local at CMU, despite the email address)
Java/J2ME

I have a software project that I think is relevant for this course: a specialized SMS/MMS J2ME program for mobile phones. The application should to be able to perform all of the functions of normal messaging applications, and additionally should include functionality to change the representation of messages based on their content. Also, a protocol should be developed to handle messages passed between phones and a remote desktop application. Because it is important that the program interface be easy-to-use, I believe it would be appropriate to use a GUI builder for phones such as J2ME Polish (http://www.j2mepolish.org/).

For more details about the larger project of which this application is a part, please see: http://www.madpickle.net/scott/pubs/smwoz3.pdf

The Data Shop

Alida Skogsholm and Ben Billings
alida at cs
Java/J2EE

The Data Shop is a central data repository and web application available to learning researchers. It is written in Java with Jboss as the web application server. The front end is written using JSPs.  Currently we are using JFreeChart/Cewolf to display the learning curve graph, but are looking into using a different graphing package.  We are also looking into using Ajax to avoid full page redraws when it is not necessary.  This project is part of the Pittsburgh Science of Learning Center (PSLC).

Currently, the Data Shop is more prototype than finished application.  A project team in the HCI Master's program has just completed requirements gathering and a high-fidelity prototype for the next version of the Data Shop.  The Error Report is one area where the current design was proved too difficult to use during user testing and was completely redesigned by the MHCI project team.  Rebuilding this report and adding the added complexity of allowing the user to edit data seems about the right level of effort for this course.  This is not critical path but would be very nice to have done.  It would also be interesting to see what the students came up with for a software design of how to handle a web application which allows the user to edit data.  Note that currently the Data Shop is a read only application.  EJBs can be used but there may be a non-EJB solution as well.  The students need to take into account things like multiple users accessing the same data, who can see what changes and scalability.  The scope of this task is flexible so that it can be discussed after the team gets started.

As far as tools are concerned they are all open source and/or free.  We are using Java, J2EE, JSP, Eclipse, Tomcat, MySQL, JFreeChart/Cewolf, ant, JUnit, log4j, and CVS.  The current source repository will be provided.

Node Placement and Monitoring in a Wireless Sensor Network

Carlos Guestrin
guestrin at gmail dot com
Java

In this project, we will design and implement a software infrastructure for deploying wireless sensor networks. As an example application, we will consider the task of deploying a network of wireless sensors to monitor temperature in a building (Fig. 1). 

deployment

Figure 1: An example deployment of 52 wireless sensors in a research lab

visualization

Figure 2: Example of a visualization of a temperature distribution.

 The system will be used to collect sensor data from portable wireless sensors (Fig. 3), use the collected data to learn a probabilistic model (Fig. 2) and use this model to optimize the sensor deployment, taking into account constraints such as wireless network link qualities and floor plans. More specifically, the system will

 sensor

Figure 3: Wireless sensor for measuring temperature

 Required:

 Ideal:

Python-Based Robot Control System

Paul Rybski and Manuela Veloso
prybski at cs
Python/C?

We use the Sony AIBO for research as well as educational purposes.  The majority of the codebase is written in C++ but this year, one of Manuela's grad students has developed an on-board Python interpreter for the robot's behavior/control code.  We'd like to expand on this notion of using python for robot control to make it more general purpose so that it will support robots other than the AIBO and applications other than robot soccer.  This will involve defining some useful abstraction layers that specify interfaces to sensors and actuators in a hardware independent fashion.  This way, the same base python codebase can run a soccer application module on the AIBOs, a navigation application module on our Evolution Robotics ER1 robots, as well as the same or other application modules in a 3D robot simulator.

We can very easily give the students access to the AIBOs, ER1 robots, and our 3D simulation package and I'd be very happy to meet with them every week and direct their progress.  They wouldn't be responsible for doing any of the low-level platform-specific systems either.  They can assume that those are already done for them.  They would be responsible for developing a higher-level python API to read and write to them. Also, we wouldn't necessarily expect them to write specific application modules for us (such as our soccer application).  I think that once they have the basic framework defined, we could have them write a simple teleoperation module to show how the same python code could be used to drive an AIBO and an ER1 from a remote workstation.

I think this would be a very interesting software engineering project because there is a lot of useful work to be done in identifying requirements and coming up with a useful and extensible architecture. We'll also assume that they can learn Python if they don't already know it.  There are lots of great on-line tutorials and it's a fairly straightforward language to pick up.

Visual Driving Simulation

Bonnie John and Mike Horowitz
bej at cs / m.horowitz at icarnegie dot com
Java and a little bit of Lisp

A small programing group, part of the Human Computer Interaction Institute, is working on rewriting CogTool (http://www.cs.cmu.edu/~bej/cogtool/). CogTool is a tool designed to help application/interface developers estimate what an expert users performance would be for a specific task on a particular design.

Part of CogTool's mandate is to estimate the impact a secondary task might have on driving (or some other primary task). For example, would using a particular cell phone, allow a driver to concentrate more on the road and less on dialing a number? Which navigation device will be less distracting for finding the nearest gas station or Starbucks.

CogTool functions by taking advantage of a large body of psychology research which allows us to estimate the amount of time it takes for an expert user to perform an action. The analysis includes eye movements, hand movements, thinking and even recognition of visual and aural events. CogTool lets the user mockup their device, and then demonstrate how that device is used. We feed that information into a Lisp program which produces the estimate on human performance.

Additionally, using a Lisp based driving performance simulator we get an indication of a particular device's interface with a persons ability to maintain speed, direction and stop in an emergency. The 3d visualization of this information was lost with the move to the new version.

The CogTool development team, is made up of one full time programer, two part time programers, a half time manager/coder, and an HCII faculty member (Bonnie John). Each team member, has worked in the industry, and have been heavily involved in this project for at least ten months. The development team would be available to meet with students, help solve problems, and even provide some interaction/design support.

A group of students from a Software Engineering course would be able to work with our development team to create an "add-on" to produce a driving visualization.

The student group may also work with the deveopment team to set requirements. The base-line requirements are at least the following.

Online Web Communication Application

Alon Lavie
alavie at cs
Windows/Java (but some flexibility)

A number of colleagues from LTI and I have been discussing a possible project with a non-profit organization out on the west coast, where the goal of the project would be to create a web-site to support online interactive dialogue between people in the US and people in countries in the Arab world, in order to foster better understanding and better communication between people on both sides.

Technically, the idea is to have a web-site that can support a variety of one-on-one and group text communication options (one-on-one chat and IM messages, one-on-one email messages, chat rooms, etc.) between registered but anonymized users.  Eventually we want to support multi-lingual communication with automatic machine translation between English and Arabic, but I'd like to get this off the ground *monolingually* first (in English, and then in Arabic).  I think having a prototype of the web site up and running will help us tremendously in obtaining outside funding for the more advanced versions (that include multi-lingual processing), but we currently don't have the funds to hire programmers to do this for us.

Cognitive Tutor Projects (#1-2)

Vincent Aleven
aleven at cs

Our research group is developing a suite of Cognitive Tutor Authoring Tools (CTAT), an IDE for the development of intelligent tutors, software agents that help students learn a complex skill such as mathematics, computer programming, genetics, and so forth. One can view these tutors as competent helpers with homework exercises. CTAT supports the development of two types of tutors: Cognitive Tutors and so-called "Pseudo Tutors". Cognitive Tutors for high-school math have been very successful: scientific studies have shown that they significantly raise students' test scores over more traditional math instruction and are in routine use in 2000 high schools across the country. However, they are difficult to build; their "intelligence" derives from a cognitive model of student thinking, which requires AI programming to build. Pseudo Tutors are a more novel development: they retain many of the advantages of Cognitive Tutors, but are much easier to build (do not require programming, in fact), although they require more problem-specific authoring than Cognitive Tutors. A major goal of the CTAT project is to make both types of tutors more widespread, so that e-Learning courses don't just have static web pages but also provide interactive activities for students.
tutor screenshot
So far, CTAT has been used by over 200 people. We are actively engaged in expanding the user community. In others words, while CTAT is research, it is also real-world software. More information can be found at: http://ctat.pact.cs.cmu.edu.

The CTAT tools are being developed by a programming team with about 12 members, many of whom have a considerable amount of software engineering experience in industry and half of whom work full time on CTAT. New versions of CTAT are being released 3 times a year. We expect that the software developed for the proposed part of the project, described below, will be included in the CTAT v. 1.6 release, which will come out in the spring of 2006.

Project 1: Cognitive Tutor Development Tool
Java (w/ Swing) or possibly, Flash depending on the team's experience and preference

We would like the help of a software engineering project team with the implementation of a new interactive tool within CTAT that will make it easier to develop Pseudo Tutors. We have a detailed design of the GUI of this tool and the way it interacts with the user. This design was produced during the summer by an intern, who did extensive testing of a paper prototype with users in the target population. The new tool has some complexity but it is not highly complex and seems in fact just the right size for the kind of project for one semester for a software engineering class. It offers a convenient interface for entering various forms of information that are needed during the authoring of a Pseudo Tutor. The project would involve a significant amount of GUI programming but would also require hooking up the new tool with the rest of the tools. Thus, while this piece of the project is relatively self-contained, it also interfaces with a larger software development effort. It thus has many aspects of a real-world software development project. Please note: so far, only the interaction with the user has been designed for the new tool (a fairly detailed design document exists). However, no technical design has been made. One possibility would be to take a rapid prototyping approach: create a prototype based on the existing design, do product tests with real users to arrive at a final design, and, time permitting, implement the final design. So the end product could be for example a prototype, plus the results from user tests, plus a new design and perhaps even a new implementation. Alternatively, the implementation effort could focus on the existing design, in which case the end product might be a new tool, hooked up with the existing CTAT tool suite. Other options could be explored also.

Project 2: Cognitive Tutor Web-Based Reengineering

Java
tutor screenshot
The proposed project is in distributed systems:  it requires choosing a communications protocol and establishing the structure needed to use it.  At the heart of our tools, common to all tutors, is a tutor-controller program that we call the Behavior Recorder (BR).  Attached to it, we support student interfaces (tutor-specific programs with which a student interacts directly) written in Flash, Java and, perhaps soon, Javascript.  Currently our  BR is single-user (each user needs his or her own instance) and communicates via a socket.  This project is to provide a communications protocol that will enable us to change the BR into a service that could be hosted on a web server and serve multiple users.  A requirement is that the protocol not be limited to a simple request-response model:  the BR may send several responses to a single student action, and the BR might need to initiate a transaction without waiting for a student request.

The students need to evaluate the trade-offs in choosing a protocol.  As examples we could consider these choices (the students could come up with others):

  a. use our existing protocol over sockets, but it's not encrypted and would run afoul of many sites' firewall procedures, and we'd need monitoring mechanisms (killing off inactive sessions, e.g.) that web and application server environments already provide;
  b. try to design a protocol over HTTP, which is request-response at bottom but has features (the 206 "partial content" response, e.g.), that might permit us to create the kind of communication we want; but protocol design is fairly difficult, and even if the design is good, robust implementation is also a challenge;
  c. see if SOAP would serve us: this might be the most modern solution, but many implementations are slow, and it may be hard to effect bi-directional spontaneity.

If the team wanted to investigate several approaches and create toy implementations of more than one, that would be very helpful to us.  The application programming interface to the protocol would be, ideally, not more elaborate than required for a socket (listen, connect, send, receive).  The team would not need extensive CTAT-specific knowledge:  a fine result would be to build a test harness, independent of our tools, that demonstrates the protocol.

Web Survey Toolkit Projects (#1-3)

Aaron Powers and Sara Kiesler
apowers at cmu
Java

We are developing the Web Survey Toolbox, http://WebSurveyToolbox.org. It's a tool for making web surveys for academic experiments (it's becoming widely used in the HCII for many web experiments). There are many other tools that do similar things, but they don't do as much and don't have the flexibility that Web Survey Toolbox does – for example, you can insert a few lines of JSP code to do things that are not pre-programmed. It compares favorably to many other tools, including commercial ones (see http://websurveytoolbox.org/FeatureTable.html), especially in the areas that we need for developing complex web surveys in the HCII.

The project is implemented in Java & JSP (for the webapp), with a MySQL database. The GUI uses swing. We develop almost exclusively in Eclipse.
Web Survey Toolbox is open source using a triple license of MPL/GPL/LGPL.

There are several different places that a team could work on, depending upon how much they want to get into existing code or stay independent. We'd be flexible on what project the group would like to do, though we would like to make most of the UI specifications.

Project Proposal 1: Question Library
We'd like to build a question library into the program. This would be a list of scales and other previously researched questions that have been used for previous research. An HCI team has designed the UI and left behind some specifications for the project, but the implementation has not been started.
(This requires some work understanding the current code base).

Project Proposal 2: Graphs and statistics for survey results
For usage by the researcher, we'd like to automatically generate useful graphs and charts for previewing the results of a survey. This project can be as small or large as it needs to be – it would also be great to do preliminary statistics on the data.
We've already written stubs for this and have example code, so the technical challenges are minimal and it requires a minimal understanding of existing code.

Project Proposal 3: Making a J2ME version of the survey
This might be the most technically interesting project, and the most independent of the rest of the our code – it could be done independently. Basically, it would mean writing a J2ME app and database that would ask questions and save the answers in a format similar to the existing JSP webapp.
From our perspective, this is the lowest priority of the projects, but it might be the most doable by a software engineering team – and there's the benefit of being able to design an architecture from scratch.

Web-Based Architecture Documentation Tool

Bradley Schmerl and David Garlan
schmerl at cs
Java

A crucial aspect of architectural design is generating documentation that can be published within a project. We require a tool that takes an architectural description defined using an existing tool and produces web page versions of the architecture. The web pages will allow graphical and hierarchical browsing, with each page containing a diagram of one level of the architecture, its context in the overall system, the properties associated with each element in the architecture, and the definition of the architecture.