RCOS

A chat with QuACS

With Spring semester course registration right around the corner, many RPI students are trying to put together their course schedules. A popular scheduling tool among RPI students is QuACS, the Questionably Accurate Course Scheduler.

Creating a course schedule is a rather simple problem to solve: take a student’s desired classes from the set of all classes, be sure to mark class times, and a schedule results. If no time overlaps exist in the result, then, bam!—the algorithm produced a valid course schedule. While other clever algorithms exist, like ones that precompute all class conflicts, these approaches are not necessary for QuACS’s usability.

So, if QuACS is not unique in its development of a course schedule, what makes it different? QuACS is a Rensselaer Center for Open Source project, meaning it’s a piece of software made by students, for students, here at RPI. Further, what makes QuACS significantly different from other RCOS-developed course schedulers, such as YACS, is its design philosophy. QuACS aims to be zero-maintenance, up-to-date, mobile-friendly, and fast. Being fast and up-to-date is auxiliary to the software’s core function, but the reason for a zero-maintenance goal is not quite so apparent. Graduate student Ben Sherman explains, referring to development partner Eli Schiff ’22, that “neither of us are interested in maintaining a server and we want QuACS to be able to survive after we graduate, so ideally this site will be able to exist completely hands-off.”

What does the QuACS team do to ensure this? They mainly use GitHub Actions, a service that allows users to run scripts automatically to assist code deployment. Before deploying, Github inspects the QuACS codebase and tracks its revision history. Github Actions scrapes data from sites that contain RPI course data such as SIS and the RPI Course Catalogue roughly every hour. Then, Github Actions builds the QuACS site for all available semesters, with each semester as its own minisite. The site pushes to Github Pages, a platform that allows users to host their own websites on Github’s servers. QuACS also makes the data they collect publicly accessible in a parsable form.

What contributes to QuACS’s speed? Unlike a lot of other websites, QuACS is a progressive web application using the Vue.js front-end framework. This means that instead of relying on some distant server to perform a majority of the computation, QuACS runs more akin to a local application. Schiff explains that this feature, “is really nice because it allows us to take advantage of things like caching but also the ability for you to install it on your device…it works fully offline.” Another unique feature of QuACS is that it uses web assembly which allows the software to run more natively. QuACS uses this to handle the main processing workload in the Rust programming language, a compiled language that takes in all the code at once before execution. Compiled languages are typically faster and more system-optimized than their interpretative counterparts, which take in and run specific portions of code at a time. Another optimization the QuACS team performs is storing occupied timeslots in a byte array which is then logically operated on with another bit array to determine if an overlap exists.

What inspired the creation of QuACS? It was initially conceived as an April Fools joke for the RPI Academic Discord Server, but when Schiff was looking to schedule courses for his Arch semester, he found that YACS, or "Yet Another Course Scheduler," was not updated, leaving him with no option for course scheduling other than SIS. So, he developed the iteration of QuACS he and Sherman call “Old QuACS,” which existed from March to June 2020. “Modern QuACS” improved upon this old version, introducing a redesign along with other improvements.

At the time of writing this article, the RPI QuACS website has 1.2 million views and 60.5 thousand unique visitors. Not just a resource for RPI, QuACS has also proven useful to others like Nicholas Novak, a student at Occidental College, who made both a parser for his school and forked QuACS to make a course scheduler of his own.

Editor's Note: An outdated chart comparing QuACS features has since been omitted from this article.