Inspiration
The web-based schedule of classes, obviously, is not up to par of modern standards of user-friendliness. A UCI alumnus made Antplanner, which is a huge step up from the original, but it still lacks something: The ability to schedule the courses you want to take for you, automatically. HackSoC is our answer to this problem.
What it does
HackSoC fetches the course schedule by scraping the text interface of the original WebSOC provided by UCI, askes the user for their preferences, and computes an optimized schedule for the user (still in progess). Like a particular instructor? Don't want to take 8am classes? All of above can be specified as preferences on the HackSoC interface.
How we built it
We wrote a parser of the WebSOC's text interface in Python, which spits out a clean, object-oriented representation of UCI's entire class schedule. Then, we implemented a master-tree for section and time choices, in order to accomplish the task of generating an optimized class schedule for the user.
For the user interface, we made a static webpage, with some Materialize love. It takes the user's preferences, and hits our Python backend at our Flask API. Then, it periodically polls our API for the progress, and eventually obtains the optimized class schedule when it's available.
Challenges we ran into
The automatic scheduler was the hardest part of the project. There are far too many possible course arrangements, even with a small set of courses to consider (4 to 5). We were very lucky to receive assistance from mentors at Cylance, who suggested ways to skip unnecessary branches.
It was a challenge to parse WebSOC's text output and figure out the associations between class sections (e.g. lectures and discussions), too. The format of WebSOC's text output varies a lot, depending on the course and its individual sections. We dug through UCI's course offerings, and finally wrote the parser which should (hopefully) handle most of WebSOC's quirks. We found some interesting courses along the way, too :P
Accomplishments that we're proud of
To be honest, we feel extremely lucky and proud that we got close to our goals of producing entire schedules. The parser underwent a major restructure, which broke a lot of things. It was a very educational experience.
What we learned
Actually, we already answered this in the previous sections :) Throughout the hackathon, we learned a lot about parsers and tried our hands on a couple of search and optimization algorithms.
What's next for HackSoC
Take over UCI, of course! Jokes aside, we will definitely work to get the scheduler to work first (if we are unable to before the demo). Then, we'd like to rewrite HackSoC to be cleaner and easier to maintain (as the name says, the whole thing is pretty hacky). We are also considering new features, including the ability to perserve user preferences cross sessions, and suggest courses based on major requirements.
Log in or sign up for Devpost to join the conversation.