Sunday, April 18, 2010

This is not the end, just the beginning

Time here sure flies very fast. I can remember very well the day I applied for CS3216 or the first lecture of this module. Now it's near the end already. The experience is very real, very wonderful, and very meaningful as well. Prof's last question in this blog is what I have learnt in CS3216. Interestingly (or is it on purpose), the first blog was also on the similar topic. Somehow, I partly feel that it's like a cycle. You predict what you will learn, fight and learn with your best, then review what you learnt, and then the same cycle (maybe different situation) begins. Not very, but just a feeling....
What have I learnt in CS3216? I don't know exactly, but the followings are the ones bearing deep impression in my mind.
Idea is cheap, and execution matters. If I'm not wrong, prof always mentioned that idea is cheap, about which I agree but not totally agree. In my opinion, idea is still expensive to a certain extent. Original ideas still have a very good stand in this world. But prof is also right. Generally speaking, ideas can be considered to be cheap ‘coz it's very hard to come up with a real original and unique idea, which is but to say, regardless of how wonderful your idea is, there's always a high chance that there're some people in this world who also come up or already have come up with the same idea. Speaking of this, it is naturally that one of the factors that differentiate people with the same idea, is the execution. Therefore, just partly, execution matters. The other reason why execution matters is that idea is just idea, it is not real, and without execution, it will just be forever theory only, which might be said to be... nothing (not all cases). Another reason I feel that execution matters is that practice and theory might be very different in many cases, as time is always an essence, and normally people want to achieve the best in the shortest amount of time. The last reason is that idea is just on paper, no matter how good you are, it's very likely that there're many problems out there you don't expect, and regretfully, most of them do matter in life. Regarding to our final project, the idea in the beginning was quite good and impressive. But when it came to make that idea real, many problems arose. And in the end, the idea about skill tree was dropped ‘coz we didn't have enough time, the idea about the item is also not available yet, also because of time, .... and many other problems as well. Not a quite good example though. In conclusion, idea is just theory, execution is one important things to make idea reality, and so, it does matter, even a slight difference in execution may result in a great difference in the outcome. In other words about this, all ideas can be considered to be the same, either good or bad, without execution.

Programming. Yup. I can feel clearly that I have learnt quite a lot about programming in this module. I learnt quite a number of programming language, html,js,php,as,... Also, I learnt lots of stuff about web programming, about database, about security and some others as well. Prof said that it's not possible to miraculously become an expert after some hours, but I was equipped with the basic about those problems so that I can avoid very bad code and have a foundation or interest to go deeper to the field. Regarding to programming itself, the amount of coding in this class is significantly more than the code I have done in the rest of my life up to now (with regards to CS1101S and CS1102S). Actually, many parts of my code are not good, if not, crap, but I feel that many other parts are quite good. So let's be happy with what I've learnt about coding for a while. Hmm, I think that programming is quite not the very heart of cs3216, so let this paragraph to be short, i.e. I mean to end it here.

The next wonderful experience I've gone through in CS3216 is teamwork. Those are the first time I worked in a team with other people, and greatly, all of them are very good. Facebook project, seminar project, Google Wave final project, all of the people there are very good in many aspects, and it's really great to be able to work with them. (Actually this not quite about learning).

The next original and unique stuff I learnt in CS3216 is to learn 'how to learn'. I still remember prof's idea in the first lecture: "If you give a man a fish, you feed him for a day. If you teach a man how to fish, then you feed him for a life. But in this modern world, is there any fish out there (which is but to say, there's no guarantee that what people teach students at school is applicable later on). If you give a man a rod and he figures out how to fish, then even if the world changes, he will also be able to absorb, learn new techniques and adapt to the new world." It's not exactly word by word, but generally it is that. It was very impressive the first time I saw this quote. It was more than just right and true. It was wonderful. And seriously, I think prof did quite well in teaching this idea to CS3216 students. I and we, CS3216 students, seriously learn many things on our own and adapt those to the real world.

Followings are some random stuff from prof and some wonderful entrepreneur people:
Blame yourself, don't blame any other.
This can be one of the things I will remember for the rest of my life. Before CS3216, I always thought that I blamed myself for any mistake, not any other, ‘coz if I want to better, I must face my mistake and fix it, running away by blame any other will solve nothing. In the end, it turned out that I was quite right about the latter, but I was wrong about the first. I was still finding excuse for myself when making mistake or doing something not quite good. I still remember very clearly the time when prof quarrelled with me when I let player use keyboard to choose difficulty of the game rather than using mouse with a click (actually I still haven't changed my mind over the reason of that was I tested it on my computer when coding and it's more intuitive to use keyboard rather than use mouse, cos my hand was generally on the keyboard. But seriously, when prof pointed it out, I really realized that it was my mistake to not test on the web at that time, when it's more intuitively to use a click than keyboard, my bad :( ). It really, really made a serious impression on my mind. Prof was really serious, and I became serious as well. I realized that many times when I failed or did not quite good, I instinctively found some 'lame' excuses rather than looking at my very self, and then, I couldn't become better, ‘coz eventually, I learnt nothing. Now, I really feel that I'm ready to blame myself in any situation rather than to finding any other 'lame' excuses. Speaking of this, it doesn't mean defenceless, seriously, when I must defend myself when I have a reason, I have my point of view to do, I will defend. It's just that I will look at myself first, seriously and truthfully finding excuse inside me, before seeing at the other.

Apply common sense.
I think this is one of the hardest stuff to absorb from prof. Regarding to his quarrel above, he did also mentioned that I should apply common sense, and if my common sense is low, my skill will also be quite low. Truthfully, I think prof is right, but it's not as easy to learn and apply common sense as to speak about that, plus the fact that common sense might be said to be cannot-be-taught, it's grown and built up by each person. It's quite sad to say that even now I don't have the feeling that I have learnt completely well about this problem, about applying common sense, or having a good foundation of common sense. But it's even sadder if I give up and leave this problem for now, which is but to say, even though now I don't think I have completely absorbed the idea about this problem, but I will give it more thoughts, try harder in the future, and I believe, eventually I can learn this to the fullest :-).

Do or do not, there is no try.
What is this connected to CS3216. Seriously, in my opinion, it does. I can see many of CS3216 people fail midterm and do not earn a very good grade at their other modules. What makes it so, what makes CS3216 so great a place that we want to contribute as much as we want? Basically, I think it's because CS3216 is a dream module for many people, a module they themselves decide what to learn, and what to do. Hmm, how to put my point clearly in this paragraph, I don't know, but basically, what I mean is that we cs3216 people are here to build our dream, to learn, to do stuff, not to try them. And do something well, or not at all. And we are here in this module, to do things damn well, and it is our choice. Actually it's partly in conflict with the idea of balance every module, which is also a good skill in life, but in my opinion, it's more right than wrong. So messy and abstract about this paragraph, sorry, I feel so as well.

Do the right thing.
One of the last quotation of prof in cs1101s, and in cs3216 as well. Life is all about choices, and one importance in that, is to 'do the right thing'. I think I understand what prof mean by this. Generally it's easier to not do the right thing, and even more, there’s generally a price for doing so. But 'no pain no gain, no sacrifice no win' (not absolutely) right?, by making the right decision, doing the right thing, you will gain more than lose (I believe, there's always things to learn, the problem is that whether you learn it or not), you will become stronger than if you do not do the right thing. And one more time, the choice is yours, to become strong or to be just fine, choose one for yourself, the latter is easier. For me, I want to become stronger.



Hmm. Let's end the final post here. Actually, what I wrote here is not really I have learnt in this module, but what is and will be left inside my very self now and beyond. To end the post, let's quote another great quotation cs1101s (and might be cs3216 as well) all know: "What doesn't kill you make you stronger". After going through CS3216, I believe many will become dramatically mature and stronger. :-). A really great module, perfect at least to my judgement.

Monday, March 1, 2010

Case Study 2 - Team dynamic

Like before, let's jump directly to the problem.
1. Working with people who you are already acquainted with work/project:
Pros:
- This has a huge and undeniable advantage, which is that we people can almost expect(or know) the ability and the dedication of the members as we already experienced working with them in some work or project.
- Also, as the we experienced working with people before, the co-operation can become easier, so that the flow of the project/work is easier to control.
- No risk like working with new people, when we don't have a real understanding of them yet. Anything can happen (although that in CS3216, I don't think there's risk out there working with new people, but in normal life, people we don't know much can be real great and real fit the project, or on the other hand, can be real lazy and don't want to dedicate much, then working with the second people can really contain certain risk. Of course, this can be partly handled by finding more and more information about potential team mates in advance, but I don't think taht it can be completely dealt with, i.e, there can be still risk)

Cons:
- Lose chance to meet new people, in my opinion, one people does not need to have only 'dream team', in fact there can be many dream team out there, and if we keep working with the only 'dream team' we have formed so far, we will lose the great chance to working with new people.
- Life is not as poetry, we can ensure that we will always be able to work with people we know and want to work with, so if working with new people can really enhance and improve our experience and ability to work in a group of new people, which I think is a must-have skill in life.


Conclusion:
- Should work with new people when it's not so necessary to work with acquainted ones, i.e, some minor project, but should work acquainted people when there is an urge to work, i.e, important project (like final project in cs3216). Both working with new and old people are skills that should be learnt and improve in life, the first is to learn, and the second is to enhance.

2. Important trait:
- Frankly, I have no trait inside me. Now that the assignment mentions it, I think seriously I should have at least some things in mind first. Now I only have some characteristics I look for in my team mate (now I only look for and expect). Will fill in and expect more and more later on.
- Firstly, the team member should be hard-working and dedicate hard work for the team project. I think this is the most important thing.
- Secondly, I expect and want to, but not must, work with somewhat same-level people (not greatly different I mean). For example, I don't want to work with damn good people, when all I have to do is sitting there, doing nothing except staring or seeing people working. I don't like it, seriously. I want to do, want to dedicate, and I real feel bad if doing nothing in the project. I'm not the kind wanting free grade. Seriously I can learn from them, by seeing them working or asking question, but I want to do, that's what really matters. Luckily until now I have never work with damn good people (Patrick is almost indeed). First assignment has nothing to explain, indeed I really enjoy working with them and I will work with them again for the final project. Google Wave assignment is a little bit like that, when seriously I did no programming at all, even though I am a programmer. Patrick wrote the code at first (which was very much), and then Xecheng join the programming side, and Google Wave assignment (or my assignment) doesn't require 3 programmers to code, it's not that large I think. So I ended up doing the write-up things, lol, poor me. Indeed I did feel bad, but I think this time it was not that they were too ways high level than me, but it is I who was ways low level than them (can you get it?), and I will become strong later on :), the GW assignment was not the same as the 'damn good people' I described above. Anyway, back to the GW assignment, some how I also enjoyed working with them, it was really nice working Xecheng and Patrick, really, really nice, and if one asks me whether I want to work with them again, then definitely yes, and I will dedicate as well that time, not like before.
- That's all for the second question.

3. lol, I was there looking and asking "what is VC????" (although I can guess), the assignment listed it here while introducing about it later on, haha. Anyway, about the question, I dont really know, the only thing I see by now is that there's two game designer, so there might be some conflict in the game design.

4. Working with talented people or people you like? People I like, definitely. The first reason can be like I described in question 2, when working with really dam good people. Secondly, talented people but I don't like can negatively affect the bond and the co-operation. Thirdly, generally I like not-lazy people and in my opinion, every single person has it own talents, so everyone is talented in some way, the key is that whether they can do their good in the project (i.e, I only mean that there's no talented aspect here). Still don't know how to express, but I really, really like and seriously want to work with people I like, and seriously don't want to work with people I dislike (still can work if must, I will temporarily consider I don't dislike them, or consider this is the chance to stop disliking them) - the second is rare, cos normally and generally I don't dislike people, very few up to now. People I don't like or dislike, still want to work, just that not as 'want' as people I like.



Part 2:
1. recommend a simpler design or encourage keep that completely strange design. I dont know, seriously. I am not a casual gamer, I am a hardcore (partly) gamer. I don't see any special interest in Mafia Wars (the others I haven't seen yet) and I see no point playing it, but a huge amount of people playing it, and I completely don't understand why. And another point prof mention is that no game that requires IQ more than 40 has been successful in fb, also don't really understand, but take it into account, it reflects the target and current users out there that we should concentrate on. In face, redesign as many things as possible is great in my opinion, but the potential risk is also high as well. Still don't know whether to recommend simpler design or encourage keeping like that, frankly. I like the redesign the whole thing, but my instinct tells me that it is damn risky.....
2. If my opinion, if there were a 5th programmer in the team, things would be more smooth, although there are still certain disadvantages. Ken and Gareth can deeply concentrate on the game design without worrying about the programming part, so that it can become better. Han also have people to share the work so the amount of work he carries is not great. But a disadvantage is that at times the programmer do not produce the expected result as the designer want, and if the designer want to change something, he must contact with a programmer, and if the designmer want to experiment different designs, things will become a little trouble some, sometimes he might not want to disturb the programmers so that he refuses to experiment instead.

Enough for now.....

Monday, February 22, 2010

Case Study - GetHelp!!!

Dont know how to open the post naturally, then just jump to the point right away :-P.

Truthfully, I was a little shocked reading the case study this time. The idea is quite similar to the idea of my group's facebook assignment project, and truthfully, the GUI is somewhat similar, and then it is intended that the GUI sucks, then improve it. LOL, how can I improve it while the GUI implemented by my group is somewhat similar. I'm doomed. Anyway, enough for the spamming joke, let's go to the point.
Seriously, I'm not very good at design as well as my experience is quite limited, so indeed there're not many problems I can see in the implementation, but anyway, let's start.


The very first thing is to analyzing the statement of the problem. "redesign the user interface from scratch" (quoted), note that "from scratch" means that everything single thing is wrong (or is it just prof's trick :-P). Indeed, I don't see problems in some pages, sigh, so let's forget it anyway.

Let's dig out the interface, here I look at every single page, instead of specialization, i.e, user interaction,.. I will dig out each page in term of functional, attractive,.. if I have idea.

The very first and also almost always the most important page is the home page. Here it is merged also into user's profile page. The heart of this app is to 'quickly' get help, so the process to create a new offer should be present right in the home page, and this is met here. Now I understand why prof told my prof to include the create process in our canva page. Actually back then I don't see any real advantages in that, as I think the real intention of my group is to create new event through the publisher, it's much faster and more convenient, plus the users visit their home page quite more often than the app page. Back to the GetHelp!!!, in the create help page, there're some problem I think. The first is that I don't know which ones of the inputs are optional, as there's no indication. If all of the input fields are required, it would be quite troublesome. The first reason is that not in all cases I always have a deadline or estimated time, it's just that I may have, not I must have. Anyway, looking more carefully at the page, it seems that every field apart from the main title is supposed to be optional, but there's no real indication (or just no in the image?), then it may confuse users in the first use. Some other minor issue is that 'who do you want to ask' and the 'web included' should have some default value, and user can set default to that, as it make it more convenient to offer a new help. One more thing is that there can be optional input field 'urgent level', which can included 'emergency' (like tomorrow is my midterm and I need help right now, as soon as possible), 'normal', and the default value should be 'normal'. Of course, on the new feed the very emergency helps should be placed first. That's all for the first page.

Come to the next page, the 'new feed'. The first thing I think looking at this page is it would be a little bit confusing for the long run as well as make it a little harder for those who want to real help. What I mean is that projects/activities and awards/incentives/achievements of friends should be separated. It helps the users to easily see what their friends' help without being disruptive about the awards, as well as there's a box displaying their friends' awards, which I think can encourage them to do more, and the key is that it is always present, which means that they are always encouraged (not absolutely true, but somewhat it is so). Of course the heart of this application is the help, not the awards :-P, so the box for the awards should be relatively small in comparison to that for friends' help. Notice the 'calls for help' on the right side, but don't quite know whether it's really needed or not, in my opinion it's not, as it is displayed and separeted in the 'what's new' page.
Just one thing to also included here. Notice that the 'refer a friend!' function. The question is that, what if I have many friends to suggest/recommend, then it would be troublesome for me to recommend, which may discourage users from doing so. It would better be replaced by 'refer friend(s)', and then users can choose friends from multiple friends, or just search for them by a search function.

Now let's go to the 'helper activity/project page'. Not much problem here, but there should be some, as indicated by "from the scratch". It's not really related to this, but anyway, it's presenting in this page, so let's put it here. The first problem is the 'probables'. There can be duplications in this fields, as maybe there are 2 friends out there who refer the same person. Also, there can be duplication between 'probables' and 'helpers', which should also be paid attention to. Anyway, another problem arising is that at times number of helpers would be relatively large, then it can be somewhat hard for the owner to choose. Many is very good, but at times it is more convenient to have less :-P. Last problem is that I dont see any indication of found/successful-close/giveup here (and in the new feed to), how can I know whether the owner still needs help or not?

Lastly, the stats page, as I mention about, let's forget about the "from the scratch", I don't see any real problems here, I just think that the heart is the help, the incentives are just to encourage people, and this stats page and its functions are just nice :-).

The last thing which is not in any page is that I don't see any indication of friend's page. I think there should be, maybe it's just that it's not in the case study pdf file, cos it's quite important. Imagine of the case I have a crash on someone and want to see her help to offer to gain impression, then the friend's page is the right way for me to go :p.

Tuesday, February 2, 2010

Superpoke :-)

Yesterday lecture was actually full of good presentations. Many popular applications in facebook were examined to a great extent, many ideas were dig out, many suggestions, they are unspeakable good to me. It was a great experience for me, and for those who want to build facebook applications. CS3216 is actually a great class. Prof not only let made his students critic about facebook applications but also let them do a real one, so that they can learn from both assignments. As prof always says, 'go get you hands dirty', 'the learning is in the doing'. It's not only about judging the other applications, it's also looking back at what you've done. Truly. after the seminar, I realized that the application my group did has some critically bad points, the idea was simple but amazing, but the execution was not so successful. But leave it for later, now is the time for facebook seminar critique, Superpoke :-).


About the presentation:

-'Presentation'(performance): the teamwork was not very good. There were times the slide was ahead what Tomithy was saying, and there were times he changed the points but the slide didn't. It was a little distractive and ruining the mood. That was a bad point of having one person presenting, one person controlling the slide, the teamwork can't be perfect everytime. I prefer one person presenting and controlling the slide at the same time, and this can be even greater with the remote (truly I don't know what it is :">, it's just to control slide without being near the laptop like what Ji Wei used, amazing).

-The slide: nice, but not too easy to grasp because of the CBAA+, I spent some time wondering 'what are they' during the presentation.

-Message:

+Truly, I don't quite remember, somehow I was not good at remembering things in English, both listening and reading. The first thing I remember is that the presentation was not about the application itself, but about the idea of this application, 'poke', that it is a very potential idea.

+Indeed, the most thing I remember is that the suggestion of using this kind of application to poke 'serious, global thing' ('causes'), such as '$friend throws at you Haiti earthquake. Throw back?'. I think this is quite an interesting idea, but I think it can only work quite well for people paying attention to superpoke or regularly use them. For me, at first I can be excited about some poke my friends sent me, but I am not of the kind liking using this type of application, after some time, I will probably drop this, and for every notification containing 'superpoke', 'poke', I will just simply ignore. Sometimes having many things from the greatest to the smallest is good. Sometimes it isn't. In this particular field, I think 'causes' is quite good enough an application for that kind of activity. Superpoke is of another type, and it is different, following a successful road from some other will not always guarantee success. Superpoke should have it own way as well. Anyway, quick rethink, I think it is not impossible to implement 'causes' in 'superpoke', but how to implement it is a hard question. Facebook is not the first social network (initial idea) in the world, nor is google the first web search in the world, but what makes them so successful is the 'how'. Superpoke should adapt 'causes' in its own way, as there's some difficulties like what I mention above(people don't know what is 'causes', what is normal poke). It's not impossible, but nor is it easy. How to overcome? I have no idea. Oops. This is the new app arising, not suggestion?? how bad my memory is. Still, I don't like this things much, I think it's not very different from spreading message, one sending message to the whole friendlist and so on, through yahoo messenger, which is quite bothersome. But maybe the different is 'how' they implement such functions, I do not know for sure.



About the application:

- The functionality is quite simple indeed, and it's much like a kind of ecard I think, except that it is not too formal like ecard and has more things, more simpler but very funny things, and more functions such as war, pet as well. But still, it's not my type. Not much interest in this things, as in my opinion, it's not meaningful, it's just trivial, superficial and just for fun, entertainment. Nothing more. Not much impressions left in me after using this application. That's from user view.
- From developer's view, nothing particular about this, very simple :-). Just one thing is that the 'premium' poke (buy with money) is also included in normal poke as well, while I am almost sure I would never send such poke if I used this application. There should be a choice to hide those premium poke. Maybe this is a kind of making money :-), but I don't like it.

Friday, January 29, 2010

Some thoughts after first assignment (fb app)

The first week is truly a shock. I once heard that tigers push their child down the mountain so that it will climb up itself and become stronger. It's like that in this module, I think. I can remember in the first lecture, prof mentioned that in the past time, people thought that 'if you give a man a fish, he will be fed for a day. If you teach a man how to fish, he will be fed for a life', and he said that nowadays, it would be rather 'if you give a man a rod and push them to figure out how to fish, then when there is no fishes anymore, he can easily figure out other things to help his life'. Indeed, the problem he gave us was at a greatly different extent of this. In my very eyes, it would rather be prof said that 'hey you guys, there are fishes out there, take me some'. From this simple thing, problems begin to arise. There are in fact many, many kinds of fish, from the smallest fish like the Paedocypris (google lol) fish to the giant fish like sharp, whale. Together with that, there are also many kinds of fishing, using rod, gun, chemistry,...Suddenly, things become very complicated and stressful, plus the fact that the time is very tight. Programming in my opinion is very similar to the things I describe above. But actually, facing such difficult problems in life is not a bad thing at all to me, if not, it is even kind of interesting :-).


Truly, first assignment didn't go smoothly as I expected it. I did not do my job well, in programming. After the first assignment, I realize some important things in me. Firstly, I'm bad at reading, and bad at finding new things. I was there, staring at the code of the publisher, struggled for almost a whole night, before figuring out how easy it is. It is just a very simple thing, and I did take me a very long time to figure out clearly. How bad. Secondly, this module, in comparison with CS1101S, is not just much harder, it is at a completely different level. The algorithms here I think is not as hard as in CS1101S, as you don't have the feeling that even you are given more time, things are still very hard to change. The problems are very different. In CS1101S, you know what you can do, and you just need to figure out how to solve the problems with just that. It was kind of like that. In CS3216, the problems is harder, but there are a lot of them. And in this module, you don't know what you can do. Actually, now I think you can do almost everything. The problem now is divided in 2 parts, trying to find out what you can do and do with that, or figure what you 'need' to can do and find out how to do them :-). And from now, things begin too stressful. The key problem with me lies inside the process of finding information and figure out new things on my own, which I found very hard. Partly because of my bad English. Partly of my laziness of reading in English. Lastly I find it too stressful reading 'too much' words in the articles. Furthermore, examples in Maths and in Programming can be very different at times. And one important thing, I have the habit of skipping the theory part, just reading the example and take a fast look at the theory and figure out the idea. Programming is rather hard. The codes may vary from people to people. And it somewhat requires experience. And when I studied this module, I studied html, and it is linked to javascript, and then to php, them mysql, html dom,.... and many more. Other than that, trying to figure fbml, api, fql,... Too much things, so little time.


About the group work as well. My group work's is not very efficient. The programming split is not a good thing. At first I know by my instinct that the work will run more smoothly and effectively if the programming work is devided by specialization, namely one can handle all php,javascript,fbjs another handle html, fbml, css, layout, and the last handle mysql,fql,api. But still, my group divided the work by pages. By this kind, the work is slower and harder, but I think that each person can learn more in this way. Fortunately, Jonathan has this thought as well, how wonderful. Actually, at first, the programming split was very messy, we needed to ask another first whether he was working on something before doing. But after the second lecture, things become easier, although still a little blur, as knowing and doing is a different thing. But the programming division did improve after the second lecture. It's as prof said, 'the learning is in the doing', go get your hand dirty and you will figure it out and improve after some time.