<?xml version="1.0" encoding="utf-8" ?> 
<?xml-stylesheet type="text/xsl" href="courses.xsl" ?>
<courses name="Fawcett">

  <btitle>Project Topics</btitle>
  <theme src="ResearchTheme.css" />

  <visible>
  <title>Project Topics</title>
  <revised>03 September 2007</revised>
  
  <hnav/>
  <cnav/>
  <hilight>
    <ifile title="Project Topics">Projects.xml</ifile>&#32;
    <ifile title="Master's Projects">MastersProjects.xml</ifile>&#32;
    <ifile title="Master's Theses">MastersTheses.xml</ifile>&#32;
    <ifile title="Research">research.xml</ifile>&#32;
    <ifile title="References">references.xml</ifile><br/>
    <ifile title="Repository Testbed - 2005">RepoTB.xml</ifile>,&#32;
    <ifile title="ProjectCenter - 2004">ProjectCenter.xml</ifile>,&#32;
    <ifile title="Cloner - 2003">Cloner.xml</ifile>,&#32;
    <ifile title="Software Foundry - 2002">Foundry.xml</ifile>&#32;
  </hilight>


  <image src="students/foundry2.jpg" size="300" />
  <caption>Software Foundry Project</caption>

  <quote source="Robert F. Kennedy (1926-1968)">
    Only those who dare to fail greatly can ever achieve greatly
  </quote>
  <quote source="Jean Jacques Rousseau (1712-1778)">
    There are two things to be considered with regard to any scheme.<br/>In the first place, 
    ''Is it good in itself?'' In the second, ''Can it be easily put into practice?''  
  </quote>

  <html><a name="contents"/></html>
  This page is concerned with ideas and topics for projects.  Most of these are suitable for 
  <ifile title="Master's projects">MastersProjects.xml</ifile>.
  Some could be the basis for <ifile title="Master's Thesis research">MastersTheses.xml</ifile>.
  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.
  <p/>
  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: <ifile title="Cloner">cloner.xml</ifile>, and <ifile title="Software Foundry">Foundry.xml</ifile>.

  <section title="Things that would be fun to work on if only there was enough time - sigh!">
    <olist>
      <litem>
        Build an asp.net-based "User's Forum" for our website.
      </litem>
      <litem>
        Explore use of the <ifile title="dojotoolkit">www.dojotoolkit.org</ifile> to build interesting webpages.  You may
        wish to talk with me about how to make that into a coherent MS Project.
      </litem>
      <litem>
        Build a facility to plot graphs (things with vertices and edges, <u>NOT</u> 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.
      </litem>
      <litem>
        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.
      </litem>
      <litem>
        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.
      </litem>
      <litem>
        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.
      </litem>
      <litem>
        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 <ifile title="CSE687\code\XMLParsing">..\cse687\code\XMLParsing</ifile> and
        <ifile title="CSE687\code\XMLTran">..\cse687\code\XMLTran</ifile> folders, that support XMLTextReader and XMLTextWriter like
        capabilities, but do not build a Document Object Model parse tree.
      </litem>
      <litem>
        Simple task model, using active objects and waits, based on use of ThreadPool, and inspired by 
        <ilink title="Herb Sutter's PDC05 talk">www.microsoft.sitestream.com/pdc05/</ilink>
        on new things in Visual Studio's C++.
      </litem>
      <litem>
        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.
      </litem>
      <litem>
        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.
      </litem>
      <litem>
        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.
        <p/>
        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.
      </litem>
      <litem>
        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.
        <p/>
        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. 
      </litem>
      <litem>
        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.
        <p/>
        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.
      </litem>
    </olist>
  </section>

  <section title="Other Project Ideas and Topics">
    While you should try to come up with your own projects, here are a few starters to think about:
    <olist>
      <litem>
        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.
        <p/>
        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.
        <p/>
        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.
        <p/>
        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 
        <ilink title="MSDN - Cassini">msdn.microsoft.com/asp.net/downloads/samples/default.aspx</ilink>.
      </litem>
      <litem>
        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. 
      </litem>
      <litem>
        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.
      </litem>
      <litem>
        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.
      </litem>
      <litem>
        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, ...
      </litem>
      <litem>
        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.
      </litem>
      <litem>
        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.
      </litem>
      <litem>
        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.
      </litem>
      <litem>
        Compatible colors - A <ilink title="color wheel">www.fortressdesign.com/color.html</ilink> 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.
      </litem>
      <litem>
        <file title="MFC tutorial">projects/MFCTutorialOutline.doc</file> 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.
      </litem>
      <litem>
        <u>Action Item (Bug Tracking) list</u><br/>
        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).
      </litem>
      <litem>
        <u>Small Business Data Management System</u><br/>
        Create a relational model for a hypothetical small business that provides:<p/>
        <olist>
          <litem>
            Phone logs for each employee to record notes about business related phone calls.
          </litem>
          <litem>
            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.
          </litem>
          <litem>
            Order entry and tracking, based on an orders table, a product table, and a customer table.
          </litem>
        </olist>
        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.
        <p/>
        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.
      </litem>
    </olist>
    </section>

    <section title="Places to look for More Topics">
      <olist>
        <litem>
          <ilink title="Microsoft Research">www.research.microsoft.com</ilink> has lots of 
          <ilink title="topics">www.research.microsoft.com/research/default.aspx</ilink>,&#160;
          <ilink title="projects">www.research.microsoft.com/research/projects</ilink>,&#160; and 
          <ilink title="demonstrations">www.research.microsoft.com/research/downloads</ilink> that may give you ideas.
        </litem>
        <litem>
          <ilink title="Lucent/Bell Labs Research in Computing">cm.bell-labs.com/cm/cs/</ilink>&#160;
        </litem>
        <litem>
          <ilink title="University of Birmingham, UK/Alan Sexton">www.cs.bham.ac.uk/~aps/teaching/projects/XML/projlist/</ilink>
        </litem>
      </olist>
    </section>

  </visible>
</courses>
