Square Register

For the second assignment, our team had to choose a Facebook or iPad application to study and present on. We initially had a list of more than 10 different apps, but slowly narrowed it down to a final three. Most of the apps were chosen because we felt that they had interesting points that we as app developers could learn from. Our team eventually chose to study and review Square Register.


Square is not one of the typical apps that everyone with an iPad would download. Its purpose is to give small merchants the tools they need in order to scale and expand their business — tools that were once accessible only to larger and more established merchants.

As of now, Square only works in certain regions, and Singapore is unfortunately not one of them. However, I managed to get hold of a Square reader during a recent visit to Square’s headquarters in San Francisco last month. Although it is not supported in this region at the moment, the Square Register app is still fully functional, complete with sales analytics and email receipts. The only thing it cannot do is the actual processing of credit card payments.


Work has begun for our first assignment, with meetings and code-sprints lasting from the early evenings all the way through the night.

Our first few meetings this week were spent brainstorming for ideas as well as planning out the project. There were many important decisions we had to make — decisions that would greatly impact our project and how we would approach it.

Logo Brainstorming on Paper
Logo Brainstorming on Paper

Back-end Framework

As of now, our team has decided to go ahead with Django. The interesting thing about this decision is the fact that all of us has never ever done any development on any Python frameworks before. A few of the team has experience with Ruby on Rails, and others with PHP and NodeJS — but just not with Python. We came to this decision as we wanted to learn something new, and thought Django would be a good framework to learn.

Front-end Framework

Another decision we made as a team was to completely separate our front-end and back-end implementation. We made that decision to cater for future extensions, so should we decide to come up with a native app in future, we can build on the RESTful APIs that the server exposes.

Because of the nature of our project, we wanted a single-page webapp. Hence we chose to use AngularJS as our front-end framework.

UI Framework

We had three options — no UI framework (style everything from ground-up), Bootstrap or Foundation. We thought that having a base to start off with was a good idea, especially since we wanted to build a mobile-first responsive webapp. Both Bootstrap and Foundation provides a grid to work with, and both has all the basic components styled. While Bootstrap is good because it does a large part of the design for you, the trade-off is the loss in customisability. I realised that however much you try to customise a site built with Bootstrap, the “Bootstrap look” somehow remains with your product at the end. As such, we decided to go with Foundation for the UI framework.

My role in the team (as of now) leans more towards front-end development. As such, I haven’t really worked on any python code yet. However, working on the front-end, I have already started facing several problems.


One problem I faced was nesting views in template files. After reading through lots of documentation, I realised that AngularJS does not actually support nested views out-of-the-box. However, they had a new project (ui-router) what would do just that. After reading some documentations (and lots of Stack Overflow answers), and many more hours of trying, I finally got nested views working properly!

Another challenge surfaced when some of my project-mates tried to clone the repo and build the project but failed. We found out that Compass Sass was producing different results probably because we had different versions of Compass installed. As of now, we’re still in the midst of figuring out why this may be the case, and our Stack Overflow question has been quiet with no responses.

CS3216: The Beginning

The first I heard of this class was through a mass invitational email sent out to all students in SoC. After reading the opening line, I was immediately drawn to find out more.

Have a great app idea and wished there was a course in NUS that would help you make it a reality?

Nop, it wasn’t that I had a million-dollar idea that I hoped would turn into a successful start-up over the course of 3 months — I just thought it’d be pretty fun to spend a term learning more about stuff that I love.

Before I get to the “What-I-hope-to-learn-in-CS3216” part, and since this is the first post, I thought I should start off with a short self-introduction. I’m a second year undergraduate taking the Information Systems course in the School of Computing (though numerous profs and seniors have been poking me to switch from IS to CS). My journey with programming started off about ten years back when I taught myself some basic HTML & JavaScript. In my high-school days, my interest in the Web led me to learn some PHP & MySQL. I recently also picked up Node.JS from the summer project I was working on for Orbital.

What I Hope To Learn In CS3216

There are many things I would like to learn about software development, be it in this class, or outside the class in my own free time.

Technical Skills

While I’m not completely new to web development, the list of things I would want to learn never seems to end. Apart from learning how to make use of the Facebook APIs to build something useful (which is the first part of the class), I also hope to learn about other tools that help simplify development. I’ve seen countless open-sourced projects do things like unit-testing and use services like Travis CI to build and run tests on their apps. I hope to learn what these tools are used for and how they can simplify the development, build and deployment process.

UI / UX + Design

Over the years, I have picked up bits and pieces about what a good user experience should be like. However, that being said, I’m still not that good a designer myself. Given that there will be twice-weekly UI/UX reviews on all our programming assignments, I hope to learn from the TAs as well as my project teammates.

Working Well With a Team

Most of the technical projects I have worked on had no more than two people writing code. I hope to learn how to work effectively with a team that is slightly larger and more diverse. When it comes to code collaboration, nothing can be more useful than a version control system like Git. While I have used Git for some of my projects, I’ve never needed to work in a setting where branching and merging becomes incredibly useful.


Perseverance, in two different sense. First, perseverance to continue working on a project all the way through completion. Too many times, I started personal projects that I abandon midway when I become more interested in a different thing. I hope to end off the term having a project of my own that is useful to other people. In another sense, I also hope to be able to survive this class that I’ve heard so much about. Seniors have shared about how crazy the workload can get, and even Prof Colin himself warns that the course is consistently “known to be very brutal”.

I’ll end this first post with an apology for not being able to attend the first CS3216 class. As I’m currently in San Francisco taking summer classes at UC Berkeley, I have no choice but to miss a week of class.