<?xml version="1.0"?>
<project-list>
<person>
  <id>jbw</id>
  <sort-key>wells, joe</sort-key>
  <full-name>Dr. Joe Wells</full-name>
  <name>Joe Wells</name>
  <office>2.05</office>
  <telephone>3869</telephone>
  <computer-account>jbw</computer-account>
  <e-mail>jbw</e-mail>
  <web-page>http://www.cee.hw.ac.uk/~jbw/</web-page>
</person>
<person>
  <id>lachlan</id>
  <sort-key>mackinnon, lachlan</sort-key>
  <full-name>Dr. Lachlan MacKinnon</full-name>
  <name>Lachlan MacKinnon</name>
  <office>G.39</office>
  <telephone>3410</telephone>
  <computer-account>lachlan</computer-account>
  <e-mail>lachlan</e-mail>
  <web-page>http://www.cee.hw.ac.uk/~lachlan/</web-page>
</person>
<project>
  <id>emacs-XML</id>
  <title>A Better Emacs XML-Editing Mode</title>
  <supervisor>jbw</supervisor>
  <goal>Provide a way of editing XML inside Emacs which works on the tree
    structure but displays things in a semi-WYSIWYG manner</goal>
  <description>
     <p>
       In many places, Emacs is the standard programmer's editor.
       Emacs is also frequently used for creating scientific papers.
       As more and more programming and document creation is done
       using XML, it would be good if Emacs had better support for
       editing XML.
     </p>
     <p>
       One way of editing XML is to edit the raw XML code with an
       editor that works on the raw bytes.  Emacs currently supports
       this method.  So the person editing the XML sees something like
       this:
     </p>
     <pre><![CDATA[<foo>
 <bar>Some random text ...</bar>
</foo>]]></pre>
     <p>
       Another approach is to use an editor that diagrams the XML as a
       tree, as in this screenshot from the Conglomerate editor:
       <br/>
       <img src="images/conglomerate_window_small.png" alt="[image of
       tree-based editor]"/>
       <br/>
       Emacs does not yet support this method.  It would be nice if
       Emacs could work like this.
     </p>
     <p>
       It would be even nicer if the editor could display the XML
       using styles for each element, like the way some HTML editors
       work.  Emacs does not support this method.
     </p>
  </description>
  <tasks>
    <ul>
      <li>Implement an XML parser within Emacs.  This is fairly
        simple.</li> 
      <li>Implement an XML writer for Emacs.  This is trivial.</li>
      <li>Implement an XML style engine within Emacs to lay out an
        Emacs buffer according to some specified styles in some very
        simple style framework.</li>
      <li>Implement an Emacs major mode for editing the displayed
        XML.</li>
    </ul>
  </tasks>
  <resources>Machine with recent Emacs installed</resources>
  <difficulty>
    The hardest part will be learning about the Emacs execution
    environment.  Fortunately, Dr. Wells is an expert in this and will
    be able to provide substantial help.</difficulty>
  <background>Things which will help: familiarity with XML,
    familiarity with LISP, familiarity with Emacs.</background>
  <references>
    <ul>
      <li><a href= "http://www.w3.org/XML/">Extensible Markup Language
        (XML)</a></li>
      <li><A HREF="http://www.gnusoftware.com/WebRing/">Emacs Web Ring</A></li>
      <li><a href="http://www.cs.indiana.edu/elisp/w3/">Emacs/W3 (a
        web browser inside Emacs)</a></li>
      <li><a href="http://www.conglomerate.org/">Conglomerate (an XML
        editor)</a></li>
      <li><a href="http://www.cogsci.ed.ac.uk/~ht/xed.html">XED (an XML
        editor)</a></li>
      <li><a href="http://idx-getox.idealx.org/">GETOX (an XML
        editor)</a></li>
    </ul>
  </references>
</project>
<project>
  <id>XML-diff-tools</id>
  <title>Open-Source XML Comparing, Differencing, and Patching Tools</title>
  <supervisor>jbw</supervisor>
  <goal>Provide open source tools for comparing XML files, computing
    the differences between XML files, and given the differences
    between two XML files, computing one of the files from the other and
    the differences</goal>
  <description>There are well known UNIX tools for manipulating
    line-oriented files: <code>cmp</code>, <code>diff</code>,
    <code>patch</code>.  For XML files, line-oriented tools produce
    suboptimal results for the tasks of comparing files, computing
    the differences between files, and applying differences
    between two files as a delta to one of the files to obtain the
    other.  There exist tree-oriented tools for the tasks of comparing
    and computing differences, but they unfortunately are proprietary
    and thus are not part of the electronic commons.  There does not
    seem to exist any tree-oriented tool for applying the differences
    between two XML files to obtain the other.
  </description>
  <tasks>
    <ul>
      <li>Define a format for representing differences between XML
        files.</li>
      <li>Develop a tool for calculating differences between XML
        files.</li>
      <li>Evaluate the quality of the calculated differences in
        practice.</li>
      <li>Develop a tool for applying differences to obtain one file
        from another.  [Optional, to be done last.]</li>
    </ul>
  </tasks>
  <resources>XML manipulating software</resources>
  <difficulty>It is easy to calculate differences.  For example, the
    difference between XML elements <var>A</var> and <var>B</var> can be given
    by the pair (<var>A</var>,<var>B</var>). 
    But this is expensive.  One wants to include only the changed
    data.  However, if one includes <em>just</em> the changed data,
    then the difference can not be used on a slightly changed 
    <var>A'</var> to obtain the corresponding <var>B'</var>.
    The hard part is in getting <em>good</em> differences which
    have all of the desired qualities.</difficulty>
  <background>XML experience.</background>
  <references>
    <ul>
      <li><a href= "http://www.w3.org/XML/">Extensible Markup Language
        (XML)</a></li>
      <li><A HREF="http://alphaworks.ibm.com/tech/xmldiffmerge">XML
        Diff and Merge Tool (proprietary software)</A></li>
      <li><A HREF="http://alphaworks.ibm.com/tech/xmltreediff">XML
        TreeDiff (proprietary software)</A></li>
      <li><A HREF="http://www.deltaxml.com/">DeltaXML (proprietary
        software)</A></li>
    </ul>
  </references>
</project>
<project>
  <id>XML-HWU-CEE-abstracts-reports</id>
  <title>XML-Based System for Project/Dissertation Abstracts and
    Reports</title>
  <supervisor>jbw</supervisor>
  <supervisor>lachlan</supervisor>
  <goal>Develop an XML-based system for the long-term archiving of
    B.Sc. dissertation abstracts and M.Sc. project abstracts and
    import previous years' abstracts from Microsoft Word format</goal>
  <description>As part of the work towards various degrees, each
    student does a project.  For years, the secretaries have been
    entering the project abstracts for each year/program in Microsoft
    Word documents.  It would be better if the abstracts were
    archived in a more lasting format.  The Microsoft Word format is
    undefined (except by the implementation), undocumented, and
    frequently changes in ways that are not backward compatible.
  </description>
  <tasks>
    <ul>
      <li>Determine requirements of the various parties involved
        (students, central university, external examiners, etc.).</li>
      <li>Determine what data is needed to satisfy these
        requirements.</li>
      <li>Develop XML encodings of the necessary data.</li>
      <li>Make available convenient methods for the various parties to
        enter and view the data.</li>
      <li>Import the legacy data from prior years.</li>
      <li>Develop instructions telling staff how to switch over to new
        system if it is deemed acceptable.</li>
    </ul>
  </tasks>
  <resources>XML manipulating software.  Software for decoding
    Microsoft Word files.</resources>
  <difficulty>Half of the difficulty here will be accurately
    determining the real requirements (i.e., not just what people
    <em>say</em> they want).  The other work will mainly involve
    properly gluing together existing software packages.</difficulty>
  <background>Things which will help: XML experience, experience
    decoding Microsoft Word files, experience in determining
    requirements.</background>
  <references>
    <ul>
      <li><a href= "http://www.w3.org/XML/">Extensible Markup Language
        (XML)</a></li>
      <li><a href="http://www.fe.msk.ru/~vitus/catdoc/">catdoc and
        xls2csv (MS format reading software)</a></li>
      <li><a href=
        "http://user.cs.tu-berlin.de/~schwartz/pmh/index.html" >LAOLA
        (MS format reading software)</a></li>
      <li><a href= "http://atena.com/libole2.php" >libole2 (MS format
        reading software)</a></li>
    </ul>
  </references>
</project>
<project>
  <id>module-language-prototype</id>
  <title>XML-Based Prototype Implementation of Toy Module Language to
    Aid in Design Exploration</title>
  <supervisor>jbw</supervisor>
  <goal>An XML-based prototype implementation of a language based on
    the m-calculus of Dr. Wells for manipulating and linking modules
    to aid in exploring the design of such a language.</goal>
  <description>
    <p>
      There are many kinds of module systems in different programming
      languages.  To attempt to explain the essence of modules with a
      few basic constructs (in fact, roughly 5 constructs), Dr. Wells
      has designed the m-calculus.  The m-calculus can model many
      existing module systems as well as other programming constructs
      such as first-class functions and objects.
    </p>
    <p>
      To help in research involving the m-calculus, it is proposed to
      implement a toy programming language directly based on the
      m-calculus.  An implementation will also provide a useful platform
      for exploring improvements on the ideas of the m-calculus.
    </p>
    <p>
      The motivation for this research comes from the fact that
      modules are an essential fact of programming technology.  They
      serve many important purposes:
    </p>
    <ul>
    <li>Modules are often a unit of separate compilation.</li>
    <li>Modules can be a unit of software reuse.</li>
    <li>Modules often represent a unit of functionality which can be
      comprehended at one time.</li>
    <li>Modules are often a unit of configuration which is done by
      switching from one module to another one implementing the same
      interface.</li>
    </ul>
  </description>
  <tasks>
    <ul>
      <li>Choose an XML-based abstract syntax for a language inspired
        by the m-calculus.  This part is not hard and there will be
        lots of suggestions for the student.</li>
      <li>Choose a concrete syntax (i.e., in the style of existing
        programming languages) for the language.  This part is not
        hard and there will be lots of suggestions for the
        student.</li>
      <li>Implement a pretty printer for the language.</li>
      <li>If the student is up to the challenge, the project may also
        include implementing a parser for converting from the concrete
        syntax to the abstract syntax.  But this is less urgent and
        can be delayed to the end or not done at all.</li>
      <li>Implement transformations on abstract syntax trees which
        represent carrying out operations such as linking two modules,
        using a component of a module, using variables, etc.  Provide
        some user interface to this.  All of the needed
        transformations will be explained for the student.</li>
    </ul>
  </tasks>
  <resources>A computer</resources>
  <difficulty>The initial implementation should not be hard.  The
    subsequent explorations of variations can involve many different
    levels of difficulty.  The overall degree of difficulty will
    depend on the student's level of motivation to work.</difficulty>
  <background>Things which will help: experience in symbolic
    programming, experience with a functional programming
    language.</background>
  <references>
    <ul>
      <li><a href=
        "http://www.cee.hw.ac.uk/~jbw/papers/#Wel+Ves:ESOP-2000"
        >Paper by Wells and Vestergaard on the m-calculus</a></li>
    </ul>
  </references>
</project>
<!--
<project>
  <title>Blank Project Template</title>
  <supervisor>jbw</supervisor>
  <goal>...</goal>
  <description>...</description>
  <tasks>...</tasks>
  <resources>...</resources>
  <difficulty>...</difficulty>
  <background>...</background>
  <references>...</references>
</project>
<person>
  <id>jd</id>
  <sort-key>doe, john</sort-key>
  <full-name>Dr. John Q. Doe</full-name>
  <name>John Doe</name>
  <office>????</office>
  <telephone>????</telephone>
  <e-mail>jd</e-mail>
</person>
<project>
  <title>Dummy Project for John Doe</title>
  <supervisor>jd</supervisor>
  <goal>Dummy project.</goal>
</project>
-->
</project-list>

