Sunday, November 13, 2011

CS3216, how cool is that!

CS3216 has ended, and with a happy ending :) Recalling the last three months, this module gives me a really cool experience, which I would like to share now.

CS3216 provides me with a rare chance to build three applications in one module. This is really crazy for someone like me because I never touched web programming before. And when I started learning it, I could not avoid making mistakes and it was quite time-consuming and painful to find a good way of writing the code. Javascript, HTML5, php, Objective-C... I cannot say that I have mastered them, but at least I’ve some experience on them and it will cost much less time when I need to use these tools in the future. How cool is that!

CS3216 is not much like knowledge-based but more problem-based. The whole module is not about learning the new web technologies and practicing them but solving problems based on these technologies. Finding a problem is not always that easy because it may have already been solved and there are many strong competitors; solving a problem is harder since we may have limitations in terms of time, money and technology and we may even cannot find clients that are willing to cooperate with us. But getting through all this is really beneficial since it gives me a nutshell how the real world works, and how important it is to solve problems and create values. How cool is that!

I made some really hardworking, highly driven and talented friends in CS3216. Working with them is such a pleasure and everyone has his/her unique skill. There were designers, backend programmers, front-end programmers and business people. We need all these kinds of people to get things done, and if we don’t have, we have to play their roles, which is not as easy but from which I can learn a lot. We didn’t just stay up together before the deadline, we stayed up almost EVERYDAY. How cool is that!

CS3216 let me do the final crazy thing in the final week. If I include the iOS version, I have totally written four applications. I am already a workaholic, and taking this module makes me believe that sleep is indeed optional and everything is indeed doable. How cool is that!

We have people from different countries in this module. We are not separated because we have common goals: solving problems to make a better world. How cool is that!

The only pity is that: we don’t have this module anymore :(

Saturday, November 12, 2011

iOS nightmare

The last week should be relaxing since we’ve done our application and our client was satisfied. The only thing to do was let the real users try and get feedback. But as my previous blog said, was there something cool to do? Of course!

Currently the web version works well. But we notice that the speed on mobile devices is not that fast because of the limitation of processing power. We’ve tried some ways to improve the performance but it is still not as smooth as native applications. Then we’ve got an idea: why not develop a native version?

This idea was a bit crazy since it was already Thursday and there were only six days before the poster session. And we haven’t started writing the report and designing the poster yet! If we screwed things up, the result would be terrible.

As Prof. Ben said: sleep is optional, everything is doable. We divide our team into two groups. One group for the poster stuff and the other two people develop the native iOS application. Therefore Ziwei and me started building the application from scratch on Thursday night.

Ziwei didn’t have any iOS development experience and I just played with the iOS SDK for a few times. Therefore it is hard to evaluate the time of development and we were also worried if we could finish it. We finally decided that Ziwei did the navigation controller and I designed and coded the views.

Though our application looked simple, there are more than ten views, which was a lot of work. Thanks to the Cocoa Touch framework, there were plenty of tools that we could use to improve efficiency. I finished almost all views on Sunday, so did Ziwei’s navigation controller. Then we combined the views, the navigation controller and the network and storage part together - it was Monday already.

Finally it was the time of endless debugging. We’ve encountered a lot of weird issues but we managed to make it completely usable on Tuesday. We survived!

Tuesday, November 1, 2011

Regarding the progress report presentation

I really enjoyed today’s progress report and it is good to see every group has done something different and cool, which rarely happens in other modules. :)

Overall I found it hard to rank the applications because I saw every group had put in a lot of effort and I was really reluctant to put any group underneath. Finally, the choice became somewhat random because it was REALLY hard to make a decision. :P

It seems that CS3216 is coming to the end. And since most of the work has been done, the rest is polishing and preparing for the final poster presentation. But is there any space to do something challenging and cool? Of course! As long as I want to turn crazy again and forget all of my final exams!

I really think doing a native application is better since currently there are a lot of issues in the mobile framework. If time is enough, it will be a good choice to port our application to different platforms natively. I think the user experience can be improved quite a lot. But on the other hand, it is worth trying new technology despite its various issues. HTML5 is prospective and it is time to grab the opportunity and prepare ourselves for future applications.

By the way, though idea is quite crucial in this module, the thing that attracts me most is still the final product. Sometimes despite the fact that the idea is not that original, it is still very enjoyable to see things nicely done. Generally, most of the groups have achieved this goal.

Things I learnt from the entrepreneurs

The talk of the entrepreneurs is very inspiring despite the fact that there is not much possibility that I will become an entrepreneur (at least I won’t do the business stuff myself...).

From their talk, at least I’ve learnt three things that not only apply for entrepreneurs.

One is motivation. Entrepreneurs are all highly motivated people and they all know what they want to do. Before they succeeded, they spent most of their time trying to clear the obstacles and survive. After they have settled down and let the company operate normally, they still think hard about how to make the company grow large and how to compete with others. Motivation is a force to push themselves to the limit. Whatever things a person that want to do and do well, he/she needs such a force and keep the force with them.

The second is persistence. Many entrepreneurs won’t become successful at first time and they may encounter bankruptcy or other serious issues. But sadly, they need to save themselves and it is really up to themselves whether they want to continue or not. Therefore persistence is really important. Moreover, persistence also applies for non-entrepreneurs. To keep the quality of the work good, we need to constantly put a lot of effort; to keep a good habit, we need to repeat it frequently. Otherwise, we cannot finish things strong.

The third is caring about the world. Entrepreneurs are those people that solve others’ problems. Before they find the problem, they need to know what is happening in the world and who needs help. For non-entrepreneurs, maybe they cannot set up a company and solve a big problem, but they are still able to care about others and help them — for free. This is enjoyable and also important because we have the same goal — to make the world better! :)

Sunday, October 23, 2011

Final project progress

Our final project is running smoothly, mostly because the target is clear and the teammates are hardworking.

We've met our clients this Monday and listened to their suggestions and requirements. Currently we've done most of what they want. But it is essential for us to get feedback from them to improve our application, which is what we are about to do.

Though the functionality of our application is fairly simple, there are still many things to consider and we have not settled all of them. Things like how to provide the best user experience can only be told when it is used by real users. In our case, the user experience may affect the UI massively and even lead to changes to the data structure (depending on what kind of information to retrieve and how to display them). We have also been warned that the requirements from the client may change from time to time, which sometimes causes misunderstanding and frustration. So it is urgent to get feedback in case of a lot of redesign work.

Another issue is about the framework. Mobile web application framework is a new concept and the related products are not that robust and fast. From our experience, the sencha touch framework is a little slow on real devices due to the performance issue of mobile phones. Anyway, it is acceptable, but not as good as native applications.

In short, thing are going well. Coding, debugging, photoshoping, that is the life of the rest of semester! :)

Sunday, October 16, 2011

Final Project

Finally I can tell something about our final project.

Well, it turns out that it is really painful to decide what to do. We cannot do games since one teammate is unwilling to do that; and our first idea is almost killed by evil Prof >.<. There is a glimmer of hope left in our first idea and we eargly went out to seek our clients. However, they seemed not that interested. Damn!

Things started to go better when one of the CVWO teams told us that one of the organisations lacks some automatic mechanism to speed up the attendence taking procedure. Traditionally the volunteers have to mark the attendence on a sheet and hand it to the staff in charge. Then the staff has to go through hundreds of sheets and manually key in the attendence to the computer. Obviously this is a tedious work and it usually takes one or two weeks, which is highly inefficient.

After thinking about the problem, it turns out that building a mobile application to help take attendence is a good solution. A volunteer only needs a modern smart phone. He/she can mark the attendence on the phone and upload the data via WiFi or 3G. The data is automatically stored into database so the staff doesn't need to do the tedius work at all.

So basically, we are going to build a mobile web application to achieve this goal. Firstly, a volunteer has to log in using his account. After that, he can view all his relevant befriendees' names, etc. He only needs to check the names by tapping on the screen and finally submit to the server.

Well this turns out to be not that hard. But probably we will add more functionalities according to their requirements.

Hope things go well in the next few weeks!

Monday, September 26, 2011

Second assignment is done...

From the development of the second assignment, I've learnt at least four things.

Never completely trust the framework.

The framework we choose is sencha touch, which has plenty of nice features and it seems that almost everything can be done via the interfaces it provides. We naively trust it first but later tons of weird bugs pissed us off. It was quite painful to implement the same features as it provides just because it has bugs. And the process of finding where is broken was really time-consuming. Next time if we need to use a framework which is in its early version, we must prepare ourselves for alternative choices or DIY.

Caching issue.

In Chrome, most of the time caching is done before the web page is shown, whereas in Safari, it will display whatever it has cached first. Since we have a lot of files to cache, even when you are able to use the application, the caching is still not done. If you add it to the home screen and turn off the WiFi, it will become unusable. Therefore we finally added a caching indicator to let users know that the application is being cached and they should not go offline currently.

Reduce the amount of time loading the app.

Even we ourselves feel annoyed when the browser needs to spend 1min+ caching the applicatioin. For the users, they seldom want to wait for 1 min to make the application compleletly usable. Therefore we finally packed most of the js and css source files, cutting down the number of files from 78 to 18 to make the loading faster.


Even if HTML5 is supported by most of the modern browsers, there are many issues on compatibility. The framework we use is based on WebKit, which means that it is not usable in IE, Firefox and Opera. To be more specific, it targets to mobile devices running WebKit such as iOS and Android devices, which significantly reduces its range of usage. Moreover, layout issue is very nasty. Things may get messed up if I run the web app designed for iPad on an iPhone. Of course I can detect the device and choose the correct layout, but that is a large amount of work since I need to do two different layouts for tablets and phones. Finally, even I can run the mobile app in a desktop browser, the UI is hard to use because it is for touch devices but not for mouse-based PCs. Currently solving these kinds of problems is very time-consuming and in some cases not doable. I hope there will be some tools that can deal with it automatically.

Overall, I find this second assignment quite fun. And to be honest, the development time is much less than doing a native application with the same functionalities. :)