Sunday, April 18, 2010

Lessons Learnt

I have learnt…

(a) to appreciate GUI.

I have always taken GUI for granted. In the 3 projects that we’ve worked on, most of my suggestions came from the perspective of a non-programmer who has no idea how tough it is to code those seemingly simple features. So here’s one tip for non-programmers when working with programmers: Look at their expression right after you make suggestion. If their face “change color”, then you might want to add the following line, “I am not a programmer, is it very hard to program this feature?”

(b) to appreciate browser compatibility.

I picked up html and css for this class and was tasked to create the stylesheets for the Facebook app project and the final project. It is really annoying to have the page load correctly in one browser, while everything is misaligned in another. Thus, there is a need to write the stylesheets such that all browsers interpret the attributes similarly.

Also, browsers interpret Flash animation differently.

“The very first version of our ‘car game’ had a huge problem: the car runs like a Ferrari in Firefox, runs like a Toyota in Chrome and crawls in IE.” [Ji Wei, during poster presentation]


Ken and Justin were already having a very hard time learning Actionscript and there was this annoying but important problem which would compromise our application. Both of them solved the problem jointly after quite a bit of trial and error. It turns out that this is a very well-known issue among programmers, as this was one of the questions that they asked during the poster presentation.

Jiwei: …we built a music game....
Chris (interrupts; doubtful look in eyes): is it synchronized?
Jiwei: I would say its pretty synchronized
Chris proceeds to test it out…
….after a while…
JiWei: It’s synchronized right?
Chris: Yea, how did you guys synchronize it?
JiWei: I am not a programmer....
** offers layman explanation of the idea behind the synchronization **


(Chris is the lecturer from Singapore Polytechnic who brought along 4 students for the poster presentation) Fortunately, I could explain it to them in a semi-technical way that hopefully sounded convincing. Thanks to Justin who explained to me the idea behind the algorithms when he offered me a lift home during all the late meetings. I don’t think it’s easy to drive and think of how to explain an algorithm to a non-programmer.

(c) to work very hard.

Cs3216 makes people work very hard and for this simple reason, there are many great applications/gadgets created which would have otherwise remained as ideas. Sleep is something one can forgo if there is a clear objective in mind. There are numerous examples of such people in cs3216. People like Angad, Hung, Ken and Wye Mun can probably compete for the award “Most number of hours awake doing a CS3216 project.” Their commitment to produce quality work is absurb.

Wyemun brought his laptop back to his kampong during Chinese New Year to start work on the Wave project, skipped meals and had to forgo a lot of sleep to get the gadget working. At the poster presentation, I found out from Wye Mun that he hasn’t slept for 2 days. (omfg!) As for Ken, thanks to Dropbox, I can ‘spy’ and find out when Ken sleeps by looking at when the files are updated and I found out that as the semester progresses the time intervals that the files are being updated gets smaller and smaller which means that Ken is getting lesser and lesser sleep. Also Kah Hong reported to us that Ken is constantly coding during MA1101 lecture. (ok, let’s be fair, Ken’s from International Mathematics Olympiad, so MA1101 would be boring to him, coding is more ‘fun’). Hung, needless to say, is just as crazy, his status updates on Facebook are perpetually about how little sleep he is getting (rem the one abt him telling his mum that he eats breakfast before gg to bed? haha). As for Angad, I remember one evening at COM 1 basement, I asked him jokingly how many nights have he not slept. His reply, “Oh, I slept yesterday, so probably wont need to sleep much for the next 2 days.”

(d) distribution of work is bound to be asymmetrical, contribute in every possible way

I was among the last to form a Google Wave group and honestly, I thought I was screwed (Wye Mun admitted to me that he felt so too and I am sure Lin Myat and Ze zhou would have felt so too). It made perfect sense that the rationale student would have 2 objectives: maximize project score by picking the best people to form the group and minimize pain of coding by picking the best programmers. When I found out that the team I have assembled has only 1 programmer, I knew I was screwed. After several meetings, the team was unable to start on anything concrete as none of us other than wyemun was coding. Everyone claimed to be learning, which is clearly intangible and unquantifiable. I was learning Python and trying to code a robot but to no avail so I volunteered to write the entire report less certain technical aspects. Eventually, wyemun coded the entire gadget and the three other monkeys wrote the report. Honestly, I don’t think I deserve the grade, nor the additional coolness points which have been awarded to the “team”, as this “team” is just one person. There is no pride in receiving credit when credit is not due; in fact, there’s shame. I hope Lin Myat and Ze Zhou learns from this as well and learn to make quantifiable contributions in future project work.


Random quotes that I happen to recall:

“Let’s build a Hello World gadget that satisfies all the milestones.” [Orry, 1 week before gWave project deadline]

“Our app logo looks like a middle finger” --- Ji Wei, refering to Topsyturvia’s current app logo.




“Don't pop the cherries" and "Improve your fingering skills,” --- Ji Wei’s suggestion for the game description for Balloon Madness (the obstacles for the previous version were red round balloons, which resembles cherries) and Musik Mania.



“Let’s build an infinitely nested thread” --- Cedric’s suggestion on a Wave which led to the Wave to lag and crash (for me).

Last lecture
Ben: Do not marry someone for her looks…after one child, still ok, by the second child, then cannot make it already.
*class laughs
Orry (whispers): I am video-ing….
Ben (shocked): You are video-ing ah?


Final Project Consultation with Prof Ben
Ben: Are you surviving this module?
Ken: I am surviving this module, but….I am dying in every other module.

Sunday, February 21, 2010

Helping GetHelp.

This application is very similar to the one my Facebook App Group created – Looking-For. To be frank, their application seems much more aesthetically appealing than ours, so I shall not comment on the graphics or I’ll be indirectly hurting someone.

The basic idea of GetHelp and Looking-For is pretty similar: Post a distress message on Facebook and hopefully get friends to help you or refer a friend who might be able to help you. The very nature of such applications dictates that users are free to post whatever they can think of. I am not too sure if this problem can be avoided, or rather, is this a problem at all. While I am for the idea of allowing users too “Add more details” such as the deadline, time and description, it would be better to have this section code in AJAX such that it appears after the user clicks a button.

When the user first adds the application, he should only see one textbox with a submit button, as well as a call to action like “Need help with something? Post it here: {textbox}”, exactly like Rumour Has It. Offering the user too many options confuses the user. By deliberately limiting the number of options given to new users, users are indirectly “forced” to familiarize themselves with the key features necessary to make the application work. This same idea is used in Mafia Wars too - when a new player adds the application, they are only allowed to perform one job and right after that job, users are prompted to buy a weapon which enables them to perform a different job. All users are “forced” to learn the game in this way, hence there is no need for a tutorial on how to use the application.

Bottomline: Less Clutter.

Tuesday, February 2, 2010

Flixster

The application captured a very important point: Online businesses can tap on the plethora of opportunities and resources in social networking sites (SNS). From what I gathered from the presentation, the main reason as to why Flixster became much more successful by having an application on Facebook is due to the nature of the activity.

Movies: A Social Activity

Watching movies (in theatres) is a social activity as few people (at least I do not know of any) go to theatres alone. Our decisions of which movie to watch, when to watch, where to watch and with whom to watch are highly influenced by our friends’ opinions. The application allows users to read the reviews written by friends as well as by other users. For users who have little or no time to read these reviews, they can scroll down the page quickly and simply look at the percentage of people who indicated that they “like the movie”.

All in all, by having a movie review application in a social networking site, it provides a one-stop platform to users to find information about movies and keep a lookout for friends who are interested in watching the same movie without logging into Flixster. Combined with other applications like Events, users can organize movie outings more efficiently.

My Two Cents
Before having to do this application critique, I did not add the application. And when I tried to add the application by doing a search using the search box, it returned me the Pages and Groups which have “Flixster” in their names. It took me quite a while before I figured that the application name is called “Movies” rather than “Flixster”; Flixster is merely the icon that they use for their application.

*** Imagine the number of people who tried to find Flixster, and gave up. ***

In my opinion, they should have created an application by the name of Flixster with the same icon and direct the users to the same URL. In this way, if a user was to look for "Movies" or "Flixster", he would end up in the same application.

Monday, February 1, 2010

On Presentations

Since the previous semester, I started to LOVE presentations, especially when I know that I will be presenting a topic that I am very passionate about. I get extremely nervous before a presentation and my mind goes blank just before a presentation. (You can read more about my reflections on one of my presentations last semester, here.) This is made worse (thanks to Prof Ben and the bunch of ‘evil’ TAs), by the fact that we need to take notes about the rest of the presentations as we are required to blog about them.

However, during the actual presentation, it’s an entirely different thing. I get a surge of adrenaline and this stays with me for quite a long while even after the presentation – its effects are the same as that of drugs, which explains why I am blogging right now though my stomach is growling.

After talking to Shannon, Angad, Hong Pang and Wai Hong, they unanimously agreed that I could have done better by making the ending less abrupt. Reflecting upon my presentation, I feel so too. I should have included a final slide which summarizes the key point in my entire presentation so that the audience will have a take-home message. I will just need a slide with the word “Conclusion” and then some graphics to capture the following point: “You don’t need a complex game with beautiful graphics and animation to build a killer application.”

Lastly, I would like to point out several presentation pitfalls that I’ve observed (just in case you are wondering why I know them so well, that’s because I was once guilty of ALL of them, and I am still guilty of some of them :p)

1) Overuse of the word “Actually”

- Actually, a lot of people are guilty of this pitfall actually, even some Profs.
- As you can see, the word is usually not required. I have a feeling that the brain inserts this word to allow more time for the brain to process what to say next.

2) Looking at slides way too often

- The ultimate pitfall that haunts me, and I am struggling to overcome it.
- One lecturer suggested for me to make a presentation without slides (The thought of it sounds intimidating, but I am definitely going to try it some day)

3) Moving too much and moving too little

- I like to move during presentation, but I don’t know if I am moving too much. So if you happen to read this blog, please let me know if I am moving too much.


Kudos to Joshua for creating the video on Marketplace in plain English (and sorry for making fun of it with Mafia Wars in Singlish). I know a bit of video editing and I know that it is EXTREMELY painful to create such videos. Respect!

Friday, January 29, 2010

Thank You

The end of an assignment marks the start of, not 1, but 2 assignments. The pace of this module is crazy. I am beginning to understand why Prof Ben is also known as the “evil professor”, he reminds me of Brain in “Pinky and the Brain” who harbours an evil intention to takeover the world.

I ran into Prof Ben in Science canteen in the afternoon and this was what he said:

Ben: You all are still alive ah?
Me: The entire week the timings that I left school are: 11:00pm, 11:15pm, 11:15pm, 2am.
Ben: But you look damn happy.
Me: Pain is good, it reminds me that I am alive.


The last line is a quote from one of my warrant officers in the army, who used to be in the Special Operation Force (SOF).

Working on the Facebook application has been, in chronological order, painful, agonizing, fruitful. I have to admit that our application may not be one of a very high level of complexity in terms of programming, but considering our individual background, I would believe that every one in the team has accomplished quite a bit in completing the assignment.

Initially, I was quite pleased to be working with people who have similar personalities. However, after reading the comment that Prof Ben made on Shannon’s blog post, I felt a bit worried that we might be unable to cope with the technical aspects for the assignment as there were effectively only 1.5 programmers in the team.

Reflecting on what I have done…… <<reflecting...>> <<Done - Not much to reflect upon>>

To be frank, I have not done much other than to create the Invite page (which is merely copying and pasting a piece of code obtained on the internet and changing the variables) and to come up with the style sheet for the application.

Something that I learnt about myself in this project is that I hate the feeling of being unable to contribute – really, really hate the feeling. Therefore, when I failed to get the Publisher to work, I felt so terrible that I decided to seek advice from Prof Ben last Saturday. He suggested that since I have some experience using LaTeX, it would be easy for me to learn CSS which will be critical in creating a decent UI (which I recall Prof Ben describing it as one which “cannot make it” as of last Saturday). My only regret is not being able to learn the relevant languages fast enough to help out in the programming aspects. I hope my team appreciates my contributions (albeit insignificant) to the project.

Here’s a big Thank You note to my team with whom I survived the first ordeal in cs3216.

Jonathan the Magician

You are a wizard, literally and metaphorically. Even till now, it seems magical to me how you manage to lead a team of 4 people, all of whom have little programming experience*, to churn out a Facebook application. As you have mentioned in your blog, I felt that you might have been a bit foolish to have chosen 2 Lone Rangers in your group (clearly, we wouldn’t be able to help much in the programming aspects). However, it turns out that the less we knew, kind of means the more we would be able to learn. I cannot imagine the agony that you and Cong went through to get the code to work. I apologize if I have been unable or took way too long to accomplish some of the ‘random things’ that you tasked. If only I have been smarter.

Shannon the Artist

Your artwork brought life to our application which would be dull without it and your presence lightens the mood within the team. Thank you for the coffee, snacks and ice-lemon tea, (which I have no intentions of paying back in anyway :p) After yesterday’s meeting, I know how to cheer you up le: just show you my matriculation card.


Ken the Mathematician

You are simply amazing! Your dedication to making the application work is admirable, you should catch up on some sleep if you can. I believe, in no time, you will become an excellent programmer, well-versed in multiple languages. It is mind-blowing to know that you just started learning programming only in the previous semester and you managed to be the top 5 students for cs1101s. Lastly, thank you for making the Publisher work, it is something that would never be able to figure out on my own.




*Brief background of my team:
Jonathon: electrical engineer, last computing module was about a year ago.
Ken (Cong): year 1 computing major who started programming about 7 months ago.
Shannon : accountant-to-be, non-programmer, designer.
Me : non-programmer, non-designer.

Thursday, January 28, 2010

~~ Cloud Computing ~~

I am mildly disturbed by the fact that the very piece of equipment that I use everyday has such a huge infrastructure supporting the applications, programmes and interconnectivity and I have been so ignorant about it. Prior to taking this module, I only know that I am using my laptop and I get connected to the net because of the presence of a server (which, to me, was just a huge computer with no monitor). Furthermore, I have always taken the Internet for granted, cursing when my YouKu videos take ages to load (which I now believe it’s probably due to the lack of a Content Delivery Network).

Simon did a great job in explaining how Amazon Web Services (AWS) aims to provide a permanent solution for such problems by being more than just a web-host and how the various services provided by AWS will pave the way for an IT revolution, with him as the technology evangelist. I admit that I do not understand certain technical aspects discussed during the question and answer session but the talk has nonetheless been beneficial for me. I think there are a couple of main ideas. Firstly, storing data in one location is like putting all the eggs in one basket, but with AWS, the data is replicated several times in different geographical locations, thus it is fail-proof , ‘unless there is a nuke that wipes out the planet,’ [Simon]. Next, the scale of AWS makes it possible for them to buffer traffic surges by allocating more resources to a particular instance.

All in all, having attended the talk, I am beginning to appreciate the efforts that website owners take to resolve problems such as the following: too little traffic, too much traffic, suddenly spike in traffic, server down-time, content delivery, etc. I shall end of with a quote that Simon used to describe the Simple Storage Service (S3) of AWS.

‘Never underestimate the bandwidth of a station wagon full of tapes.’


It kind of reminds me of one of my favourite quotes: “Whatever it takes.”

Tuesday, January 19, 2010

What to say when your superior demands a deadline from you?

10:40am 22/01/10 In Lab

Ok, this post is a bit late but its better late than never right? Reflecting on the previous lecture, where ex-students of cs3216 shared their valuable experiences on how to manage a team, I cant help but recall the lady's (in white glasses, i cant rem her name, help me out!) conversation with her subordinates who are programmers

Lady: When do you think you can finish the task?
Programmmer: I am not sure.
Lady: What do you mean, 'you are not sure?'
Programmer: You don't understand programmers...
Lady: But I need DATES!


This does sound like a tricky situation. I can SOOO imagine someone asking me this question in future, so I thought of a brilliant reply.

Lady: When do you think you can finish the task?
Programmmer: I am not sure.
Lady: What do you mean, 'you are not sure?'
Programmer: You don't understand programmers...
Lady: But I need DATES!
Me (with a big wide grin): I can be one.


--------Back to experiments---------

{error} Infinite Loop

First week of school has never been as slack and scary. Why slack?



Yes, 3 hours of class only, excluding the workshops on Saturday.

Why scary? By Saturday, I realized that I am in quite a bit of trouble. Prior to the workshop, I did not know what I do not know. Ignorance is bliss, at least temporarily. After the workshop, I realized there is SOOO much that I would need to know by the end of the course deadline for the first assignment that I shudder at the thought.

I am not too sure how many people feels the same way as I do. Maybe those who are not from computing will be able to sympathize with me. As one of the “Lone Rangers” of the course, the jargon and acronyms used in the lectures were especially intimidating: API, SSH, Cloud Computing, PHP, MySQL, UNIX, PuTTy, OMG, WTH, etc. (the last 2 are not computing acronyms =p ). I made a list of these terms and made a mental note to find out the meanings of these terms in Google and how they are inter-related. However, after spending several hours, I came to the conclusion that computing jargon is explained using jargon which means that my algorithm to understand these terms will end up in an infinite loop!

Monday, January 18, 2010

10,000 hours

The slide which made my heart race: 10,000 hours.

10,000 hrs = 417 days = 1.14 years (correct to 3 s.f.)

Apparently, quite a number of people read Outliers (by Malcolm Gladwell), as I heard a number of people muttering “Outliers” as Prof Ben flashed the slide. Back in December 2008, when I was reading this specific chapter of Outliers I recalled the conversation with my salsa coach.

Jw: I can remember equations and numbers very well, but memorizing a choreography is very different.
Coach: Just do it 1000 times.

He said it in such a casual way that no one would think that he is serious.

Jw (thought to myself): You must be f***ing kidding me.
Coach: Do the choreography 5 times non-stop which will take about 20 mins, take a 5 min break, then do it 5 times again. Do that for 3 hours.


At that point in time, I didn’t really believe that his method will work. It seems ridiculous, but I did it anyway. I was rather slow in memorizing choreography but after several such 3-hour-sessions, I perfected the choreography.

I guess anyone who has achieved a certain level of proficiency in any sport, game, performing art would be able to relate with my experience. However, 10,000 hours is not just about repetition. Running 1 hour a day for 10,000 days will undoubtedly increase the level of physical fitness in a person but the regime is unlikely to be sufficiently intense for one to attain a fitness level to compete internationally.

In my opinion, if there is a shortcut to success, it is clocking the 10,000 hours in the least number of days that makes people successful. When I first started salsa, I trained 5 hours a day for 5 whole months (including weekends and public holidays). No, I am not crazy, my coach is. After 5 months, I attained a standard that the average dancer will take at least 3 years to achieve if they were to do it once a week. I have to clarify that I have yet to clock anywhere near 10,000 hours dancing salsa and I do not consider myself to be “good” but rather “above average” when compared to other local dancers. The point that I am driving at is that learning curve is ALWAYS steep – Should you take a slow walk up OR sprint to overcome the steep learning curve asap?

Thursday, January 7, 2010

What I hope to learn from CS3216

Like many of my fellow classmates-to-be, I stumbled upon this course in the NUS mail. What intrigues me about this course is that, unlike most courses, one has to prove his/her worth to be allowed to take this module by writing a personal statement. This seems extremely controversial to me. I believe that none of my physics lecturers go to such great lengths to qualify a student before allowing him to read a module; it would seem irrational to do so, considering the fact that there are only about 25 students doing the honours’ programme.

The controversial nature of this course attracted me to find out more information about the course via the blogs by previous students and subsequently to attend the information session. But what really motivated me to apply for this course was the opportunity to create something original (Facebook app, Wave extension, etc), which I would not be able to if I did not take the course. Hence, in taking this module, I hope to learn some programming languages to a level of proficiency which will allow me to create simple web applications.

However, I believe this course was intended to go beyond teaching students. Rather this course offers students a tiny bit of guidance (with the workshops and seminars) and, more importantly, offers students a platform to explore and learn on their own. So instead of simply describing what I hope to learn from this course, I shall go beyond “what I hope to learn” to describe “what I hope to get” out of this course.

The filtering process of having every student write a personal statement before they are allowed to read this module implies that everyone in this course is good one or more of the following: programming, designing, selling or writing a bloody impressive personal statement. Personally, I regard this as an extremely rare opportunity to be immersed into a pool of highly capable experts with different expertise and collaborate on projects. Therefore, even if I do not learn anything (which I highly doubt) from this course, it would be an enriching experience for me, who am neither a programmer nor designer, to create web applications together with a team of passionate experts.