CS3216: Week 6 + Recess Week — End of Assignment 3 and injured hand ☹

For week 6 and recess week, the story of CS3216 will be combined and shortened! Because… as you can see I fell down and injured my hand — and I just recovered from a bout of fever that spanned for 4 days — typing is still somewhat of a nuisance so I’d prefer to keep it as short as possible — ok I Lied.

It’s been about 7 days since I fell and hurt my hand and yet it still hurts like !@#$ whenever someone brushes by it or when someone unknowingly smacks it. Thanks to whoever initiates a hi-5 with me right now, it’s gonna be a painful ride for me. And I also didn’t get to attend monday’s CS3216 lecture because my fever was quite bad then so I just went home to rest.

Ok so basically the whole recess week (and some parts of this week) was just a plain bad, let’s just talk about the end of assignment 3, some of my thoughts on Meteor as a framework for web development and some thoughts about CS3216 as a module.


Assignment 3

Right, so assignment 3 is officially over and my general thought about assignment 3 was that things went oddly slow for the whole class generally. But well, the timeline for the assignment was kind of tight and it was scheduled at about when things would usually get really busy which is right before recess week.

The app that my team and I have built is Feedeorite and can be accessed live if you click here — though if you visit it using your desktop browser, the experience is probably gonna be quite weird because all the components and UI right now is optimised for mobile usage — which is at the current rate mobile adoption is growing where most of the world will be accessing the Internet soon.

So… assignment 3 was very similar to assignment 1 in that it’s meant for us to learn how to build apps, but this time apps that are mobile-first and mobile-friendly.

Except for learning how to make mobile-friendly web apps, I don’t think I’ve learnt anything extraordinary from assignment 3, it boils down back to the same few things that I’ve learnt from assignment 1. Borrowing them from my previous blog posts, they are still —

1. If we want to work at our fastest possible pace, we should sit together to work.

2. Just because an idea has already been implemented — doesn’t mean it’s not worth doing or not worth exploring.

3. Iterating fast is something important — especially in the early stages of a startup / product

In the context of this assignment, number 1 rings true. Number 2 is also true as well because from exploring it, we did find out that doing something like that is indeed not as easy as we though it’d be. As for number 3, I think the class in general, including us, has a long way to go in making sure we iterate fast. Having gone through assignment 1–3, iterating fast is a really hard thing to do properly and I dearly hope that we can achieve it for the final project that is coming up soon.


Meteor as a framework

Now, for Meteor as a framework. Meteor is really on another level when it comes to prototyping. From the previous blog post, adding login buttons for OAuth with services like LinkedIn, Facebook, Google etc. is as easy as typing one line into the console and adding one line into the HTML file.

Iterations are also easily deployed to multiple servers and what’s more the hosting is free no matter how big your app is — for now. Meteor’s future plans, from what I know, is to provide hosting for free but provide services for the apps at a price. But for now, it’s free and it’s all good — especially as students ☺

Ok, so from the previous blog post and this blog post so far, there are a lot of good parts about Meteor. Really fast prototyping, magical commands in the console that instantaneously gives you smart packages and it’s written wholly in JavaScript, who wouldn’t know at least a bit of JavaScript these days?

Side Note — Stanford CS101 is now teaching fundamentals of programming in JavaScript, was it CS1101S who started it first, or CS101 from Stanford? Hmm… Not sure :p

So far, it seems like that, yes?

So… Developing web applications with Meteor is not a bed of roses all the way through. One of the hardest thing — and I would say the main pitfall of Meteor so far — is incorporating other frameworks / technologies / open-source projects into your Meteor app.

See, this is because Meteor has their own way of doing things to make all of the modern technologies they amalgamate to create Meteor work nice together. They have their own version of handlebars known as spacebars, their own version of reactive templating known as Blaze, their own client-side DB known as mini-mongo so on and so forth.

There are actually a lot of open source projects, frameworks, technologies that one would normally and can use that work in tandem with other web application framework like Rails, Django and so on but sometimes it is insanely hard to do the same for Meteor.

Front-end frameworks like jQuery Mobile, famous etc. which tries to go beyond just looks and goes into things such as templating, hijacking form submission with AJAX, throwing away DOM elements after a page has been navigated away from and others means having to throw away some parts of Meteor — well then what’s the point of using Meteor as a framework if we’re going to throw away some of Meteor, sometimes the good or even best parts of Meteor!

I spent many hours (sometimes more than 8) trying to get certain frameworks to play well with Meteor but to no avail. We ended up landing back on a front-end framework that does not try to do too much but will also help us alot with styling especially since we need a sidebar — semantic-UI — well we didn’t have much time left to spare anyway since the timeline for assignment 3 is really really tight.

Plus! The “requirements” set for assignment 3 also didn’t play really well with Meteor.. some of them were done with simply adding a smart package but some of them clearly didn’t make sense while some of them only made half-sense if that makes sense. Senseception.

It was slightly troublesome when it came to having to meet some of the requirements because of how some of them didn’t make sense and some of them half-sense, so thanks to the teaching team for being open to changes for some of the milestones and allowing us to do it in ways that makes sense to Meteor.


CS3216 as a module

Ok, so one thing that has really perked my interest intensely about this module is that this is the first time that we’ve been presented with work that is so open-ended. You can basically do anything you want, as long as you meet the “requirements” (ok that makes it less open-ended, but once you hit them, you can go ahead and do any amount of open-ended stuff you want, and what’s more the idea is open-ended!).

That’s superbly cool if you think bout’ it since it’s a module that is taken in school. One of the problems with school is that very little of the modules are forward looking in the sense that it focues on learning how to learn. Things are usually rigid, close-ended and sometimes they even allow us as developers or designers etc. to work alone — how is that even remotely possible in the real world today?

Most of the skills that you need, you’ll learn on the job. Really, the point of going to school is getting good at the skill of learning how to learn. — Julie Zhuo

Reading Julie Zhuo’s blogpost on her dream design curriculum and blog posts by many in the technology world, it seems that there is the common consensus that technology moves super quick — so quick that it is hard for institutions and enterprises to keep up.

Because of that, learning how to learn is actually more important than learning all the materials that the school throws at you. After all, we can’t be sure that what we learn will still be relevant when we graduate and are ready to contribute to society and we might not know how many new and relevant things might spring up in the future.

I guess that also means that internships are clearly very important since most of the skills that we’ll need for work in the future, we’ll learn on the job. For that, I think kudos to SoC for making it compulsory for new students to go for internships and for the not-so-new students like us to have the choice of going for internships to hone our abilities to contribute to society once we go out to work.


Right… so somehow this blog post is still longer than it should have been. Blast! Always seem to write more than I want to spend time for, so much work piling up ever since I got down with a fever :\ Time to stop and get back to work! On a side-side-note, final assignment has started and the learning curve seems super steep, but my group and I are ready to learn a ton of stuff so let’s get started! See all of you around and that’s the end of this blog post ☺

Show your support

Clapping shows how much you appreciated Yap Jun Hao’s story.