A Portfolio of Interesting Projects

Bret Whissel (bret at bretwhissel dot net)

Examples of my programming projects are collected here. While I have spent much of my career as a System Administrator, my best skills are programming. In addition to the work highlighted below, I've written lots of analysis and scientific software, converting data formats or generating graphical displays of data. I was also a project leader in the development of algorithms for the recognition of hurricane features in radar data. Most of my work would be considered "back-end" or systems programming, though I've written application user interfaces, too.

Generating a Blank Skew-T / Ln P

Meteorology students learn to use a chart called a "Skew-T" on which weather balloon soundings are plotted. They can then analyze the data and look for features that indicate atmospheric instability or other factors that help to indentify trends in the current weather. The pre-printed velum charts that they used to use are quite expensive and getting more difficult to obtain. After researching information on the equations which generate the grid curves, I was able to write a program which can be used to create PDF files at any size or resolution. The program and an example of its output are given below. The program is written in the "literate programming" style, where the documentation and the program itself are written together.

Hash Table Functions

The Meteorology Department ingests gigabytes of real-time meteorological data from around the world each day. Some of the data are contained in short, coded reports called METARs. If anyone knows the 4-letter code representing a specific weather station, the current weather conditions reported for that station can be retrieved. The data are kept on a repository server and NFS-mounted by dozens of clients within the department to access the data.

One of the problems with storing METARs is that updates occur continuously throughout the day. Conventional database repositories will lock a file while it is open for writing, and no one can access the file while that happens. To alleviate the locking problem, I wrote a special hash table file format which could be updated for writing while simultaneously read by a process on another computer. This solution is tuned for the particular application and behavior, and may not be applicable in more general situations.

METAR Ingest and Decoding

Now that I have a usable Hash Table format, the METAR reports have to be stored in them. The LDM is a UCAR hierarchical data distribution system. It can be configured to start an application when certain data types arrive. The METARDB program is an application that uses my Hash Tables to store data.

Though METARs contain ASCII data, they are coded, and they need some experience to read correctly. While some elements follow a regular format, other elements require more sophisticated parsing. The program METREP attempts to retrieve and interpret a METAR report from a Hash Table file. Moonphase and Sunrise/Sunset functions are included here to supplement the atmospheric snapshot, but I didn't author the original code: I merely translated other available sources into C for use with METREP and added a few functions to glue the pieces together. (See those files for original source references.)

LaTeX Template for FSU Theses and Dissertations

I have been a TeX user for quite some time. For my department, I had built a library of TeX macros for producing documents in accord with FSU's thesis and dissertation guidelines. The campus-wide group that reviews these graduate documents approached me to update some older LaTeX macros that someone else had written. After reviewing the old work, I decided that it would be better to start from scratch since LaTeX had developed considerably since the older work had been written.

I put together a new package which is now used by most LaTeX users on campus to produce a Master's thesis or Doctoral dissertation. I continue to maintain this package for use by the FSU community. The package contents include the class file containing the macros that build the document, the source code and documentation for these macros, a user manual, a document sample providing more details about how to build a document, and a bare-bones document to help get things started.

A Neural Network for Phoneme Recognition

This is my most ambitious self-directed research project. I have been interested in speech recognition and neural networks for a long time. For a graduate course in Neural Networks, I chose to explore both of these topics for the class project. The work is summarized by a journal-type article (first link below), and the software which I wrote to do the work follows. The project is a demonstration of my programming work and writing ability.

Amortization

My first web application was this amortization calculator, an on-going personal project. I put the first version online in 1994, and at its peak, it received over 1 million hits per month. Along with the calculator itself, I have posted my own mathematical derivation of the amortization problem, and a few other equations which I've derived to answer users' questions that I've received over the years.

Breaking Bread Together

Sometimes solving a problem requires developing novel algorthims -- something that hasn't been seen or described before. One can't just look up the solution in a book. I wrote this software to facilitate an activity at a large church where the goal was to provide opportunities for people to meet as many other congregants as possible over a sequence of small, informal dinner parties. It seemed natural that the right algorithm would greatly simplify the task of setting up an optimal distribution of people over dinner parties, and that's what this program attempts to do.

Contributions to Open Source: Improving the Render-time of FAX Data

For the research group in which I worked, a FAX modem would receive data which would be written to a file. The FAX service daemon would then convert the FAX data into PostScript for printing using the fax2ps program, which is part of the open source libTIFF distribution. The former conversion algorithm produced PostScript that took roughly 20 minutes to render on an old Level 1 PostScript printer we were using at the time. I re-wrote the conversion algorithm to take advantage of PostScript's font-caching mechanism, which reduced the render time to roughly 30 seconds per page on the same printer. I contributed this new algorithm (comprised of functions printruns() and emitFont()) back to the libTIFF project, and it is now part of the fax2ps program distributed globally.

Websites

Anyone working in a small IT shop will need to build a website now and again. I've built several over the years. The most recent builds belong to the Computer Science Department (in progress) and the Earth, Ocean and Atmospheric Science department. Both use Drupal as a content management framework.