image file not found

"A computer program does what you tell it to do, not what you want it to do."
- Anonymous


Students often approach me at semester's end and ask if they can work with me on some interesting project over the semester break. Each Summer and Winter Break I publish an evolving list of projects that I think would be interesting to students. Often I will work on one or more of them as well. These projects generally fall into one of three categories: fairly simple skill building exercises, portfolio projects that could be discussed during an interview, and Research Projects that explore something new or some new way of thinking about existing work. You will find the latest list of projects below, each with a link to a project statement.


We start the projects with a meeting to talk about what is on the list and to collect a mailing list of all students interested in participating. During these break periods we usually hold a meeting once every two weeks to discuss the status of our work. I will report on my work with code demos and conversation or, occasionally, a slide presentation. Following that students can present their work if they wish and ask questions about the project requirements or discuss their problems designing or implementing a specific project.

You are welcome to collaborate with other students if you wish, discussing ideas and implementation approaches. However, the value you get from working on these projects is in direct proportion to the amount of effort and original though you apply to it.

Project List:

NumberProject TitleCategory
UFP0C++ ExercisesBuild C++ skills
UFP1Directed Graph ClassBuild C++ skills
UFP2Graph VisualizationPortfolio Project
UFP3C++ ReflectionPortfolio Project
UFP4Remote Directory Synchronization with WPF and WCFBuild .Net Skills
UFP5C++ Tiny Web ServerPortfolio Project
UFP6Implement Google's Big Table - distributed data structure for big data setsPortfolio Project
UFP7Stories Web Site - structured to present stories about people and institutionsPortfolio Project
UFP8Explore Boost LibrariesBuild C++ skills
UFP9Explore C++11 featuresBuild C++ skills
UFP10Baysian NetworksResearch Project
UFP11Use Ajax Protocols, HTML5, and Tiny Web Server to build a cross-platform GUIPortfolio Project
UFP12Platform Tools - build platform wrappers used by common codePortfolio Project
UFP13C++ Serialization and DeSerializationBuild C++ skills
UFP14XPath Component - build XPath processor to navigate XML in C++Build C++ skills
UFP15XML DOM - build an XML Document Object Model in C++Build C++ skills
UFP16Program Animation - Build annotator to support data flow and control flow animationResearch Project
UFP17Audible Thread Traces - Build audible trace library to support multi-thread debuggingResearch Project
UFP18 C++ Code Checker - check code for Liskov Substitution errors and more Build C++ skills
UFP19 Cinder - Graphics library in C++ Portfolio Project
UFP20 Explore Node.js Portfolio Project
UFP21 MEAN: MongoDB, Express.js, Angular.js, Node.js Portfolio Project

Reference Code:

Below find a table of links to code you may wish to reference or use in your projects. These packages are similar to, or the same as, that I provide for each of the project-based courses I teach. Most of the code is written in C++ and has been used in CSE687 - Object Oriented Design and/or CSE775 - Distributed Objects.

NamespacePackage TitleDescriptionPlatform
PlatformToolsFileSystemC++ Library of tools for manipulating files and directoriesWindows & Linux
ThreadingThreadsC++ Thread Class (not the C++11 thread class)Windows & Linux
ThreadingLocksC++ Locking Classes (not the C++11 classes)Windows & Linux
ThreadingBlockingQueueC++ Blocking Queue classWindows & Linux
XMLToolsXmlReader & XmlWriterC++ Xml Reader and Writer classesWindows & Linux
ParsingToolsC++ ParserRule-based Ad Hoc ParserWindows
ParsingToolsC# ParserRule-based Ad Hoc ParserWindows
GraphLibGraphC++ graph libraryWindows
CommToolsSocketDemoC++ Sockets Library & Sender and Reciever classesWindows


For both the UFP1 and UFP12 projects some of the code is given in the table above, e.g., Graph and FileSystem. This let's you see how a project can be implemented and gives you a starting point for more advanced functionality.