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.

Compatibility

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. :)

Sunday, September 18, 2011

Case Study 1

Usability vs Aesthetics:

Overall, I think the UI design is good. The graphics is attractive and the functionalities are abundant. However, there are some issues that fancy graphics and functinalities cannot solve.
1. Misleading titles: In the main page, the main title, i.e. "I need help with" is very noticable, which is good. But the subtitle below it is confusing. The "need quick help? add more details" is weird. If I need quick help, then why should I add more details? I guess the developers think that if users fill in more details, then it the problem is likely to be solved more quickly. But by intuition, I don't think in that way...
Solution: Maybe put all these options in a pop up dialog which can be shown by clicking a "more options" button.
2. Layout:
(1). Some important functionalities are not noticable. The "overview" page is very important since the initial aim of this app is HELP OTHERS. But the "overview" is confusing and the button is too small. When users use this app, they may not find where to help their friends.
Solution: Add a tab for this page. If possible, the developers can combine the "ask" page with "help" page; thus, when users log in, they can see friends' help as well as post their helps.
(2). In the main page, the space of help options (e.g. left side) is even smaller than the right side. Since the right side is also part of the options, I think it will be better to put the right side below the left side, which looks more consistent.
(3). In the main page, the text input boxes are poorly aligned (I'm not sure if this is the final design. I guess they should notice this and fix it).
(4). Font size issues. In the main page, the font size of "need quick help" and "Who do you want to ask?" are different, which looks inconsistent.
Solution: Carefully adjust font size.

Number of options and freedom:
It is good to see that the developers offer many options to let users customize their posts. But it important that the options are intuitive and accurate.
1. Misleading options: I don't understand what "estimated time" stands for? What is the difference between "deadline" and "estimated time"?
2. Contradictive: It seems that we can select both "post to all your friends" and "No, I want to pick & choose reliable people!". I am not sure if the screenshot is only a mock up. If not, then this is a serious issue.
3. Redundent: I think posting help via RSS and SMS through facebook app are quite weird. Twitter is also not necessary.
Solution: Remove them.
Cycle of interactions and incentives:

1. Some interactions are not fast. If I want to help a friend, I need to first click "overview", then click "help him", and click "help him" again!
Solution: I don't know what the "Need to know more? Ask below" and the comment box is for. Probably replace it with a commenting system where you can give your friend solution directly.
2. The Badges page is to attract users to use the app more. But I guess there won't be many users that click the tab and see how many badges they have.
Solution: Maybe just put the badges on the top left corner. Badge icons can be smaller but users will see their badges anytime.


Sunday, September 11, 2011

Thoughts after pitching session

I don't think I can be a good entreprehnour since I either don't have talent in marketing or I don't have too much interest in it.

I am also afraid that only being an excellent programmer or designer may be not paid that well...

But I want to be paid well so that I have money to do some cool projects. :)

In US, engineers may be able to do that. But in Singapore, I am not sure...

This is the hard truth and is also something I worry about.

Setting up a company is a good idea and is also what I want to do. But I am not willing to manage it. I want to do the dirty work, the technical stuff but not care about the financial report or marketing analysis, etc. This means that if I want to start a company, I need to find someone who shares the same idea and knows business. But it is hard to find. Moreover, though the managers may not know the technical details, they always earn more. We programmers are struggling to build what they want, but if not do well, they can simply fire us... how sad is that...

I like the working environments of google and pixar. It seems that the professionals in google and pixar have more freedom -- they can do whatever they want(of course within certain limitation). Though sometimes the things they do are currently just cool but useless, they won't be disturbed.

Yeah, that's probably what I want. A company with cool ideas, but don't care about whether they are useful or not currently. Maybe I join or start a company like this???

Tuesday, August 30, 2011

Thoughts on Evernote Peek

Summary:

After the presentation, what this application impressed me most is its cool operating method and its beautiful UI. It is probably these two features that help it reach the top in the store. Moreoever, the market potential should also be emphasized because it determines the application's life cycle.
1. Unique use of smart cover. The presentation team strongly emphasized on this point. From the ad video, this application can be used anywhere at anytime, and it copies the traditional way of learning, i.e. using cards into an electronic-based learning. Compared with other apps on education, this app is innovative and marks a new way of utilizing the peripherals and integrate them into the application.
2. Beautiful UI. Even without smart cover, this application is still fascinating because it has a very intuitive and beautiful UI, which can attract many users as well as ideal for kids. Moreover, honstly speaking, for an application that lacks functions, a beautiful UI will even let it surpass those who have more functions but are not that good-looking. This is particularly true for mobile platforms like iPad.
3. The developer can make money by setting up online store to let people download more resources to support the app itself. This idea is important. iOS is a good example. Initally Apple doesn't allow developers to develop applications for iPhone besides web applications. Later they start to provide SDKs and document support and it is proved to be a huge success. For this application, setting up a store is doable and if done well, the profit is prospective.
My thoughts:

Evernote peek is a quite cool application. Before it is released, I already thought developers might make use of the smart cover to do some cool stuff. This application is probably the first application that achieves this goal.

In terms of functions, this application is actually quite simple: it doesn't involve fascinating features that attract professionals. Instead, its unqiue operating methods will attract people who are still learning - mostly students. I don't think at first glance, people will treat it as a must-have app but they may be impressed that it is fun and creative. Since it is free, people won't bother trying it. Its innovative design and beautiful UI will definitelly receive a large group of positive reviews and I believe some people will love it too much to part with it.

On the other hand, an innovative design doesn't mean that it will increase productivity. This app is aimed at education (as it is in the education category), but I doubt whether people can learn more by using this app than by the traditinal way. An attractive UI may make someone feel pleased, but it may also potentially distract people from their work. I have similar experience that sometimes I just slide my fingers on the iPad to feel the smoothness but completely forget what I am going to do. Therefore, I'd rather put it into the entertainment category. :)

I also have some doubt about whether it will have a large market potential. One way to make money is that the developer makes it a paid app. But will many people still use it once they have to pay for it? Its most unique feature is only the smart cover. If people don't bother using smart covers, they may turn to use other similar apps. Another way, as was mentioned in the presentation, is connect it with other information sources or set up a store. But since its user group is not broad, it is hard to say if it will survive.

Just for joking, I guess the purpose of this app is purely for fun. Since its company is already very successful, the developers try building an innovative and beautiful app (and most important, free!) so as to attract users to buy their other products. I think this is also a cool way of advertising. :)


Sunday, August 28, 2011

HTML5 vs Flash & Thoughts on Cloud

I have no expereince in HTML5 (and even HTML4 a few weeks ago) and actually I knew nothing about javascipt before the first assignment was issued. But since I have some experince in ActionScript, I feel that it is similar to javascript to some extent (actually they follow the same standard). No wonder why Apple is relunctant to support Flash because they think HTML5 can throw Flash away. :)

But currently what annoys me is the debugging of javascript. I need to use add-ons and debug it in a browser, whereas for actionscript, it is much easier (at least for me) because the debugging is integrated in the IDE. Since I am only a newbie, I am not sure whether there is a more efficient way, but I hope there be a HTML5 IDE with javascript debugging supported. :)

From the guests' speech, I agree that HTML5 is really cool. It supports more tags; it has a canvas; it supports non-flash videos and audios. Basically, it seems that it can do whatever Flash is capable of. And it really gives me an impression that a web page is not a page anymore, it can be an application - same as those on our hard disk.

I like this idea: data is stored in the cloud and what we have is only a front-end. This can be quite convenient since we don't need to sychronize our devices.

But there are also some issues.

One issue is safety. Currently the cloud service is provided by some giant companies which own a huge number of servers. What if my data is lost? Who should be responsible for it? I guess for those service providers, they will have some terms like they are not responsible for data loss. If this really happens, then WTF.

Another issue is privacy. The customer really don't know the back-end of the service and they even don't know if their privacy is violated (and continue to use the service).

As we can see, more things need to be negoiated and there is a long way to go. Currently I doubt if I am willing to put my important files into the cloud...

Sunday, August 21, 2011

Some thoughts on software engineering

Software engineering is more focused on team work rather than solo coding. Of course a person can develop a software himself applying the software engineering rules, but in most cases, we need to work with other people.

Working with other people improves the productivity (in an ideal situation) but also brings many issues. One thing we concern about is how to divide the work. If we want everyone to write a piece of code that is able to be integrated and works, we need to plan the tasks well. Therefore we need a leader (or an architecturer) to make a good model of the software. How good the model is? Well, I think it depends on how easy it is to distribute the work to programmers and whether each programmer can test his code without knowing others' code. This can be concluded as "low coupling", which is important for managing complexity. Another issue is about communication. Team members should know what each other is doing. This can minimize misunderstanding so there is no repeated work and the whole progress can be evaluated. On the other hand, the communication is also in the code. Good code quality and sufficient comments may help other members know how your code works therefore there is less chance to call your code wrongly and let the whole system crash.

The software development on evoloving platform is different from the traditinal one, i.e. the waterfall model. Developing applications for platforms like Facebook is more like a flow of the following processes. First we need to have an idea. The idea may be initially very simple but can evolve into some complex ones later, which we call features. The first two processes are very important since it almost determines the rest length of the development cycle. Then it's time to implement it, test it and finally release it. Deploying the application is not the end because each iteration is relatively quick and simple. The development is driven by user requirements. After getting the feedback for the first interation, we may plan new features or modify existing features and restart the cycle again (if the application is not dying).

Thursday, August 11, 2011

What I hope to learn in CS3216

I applied for CS3216 because I believe that people who take this course are all determined to do something and do it well. Thus it provides me with a good chance to work with talented and hard working people and finally we will have something amazing to show. :)

At first I was a bit hesitated because I don't know a lot about web applications. But then I think: web applications are also applications; they are just web-based or related to web. Therefore I don't need to mind much about the platforms and tools I use. What is important is the idea and the process to realize it.

So in short, there are mainly two things I want to learn. The first is the technical skills of developing web applications (and probably can apply to other kinds of applications). The second one, which is what I am concerned about more, is the skill to work with other people to design, to implement, to integrate and to debug. I want to have some experience of the process of team software development and this course provides me with a damn good opportunity to get all what I want to learn. :)