randName / sutd-timetable

.ics generator for timetables
https://opensutd.org/sutd-timetable/
The Unlicense
16 stars 10 forks source link

Past, Present, Future #19

Open randName opened 5 years ago

randName commented 5 years ago

tl;dr: SUTD Timetable was originally built with the intention to scratch my own itch. Now that the metaphorical itch is over, I cannot dedicate the same amount of effort into its development or maintenance. Feel free to contribute to the project and organise the effort on the repository at OpenSUTD/sutd-timetable#3

tl;dr the tl;dr: It doesn't spark joy anymore


Past

Back when I just started in SUTD, it was also around the time when the Pebble Time shipped1. The timeline feature on the Time would show upcoming Google Calendar events, which was extremely useful back in first year when I actually went for classes. Unfortunately, the timetable was trapped in MyPortal, only catching a glimpse of light whenever someone took a screenshot to use as their phone wallpaper.

The very first iteration of SUTD Timetable was just a bash script that took the List View (the one nobody uses) and converted it into a .ics file that could be added to Google Calendar. I looked up how the iCalendar format worked and did all the HTML parsing with lots of sed and regular expressions. It was ugly and dirty, but it did the job.

With first year modules being the same for the entire class, I offered the file on the class chat. It was later moved to my server so I could update it when the classes changed. Eventually I realised that I could ask people in other classes for their timetable file and do the same, turning into a monopoly that can take over the entire time-telling economy (to be honest this joke is less funny with the current situation). It continued well into Term 2, where I could get hold of at least one person from each class and was able to offer the timetable for all 8 classes.

Just before Term 3 started, it dawned on me that this system was unsustainable. Everyone would be taking different modules, and I can't go around asking everyone I knew for their timetable. And even if our fundamental modules were the same, there was still HASS that was all over the place. I started writing some Python and got a barebones page to accept a file upload. It would trigger my parser script the .ics file, which will just be served out of a folder.

Present

The SUTD Timetable that most people would be familiar with (not the current one in Vue.js) only took shape after a few weeks of struggling. I converted the raw Python to Flask and eventually moved everything to Heroku. The frontend was written with the only library I knew, jQuery2. Somehow that mess of parts became stable enough to survive the load, and other batches started using it too. There would be occasional bugfixes and new features, but nothing too groundbreaking.

What kept me going during the entire time was twofold. Of course, the altruistic reason of helping people out with something simple was always in there somewhere. Every single bug report was an indication that someone was using it, and I was oddly ambivalent everytime I received a My Class Schedule.html from someone over Telegram. But a large part of it was also about learning new things and putting them into action. Flask and Heroku were the major takeaways, but I also learnt about maintainence and managing expectations.

Near the end of 2016 I learnt more about Javascript frameworks3 and what they are useful for. I could fully appreciate the whole reactivity thing because of my struggles with jQuery. Keeping all the checkboxes and selections in sync was a horrible nightmare made of event handlers, but it was completely wiped out by the simplicity of reactive binding. The best part was this rising star called Vue.js that was simple to understand and wasn't made by Facebook. I learnt it using my project for the Database module in Term 6, along with the Material component framework Vuetify.

Since a Vue app can just be a static bundle that is completely detached from the backend, I toyed with the idea of using Github Pages to host the frontend while using a serverless backend. I was not too well versed with serverless at that time, so I added a v2 API to the Heroku app as a stand in. The Vue version was done quickly, but I did not release it publicly as there was no calendar component and I was too unfamiliar with the layout grid to make one myself. Eventually I made an actual serverless backend with Firebase and Cloud Functions, and that is where we are right now.

Future

As my time in SUTD came to an end, I thought about what would happen to this little project. It was open from day one, and anyone else was free to add on or even run their own version. There were definitely some contributions from others over time (Thanks @causztic), but it also became apparent that there wasn't new blood coming in. I did make a post asking if there was anyone interested in taking it on, but I guess the way I put it made it sound like a chore.

It is entirely possible that I continue to maintain it. I even thought of setting up a Paetron for this. However,

And thus I have decided not to step in to fix any of the current bugs. This might be a death sentence, but I feel like I am just forcing a hand out of everyone. If it really dies, then perhaps it just means it never mattered. But with @OpenSUTD and the whole community, I am hopeful that it does not happen.

I will definitely continue to keep a lookout. I might even write some code for it in the future. But it's time for others to scratch their own itch.


(Who the hell writes blogposts on GitHub Issues?)

Footnotes

1 RIP Pebble. My Time is still alive but I rarely use it now ^ 2 We all had to start somewhere right? ^ 3 I tried picking up Angular earlier but never got too far. ^ 4 Contrary to popular belief ^

piroton commented 5 years ago

Thank you for the time.

I'll get cracking learning Vue.

charleswongzx commented 5 years ago

You are a true hero