While I routinely write simple Perl CGIs to handle server-side data storage and retrieval, I have also used Perl for more sophisticated development tasks.
The goal of this project was to extend the Movable Type blog publishing system in several ways so that it could be used in conjunction with classroom instruction at Harvard University:
• Integrate user registration with Harvard’s existing ID-based authentication system
• Create an alternative posting system so that students would not go into the blog’s dashboard to write their posts
• Display user-specific information in what are otherwise statically built HTML pages
• Create a polling function that poses “challenge questions” and allows users to change their votes
• Enable course teaching staff to maintain the site without assistance from technical personnel
• Avoid any modification of the core Movable Type codebase in accomplishing the above
To meet these goals I added two additional tables to the blog’s database and created an extensive suite of custom template tags, working within the parameters of Movable Type's Perl API and plugin architecture. These were then deployed in an integrated set of page templates and template modules, coded in XHTML in accordance with University accessibility standards. The system is completed by a series of Perl CGIs which handle user posts, comments, poll responses, and on-the-fly content.
The Ripple Tank Java applet, originally developed by Paul Falstad, is used in classroom instruction at Harvard University to teach acoustic and electromagnetic wave propagation. It shows how wave forms interact with barriers and media, and comes with dozens of ready-made setups that demonstrate various important phenomena.
Working as part of a team, I was charged with making two substantial modifications to the existing system:
• Create a suite of sophisticated drawing tools to allow new, user-defined setups to be drawn with precision
• Allow users to save and load their own setups
Both tasks required extensive work in the Java codebase. The second posed a particular challenge because Java’s security measures do not allow the applet access to the client’s filesystem.
The solution was to use the web server and the client’s web browser as intermediaries. To save setup data the applet sends it to a server-side CGI which stores it in a temporary file; the applet then signals the web browser to download that file (which is then deleted by another CGI).
To load a previously saved setup the user likewise uploads it to the server via an HTML form, where a CGI saves it and produces the HTML page to launch the applet, with a parameter directing it to the data file on the server.
Try the Ripple Tank applet
(Requires a Java-enabled browser)
The Visible™ online Flash demo I produced for Reify Corporation uses sophisticated Perl CGIs to handle file uploads, shell script calls to the Visible application running on the server, and data delivery to the Flash module. For more details and a live demo, see the Flash / Actionscript page.