Project Topics
Revised: 7/25/2011
Software Foundry Project
"
Only those who dare to fail greatly can ever achieve greatly
"
- Robert F. Kennedy (1926-1968)
"
There are two things to be considered with regard to any scheme.
In the first place,
''Is it good in itself?'' In the second, ''Can it be easily put into practice?''
"
- Jean Jacques Rousseau (1712-1778)
This page is concerned with ideas and topics for projects. Most of these are suitable for
Master's projects.
Some could be the basis for Master's Thesis research.
The distinction is that, aside from being more ambitious,
a Master's Thesis must open a thread of research. In a thesis you are obligated to make a contribution to the
state of the Engineering or Computer Science art.
Also, I often have students ask for additional projects to work on over the Summer or during Semesters when
they don't have a strenuous schedule, to sharpen their skills or add to their resumes.
Here, you will find some suggestions. You might also look at our CSE784 - Software Studio projects for ideas.
See: Cloner, and Software Foundry.
Things that would be fun to work on if only there was enough time - sigh!
-
Build an asp.net-based "User's Forum" for our website.
-
Explore use of the dojotoolkit to build interesting webpages. You may
wish to talk with me about how to make that into a coherent MS Project.
-
Build a facility to plot graphs (things with vertices and edges, NOT Excel-like charts) in pleasing formats.
This will involve reading an XML file description of a graph, finding its strong components, doing a topological
sort of the vertices of a condensed graph, then displaying, perhaps diagonally down the screen, a view of the graph
where all the strong component vertices are grouped near each other. You can chat with me about why you might want
to do this. There are other interesting ways to plot graphs including physics-based models that use force models
to effect interesting layouts.
-
Build a web application that allows users of our website to create a personal portal page that collects links to
class materials on the site that they find useful and links to useful websites. They should be able to annotate
any of the links with text notes. You may find the use of the dojotoolkit, linked above, useful for this project.
-
Build a desktop editor designed to build web-pages that support VML-based documents. You will need to provide
a VML editor to build diagrams, and use page-based containers to allow text to flow around the diagrams, just as
you can currently do with images. The intent is to support all software documentation, for example, as web pages,
including class, module, and sequence diagrams. This is an interesting, but challenging project.
-
Build a desktop repository, having capabilities required in CSE681 and CSE784 projects. The idea is to create a
smaller version that is easy to install, setup, and use as a personal store for programming projects, and that
does not need to be tied into a test harness and the other parts of the bigger systems we've discussed in those courses.
-
Build an C++ based xml parser that supports a DOM model, and has most of the facilities of the .Net System.XML XMLDocument.
Note that there are currently two xml parsers in CSE687\code\XMLParsing and
CSE687\code\XMLTran folders, that support XMLTextReader and XMLTextWriter like
capabilities, but do not build a Document Object Model parse tree.
-
Simple task model, using active objects and waits, based on use of ThreadPool, and inspired by
Herb Sutter's PDC05 talk
on new things in Visual Studio's C++.
-
A simple communication model based on message-framing sockets or fixed message blocks, but encapsulating all the
stuff we've talked about in class into a nice reusable package.
-
A Design Patterns namespace that packages some of the patterns into reusable components. That certainly
won't work with many of the patterns, but patterns like command objects could be cleanly packaged that way.
-
A cross platform windowing toolkit that uses some of the design patterns. The goals are to specify
toolkit features, e.g., window management, widgets, plugin architecture, .... that make it easy to
build extensible windowed applications. Something like a mini eclipse, where the platform stuff is isolated
to a very small, sensible partition, on which to build everything else.
This is far too large for an MS Project, but several students could layout the structure and build
pieces. The only requirement would be that each piece had to be useful by itself.
-
A cross platfrom communication toolkit based on Berkley sockets. Goals are to provide an easily reusable
channel model using C++ that supports messages and provides support for building RPC like adapters that
can layer the messaging channel when that seems appropriate. Channel should support both send-and-return
and send-and-wait messaging models.
An interesting addendum would be to wrap an http handler mechanism around the messaging channel. Vijay
Appadurai has built an interesting "tiny web server", like that suggested below, in a few hundred lines
of C++ code. I will be linking to that soon on our Research page.
-
A reflection toolkit for C++. The goal is to provide a mechanism for plugins to use to allow an extensible
application to find types, create them, and use them.
The intent is far less than the robust reflection mechanism provided, for example, by C#. Rather, the
goal is to build an object factory that supports application inquiry and instantiation. The idea is to
support a catalog of interfaces that can be extended as needed for any given application, rather like
COM does, but much simpler. I've illustrated this idea in several demos for CSE687, but have never provided
a reusable facility.
Other Project Ideas and Topics
While you should try to come up with your own projects, here are a few starters to think about:
-
Building large software systems with an executive that loads component libraries can be a very effective
way to support product maintainability. When a flaw is found or an upgrade is made, we can rebuild the
relevant library, and simply copy the dll onto the path that the executive uses to load its components.
This way, we don't have to rebuild the entire system. That can have enormous benefits for maintaining
fielded systems. We don't have to send a technician to rebuild the system at a customer's site, simply
upload the new dll.
That's great in principle, but just how do we do that? One interesting way is to build into the system
a light-weight http (web) server that we can access from the home office and use to upload the
library component to the application's component store.
Another application is to enable devices with small embedded computers to communicate over a wireless
network. You might use this to set up a network of cooperating instrumentation in a laboratory.
This project suggests that you investigate building really light weight web servers for one of these purposes
from the pieces
supplied by the .Net Framework Class Libraries. You will find a starter example in the Cassini project which
you can download from
MSDN - Cassini.
-
Object-Oriented Relationship code analyzer - for each class, evaluate its static relationships
with others, e.g., public inheritance,
inheritance of implementation, composition, aggregation, and using relationships.
Also evaluate its dynamic relationships,
e.g., for each class, evaluate the types of objects it creates, communicates with, and destroys.
-
Class diagram plotter - using the results of the previous project
(you could team up with a friend to work together on
these two projects) draw UML class diagrams from code. You will want to allow the user to assist
the layout on a page
but you should provide an algorithm for making a first pass at a layout and then allow the
user to pull drawing objects around the page without losing their connections.
-
In CSE687 Project #4 - Dependency Analyzer we did a lot of hueristic grammar evaluation.
It would be interesting to use a more formal approach based on specifying the (simplified)
grammar needed for type-based dependency analysis using syntax graphs or BNF productions
to specify the grammar and reduce them to analysis code by implementing productions, and
perhaps, recursive decent parsing.
-
Software visualization - can you think of interesting ways to display properties of a given
set of software files, e.g., size, complexity, density of comments, depth of calling tree, ...
-
Text to Speech - Microsoft has available for download its beta Speech SDK, and the
World Wide Web Consortium has
tutorials and specifications for VXML. You could explore making web pages vocal.
-
DirectX - Microsoft has a COM-based technology for displaying complex graphics and synchronizing graphics and sound
over time, widely used by the computer gaming industry. The latest beta version has wrappers for .Net.
It would be interesting to learn, explore, and document some applications of this technology.
-
Vector Markup Language - Internet Explorer supports Vector Markup Language (VML) for making line drawings on web
pages. This could be very useful for preparing technical drawings to be placed on web pages. You could explore the
use of vml for some specific application.
-
Compatible colors - A color wheel allows a designer
to pick compatible, contrasting, warm, cool, and
harmonious colors. One interesting project provides the user with a line of colors to select from and returns
contrasting and triadic harmonious colors, showing the colors and RGB values.
- MFC tutorial
Using the excellent textbook
"Programming Windows with MFC", Jeff Prosise, Microsoft Press, 2001,
(on reserved in the Sci/Tech library),
prepare a set of tutorial presentations. I can make them available on this website and you will
learn a lot about how MFC is used to build Windows programs.
- Action Item (Bug Tracking) list
Use a datagrid on a webpage and an SQL database to make action items or bug lists available on the web.
Make an editing application, using a web service,
to add, edit, or delete entries (this could also be done as part off the Asp application).
- Small Business Data Management System
Create a relational model for a hypothetical small business that provides:-
Phone logs for each employee to record notes about business related phone calls.
-
Calendar with event notification, so an employee can define a notification to be sent back
or to another employee at some future date, as a small text message.
-
Order entry and tracking, based on an orders table, a product table, and a customer table.
Note that this data management system could be made available as a Winform application talking to an
SQL server on a remote machine in the network, as an ASP application, or as a web service.
It would be nice to build the application as a Winform with several tabs that provide common queries
and support data entry based on a DataGrid view.
Places to look for More Topics
- Microsoft Research has lots of
topics,
projects, and
demonstrations that may give you ideas.
- Lucent/Bell Labs Research in Computing
- University of Birmingham, UK/Alan Sexton