CptS 481 Project Ideas

If you're at a loss for ideas for your CptS 481 project, here are some suggestions. You still need to send in a one- or two-paragraph proposal to the instructor, which must still be approved, and it must go into greater detail than these. Check back from time to time, as more ideas may be added.

The first email to make an approved proposal using one of these ideas gets "dibs" on that idea. The instructor will then mark entries on this list with "TAKEN", so you can't request that project, but you might be able to come up with an acceptable variation. Some of the projects suggest extensions, which you may use to make your project unique or which may be required for approval depending on how challenging your initial proposal is.

Remember not to start development until you get a "You are approved." email from the instructor.

  1. Preference-Based Task Assignment Package

    Assume there's a manager, a set of workers, and a set of tasks. This program will come up with a table of assignments of workers to tasks in a way that makes the workers "happy".

    Starting with the task list, workers get to express a preference (ordering, assigning scores ("virtual bribes"), etc.). Your program then combinatorially rates all possible assignments (Assume that there aren't a lot of workers!) and selects one that minimizes a manager-chosen metric. Let's assume that preferences start at 100 for "most preferred" and decrease as the task becomes less preferred. This metric could be one of several, such as:

    • maximize the mean preference
    • maximize the smallest preference assigned to any one worker
    • your idea?

    or some combination of these.

    Extensions: GUIs for workers and manager, web interface, database integration, group assignments (possibly with crossovers)

  2. Volunteer Database

    This system manages a set of volunteers working at a community event (music festival, art show, run/walk, park cleanup, etc.). There are a set of jobs. Each job has (at least) a name, a description, location, start and stop times, a supervisor, and (eventually) an assigned volunteer. People have (at least) names and contact information. Volunteers are people with (eventually) one or more jobs. A volunteer cannot be assigned to two concurrent jobs. A supervisor is a person (but not a volunteer) as well, a location they supervise, and a set of one or more jobs they supervise (and which may be concurrent).

    There should be a GUI for volunteers, a GUI for supervisors, and a GUI for the volunteer coordinator.

    The system should be able to print (to text files or, optionally, PDF) reports of all volunteers (for the volunteer coordinator) and of all volunteers in a certain location (for that location's supervisor).

    The system you design should be flexible enough to be configured for any such event. All event-specific information should be maintained in a database that the volunteer coordinator can modify interactively.

    Extensions: web interface, database (e.g. MySQL) interface, volunteer preferences of job and/or time (as in (1), but their assignment by the volunteer coordinator does not need to observe them), concurrent access by more than one person.

  3. A Pocket Calculator Simulator for Ancient Civilizations

    Who knows how far the Roman, Mayan, or Sumerian civilizations could have gone had they developed 20th Century electronics? Build a pocket calculator simulator that can switch modes between cultures the way other calculators switch between decimal, hexadecimal, and octal and which uses the numerical symbols and arithmetic operations each culture developed.

  4. Snake Break

    A Python version of the commercial "Stretch Break" (q. v.) with multimedia playback (showing, for example, a short exercise to perform during the break) and lots of user customizability.

  5. Tournament Tracker

    A GUI designed to be projected on the "big board" at a tournament to display results dynamically. It would allow several possible scoring systems such as round-robin or double elimination. Tournament Tracker should support as many of them as possible. Persistence of the latest results (in a file) is mandatory -- computer failure should not interrupt the tournament!

    Extensions: automatic results saving to a backup machine or web server, web interface

  6. Geneoview

    A GUI to view and maintain a geneological database, zooming and panning what might be a large family tree and allowing additions, corrections, and annotations. Keep in mind the realities of family structures (children of previous marriages, etc.).

    Extensions: web interface

  7. Snake Pyt

    Based on the game "Pit", which is a simulation of the commodities exchange, this would be an on-line, multiplayer (but not massive multiplayer -- think "LAN game") trading game. Be careful to avoid copyright violation.

  8. Simulate an Early Home Computer

    Pick a pre-PC home computer (e.g. a Sinclair ZX80) and write a Python simulator that can run the software that's available for it. This may involve simulating the underlying microprocessor, so choose a simple one.

    Extensions: graphics display

  9. A Kiosk Attachment

    Using a small system like a Raspberry Pi or BeagleBone Black, build a small unit that can clip onto a monitor and convert it to a network-controlled kiosk. This could include allowing the user to give a remote slide show. (Consider the docutils/reStructuredText/S5 combination, LaTeX beamer, or a GUI.)

    Extension: dynamic data collection (in Python, of course)

  10. A "Ranked Voting" Application

Political scientists have proposed several "electoral systems": ways to run elections under various constraints like choosing from several candidates for board positions in a "fair" way. These are in use in several countries like Australia, Canada, Ireland, Slovenia, and Fiji.

This is a GUI-based tool that would be used by an organization conducting one such election. An election officer would enter the ballot data and the electoral system to be used your tool would indicate the winner(s).

  1. A Joint Project With Another Class
If you're taking another class that requires a project, see if the instructor will consider one that involves your Python skills. I'll be happy to negotiate with the other instructor.

Note that a well-done project will not only earn a good grade, but may become part of a demonstration package the instructor shows to prospective WSU students. (With your permission -- You'll get appropriate credit.)