Suggested projects
(from more than 10 years ago: Spring 1998)
You can select from this list. Or you can propose your own (subject to approval).
Note - some of these projects (especially netchess and netboard) have been accomplished many times before by prior CS 50 groups. We hope any future (Spring 2005 and later) groups who attempt these projects will also devise novel features for them.
- wsh this project would implement a web-shell. Everything on the web is point-and-click. It is friendly and useful and all that. But people who want more, who want to automate their access cannot use scripts (ever try to get a whole set of Java programs from one of the repositories like Gamelan?) What is needed is some way to script the operations. Just like in a shell in Unix. wsh should consider an HTML file as a directory and allow users to cd into it, list its contents (that is, all the links contained in it), copy a subset of the contents and so on. Some use cases include "ls *.ps", "foreach x (*.ps) cp $x /fs/cs-fac/acha/; gzip --best /fs/cs-fac/acha/$x end", "gv paper.ps", "xv foo.jpg". These use cases must be supported. Other use cases are possible and I have some suggestions for the group that is willing to take this up. This would be a really cool hack. If this works reasonably well, it is likely to be widely used.
- netchess provides chessboards for two people to play across the network. The program should include the rules to play chess. Illegal moves should be flagged and disallowed. the program should maintain a chess-style clock. It does not need any chess smarts. Legality of moves should be checked at both ends (when the person making the move attempts to make an illegal move and before displaying at the remote end). It should also keep a record of the moves in any one of the accepted record-keeping styles and should display it along-side. Would be nice if the users could suspend and resume games.
- netcheckers provides checkers boards for two people to play across the network. The program should include the rules to play checkers. Illegal moves should be flagged and disallowed. It does not need any checkers smarts. Legality of moves should be checked at both ends. Would be nice if the users could suspend and resume games.
- netgo provides Go board for two people to play across the network. For those who haven't heard of it, Go is a game of strategy that is much harder than Chess. Deep Blue has defeated Kasparov by sheer computing power (and some smart tuning for his playing style). Trying to do the same for Go is, as yet out,of the question. The number of possible moves is much larger. netgo should include the rules to play Go. Illegal moves should be flagged and disallowed. It does not need any Go smarts. Legality of moves should be checked at both ends. Would be nice if the users could suspend and resume games.
- netboard a whiteboard for online discussions. netboard would allow participants on different machines to write as well as draw simple figures on a shared "board". It should allow at least three participants. Should allow at least lines, circles, squares and rectangles. Should allow deletions. Assume a cooperative discussion (no floor control needed).
- Missile Command Game Build the game with two/three Anti-ICBM bases. Protect your bases from incoming missles, bombs, and other assorted destructive devices. Allow different skill levels (adjusts speed, types of incoming objects, number of protective missiles). Save high scores. Would be nice to allow two players on different machines allowing each to launch offensive raids and defensive missiles.
- net-battleship program to play battleships across the network. As with other games, the program should know battleships rules but does not need any battleship-smarts. Illegal moves should be flagged and disallowed. Legality of moves should be checked at both ends. Would be nice if the users could suspend and resume games.
- newsreader A usenet NNTP news client. Should allow the user to read news. Should allow the user to use a profile file, select group, get headers, skip articles and post followup articles. Kill files and other advanced features are optional.
- net-turnin In this project, you should design and implement a server that allows students to electronically turn in their homeworks using only a web browser. The one used for many CS courses at UCSB now (as of Spring 2005) uses an old, non-standard API, and it is not very flexible. Additional user features (for both students and instructors) would be nice, and would be necessary to make the complexity of this project acceptable for a CS 50 project.
- help line request manager for the use of operators who man help lines. Requests have categories. Requests are queued in the appropriate category. Each request has multiple states -- open/analyzed/pending/waiting-for-info/completed. Each category has people who are assigned to handle these requests. Requests are automatically assigned to people. Should have provision for different levels of effort and this should be dynamically changeable. Would be nice if current level of load was taken in to account. Assume everyone is working as well as they can :)
- netvote A poll-taking program. Asks a long sequence of questions. Keeps track of results. Tabulates results on demand. Allows users to extract results in different ways -- what percentage of the participants above 35 and making FOO $/year and registered democrats think clinton is lying in this week's scandal. what fraction of them voted for him in 1992 and 1996? :)
- CAD House Builder this project consists of a small Computer Assisted Design system for planning houses, floor plans, and constructions. It should include a graphic editor that allows the user to layout perimeters, place external and internal walls, windows, doors, fireplaces and possible staircases. Multiple floors are optional. Rooms once designed may be named. Notes may be added to any part of the design. After initial floor plan design, the user should be presented with a palette of objects to placed in rooms. These objects will include standard furniture objects. The user should be allowed to place items within rooms. Standard functions should include save a plan, load a plan (possibly print).
- visorg program to visualize and navigate the structure of an organization. Each level is a graph with a node for every entity at that level. Entities at higher levels in the organization can be clicked on to expose the next level.
- FSM simulator and debugger simulates a finite-state machine. the program should allow the user to define, browse and edit the finite-state machine. It should allow the simulation to be run to completion, single-stepped, run fast, run slow. It should also be possible to stop the machine during execution and inspect its state. If this program works well, it may be used for course illustrations in this and other universities.
- Pushdown automaton simulator and debugger simulates a pushdown automaton. The program should allow the user to define, browse and edit the control finite-state machine. Assume a single-headed automaton with a single stack. The simulator should allow the simulation to be run to completion, single-stepped, run fast, run slow. It should also be possible to stop the machine during execution and inspect its state. If this program works well, it may be used for course illustrations in this and other universities.
- Turing Machine simulator and debugger simulates a Turing machine. The program should allow the user to define, browse and edit the finite-state machine. It should also allow users to initialize and edit the tape. Assume a single-headed Turing machine with a single one-sided tape. The simulator should allow the simulation to be run to completion, single-stepped, run fast, run slow. It should also be possible to stop the machine during execution and inspect its state. If this program works well, it may be used for course illustrations in this and other universities.
- Traffic Simulator In this project you will design and implement a traffic simulation. You should simulate cars driving on roads, trains on train tracks, and perhaps even pedestrians on crosswalks. A variety of vehicles, such as buses, motorcycles, bicycles, or UPS trucks, may be used in the simulation, each displaying slightly different behavior. There should be many streets in the simulation, and the intersection of streets should contain traffic lights, stop signs, or nothing at all. The user should be able to control the flow of traffic in some way. Consider the following as suggestions. The user may be able to select the time of day (rush hour, e.g.). The user may be able to control when vehicles are added to the streets. The user may be able to "drive" a particular vehicle. Last, the user may be able to control the changing of traffic signals. Valuable information to provide to the user would be the speed of a vehicle, the average number of vehicles waiting at an intersection, or the average time it takes to get from point A to point B. The simulation should be displayed graphically on the screen.

