Projects

 acm acm is software to manage a competition in the ACM Programming Contest. It consists of a portable, distributed scoreboard system, implemented in Java, which displays the current standings, and of a number of Unix shell scripts which can be used to submit and judge solutions and ask for clarifications.

To be done: improve security against Trojan attacks.

 clickers clickers is a collection of implementations of a system to administer anonymous polls.
 el.jar el is a little programming language with text and XML-based representations. It combines infix expressions, array-like hashtables, strings, nested function definitions, function pointers, and call by name, need, reference, and value with Scheme-like semantics.

Ideas: build a recognizer with pj, extend the language and build a type checker, generate code.

 geigel Prototype for presenting slides and recorded sound using a web browser. The choice of media is very flexible.

Ideas: build tools to manage the sound clips, create the slides, and assemble the presentation. Experiment with media and obtain performance data.

 htupdate htupdate is a servlet to change an existing .htaccess password.
 jag.jar
 jag-go.jar
 src.jar
jag is a Java-based preprocessor supporting the visitor pattern and inheritance-based pattern matching for List based trees.

Ideas: simplify the syntax, e.g., remove $1; in favour of {$1};, extend, e.g., allow $n, add control over visit signature, add debugging aids, e.g., a trace, leverage directly against XML-based material.

 jay-mosx.tgz
 jay-win.zip
 src.zip
jay is a LALR(1) parser generator: Berkeley yacc © retargeted to C# and Java.

Ideas: port to Managed C++, use factory interfaces a la ijacc.

 js.jar
 src.jar
js is a servlet to provide single-file compilation with javac and execution in an applet.

Ideas: support other languages, set up introductory tutorials.

 jsm jsm is an interactive tutorial on monadic programming with JavaScript and includes a parser generator for functional LL(n) parsers as well as a framework for interactive JavaScript tutorials. It has been tested with about a dozen browsers; only Firefox provides enough stack depth for all examples. The technique has been ported to Java; see oops3 below.

  Portugese translation courtesy of Artur Weber .

Ideas: can LL(n) be checked? Can it be ported to other languages, e.g., C# in oops3.net, etc.? What else can be done with monads?

 lp Language Processing is an interactive tutorial about the object-oriented implementation of language processors. It includes the homepages for jag, jay, and pj.
 lp2 This starts a revision of the interactive Language Processing tutorial about the object-oriented implementation of language processors. It includes the homepages for pj2, vig, and wcs.
 mac Mac software which I use: the software list is maintained with OmniOutliner, exported as OPML, converted to HTML with a XSLT script, and converted to a RSS feed with another XSLT script, both under control of an Automator workflow.
 ms ms is a servlet and other software to maintain the website for MS projects and theses. The overview lists a couple of interesting programming projects.

Ideas: implement using other technologies; generalize the approach to edit structured data.

 nsd Convert a XML-based description of Nassi-Shneiderman diagrams to HTML.

Ideas: enhance XSL script to be a preprocessor for XHTML, run script in browser, generate DOM, e.g., from Java program, edit in browser.

 oops oops is a Java-based LL(1) parser generator. The overview lists a number of interesting programming projects.

Ideas: add an FSA-based tokenizer, make observers more generic, port to .NET to support other languages, incorporate ideas from pj, etc.

 oops3 oops3 is another Java-based LL(1) parser generator with a simpler, more powerful grammar specification and automatic scanner and parse tree generation. It can generate LL(1) and functional LL(n) parsers. It requires Java 5.

Ideas: add support for other scanner generators, retrofit ideas to pj and jag, etc.

 oops3.net oops3.net is a port of oops3 to C#. It requires C# version 2.

Ideas: investigate assembly loading, port jag and integrate, etc.

 page page generates tokenizers, LL(1), and SLR(1) parsers from BNF and EBNF grammars. page is implemented in JavaScript and designed to exhibit the relevant algorithms and allow extensions.

Ideas: too many to list -- just started.

 os1 os1 is an operating system simulation written in Java (JDK 1.5).

Ideas: too many to list -- just started.

 ossi ossi is an operating system scheduler simulation written in Java (JDK 1.5).
 OverEasy OverEasy converts an image taken with an Egg Lens into a cylindrical image which can be displayed with a panorama viewer such as sfpp or converted to Quicktime with a program like CubicConverter .

Ideas: apply a parabolic function to improve the aspect ratio.

 password password is a servlet to retrieve tomcat user passwords by mail.

Ideas: generalize as a (flat) database.

 pharos pharos is a Java and C program to access the data logging features of the Pharos GPS500 receiver under Mac OS X.

Ideas: integrate with iPhoto.

 pj.jar
 src.jar
pj is a Java-based preprocessor for jay and JLex and largely automates the generation of parse trees from programs.

Ideas: perform still more type checking and integrate it with jag, support other tools such as CUP and JFlex, generalize PJServlet to other tutorial scenarios.

 ro ro is an educational implementation of remote objects. The overview lists a number of interesting programming projects.

Ideas: animate execution using the observer pattern, check out SOAP, etc.

 sandcastle sandcastle is a GUI for the new document compiler from Microsoft.

Ideas: improve presentation and configurability, leverage XML.

 sfpp sfpp is a simple Flash panorama player.

Ideas: add hotspots as icons in 3-space.

 submit submit is a servlet to submit homework assignments and retrieve grade reports using the Web.

Ideas: add sandbox environments for immediate testing.

 web-submit web-submit is a CGI hack to submit homework assignments using the Web. (Superseded by submit.)
 xpoint.tgz xpoint is a XML, CSS, and HTML based presentation graphics system.

Ideas: extend styles and capabilities, provide templates, interoperate with MS Word, print/present using XSL-FO.

  March 2011