Friday 21 September 2012

Week of dilemma

Week 6 of CS3216, no coding, no meeting up, no messages, but a week of dilemma.

I even wanted to name our group 'silence' on Facebook. Such a big tension between us, some want to extend current project to final, some are leaving for their assignment 1 group members and some are wanted by many others.

But what can I do as a learner for all the web development skills? The only option might be to join a group with strong developers and learn from them, contributing a bit where applicable. It seems impossible and impractical to pitch my own idea and gather people.

But that's what I did to retain my current great teammates. To let them stay, I decided to pitch the idea. The negative feedback was actually good for me. My group was somehow reunited as they would demonstrate to the audience that things might not be different from their critical judgement. The counter-effect.

And it's also very encouraging that I got a new fantastic designer, who joined my group after the pitch, to replace the member who is leaving for his assignment 1 group.


The whole week 6 was used to resolve grouping issues. Either you compromise your idea, or you compromise your dear group members. Neither is what I wanted, but I have to choose one.

I love my assignment 1 group, where three ideas arose up for the final, and all pitched. We were split into three incomplete groups, struggling for new members, and struggling for the team bonding.

You are nicest people I met in various NUS projects.

Saturday 8 September 2012

Coding High and Insomnia---Reflection on Assignment 1

Assignment 1 has ended. And I was totally overwhelmed by the coding high which spanned for the whole last week. Had just 3-4 hours' sleep each day. And the result is I got insomnia.

My friday night was spent on coding again, till 7am today. Then I took a nap and a shower, headed for my concert practice afterwards. The assignment was handed in, hence there isn't much point in modifying it here and there. But I just couldn't stop doing that. I modified the CSS a little bit, arranged the layout a bit to maintain a really good view and chased my friends to come and play with our App.

Nonetheless, it's time to end this coding high and starting brainstorming for the next assignment. But before that, it's very important and necessary to reflect on the first assignment, to generalize the lessons learnt and some coding tricks used.

Lessons to be learnt

1. UML diagrams

We didn't draw h UML diagrams properly, except for a database scheme to remind of us the classes and functions and we have. Instead we just started coding after brainstorm and layout design. Class diagram to show the relations between the real objects, use case diagram to show how to use the App and state diagram to deal with state-dependent behavior...all these steps were skipped probably due to the tight schedule. However it turned out later on that we messed up  a bit. Sometimes certain functions we introduced were even not logical and sometimes we ourselves didn't know how to proceed with the next step. We reverted to a previous version a few times to comb our thoughts and clear contradictory parts.
I found the UML diagrams quite useless when I first learnt them. However, Assginment 1 really warned me how important they are, especially when working within a group and communiction comes in the first place.

2. Scheduling

We had only two coding people within our team and one of them is me. Hence we thought it's going to be easy since communication between two people is very effective and things can be done easily and we don't need to worry about the documentation. However, we still struggled a lot during the last days because I am new to PHP, JavaScript and HTML, and the abovementioned reasons. It's important to set milestones and schedule the iterations well, if we want to build up a project well programmed and tested.

Learning outcome

1. Coding languages for web development

Not to be arrogant, I couldn't believe myself that I started learning PHP, JavaScript and HTML and then completed a web application project within 3 weeks. Yet it's true, though the understanding of the languages is quite shallow and scrap as the learning is largely done via Google.

1) PHP and HTML

HTML provides elements (div, span, h, p, etc.) to work as a display board on a webpage and PHP , a server side scripting language, manipulates variables and objects to fill up those elements. Those variables and objects are used to represent the stuff (story, post, user profile picture, etc.)  we want to put on the webpage. It's quite fun to learn both of them. The coding procedures are quite standard, not many ricks to be presented.

  • Pass value: PHP doesn't work like C/C++ or java, where a value can be passed around. To facilitate this, we used a session call in PHP. The code is like session_start();$_SESSION['universal_user_id"]=$user_id; Then this 'universal_user_id' can be accessed by all php files with a similar session call, enless the session was ended.

2) JavaScript

We landed on JQuery library eventually for its very useful funtions. The most interesting thing about it is the AJAS function call, which can also be implemented by JavaScript solely. We used it a lot to minimize page reloading, so as to generate a kind of "real application" feel. Eventually we managed to get rid of page reloadin entirely from our App, as long as the user logged in and reached the main page.
  • Pass value from JavaScript to PHP for data sending, processing and receiving without page reloading---use AJAX function to achieve this asynchronously.
  • JQuery has a lot of functions to manipulate and animate HTML elements, like show(), hide() fadeIn() etc.  
2. Project management and team building

We had a wonderful team, with Kian Zhong being the chief coder, Peggy and uncle Jim working on documentation and other general matters. KZ and I concentrated on coding for the last few days and received McDonald's and PizzaHut delivery during deep night from Peggy and Jim. I enjoyed working within this team, where all passion and hardwork can be facilitated.

Yet we encountered a few problems with project management, like uneven scheduling and waste of time on not-so-important stuff.

New plans

Learn MySQL and CSS.

Tuesday 4 September 2012

Application critique-DrawSomething


DrawSomething



I suppose anyone who has a touch screen tablet device with iOS or Android system would have installed this simple but hilarious mobile game, which attracted 1million users in 9 days after its release. Facebook achieved that in 9 months. For the benefit of people who are immune to mobile app attractions, let me give a short introduction on this app before starting the review.

This little amazingly addictive guess-my-sketch game app by a developer called OMGPop has a very clean and neat interface, which is considered as a model of minimalist efficiency. The procedure is also simple: you choose one of three words ranked by difficulty levels, draw a picture of it and send it to a known friend or a random player to let them guess the word using a subset of the alphabetic letters as a hint. The cool part doesn’t stop there. The other partner can see the animation of you drawing the picture with pauses omitted of course. You two can switch the roles and continue the game indefinitely. Correct guesses are awarded with coins which can be used to but styluses or bombs. It also supports multiple-user interaction and cross-platform (iOS & Android) communication can be done seamlessly. 

 
As lots of online reviews say, DrawSomething is simple but perfect as it is. It is stable on the platforms and appeals to users’ interest. No matter how mobile games are destined to be short-lived, for now it’s no doubt a big success, from the perspective of user experience and feedback. Hence I would like to concentrate more on the commercial potential and future development part, in line with a summary of the most significant 3 points I learnt from Group 7’s talk.

The following improvements proposed by Group 7 really attracted my attention.

·         Add in themes

The current canvas of DrawSomething is just a plain page. Their talk cited DoodleJump as an example to illustrate how themes can be implanted to improve user experience. Apart from that, great embedded marketing potential be found on that plain canvas. Product placements can be put on the background, with a maximum level of not distracting the users.  Some people may criticize that a good application should never put revenue in the first place. But ironically, good apps need lots of money to develop.

 

·         Vocabulary for sponsors

As mentioned above, a user needs to select a word to draw before starting the game. That’s another portal where revenue potential comes in. The words can be set to keywords related to the sponsors like their brand name or product name. For example, I can draw a Big Mac for my friends to guess MacDonald’s. (Not embedded ads, just examples for academic purpose^^) In such a way, the developer of DrawSomething can retain its revenue and make money for future great ideas.

 

·         Multiple language support

Currently DrawSomething found its high in the English-speaking world as the app itself is in English and the words selected for drawing are also in English. It leaps a big step forward by implementing pictures as a method for people to communicate and have fun, which surpasses the old Words with Friends , which completely blocked non-English speakers. However, DrawSomething can still expand its global market by supporting other languages, which may trigger another upsurge.

 

My original thoughts focus more on how this app idea was generated and how it might change people’s life.

·         Origin of the app idea

This app idea is simple but powerful. It dates back to thousands of years ago when human beings drew pictures on rocks and turtle shells for simple communications. As the idea of symbology grew in people’s mind, they invented languages for the ease of communication. But nowadays people are tired of thousands of characters they encounter everyday as words consume more brain energy to digest than pictures. So it’s time to return back to pictures which are able to refresh people’s mind and inspire their creativity, and generate fun in the meantime to ease the bustling life. Since nearly everyone stays longer with a smartphone than with his/her wife/husband, the best platform to implement this idea is a mobile app that allows people to draw and share. A thousand thanks to the advanced graphics technology and social networks.

 

·         Influences on people

As a small mobile game, it might face the same destiny as other gaming phenomena have shown. A quick decline after a tremendous upsurge. It might not be able to change people’s life like what Microsoft Office has done, but it inspires people to explore a new perspective of their life. A lot of great but short-lived apps are also like this. But there is nothing to regret. Great news is that new ideas are blooming all the time. That is why we are all intrigued by CS3216!

So, why are you still waiting? Grab your phone, draw a picture and send it to your friend for a guess, perhaps a decent drawing of our big boss. But make sure CS3216 assignments are done for him!
                                                                                                     04/09/2012   CS3216 App Seminar

Saturday 1 September 2012

Bustling CS3216 life

It's been more than two weeks since we started working on the Facebook application. We got a bit stuck on the layout design and couldn't proceed with implementing other functions and prototype testing. I feel a bit afraid that we'll be screwed up for the last days before submission. But I have faith in it. As engineers' philosophy, our productivity shoots up exponentially right before the deadline.

I still remember last Sunday, I spent a whole night reading on and testing Ajax tutorial examples. Ajax, abbreviation for Asynchronous JavaScript and XML, is not a new programming language, but a technique to create fast and dynamic web pages. In short, it's based on client-side and allows users to update certain parts of the webpage with reloading it, which is typically done for webpages written purely with PHP and HTML. It allows web pages to be updated asynchronously with the server behind the scenes. And this is based on a so-called XMLHttpRequest Object that is used to exchange data with a server. The object is supported by most of the modern internet browsers and there are also ways to solve the problem with old browsers like IE5/6 which do not support the object.

Though I still don't fully understand the GET/POST request type and open()/send() functions of the object, and I have no idea what is going on inside the object, by following the examples, I successfully transferred the invitation data of our app into the MySQL database dynamically from the app interface. And this is widely applicable in situations where users interact with the webpages by loading and submitting data, with minimum number of times to reload the page.

Later within this week, I began learning JQuery library to add some animation effects to our app. The learning is yet over and probably we need one more Sunday to push our app a big step forward, which is half an hour away, tomorrow.

Night.