Due: 5 December 2012 2358 PT.
By: Randy Tarampi, Steven Evans & Conrad Locke
We've made some sort of class schedule optimizer - it uses Django and is located at http://cmpt470.csil.sfu.ca:9017
Interested in what we had at our checkpoint evaluation? Check out the checkpoint tag.
Looking for our final submission for CMPT 470? Check out the final tag. A dump of the DB was added afterwards, though due to the nature of the data, it would probably just be best to drop all the scheduler_* tables and run awesomeProject/scripts/deployForApacheFromScratch.sh which will pull the courses data from CourSys and populate the DB as specified in the settings.py file. We wish we could've automated it, but that would've required regular maintenance to keep up with the rate the the information from the feed changes, which is often apparently. See the below comments in "To Do" for more details about the data's cleanliness.
It builds 'optimal' schedules given a set of courses and a set of unavailable times, where optimal minimizes the time spent on campus.
Lots! We need to do lots of testing and general beautifying. As far as we're concerned, this is a bit more than a proof of concept, but substantially less than a polished, final product.
That said, we had to do lots of work on the algorithm. By no means is what you see finalized - it definitely doens't look as good as it could be.
The data we're using has a few errors, like lectures that are scheduled like final exams, which tends to screw things up - see MATH 152. Since this data is from GoSFU (via Greg Baker's coursys), we can't really do much about it, nor do we think we should.
Other than that, which is to say, other than the styling, we would have liked to have more time to test. We're pretty sure that the algorithm works, but not totally 100% sure. Since the only testing it got was the mountains of user based testing (by Randy, Steven and any poor soul that we asked to try it out), and Conrad's whitebox testing, we're only relatively sure that it doesn't crash and burn out. If you've taken a look at the algorithm, you might notice that there's some extra functionality available that we did not care to actually give the user a chance at using, like the notion of 'needs/wants' - we didn't put it in because we didn't have time to test it.
There are a few input bugs here and there, like the addition of an invalid unavailable time (only on the first addition of a time!).
So yeah, all in all, testing & styling.
Requires Dajax & Dajaxice. Also requires jQuery 1.7.2 and jquery.ba-serializeobject. Makes use of the django-debug-toolbar.
The arrow icons come from the Mini icons 2 icon set. The loading spinner is care of NETEYE. The breadcrumb implementation comes care of django-breadcrumbs.
This project uses the HTML5 Boilerplate CSS reset, which can be found here.
Our CMPT 307 prof & textbook, without both of which we probably wouldn't have settled on (or even had) the idea. Our CMPT 470 prof, who didn't call us crazy.
Our friends, families, colleagues and loved ones who will presumingly bear with our frustrations/ranting during the building process. A special mention goes out to Allison who made us cookies.