ClassComm online classroom & hand-in system
I had worked with the NetMath group at the University of Illinois for three years, in various capacities. My freshman year, I was mentoring high school students taking intro calculus. In general, this consisted of answering questions the students had about the math or the computer system we were using, as well as grading their assignments. The next year, I took on the role of one of the two "Lead Mentors" - basically, this entailed all of the responsibilities of a mentor (and for higher level classes, at that), but also interviewing potential mentors, doing advertisement, checking mentors' timecards, maintaining the web site, and other administrative duties. My junior year, I stepped down from that to focus on my coursework, as the job was quite time consuming. I became, instead, a "relief grader" - a job with no set hours.
Mentors were expected to return graded assignments within seven days as part of the policy. I was given the opportunity to grade anything over seven days old, to improve the students' experience. Unfortunately, with the then-current system, the only way to find them was to go through each class, and in each class, go through each assignment, to see what was there.
This, of course, was overly time consuming. One weekend, I started poking around in the source for the system, and realized it was written in Perl. I opened up my favorite browser, and started looking up Perl tutorials. By the end of the weekend, I had put together a little CGI which would parse through the data files and found all of the ungraded items. It created a little color coded table, which was sortable on various fields.
The end result was that the mentors could easily see what they had in the queue, and could grade it before the seven day mark. It also meant that -I- could easily see what had passed the seven day mark, and thus all I had to do was check the CGI, instead of iterating between a dozen assignments in each of a half dozen classes.
It also, evidently, impressed the Project Director. I was offered the opportunity to rewrite the system; the main goals were usability and stability. For example, under the old system, there were a couple of instances where a large mass of data was truncated, and had to be restored from tape. When making an update to any file, the system would:
- Begin copying the file to the point it needed to change.
- Make the update.
- Copy the rest of the file over.
- Swap the file back in place.
However, when the disk ran out of space, the process did the following:
- Begin copying the file.
- Run out of disk after copying 29% of the file.
- Swap the file back in place anyway.
And thus data was lost.
To meet the needs of the program, I wound up implementing a PHP based web application backed with a MySQL database. The application allowed various levels of access (Student, Lab Instructor, Mentor, Instructor, Admin), with varying degrees of functionality for each.
For instance, students were able to view assignments and announcements, post on a discussion board, chat, and upload homeworks and retrieve graded assignments. Instructors were able to create the assignments and announcements, moderate the discussion boards, retrieve upload homework and upload the grades and comments, and kick rowdy people from the chat.
The file upload portion was interesting; students could upload Mathetmatica notebooks directly, or upload in a variety of zipped formats. If the uploaded file was NOT already zipped, the web site would actually zip it behind the scenes, before storing it, in order to conserve space, since each file could be up to 12 MB unzipped, and this server was shared with other parts of the department.
Security was also an issue. Since students and instructors both used the system, care had to be taken not to leave holes that students could exploit. Most of this was done through a login system which stored credentials in session variables, and passed back a cookie to the user. To avoid people sniffing the cookie, and trying to abuse it, the server also stored various pieces of information, such as the IP address the user was logged in from, and verified it when someone tried to access something privileged.
I was responsible for the entire non-business side of the project, and worked directly with the Project Director to determine the technical requirements for the project. I designed the application, implemented the web page and a few backend scripts, tested the application, and deployed the production system.
At the end of my senior year (the agreed upon time of delivery) I set up the system, and we started the first few courses over the summer running it. For the next month or so, I fixed bugs that popped up here and there (for instance, an issue where StuffIt on the iMacs in the lab would corrupt zip files). The system is still in use today, and seems to still be serving all of the NetMath courses, (and it looks to be used in the on-campus courses as well).
Check it out! Unfortunately, without a student login, you can't get to most of it, but there is an introductory movie.