T B H P N

Summer Projects

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

Content:

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, some with a link to a project statement.

Process:

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.

Where do we go from here?

How do you continue to strengthen your design and programming skills, and specifically, your C++ skills?

June 15 meeting agenda

Tutorial Materials

Custom HTML Controls
"Tiny" C++ HTTP Client and Server, class diagram, structure chart
HTTP made really easy - J. Marshall
REST tutorial
WPF and WCF Summaries
Repository/Cpp
Repository/CSharp
CppCodeRepository

Project List:

Some of the projects, listed below, have links to project statements, some do not. These are just starter ideas. You are encouraged to make these projects your own, creating or modifying statements to suit your own purposes. I'll be pleased to discuss them at greater length - just ask in a Summer Project meeting or on Piazza.com

Here are some worthy goals for this summer work:
  1. Polish a project to discuss in interviews.
  2. Learn some new technology.
  3. Strengthen what you've already learned this year.
Number Project Title Category
Project #1 C++ Exercises Build C++ skills
Project #2 Improve the design and implementation of one of your class Projects. The intent is to develop a professional quality product that you will be proud to discuss during an interview. Portfolio Project
Project #3 Build a Pluggable Repository in C# or C++, where policies are pluggable components. Example policies are: ownership, storage management, checkin and checkout, versioning, ... Portfolio Project
Project #4 Explore the Go Rust Programming language by rebuilding Project #4 in Go Rust. Build your software development sophistication
Project #5 Graph Visualization - Demo Portfolio Project
Project #6 C++ Reflection Portfolio Project
Project #7 Remote Directory Synchronization with WPF and WCF Build .Net Skills
Project #8 C++ Tiny HTTP Web Server and HTTP Client Portfolio Project
Project #9 Use Ajax Protocols, HTML5, and Tiny Web Server to build a cross-platform GUI Portfolio Project
Project #10 Platform Tools - build platform wrappers used by common code, e.g., Process handler, Convert Sockets to Linux, Shared memory handler, ... Portfolio Project
Project #11 Process management class(es) for Windows and Linux Portfolio Project
Project #12 Add buffered string reading to Socket::getString() Sharpen C++ skills
Project #13 C++ Serialization and DeSerialization Build C++ skills
Project #14 Program Animation - Build annotator to support data flow and control flow animation Research Project
Project #15 Audible Thread Traces - Build audible trace library to support multi-thread debugging Research Project
Project #16 C++ Code Checker - check code for Liskov Substitution errors and more Build C++ skills
Project #17 Draw UML Class Diagram from source code using type analysis Portfolio Project
Project #18 Generate source code from UML Class Diagram persisted to XML Portfolio Project
Project #19 Build an object model in JavaScript for HTML5 canvas drawings, e.g., like Silverlight Research and Portfolio Project
Project #20 Stories Web Site - structured to present stories about people and institutions Portfolio Project
Project #21 Explore Javascript Frameworka like Node.js, Express.js, and Angular.js Expand your background knowledge
Project #22 Learn a functional programming language like Haskell, Rust, Erlang, or Scala Expand your background knowledge
Project #23 Baysian Networks Research Project
Project #24 Build personal website using MEAN Stack - MongoDb, Express.js, Angular.js, Node.js Portfolio Project
Project #26 Build Test Harness server using a Process pool so each test runs in its own process, without creating an excessive number of processes. Could use socket-based message passing for IPC. Another alternative would use shared memory and placement new to share a BlockingQueue. Portfolio Project
Project #27 Create web apps using HTML and CSS with Mavo Explore new stuff
Project #28 Explore web-related open source projects like D3 - Data Visualization, node.js - http dispatching with JavaScript, Grunt - JavaScript utilities, jQuery - cross browser JavaScript library, JSHint - Javascript static analyzer Explore new stuff
Project #29 Build web app using Angular2.js in ASP.Net MVC & Web API Portfolio project
Project #29 Integrate node.js with a C++ application. Here's some help. Portfolio projet,
try new stuff
Project #30 Try out the Silicon C++ Web Framework for building Web APIs in C++ Portfolio project,
try new stuff
Project #31 Build a Graph class in either C++ or C# (or both) to strengthen your skills with those languages. Note that you are asked to build the Graph Class using a map or dictionary, which will prevent you from using the graph classes linked below. You may, however, look at them for ideas. Improve your development skills
Other Projects This links to the CSE775 Distributed Objects Final Projects for Spring 2018. Improve your development skills

Project-related links:

Topic Link
C++ References & Tutorials cppreference.com, isocpp.org
cplusplus.com, cprogramming.com, tutorialspoint.com, learncpp.com
C++ Knowledge Base
HTTP Protocol HTTP Made Really Easy - J.Marshall
Network Programming Beej's Guide using internet sockets, Network Programming with .Net, CMU.edu pdf
Containers Getting started with Containers - part1 of 8, Getting Started with Docker for Windows, Getting started with Windows Containers
MEAN Stack thinkster.io video and text tutorials, brandoncode tutorial, Web App and RESTful API Server, fullstacktutorials, ToDo App, meanjs.org
Machine Learning Introductiory Primer, ML - Wikipedia, ML - Andrew Ng, Standford.edu
Node.js JavaScript running in Browser, docx
JavaScript running in Hosted Node.js, docx

Nodejs.org about page, W3Schools node.js tutorial, tutorialspoint node.js tutorial
JavaScript

Javascript

ECMAScript6

Haskell Haskell.org, Real World Haskell, on-line ebook
Rust Rust - Wikipedia, rust-lang.org, Rust, the Book
Python python.org

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.

Namespace Package Title Description Platform
PlatformTools FileSystem - Windows C++ Library of tools for manipulating files and directories Windows & Linux
Threading BlockingQueue C++ Blocking Queue class Windows & Linux
Thread Pool Tasks and ThreadPool C++ Task class using Threadpool Windows & Linux
XMLTools XmlDocument C++ XML Document class Windows & Linux?
XMLTools XmlReader & XmlWriter C++ Xml Reader and Writer classes Windows & Linux
NoSQL dbs C++ NoSqlDb Instructor's Solution - meets requirements but could use some polishing Windows
ParsingTools C++ Parser embedded in Code Analyzer Rule-based Ad Hoc Parser Windows
ParsingTools C# Parser Rule-based Ad Hoc Parser Windows
GraphLib C++ Graph C++ graph library Windows
GraphLib C# Graph C# graph library Windows
CommTools Sockets 5.3 C++ Sockets Library & Sender and Reciever classes Windows

My Summer++ Projects:

Project Description For
github Project Repositories Repositories for my solutions for class projects, mostly OOD, and for reusable components. Provide sources - interfaces, object factories, and implementations - that illustrate how to do some interesting things. Anyone interested, especially former students.
Static Website on github Provide access to, and design information about my github repositories. Eventually this will grow to contain some of the things this website holds, e.g., blogs and commentary. Anyone interested
Pluggable Repository Repository that can be tailored, via plug-ins, to match the working style of a Software Development group. Default plug-ins tailored to my own uses. My own use and for anyone interested.
Repository Code Updates Minor additions, modifications, and bug-fixes
  • Add threadpool to SocketListener
  • Close file handles in FileSystem - Windows and Linux
  • Clean up parser action code, convert ASTNode struct to use CppProperties
  • Provide simpler, cleaner test stubs and test harness tests
  • Incorporate logging for showing results, demonstrating code operations, and debugging
Repository code formerly used for CSE687 - OOD and CSE681 - SMA
Tiny HTTP client and Server Build socket-based HTTP classes used for communication between processes and machines. These will replace my Message-passing Comm code with similar code that supports the HTTP protocol. The intent is to support asynchronous one-way communication as well as synchronous client-server interactions. Receivers using synchronous HTTP will need to host a multi-threaded apartment (MTA) model. Asynchronous communication can use either single-threaded apartments (STAs) or MTAs. STAs are simpler because the server does not need locking - only a single thread deQueues and processes incoming messages. My own use and anyone interested
Update Blogs Simplify and clarify discussions, add links to sample code, provide more details in expando controls. Add a few new topics, e.g., hosted resources, reusable components, and website design. Support github repositories
Course Repository Configure Repository directories to hold header files, static libraries, and dynamic-link libraries, as well as all the source code. Make user access simpler
Language Specific Projects Explore C++17 and C++20, C# 8.0, Java ecosystem, Rust, Go, R, and whatever else amuses me. I'm interested in digging into the pros and cons of each, e.g., performance, ease of use, expressiveness, range of applicability, ... Some of what I learn here will be folded into repository projects.
Start working on a book or two Current thoughts are: Illustrating Design with C++ and Core Implementation Models with C++. The intent is to discuss ideas, illustrated with simple code fragments, and provide complete code sources for executables in one of my github repositories. I'll do this if there seems to be enough interest

campus at night