A08: Open UH Schedule Helper – Milestone 3

Over the course of the semester, my team and I have been building the Open UH Schedule Helper web application. The goal of this app is to provide UH student with support for course planning and scheduling. We’ve made a lot of progress since Milestone 2 and I’ll briefly describe the functionality here. More information can be found in the Users Guide or by watching the introductory screencast on YouTube.

For those of you more interested in the technical aspects of the application, we’ve put together a Developers Guide and screencast as well as made the code publicly available on Github.

Application Functions Overview:

1. Searching and Filters

We’ve implemented an easy to use search and filter function. Searches are performed on combinations of the following three fields: department, instructor, and course title. To help speed up the search, if the user selects a department, the contents of the instructor select box is updated to include only those instructors associated with the selected department.

Select boxes auto-update to include only relevant selections.

Select boxes auto-update to include only relevant selections.

Queries can be made more specific by applying filters. Clicking the “Show Filters” button exposes the available options which include filtering by Focus, meeting days and meeting times.

2. Interacting with search results

After a search is performed, results are displayed in the table immediately below the search form. As users mouse over each entry in the table of results, a corresponding event is dynamically added to the calendar object below this table. Courses that can be added to the users schedule without conflicting with another course are displayed in green; courses that do conflict are display in red.

Preview the schedule in real time. Events in green can be added without issue. Red events indicate a conflict.

Preview the schedule in real time. Events in green can be added without issue. Red events indicate a conflict.

There are three functions associated with each result. Each function is invoked by clicking one of the three icons described here:

  • The green “+”: Clicking this icon adds the associated course to the users’ schedule. Users must confirm this action before the course is added.
  • The blue “i”: Clicking this icon displays the late breaking information associated with the course. Users are able to add their own late breaking news item from the resulting modal if they choose to do so.
  • The eyeball: Clicking this icon adds the associated course to the watch list. Users must confirm this action before the course is added.

3. Editing the Schedule and Watch List

Removing a course from the schedule and watch list is done from the users account page. All courses in the users schedule are listed on the Course List tab; courses in the users watch list are listed on the Watch List tab. The process for removing a course is the same for both lists: Activate the appropriate tab and click on the “Remove” button associated with the course to remove.

Edit and Delete options are all conveniently located in one place.

Edit and Delete options are all conveniently located in one place.

Users must confirm this action before the course is deleted.

4. Editing Late Breaking News

Late breaking news items contributed by a user can be edited from the users account page. Comments left by the user are displayed on the Late Breaking News Tab. Each comment can be either edited or deleted by clicking the appropriate button.

lateBreakingInfoTab

Late Breaking News items for courses in the users schedule and watch list are aggregated and listed on this tab as well.

5. Notification Preferences

The application is capable of issuing email and text messages to users who choose to receive notification that new late breaking news has been added to a course in their schedule or watch list. Users are opted out of this service by default. To opt-in, users simply navigate to the account page, select “Opt-in” under the “Notification Preferences” section, enter contact information and save their changes. A confirmation email and/or text message is sent to confirm the user’s selection.

Contact information is validated to ensure valid entry.

Contact information is checked to ensure a valid entry.

Technologies:

Like last semester, the technologies we used to implement this application are Twitter Bootstrap, MySQL, and the Play Framework. There were, however, new technologies used that I will describe below:

1. Jaunt: Java Web Scraping & Automation API

jaunt

The primary function of this application is the searching of courses based on specified criteria. In order for this function to work, we needed a database of course information. Although the university must have this information somewhere (since it is posted on the course availability website), it is not accessible via a public API. Therefore, we decided to use Jaunt, a web scraping technology, to obtain this data. Given a url, Jaunt will retrieve the page and return its contents in a way that makes it easy to the data you need.

2. FullCalendar jQuery plugin

Another major function of the application is constructing a schedule of courses. Initially, we represented the schedule as an html table with each column a day of the week and each row a half hour time interval. Courses were illustrated by coloring the background of the cell corresponding to the day and time of that course on the schedule. This approach became complicated when we realized that not all classes start and end on the half hour and if we wanted an accurate representation of courses on the schedule, we would have to color fractions a cell. With this revelation, we abandoned this approach and adopted the FullCalendar plugin as our solution which makes adding and removing events at any time of day simple.

3. JavaMail API

javaMail
One of the features of this application is its ability to notify users when late breaking news items are added to a course in their schedule or watch list. Notifications are sent via email and text message. Although there is a Play framework plug-in that enables this functionality, we built it using the JavaMail API. Like Jaunt, there is excellent documentation and many examples available on-line.

4. Java TimerTask

Instead of bombarding the user with emails and text messages whenever someone comments on a course, the team decided to send a single notification summarizing new comments at 5pm each day. To implement this auto-executing, scheduled event we used the Java TimerTask Class. And like Jaunt and JavaMail, TimerTask was easy to use because of the ample documentation.

Lessons Learned

I think one of the greatest things about computer science is being able to use code and tools written by someone else to make my projects that much better. However, searching for the tools, reading the documentation and learning how to use it can be an intimidating and daunting process. In most of our classes, we write all of the code we use so rarely do we get to experience this process. I think one of the most valuable things I did this semester was repeat this process with the 4 technologies listed above.

I also think working in a group with the same people for the entire semester was a valuable experience. Up until now, I had complete control over the code in my projects and every implementation decision was mine to make. But when working with teammates, no one should have this kind of control and initially, it was a difficult thing for me to get used to. But here we are now at the end of the semester and I think I am a better team player because of this experience.

Hackaday

Fresh hacks every day

Slashdot

Professional Portfolio