Final Project #2

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 #2

  1. Repository using Pluggable Components

    The idea:

    Build a cross-platform code and document repository that uses pluggable components to define core Repository services.

    The goal of this project is to support management of code and documents using pluggable components for:

    1. Storage:
      The mechanics for managing directories and placement of files. Means for identifying the root of dependency chains, identifying Systems, Modules, and Packages. Are categories used? Are they based on namespaces?
    2. Dependency Information:
      How dependency information is stored and accessed, e.g., with metadata XML files or with a NoSql database.
    3. Versioning:
      How are versions tracked? How does a user explore the version sequence of a specified package?
    4. Ownership:
      Are packages owned by a single developer? by a group? by any registered Repository user?
    5. Checkin and Checkout Process
      How are open (incomplete) checkins and closed (complete) checkins identified and managed.
    6. Browsing
      What kind of information is supplyed to the user to browse the Repository structure. This is related to how storage is managed.
    7. Building
      When and how packages are built into libraries. How are Graphical User Interface (GUI) codes handled. How are codes from different languages handled.

    Components will be defined using interfaces and object factories. There needs to be a component installation interface that allows a component to register with, and be activated by, the Repository. Since some of these services need to use other services, there needs to be a way for them to communicate. One way is to use function call interfaces, but that means that every component may need to know the interfaces of many other components. That isn't a good idea as it promotes a very tight coupling between components.

    One nice solution to this problem is to use message-passing communcation between components, as well as between the Repository and its Clients. This way each component has to support a "PostMessage(Message)" interface where the parameters of the call are encoded into the body of the message. The message has a "from" and "to" property so that the Repository's message dispatcher knows where to send the message, and the message recipient knows where to send a reply. Yes, you can support properties in C++.

    One interesting question is how the Repository will be hosted. Here some options:

    • C++ Process
    • Web interface using the MEAN stack. Here, MEAN stands for MongoDB, Express.js, Angular.js, and Node.js.
    • Asp.Net MVC

    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