Purpose:
These projects are intended to:
- Explore cross-platform development, supporting systems that use more than one plaform to carry out their activities. We will focus mostly on combinations of Windows and Linux platforms.
- Learn new technologies that you probably have not been exposed to in your program of study. You will be given some initial references but will be expected to do independent work to develop a working knowledge of the specific technology you've chosen.
- Develop a portfolio project that will interest interviewers and give you the opportunity to showcase your skills and interests.
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:
-
Technology Overview:
Discuss your project goals and the technology/platform and frameworks you will be using in a tutorial manner. The idea is that you will explain to the rest of the class how your selected technology works and how you will use it to implement some interesting and useful functionality. -
Probing Examples:
You will present a series of code demonstrations that illustrate what you have learned about your choosen technolgy/platform. These should help the class understand how the technology works and should also move you toward the implementation of your Final Project. -
Final Project Presentation:
Here you quicly summarize the main points of your first two presentations and then describe in detail the design and implementation of your project along with demonstrations of what it can do.
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
-
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:
-
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? -
Dependency Information:
How dependency information is stored and accessed, e.g., with metadata XML files or with a NoSql database. -
Versioning:
How are versions tracked? How does a user explore the version sequence of a specified package? -
Ownership:
Are packages owned by a single developer? by a group? by any registered Repository user? -
Checkin and Checkout Process
How are open (incomplete) checkins and closed (complete) checkins identified and managed. -
Browsing
What kind of information is supplyed to the user to browse the Repository structure. This is related to how storage is managed. -
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:
Top- C++ Process
- Web interface using the MEAN stack. Here, MEAN stands for MongoDB, Express.js, Angular.js, and Node.js.
- Asp.Net MVC
-
Storage:
References:
JavaScript:
JavaScript Syntax - Wikipedia
List of JavaScript Libraries - Wikipedia
JavaScript Frameworks - Wikipedia
Top JavaScript MVC Frameworks
ToDo List Application written different frameworks
Xamarin:
Go Programming Language:
Node.js:
Cloud Computing:
Footnotes:
- This will be discussed in class.
- Ultimate++, CodeBlocks, wxWidgets, Qt, GTK+, ...
- That might be a large touch screen monitor, large screen TV, or in the future, wall size displays.
- 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.
- 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:- Know how to use the C++11 language and standard libraries.
- Have Visual Studio 2015 installed on your machine.
- Set up a virtual machine and a Linux distribution. I will be using VMware Player and Ubuntu.
- Install g++ version 5.3 or CLang 3.3. We'll discuss this in class.
- Learn the Microsoft COM technology, as discssed in class.