zAxis: WebCT Interface

zAxis Dropbox Downloader on the Web

This was one of my first utilitarian software tools. The version of WebCT we used at UVM when I started was even more lacking in features than is the current version. In particular, graders for homework assignments had to download each file each student submitted by hand. To download the files for just fifteen students would take literally 270 clicks of the mouse. I attempted this once and then immediately wrote this program to automate the task for me.

zAxis was a website that accepted a user's WebCT login information, then retrieved a list of dropboxes from WebCT. Upon selecting a dropbox, zAxis would automatically produce a list of every file every student had submitted, like the one shown (abbreviated and with phony names) on the left.

Next, I learned the specification for ZIP files and built an entire PHP class to create a ZIP file with (in this case) the entire contents of the dropbox. Thus, with two clicks (pick a dropbox, click "Download") a zAxis user could accomplish what would take a traditional WebCT user 270.

A Bit of Trivia, and a Friendly Warning

The library code to interact with WebCT was extensive, and of course I had to write it all from scratch. Just to interact with WebCT (ignoring the code to build the zAxis website, support user interaction, et cetera) was around 20,000 lines of PHP. That's not monumental, but it's big.

One of the first things I had to do was figure out how to login to WebCT through a PHP script. When I'd gotten it to work, I decided to quickly save the password encoded in base64. Now, for those who don't know, base64 encoding is not an encryption scheme, it's just a way of storing text that LOOKS a bit like an encryption scheme. I knew this, of course, but just wanted a quick solution as I developed the rest of the application.

By the time zAxis picked up popularity with other graders and faculty members, I'd long forgotten the poor little login code, buried deep under layers of well structured object oriented design. So sitting out in a database accessible to anyone on the UVM network was a list of unencrypted passwords for all faculty and graders for low-level CS classes! Oops. Fortunately the person who realized this (nope, not me) was the ethical sort and made sure I corrected it and that everybody chose new passwords.

The Lesson: If you build a temporary solution, make sure it doesn't make its way to production.