Monday, November 14, 2011

Last post for last CS316


Life is short. All of a sudden, another semester has come to the end and so is this awesome module. Everything is still so fresh and vivid as if they just happened yesterday.

At the beginning of this course, I barely expected to gain some experience of working in a team. However, after the three seemingly impossible projects, I learned far more than what I expected.

First of all, I picked up a lot of technical skills such as PHP, JS, SQL, JS, HTML5, Facebook APIs and so on. But this is nothing to be proud of. What’s really valuable is the experience to study most of the knowledge outside lectures and read a lot of documentation. The main difficulty about self-learning is usually not that we cannot find an answer; it is that there are just too many answers and a lot of them are inappropriate and redundant. As a result, I had to distinguish those that are more likely to work from a mass of search results. I have to say self-learning is one of the most practical skills I obtain from this module.

Another important lesson I had is difference between ideas and problems. As a computer science student, I know nothing about business. To make things worse, business is actually the last thing in the world I’ll be interested in. I’d like doing something cool and challenging but maybe impractical rather than something boring but truly solve problems. However, life is different and good ideas usually are not going to success, as Prof. Ben said. This is why our initial proposal for the final project was rejected. We did some research after the proposal meeting. We talked to some business runners and tried to sell our idea and only received failure. This was when we woke up from our dreams and realized the differences. Although I still have no interest in business, now I look at ideas in a different way: a good idea should solve some real problems and thus have its real users, not solving problems we imagine.

Of course, I had a lot of precious experience working as a team member. At first, I have no idea what it is like to work with other persons and how to make something that has real users. This is a new continent to me. The happiness of gaining teamwork experience is nothing less than that of Columbus when he discovered America.

I also had some projects for other modules but they were not as fun as CS3216 projects. I think one of the reasons is in CS3216, we have more freedom to choose the topic and thus everyone was enthusiastic. Another reason is we didn’t have much time for every CS3216 project. Stress sometimes is very helpful. It Keeps me concentrate and productive and doubles the happiness and satisfaction when I complete a task, no matter how trivial it is.

However, it is really sad and a pity that we are the last batch of CS3216. This module is awesome and is definitely one of the ironic modules of NUS. We probably won’t find it anywhere else across the world.

Wednesday, November 9, 2011

Happy “suicide”


Oh yes, we finally finished our iPhone version before poster session. Happy work overnight with Xiangyun, although it was like suicide as we both only slept no more than 5 hours per day for the past week.

This is not an easy task for us. Among four of us, only two have a Mac and thus only two of us can work on the iPhone app. Meanwhile, we have to make a attractive poster and write a high-quality report. At first, Mingzhe was quite against iPhone app because of the time limitation. He wanted all of us to focus on the coming poster session. However, after some argument, we decided that two of us work on the iPhone version and the other design the poster and write a report.

To be honest, I was not sure if we could build an iPhone app in six days. But Xiangyun said it was quite simple and “Yes, we can”. Well, he is crazy and genius. I guess he can even do it all by himself. But for me, I knew nothing about objective-C, not to talk about Cocoa and how to develop an iOS app. I had to start from scratch (again, like what I did for the Facebook project). However, the good news is, I found objective-C is somehow similar to Scheme. The idea of message passing is nothing new. This actually saved me a lot of time. I rushed through two books introducing object-C in one day and picked up some random stuff about Cocoa and MVC. Fortunately, I got the basic idea of MVC when we previously built the web app. As a result, I spent around 2 days to learn some basic knowledge about hacking an iOS app.

However, as Prof. Ben said, life is complicated. While I thought I was all prepared, I completely lost when we actually started. I was a rookie, so Xiangyun did not give me too much work: I only need to work out the navigation controller, which is going to be the framework of our app. But even for such a “simple” task, I didn’t know where I should start. I searched through books and looked for ideas on the Internet. Well, I did find solutions but the problem is, there are way too many suggestions and I could not tell which is better. This is one of the lessons I learned from CS3216. During the entire module, I relied on Google heavily and realized that I can always find a lot of seemingly brilliant answers and the problem is to filter out those useless and incorrect ones. I cannot afford to try every one of them; I must be able to distinguish the right and elegant ones. I think nowadays, information is not hard to get. It is filtering out the useful information that is difficult.

Well, the truth is I actually tried almost every solution and all of them didn’t work quite well. Later with Xiangyun’s kind “hint”, I finally worked out the navigation controller for our app, using the idea of “delegate” (it’s mentioned in one of the books he gave me, but I didn’t read that book).

Another thing I want to mention is I applied what I learned from CS2020 to solve the travelling problem. The navigation controller class by default uses a stack to keep track of all the views that we have travelled (or seen). So every time we tap the back button, it simply pops one view from the top of the stack and every time we go to the next view, it pushes the new view to the stack. But the constraint here is, we cannot push the same view to the stack twice. This won’t have problem if all the views are organized in a “line”. But things become complicated when the organization of views is actually a graph. For our case, I applied BFS to solve the problem, as I don’t want to hard code how we should travel.

I also realized that I am the kind of person who learned faster through real examples, rather than reading blocks of text. When I read, I only briefly go through the text and I spend more time staring at the sample code and doing some random trials. That’s one of the reason I prefer Google API documents to the Facebook’s. Google provides more examples, rather than talking abstractly. I guess this is probably due to my poor reading ability. I just cannot understand without snaps of code.

For the past week, I was highly stressed. I spent days and nights learning and coding. Everyday I had a battle with time and energy. However, I found it really fun as I learned a lot and made use of every second. The most important thing is, I was doing what I wanted to do and I was working with someone that is great, and that made me feel that I was great, too. :-P

(By the way, this is not the last blog Prof. Ben asked for.)

Friday, October 21, 2011

Get to know what the user really want


We met with CVWO staffs this Monday and I felt they were pleased with what we had done well so far.

We worked out a prototype and showed them during the meeting. This prototype was somewhat near our final product, except it couldn’t connect to the server by then.

We asked them about our concerns, like in what order they want to list the related persons. They also told us what else features they wanted to have in this mobile application.

My personal feeling was that they wanted a lot. They wanted to sort by different information, such as block, unit and floor. In addition, they thought the search functionality was necessary. Apart from that, according to them, the app should allow the user to see more information about the persons. However, the problem is that, the mobile screen is so small that it is just impossible to throw everything on one screen.

As a result, we had to change our UI design completely. We tried to display as much essential information as possible and providing useful functionalities as well.

Another issue is the off-line mode. Our team cut off this feature before the meeting, because Xiangyun said the HTML5 local storage was not stable. He had encountered some strange problem during his previous project. Another reason is usually 3G is now so popular and covers the whole Singapore. It won’t be a big problem for the Internet. But according to the CVWO staffs, the volunteers (who are going to be our app users) may not submit a “checkcall” immediately after visiting a senior. The more likely user mode is they submit “checkcalls” after one or two days’ visit and they may forget the seniors’ names sometime. Consequently, it would be helpful if the app can remember their last unsent “checkcall”.

Fortunately, we met them early and now we had finished coding the off-line mode.

They also raised the demand of native apps. Actually, it seemed they knew little about mobile apps. We spent some time explaining the difference between a mobile app and an iPhone app.

One problem I realized after the meeting is that our app was initially designed for volunteers (befrienders) only. However, somehow the CVWO staffs took it as a general app, which could be used by staffs, too. They requested to allow staffs to approve checkcalls submitted by volunteers, which was a bit difficult to integrate into our app. To be honest, what a staff could do is far different from that of a volunteer.

Personally, I feel their workflows and the organization of staffs are far too messy and complicated. I spent a hard time trying to understand how they work, and I am still a bit confused now.

Anyway, I think it is good to meet with the real users. We know the demands better and have a clearer target now. Besides, we will meet with them again some time later for some final suggestion and users feedback.

Sunday, October 9, 2011

Our Unfortunate Final Project


After the proposal consultation, I realized the difference between an engineer and a businessman.

The four of us are all computer science students and know little about market and business, especially we three guys. I know marketing is important and we need to have real users using our app. However, to some extent, all of us agreed that if our app is shining and awesome, the users will automatically be there. However, according to our dear prof., life is not like that. From my understanding, good ideas often fails not because they are not good enough or the implementation is not good, but because they don’t solve some real problem and thus fail to attract enough users.

As a result, we decided to change to build online membership system and conduct a marketing research before we get our hand dirty, after a sad, hard and terrible group meeting. Nevertheless, misfortunates never come singly. We went to talk to some business runners and it was completely a failure. Few of them showed interest in our project, not to say using our app. The major reason, from my point of view, is that most small businesses are satisfied with their current situations and not willing to spend money and time on new technology, even it is beneficial.

From the research, we realized a significant hardware issue. Most of the cashiers use some highly specialized machines, which they are even not able to open a browser. What’s more, some of them cannot access the Internet. As a result, these business runners will have to invest some money to “upgrade” their existing hardware in order to use our app. We did think of ways like using some device like iPad or customers’ mobile phones as a terminal. But all of them cost the business runners money and thus are not suitable for small businesses.

However, the good news is that we finally settled our final project. The CVWO came and pitched and we decided to work with them (many thanks to Prof. Ben). We are going to build a mobile app, which will help volunteers check attendance. We will also build an iOS version if we have enough time.

Anyway, challenges are there, waiting for us. I will need to start from scratch again, since we are using Sencha and I have no idea what it is (I did backend most of the time for the previous assignments).

I’m sure I can learn a lot again this time. At least, I have had a lesson about marketing and entrepreneurs (although I’m not interested in that area).