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,
I no longer have access to MyPortal, which means I won't even have a single sample input without troubling others (the .html file is never uploaded, only the parsed data)
I have work responsibilities to attend to, and the total amount of time I can spend actually coding is limited4; those things actually pay, and I have to prioritise
I cannot, in good faith, allow all the learning opportunities to be monopolised by me
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 ^
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 ofsed
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,
.html
file is never uploaded, only the parsed data)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 ^