CS 279: Software Projects

Joe Hoffert
jhoffert@dre.vanderbilt.edu

Department of Electrical Engineering and Computer Science
School of Engineering
Vanderbilt University


Locations


Philosophy

Good design and programming is not learned by generalities, but by seeing how significant programs can be made clean, easy to read, easy to maintain and modify, human-engineered, efficient, reliable, and secure, by the application of good design and programming practices. Careful study and imitation of good designs and programs significantly improves development skills. -- Kernighan and Plauger.

Let us change our traditional attitude to the construction of programs. Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do. --Donald Knuth

Good judgment comes from experience, and experience comes from bad judgment. --Frederick P. Brooks


Prerequisites


Handouts

  1. Course Overview and Build Cycle
  2. Patterns and Resources Used for DRE Systems
  3. Frameworks & GoF Design Patterns


Assignments


Current Projects

sunna - This project implements a a taxi management system by connecting the cab driver, the dispatcher, and the customer through an iPhone application.
Project Members:

Vandopoly - This project is a Java based 2D board game similar to Monopoly where players buy, collect, and renovate Vanderbilt's properties.
Project Members:

Pops - This project is an order processing system designed for a produce business. The basic functionality includes order processing, customer profiles, price sheets, basic accounting & reporting functionality, and online ordering system for clients.
Project Members:

VU Parking - This project gives you everything you need to know about parking at Vanderbilt University: currently available parking spots, how to go there, parking policy, parking rates, etc. It also includes user-centered functionalities such as automatically choosing best available parking spot according to preset user information and preferences, user making comments on a parking spot etc. Currently this application only applies to Vanderbilt University campus. Potentially it can be expanded and developed to fit large scale areas such as a whole city.
Project Members:


Past (Counter)Example Projects

javassonne - This project implements a Java-based 2D tile game similar to the board game Carcassonne. The game implements multi-player functionality and customizable terrain tiles.

whisperim - The Whisper IM client is designed to provide secure communication between clients using existing server technology without any additional support required on the server side. It is designed to be fully extensible to support an infinite number of chat protocols.

commando-engine - The COMMANDO engine is an open-source gaming engine built upon Microsoft's XNA Framework. The engine can be used in the development of tactical, top-down shooter video games. In the sample game, the player character must utilize objects in the environment in order to hide from and eliminate enemies. The enemies will use coordinated goal-planning to find and terminate the player character.


Possible Projects

Vanderbilt Mobile Applications Team (VMAT) - This project brings together VU students interested in mobile computing, and individuals at Vanderbilt University who have a mobile need. Our students work closely with the individuals in need to develop cutting edge mobile applications. We currently work with the Google Android, and Apple iPhone platform, but would like to add more platforms in the future. Any ideas benefiting the university would be acceptable, as long as they involve mobile applications in some way. In many cases this involves writing a server that provides and coordinates information for mobile clients. Some possible projects include:

World of Wordcraft - Students can collaborate with the English department (English 115F ) on a role-playing world. The reference guide presents more information.

Collaboration with EECE 262 - EECE 262 will be developing the following projects. Students in the class might wish to collaborate.

Test and Training Enabling Architecture (TENA) - Several TENA projects are available. This is work done with defense contractor SAIC in Washington, D.C. An overview of TENA presents additional context for the projects below.

  1. TENA Data Logger -
    Objective: Develop a plugin for the TENA Object Model Compiler (OMC) that can read an arbitrary TDL file, create a database with appropriate schema, and generate an application that populates the database. Evaluate trade-offs between different tools/approaches (e.g., MySQL vs. SQLServer, SQL directly vs. JDBC). There is no correct solution. However, justification for approach taken needs to be presented.
    Resources: TENA applications that publish and subscribe to various data (supplied by SAIC). TENA applications that print TENA data to the screen (supplied by SAIC).
    Possible tools to use: MySQL database, Microsoft SQLServer database Express Edition, SQL, JDBC.
    Acceptance test(s): Results of plug-in should be compared with TENA applications that publish and subscribe various data (supplied by SAIC) for accuracy and completeness.
    Follow-on/Alternate: Develop an application to playback and/or query from all loggers or databases.
  2. UML - TDL Converter -
    Objective: Develop an application that will convert from a Unified Modeling Language (UML) drawing format to an ASCII TENA Definition Language (TDL) file and from an ASCII TDL file to a UML drawing format. Evaluate trade-offs between different tools/approaches (e.g., MagicDraw vs. openArchitectureware). There is no correct solution. However, justification for approach taken needs to be presented.
    Resources: TDL metamodel in Eclipse Modeling Framework Project (EMF) format (supplied by SAIC)
    Possible tools to use: Acceptance test(s): SAIC can supply numerous TDL files. Manual inspection of conversion to/from UML for accuracy and completeness is acceptable.


Tools

  1. Java Development Kit
  2. JUnit
  3. TestNG
  4. Apache Commons Libraries
  5. Groovy
  6. Google Web Toolkit
  7. Google Code
  8. Eclipse
  9. Visual Editor Project for Eclipse
  10. CruiseControl
  11. ANT
  12. XStream
  13. Spring Framework
  14. Hibernate
  15. ohloh
  16. XFire
  17. Generic Eclipse Modeling System (GEMS)
  18. Subversion Client for Eclipse
  19. Tortoise SVN
  20. Freshmeat