Final Project #1

Version 1.5,
Presentations throughout the Spring Semester

Purpose:

These projects are intended to:

You will pick one of the Projects listed below to implement, either individually, or with one or two other students, and will make three presentations for your project:

Note that you may elect to define your own project, subject to the Instructor's approval. A student defined project should be compatible with the project goals stated at the top of the Purpose section.
You will find GitHub to be an interesting source of project ideas. The previous link works well with Firefox, chrome, and edge. It does not display correctly in IE.
If you do elect to use github for ideas, please note that you won't get much credit for taking an existing github project, making minor tweeks, and presenting that as your project.

Project List for Spring 2017:

Note: Students are encouraged to make modifications to these project descriptions to suit their own tastes and interests. Treat them as "straw-men" that get you started. If you do make changes, please briefly discuss the changes with me. I will approve anything that meets the stated purpose at the top of this page, and that is interesting and has adequate content.

I also encourage you to layout interesting goals for your project, even if you are not sure that you can implement all of them. You won't be penalized for reaching high and not attaining all of your goals. You will be penalized for laying out very modest goals and not achieving those.

Final Project #1

  1. C++ Testharness using Process Pool (CppTH)

    The idea:

    This project is similar in function to SMA's Project #4, Fall 2016, but it is implemented in C++, using a process pool to enable execution of libraries in isolation, instead of using C# and .Net AppDomains. It will still support high performance execution, but also enables testing of libraries from different technologies, e.g., C++, C#, and Java.

    The goal of this project is to support testing of more than one type of code. It does this by defining a base process class that supports process creation and communication with the main TestHarness process. Derived classes are defined to support a particular type of code execution, e.g., managed C# or Java code, or native C and C++ code.

    This project will use C++ sockets to build a message-passing communication system, and C++ code to develop the TestHarness, Process class for loading and executing C and C++ library code, and a demonstration client.

    The process class for testing C# code will be written in C++, but is intended to support starting and communicating with a process written in C# that loads C# libraries, and may use a C++\CLI wrapper to communicate with the Testharness.

    The process class for testing Java code will be written in C++, but is intended to support starting and communicating with a process written in Java, that loads Java libraries and will use Java sockets to communicate with the Testharness.

    Top

References:


Footnotes:

  1. This will be discussed in class.
  2. Ultimate++, CodeBlocks, wxWidgets, Qt, GTK+, ...
  3. That might be a large touch screen monitor, large screen TV, or in the future, wall size displays.
  4. Another alternative would be to use C++/CLI and WCF for the rendering, since C++/CLI code can interact with native code like the existing Graph class.
  5. STAs are used in the COM technology and will be discussed in class (this comment does not imply that you have to use COM in this project).


What you need to do and know:

In order to successfully develop project #1 and one of these projects you will need to:
  1. Know how to use the C++11 language and standard libraries.
  2. Have Visual Studio 2015 installed on your machine.
  3. Set up a virtual machine and a Linux distribution. I will be using VMware Player and Ubuntu.
  4. Install g++ version 5.3 or CLang 3.3. We'll discuss this in class.
  5. Learn the Microsoft COM technology, as discssed in class.

CST strip