Solving self-imposed problems for fun and profit
QuACS is a course scheduling tool to help students pick which courses to register.
19.2k total visitors
382k page views
2,000 unique visitors
41.8k page views
Initial plan: April Fools joke for the RPI Academic Discord Server
March 2020: Old QuACS
June 2020: Modern QuACS
October 2020: Previous semesters are added
January 2021: QuACS joins RCOS
February 2021: Arch support
Vue.js
QuACS is a Progressive Web App
Privacy focused
Self hosted
Tracks unique sessions, page views, and events
Analytics helps us drive design choices
Problem: Given some selected courses, can you mark which courses can still be registered for without conflicts?
Sounds simple, right?
Problem: Given some selected courses, can you mark which courses can still be registered for without conflicts?
What if the user has selected multiple sections from each of their courses?
I've selected up for these sections.
Can I select these sections?
I've selected up for these sections.
Yes!
I've signed up for these sections.
Can I add this one now?
I've signed up for these sections.
No!
This takes a while! Imagine the poor freshman who has every section of CS1, Calc 1, and Chem 1 selected :(
Despite Professor Bringsjord's "proof" of P=NP, we've been unable to show it in practice
There isn't a fundamentally faster algorithm
Please: If you can figure this one out, let us know
If a course doesn't work in the first N schedules, it probably doesn't work at all
Might be good enough for some course schedulers 😉
We won't have to check if two sections overlap (That was the nested loop in our DFS)
This makes the algorithm a lot faster!
It takes up a bit more memory, but compresses well
Wait a second... I thought we didn't want any maintenance???
We don't want to have to manage a cluster of servers
Why do we even need a server?
Problem: Given some selected courses, can you mark which courses can still be registered for without conflicts, all within the browser?
This sounds impossible :(
But I really like Rust!
But I really like Rust!
Allocate a single bit for every hour in the week
Bits are 1 when the section occurs and 0 for all other times
Section meets at times T1 T2 T3 T4 T5
This would be stored asT1 T0 T0 T1 T0
Allocate a single bit for every hour in the week
Bits are 1 when the section occurs and 0 for all other times
Check for conflict with "bitwise and"
Pre-computation can minimize the number of bits needed
One operation to check if a section can be added
This means the site won't freeze while running the algorithm
to generate all schedules for CS1, Calc 1, and Chem 1
We want the most up-to-date and accurate data
Course availablity is determined by SIS
You shouldn't see any difference between SIS and QuACS!
Helper scripts log into SIS for course times, seats, prerequisites, etc.
Course descriptions come from the catalog
Also collect data not on frontend
All stored in quacs/quacs-data
Standard actions
Data collection
Site building
Total time from scraping to deploy: 37 minutes
Hosted with GitHub pages
Zero downtime