So, finally, it ended last week. I mean, CS3216. The last lecture was, as usual, quite inspiring, though I have to admit that I was quite tired and could not catch all what prof Ben mentioned then. But somehow, most of the points he mentioned, I feel quite true (and actually some of them are what I always tell my friends, such as: the world is broken, the world’ economy is going to take another terrible depression, and what’s important is to do something that could create some values, rather than to make some money. On this point, I really agree. And that’s why after a while, I don’t care much about money anymore, but what I’m going for is kind of mastery in some field in CS… Not really sure what field yet, though… Anyway, at the moment, I’m aiming for master my coding skills first, and that’s what CS3216 really helped me a lot.

After a whole semester, looking back to what I expected at the beginning of the sem, I could be quite satisfied with what I have gained. Let’s see what was the things I wanted to learn then?

– Web programming (server, clients and mobile). PHP? Javascript? Ruby on Rails? Integrating with Facebook? Silver light?  I have never really spent time on web programming. So now, as a hardcore coder, I hope to get them all :)). Isn’t it a bit too greedy T_T. – Ok, seems like this’s the part that I learned the most. In fact, I did not learn all what I mentioned: PHP – yeah, JS- jQuery – sure, RoR … may be later, Integrating with FB? – of course, after lots of pain =.=, Silver light – Oh – wow seems like I expected too much :). However, I also learned a lot of other things: Setting up web server on the Cloud, using AWS; using Apache mod to rewrite URL; designing and writing REST API; HTML 5 on mobile device… It’s quite fruitful, after all :). And quite surprisingly, I even have chance to revise and sharpen my iOS coding. It’s much better now :).

– Knowing something abt design is not harmful at all :)). I have always stayed away from design stuffs: (such as) Photoshop for the most of my life so far. This should be a chance to (at least) have a feeling of what they can bring.: For this part, actually the progress is not that impressive. I had some chances to practice designing (especially for the first assignment and the final project – the second one we just got a kick-ass designer … ). But somehow, it’s not really improved by a whole lot. Anyway, knowing some new techniques like drawing UI diagram to facilitate in coding is really useful. I also did practice a tiny bit of PTS (if resizing, cropping and exporting count =) ). Anyway, this’s something I need to work on more in the future.

– How to come up with new idea? And how to know that it’s THE killer idea?
– And how to really implement that killer idea, of course.
Unfortunately, after the course, I haven’t been able to get any KILLER idea, after all. However, for the first and the second assignments, I did come up with some unique and interesting thoughts, that really attracted my group mates (which unfortunately, were mostly a bit too complex, and were not chosen after all). Seeing lots of ideas are thrown a way shows me that ideas are quite cheap, but polished idea, the ones that is invented a lot of time and thought in, are not cheap at all. So the important thing is not only trying to brainstorm of new ideas, but you also need to know which one to kill, and which one to invest more time and thought in to polish.

– Other than that, I think I also did learn quite a lot of things on team dynamics. I really sucked for one assignment, and tanked the bulks for some others. After all, I have identified a big trouble in my working style:”communicating too little”, either when I’m not satisfied with others, or when my ideas are not cared enough”. I often thought of it as just “talk less, do more”, and tanking all the works for other if needed. Sometimes, that would not work out quite well. After all, working in a team requires a lot of efforts from all members, so communicating more is really important.

– And there were a lot of other miscellaneous things and advice I did learned from the speakers who came. For example, from Dr. Milton, I learned that we should always try to break the normal pattern to come up with new ideas. Or from Mr. Lai Zit Seng: The guys working on different layers often just don’t understand each others, so someone with a throughout understand of the whole stack is quite important. I’m kinda seeing me fit into such a position :). But anyway, that’s still the future :).

So, finally, the CS3216 journey is ended. I think it’s quite painful, but not as much as CS3217 :). The good thing is: I learned quite a lot of new things, and the environment where you are forced to work with lots of different people is quite fun :).
As a final thing, I think for me, the most important thing learned from the course is what prof.Ben mentioned: After you take a lot of shit, you know you can just take more :)). So, yeah, after 3217-3216, my level of confidence is raised quite a lot. Even though I know there are a lot of things I haven’t learned, now I know I can just learn anything, and deal with whatever thrown at me.

Welcome, any challenge :).

… Hm, actually I should blog a bit more about the final project :). Maybe later :).

Ok, guys, so it has been another one month :).
Honestly, I just don’t know the result why, but this sem, to me, seems really really busy. Though I don’t play games (which I used to do a lot), though I spend lots of time coding (and camping in SOC), and though theoretically, I’m taking less MCs than I did normally (23, in compared to the normal 24), it feels like it’s even busier than previous sems… (Maybe after we experience something, looking back, it just seems much easier? ). Anyway, about 5-6 deadlines in a month, abt 1.5 per week, seems to be not fun at all :), and it was the primary reason why I can only come back to this blog after that long.

Ok, that’s the excusing part :)). It’s kind of the same every time =), but anyway, today my entry is about the final project in CS3216 this sem. This entry is the one that’s supposed to be posted one 1 month ago ( =) ), but due to all the other good things, it’s delayed until this very late >.<. So the topic is: why am I doing what I'm doing (in the final project for CS3216), or in other words, why do I chose the project at first place.

So yeah, for those who didn't know, my project is Rob-The-Robot, an iPad app that complements the animation film with the same name. If you don't have any idea of what Rob-The-Robot is, take a look here: http://robtherobot.com/ . It's a new animation film, that will be broadcast in Singapore this November (or December). So our project is actually an order from the animation company to 2359Media (the company I interned in last summer), and our group will work with 2359Media to build this app for them. Basically, our app is kind of a review from the movie, but the children will not just go through the film. They can read the film like an animation story book, they can take part in the movie by playing some game, and they can have fun at the same time.
Ok, it's that easy, so the question is why I chose to do this project at the first place?

– First of all, because this is cool. Honestly, I don't like to use such app. But why should I like it, anw? Because the app is meant for children, in the age of abt 3-6 (not for me, of course :)) ). And like prof Ben always say: iPad is for children, you know. It really is, because it's so easy for the children to have some fun with this little toy Steve Job built for us. And the parent, of course, will just pay money when their children irritate them. So, the market potential for app for children are just so huge. Building an app that could reach out to real customers, sold lots and lots of copies, and top the chart (maybe?) for many weeks are just awesome, right? I know there are a lot of dudes in the class who want to start their own business, and think that their idea just kicks ass, and they would be successful tomorrow? Ok, I don't have any objection, but I think building something real, from a more fool proof idea like this is more beneficial. At least, I know I'm doing something useful :).
– And for all those who think it will limit how creative our group could be, I think you are just partially correct. Of course, we have to follow the films' content, we have to wait for graphics resources from the animation companies, and we have to satisfy a lot of demands from them. However, we still have room to do our own stuffs: We choose how the architecture of the product is, how to build the app on our own, so that it could supports up to 52 episodes, and it will be just the work of content management, rather than hard coding anything in the program; we can come up with, and be able to create our own minigames (and the idea need to be the ones that could be recycled again and again, with just different audio and graphics assets)… In short: we build a platform, that could work for their content. How to build it, and how it works – it's our own stuff :).
– The last thing is: why should I build an iPad app, while the whole course so far is abt HTML 5, CSS, JS? Ok, this is actually a question prof Ben asked our team when we started with our idea. I answered it, but I never had chance to tell him, because YY answered it before me anw. So my point of view on this is: "
I think the point for this class is to practice tech skill on "evolving platforms". Of course iPad programming is different from Web programming, but isn't learning new things what prof Ben want? At the end of the day, I think what's important is that we can deal with whatever technical stuffs (and no matter how challenge they are) that's thrown at us confidently.
To be honest, I think taking up this project is even more challenging for us (technically), because iOS programming, though we've been through hard training, is something we haven't used for several months :). Having a chance to revise some old skill, besides the new one learned in 3216 is definitely helpful. Plus: We can try implementing episode updater, which involves all kinds of Web server stuffs.

So yeah, that's why I'm on it. Hopefully, on the day of the poster session, everything will work out well for us :).

Ok, I’m back. Actually it’s one week after recess week. After spend the whole recess coding for the second assignment, and the week after that to study for 2 midterms and 2 other projects [which, apparently, I don’t have any time touch on during the stressful recess =)], finally I have sometime to write an entry to summarize what I have learnt from the second assignment, a.k.a Mobile web assignment.
And, yeah, actually I’m thinking whether I should split this entry into several smaller one, each just about 3 new things as our dear prof required :). But after a while, I think I should just dump whatever I stumbled upon during my whole week coding for the second assignment here, before I forget them.

I have to clarify my role for the second assignment first: at first, it’s only back-end related. Then, after a while, my job changes to something that ranges from back to front, from PHP to Javascript (jQuery), CSS, HTML, Offline storage (and Web SQL database), Web Caching… Quite a painful week. But on the bright side, I learn a whole lot new things, which make my 1-month experience with Web programming become much richer, and make me feel much more confident in all these stuffs :). So, the followings are some of the most noticeable (and “memorable”) things I have learnt. Should I ever come across all these issues later on, hopefully I can deal with them much better :).

1 – Setting up a server on AWS:
– Ok, this is something kind of easy. And there’s a guide from our teaching team about the whole process.
But after my dear friend Jason advised me that I should move the server zone to SEA, the AMI that was recommended could not be found from the list anymore =). So the instruction is N/A =). In other words, you are on your own >.<
What is needed here is:
– Finding an AMI that support LAMP stack (Linux – Apache – MySQL – PHP). Probably after that you have to find the manual of that AMI to see how can you set up the whole stack. It's likely that phpMyAdmin installer should be available on the AMI. Install that as well. Check database connection and all other stuffs. Sometimes, you have to make some change to some configuration files (especially the config file of Apache). Restart the Web server whenever u make any change to the configuration file, by: – kill the web server thread (sudo killall httpd) then restart the webserver.

2 – Web SQL database: [and the cool thing about transaction].
Ok, this is a particularly cool thing, which costs me the whole afternoon to figure out T_T. For those of you who are pro in Javascript, I have to admit that I'm a total noob in JS :)). So the following stuff just drove me crazy the first time I saw it.
To open a local db with HTML 5 (web SQL database), you have to use this statement:
var db = openDatabase(‘short name’, ‘version number’, ‘description’, expected size);
for example: var db = openDatabase(‘landmarkDb’, ‘1.0’, ‘my first database’, 8 * 1024 * 1024);
It’s the easy part.
And to do some queries with the db, you have to use transaction:
db.transaction( function( tx ) {
tx.executeSql(‘CREATE TABLE IF NOT EXISTS landmark (id unique, name, description)’ );
});

It’s easy as well.
So what could go wrong here?
Now assume you want to insert 10 values into the db. So easy, right? Just a loop, like this:
for (var i = 0; i<10; i++){
db.transaction(function (tx){
tx.executeSql('INSERT INTO table(id) VALUES(?)',[i], function (tx, result){
console.log(i +"success"); // call-back when success
}, function (tx, e){
console.log(e.message); // call-back if any error
});
}
}
Looks so normal, doesn't it? But if you try this, you will see that all values inserted are 10. What happened?

What I speculate is that: the function inside the transaction is a call-back, which gets called later when the db is ready, which is also when the loop has finished, and i = 10.
So how to fix? Using a very elegant JS structure:
for (var i = 0; i<10; i++){
(function(id){
db.transaction(function (tx){
tx.executeSql('INSERT INTO table(id) VALUES(?)',[id], function (tx, result){
console.log(id +"success"); // call-back when success
}, function (tx, e){
console.log(e.message); // call-back if any error
});
}
})(i);
}
Try it and see how it solve the problem :D.

3 – Caching:
One of the cool feature of HTML 5 is offline navigation. Basically, you provide a file, listing all resources the browser needs to cache when it visits the site. If the site goes offline, it just loads everything from the cache. Sounds simple, and cool, right :D. [for more info, visit: http://diveintohtml5.org/offline.html]

But when you try to put it in action, things are not that smooth and easy :(. The biggest problem you will likely see is: you try to update a resource (esp when it is a small file like css or js file), you push it to server, you update the cache, and you expect the cache to trigger a new caching event, and the website will update?
Ok, that’s what I expected too.

But let’s see what really did happen?

I really did change the cache manifest file, and the cache event did fire !! And chrome still stubbornly keep the old copy of the file !!! Of course, the site will not update >. under the hood -> content setting -> all cookies and site data -> clear the cache manifest, and clear the cache as well >.. it just worked well :D. For the other page (which is the index, where there are just nothing but some about-text divs), when I tried offline caching, basically, it COULD NOT work, at all !!!.
When Joshua and I tried to inspect the page on browser, we observed something very very strange (which is beyond our explanation 😦 ): the body tag is re-ordered by the browser, and it is placed just after the head tag , before all the include tag in head section ???. And before that , there is a section of empty space, which is caused by something we dont know T_T.
So we tried to comment out a lot of parts in the source file to see where the error is? We removed all included js and css file. No use. We commented out the whole head section. No use. We commented out the whole body section. No use. We commented out BOTH the head section and the body section. No use. There’s a PHP part before the head. We commented out it as well. And no use, either :(((((. We asked for help. At 6am, when there was still another team coding for their project, helps were still available. But the coder from the other team could not solve it as well, though he tried some advanced stuffs (which I don’t understand, at all T_T ).
It was 8am already. Before that problem I was planning to go to bed after that last part !! But 2 hours passed, the solution was still nowhere in sight :(. Hopeless, frustrated, exhausted T_T.
Then Joshua tried something new: instead of commenting out, he deleted several parts. And it worked @_@. But of course, we needed all these parts T_T, so deleting the things, of course, could not be the final answer.

Then with the help of one of my friend, we came up with the hypothesis that there existed some invisible characters inside the code, which, apparently, made the browser do stupid thing. So we tried to delete the problematic parts, and re-coded them.
And it finally worked!!!!!!
[Ok, I don’t really know what should be the lesson here =) ]

5 – Calling HTTPS from PHP
In our website, I tried to authenticate the user by “exploiting” FB. Since our user id is also FB id, whenever the user tries to login, his FB id and access token are sent to the server. At server side, I try to make sure that the id and access token are valid by requesting some info from the FB graph with the given id and access token, with the url: ” https://graph.facebook.com/$fb_id?access_token=$fb_accessToken “. Sounds easy, right?

But when I tried the “file_get_contents(url)” that works perfectly fine with normal GET requests, something strange happened. FB just returns nothing???

What happened?
After looking at the url for a while, I realized that it’s not the normal GET request. It’s not the normal HTTP protocol, but HTTPS (which is SSL/TSL over HTTP, a concept I just learnt in CS3235-security). Basically, it means something will go wrong if you try to make the normal get request like with file_get_contents().

So, after searching online for a while, I found the solution here http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/. The complete fix is kind of long, so I just used the quick and stupid fix:
$url = “https://graph.facebook.com/$fb_id?access_token=$fb_accessToken&#8221;;
// the next part is to make php able to send request to https
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
// Set so curl_exec returns the result instead of outputting it.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // this is the important command.
// Get the response and close the channel.
$response = curl_exec($ch);
curl_close($ch);

It just worked like a charm :D.


Ok, a quite long entry already. During one whole week of coding, there were a lot of stuffs here and there I picked up. They were quite painful to deal with, to be honest.

But, “what doesn’t kill you makes you stronger”, right?

Hi, I’m back =). After 5 min break, now I’m here to finish the 2 entries for this week :). [ Oh, and I’m roughly 2-3 entries behind schedule >..<. I don't consider myself as a creative person 😦 [obviously I can't do good design / drawing :(]. So I'm always interested in learning about how to "improve" my creativity. Or if creativity's something that cannot be improved (:(), then at least learning about some techniques to generate ideas is quite engaging for me. I think his advises are really useful here. Next time I'll spend all the boring time on MRT/ bus for finding the next big idea :)).

– The second thing: ok, maybe I should talk about something more technical :). This week I'm suffering with the mobile assignment T_T. It takes us almost 8 days to finalize the idea (when we only have 3 weeks in total :(). And even when we have the idea, I'm still not sure where we are heading to :)). But anw, one week of handling all the back-end stuff for the web server teachs me a lot of thing:
– How to set up a server with LAMP stack on AWS on your own :)). For the last assignment, most of the stuffs I learned came from the guide. It's a good thing, but it also limits my learning at the same time. For this assignment, I change the server location to AP-SEA, and the "good" news is there's no AMI as specified like in the guide. And yeah, 1 day sorting things out teach me a lot of stuff on setting up a Web server :D.
I also learn about configuring a lot of settings for the Webserver: rewrite rule (which helps me solve a question I had for a long time: why there exists such link as : product/a that has the same effects and product?id=a), allowing/ denying request types, checking clients' browser agent to detect where the requests come from (mobile? desktop? iPad?…). Checking the server error log is also an important skill I acquired along the way which helps a lot with debugging.

– The last thing: while almost all the week is for back end stuffs, the last two days are when I read a lot about front-end stuffs: jQuery mobile, jQTouch. For the first time, I think I can feel that "jQuery / javascript" are beautiful :)). [Jason should clap his hand for this :))]. My JS code' bug rate is reduced. But it's still really high :(. After a talk with Hung Doan this evening, I think I need to work harder, to be at least 100x better than I'm now :D.

– And an extra thing: FB api is killing me!!!!! Ok, just 3 weeks, and I think a lot of stuffs have changed T_T. Which costs me an afternoon looking for ways to make my old code for assignment 1 run. And no use! So that's 4 hours wasted :((. Oh FB :(, kill me now T_T 😦

Ok, It’s 4 am already, so I will cut short all the non sense talking I often do :). Let’s jump into the main content of this entry, which is a case study about one of old projects in CS3216 (from batch 2008 – is that the first batch?). Kind of a good one, I have to say.
It’s the so called “Get help” – a Facebook iFrame app. Let’s talk a bit a about the idea first. I’m quite tired now, so I’ll just copy the description here:
“Most of us have hundreds of friends on Facebook but we only know the skills, interests and capabilities of a few. Hence when we are in need of help, we often ask only these few people and end up with very little and sometimes, NO HELP leaving us disappointed and lonely again. This is the problem that Get Help is trying to solve by providing a mechanism for users to easily inform people on their Facebook networks about their needs (tapping into a wealth of undiscovered talent and potentials) and for their friends to respond by indicating interest, providing encouragement or referring others.”

For those who don’t want to read, basically the idea is: if you need some helps, you post your request. Probably some of your friends can help. And if they can’t, they can try to refer to somebody else.

When I first read the idea, I was like: wow, it’s quite a good idea. Why? Because it satisfies some requirements for a great idea: 1- There’s a need for it (sure, everybody needs help sometimes right?). 2- It has not been solved yet (yeah, even now, sometimes we cannot find the one who can help us, when we need :(). 3- The solution “sounds” reasonable enough, because there’s a famous idea called:”Six degrees of separation” (http://en.wikipedia.org/wiki/Six_degrees_of_separation), which says that everybody knows everyone else within (an average of) 6 hops. So looking for someone who can help you among your friends, and among your friends’s friends will likely be successful.
Ok, cool enough? But did I just say “when I first read the idea”.

Yeah, when rethinking about it for a while, I think this idea (or to be more precise, the solution) has some fundamental problems:
1- The help mentioned here is just too general. What kind of help can you offer? In what form, to be precise? Even for the one who asks for help, asking for something too general will just do you more harm than good. [have you try go to stackoverflow and ask questions such as: How to write a successful iPad application?]. So just offering some sort of “saying out loud” a need or desire, and waiting for someone to say “I’ll help you” in general, IMO, will serve no purpose than help you kill sometime. [actually it can tell you who are caring about you ;)]
2- Even, say, they try to make the request and offer to be more specific, it will still not be able to work, in reality. Why? Because it motivates pp by offering “badges”, “titles”… and all things that are unreal. Which will, yeah, motives people to give out unreal things as well. What will it lead to? It doesn’t mean no one will ever use it. A lot of pp might use it, actually. But I can see that it will soon become a game than something of real value. You can’t help? Just spam refer your friends. Or you can (bravely) click that “help” button? Ok, then what’s next? Ok, after being shy for a while, I’m not being charged / bound by anything right :)). So press one “I can help”, or spam click on 10-20 buttons like that will not make much a different :). Probably u can see the future of such app :).

Ok, maybe I’m a little bit harsh? [yeah when under tons of pressure, finding something to express your anger is a way to kill stress, I guess]. But I really think that the idea needs revamped, and the team needs to be able to solve the two problems I just ask: 1- how to make the request/ help more concrete? 2- How to really motivate pp to give “real” help? . Actually, I have met someone who had an idea of a “market of services”, where you ask for some kind of help (in term of service), and u can offer to pay some money, and your request can be widespread through your circle of friends, in a way similar to this idea.

Ok, that’ enough about the idea part. Actually I’m kind of tired to talk about anything else, but anw, I’ll give some comments on the UI design (though I suck at this :))

1 – Usability vs Aesthetics : 1st, I’m very bad at drawing, so seeing the cute icons they drew really impressed me :). And I also agree with the flow: The homepage is where u post request, then there’s a page to keep track of pp’s requests around, and one page to keep track of the stats. However, there are some parts of the UI that really annoys me, such as the list of options in the home page. It’s just like throwing everything to your face, with tons of options to choose. Yeah it’s quite detailed, but there are quite a lot of options I don’t want to use in lots of case, such as: estimated time?
2 – Number of options / freedom given to user when posting a need: Ok, this’s somewhat similar to the first point. Maybe the group planned too big, when they include all the options, from posting your request through FB, feeds, twitter and even SMS. Hey, is it just a little bit overkill? Especially when what you can expect are just some clicks from someone saying: “Yeah, I can help”, and some advises, at most.
3- Cycle of interaction & incentives (Are the elements of the app engaging?). I think what I said about the idea already helps to answer this. First, it’s kind of fun, because you have quite a lots of thing to do: going a round, posting things here and there, choosing friends from your circle, and click that “I can’t help button” faster than everybody else. Not really as catchy as things like Farmville or Sim Social, but enough elements for a game. And the rewards for the game is kind of engaging too [the names of all the badge and title are quite awesome :))]]. But that’s when they are making a game. For something more serious? I’m not sure.

Ok, so that’ all for my CS1. It’s almost 5am now, so I don’t thing I can come up with anything else to say :)).

It has been another one week :(. Now I can really feel the pressure of all the workload, when I have to spend this Hari Raya Puasa (which, honestly, I don’t have any idea about other than a day off :x)  coding .

Anw, after 10 hours coding, maybe it’s better to have a break and spend time on something more relaxing, such as blogging 🙂 – (which, unfortunately, is also another assignment T_T )

So my entry today is to review a product that has been presented about on the Facebook Seminar session yesterday. Overall, I have to say that most of the presentations were really impressive (especially my group, lol :D). Most of the mentioned apps are good examples of how good UI combining with an (optionally) original idea will bring you lots of money.

Sadly, I have never been really good at UI designing, or coming up with any world-changing idea either, and that may well explained why now I’m having to take this module, with an aim to get an A(+), and some opportunities to get some money to take over the world.

Ok, focusing on the product they presented: Evernote Peek. From the presentation, I think there are 3 points about this app which are really noticeable:

– First, Evernote Peek is a really cool product. The idea of incorporating smart cover into an app is just so original. Evernote peek is the first product ever to make use of the smart cover, and in a very smart way. Since there are a lot of people using flash cards to learn memorizing thing, the smart cover use in Evernote just beautifully imitates this. All the interactions between user and the apps are just so natural, to the point when “you just don’t realize it”. Just peeking up more and more to see the questions and answers of the quizzes make the user feel quite comfortable.
Here, the plus point for Evernote peek is the idea: it’s so new and original. However, the UI and UX, which are elegantly designed, are what make Evernote so hot ever since it’s released.

So, the lessons are: always try to make thing simple, elegant. Best UI is the one that make user feel so natural using the app.

Yeah, cool, simple. But it’s always easier said than done :)).

– Second, Evernote Peek’s commercial model is a really sustainable one. Creating a platform, and letting other build up on that platform is one of the most sustainable and profitable business model. The correctness of this model has been well proven with a lot of examples: Apple’s App Stote or Google’s Android market. With Evernote Peek, Evernote is going in the right direction, when it tries to link up with lots of educational content creators to create content for the “platform” it created. Since the idea of Evernote, though quite novelty and cool, is really really easy to be copied, and the plus point in elegant UI design could also be matched, the huge amount of content available for an educational platform like this could be the selling point, that make a different, and keep user stick with Evernote, even when others try to come up with a similar product.

So, the lessons are: we all know, first mover is not always the winner. However, being the first mover, with an original idea, gives you certain advantages, that you should try to make use of. Among those, the recognition of users, and the amount of content your product accumulates could be things that followers cannot easily matched.

– Third, and last point: When having an original idea like Evernote Peek, it’s important to come up with the minimum viable version, and step into the market before everyone else. However, without constant updates and improvements, this app will likely be surpassed by followers. For Evernote Peek, only 1-2 months after releasing it to public, the developers have added a lot of features into new updates, which are quite important ones, such as: ability to group and categorize notebooks, or examples to demonstrate possible usages for the apps. There are tons of things that really really  need improved (or rather added): such as the one mentioned in the presentation: feature to create the notes/ quiz right inside the app, without having to go online to Evernote account (having to go to the site, create the note, then sync back to the device is a huge pain). Without these updates soon, the power of the cool idea will soon wear off, and it could open up possibility for other products to come in the market and take the shortcut, by adding something important.

The lesson is: well, the advantage of the first mover is not an everlasting cure-all solution to help your app top the chart forever. Constant updates with bug fixes and more features are needed to keep user stay with you.

Ok, so that’s most of the important things I got from the presentation. For me, I kept thinking about an idea prof Ben mentioned (which I also came up with when they were presenting): why the heck do we need to have such an app, which requires users to use a physical thing such as the smart cover, while it’s much more easier to do everything in software, when you can have everything you want, and support much more different platforms.

However, the fact that this particular “weird” idea could be transformed into something really hot, proves that: human are averse to changes. For lots of people, the use of “old-fashioned” methods of doing things have been too familiar to them, that they don’t ever want to switch to something new: “Reading book in iPad/ kinect? Wow, kinda cool, but I still prefer the feeling of flicking through the pages”. That’s why some idea of bring back people to something they are used to, like what Evernote Peek is doing, could bring u lots of support. But things change quite fast. And yeah, maybe in the next 10-20 years, like prof Ben says: who would ever want to (or even know how to) use a real book again? So, be prepared for changes :).

But sometime, the changes could take quite long, and it leaves you with a window to make money with old-fashioned things. Like this case.

 

I don’t really like what I’m doing recently. Cs3216 is one of several reasons [and also the main one], that is putting me under a lot of stresses for the whole week. And wtf, we are only at week 2. The playing mood is not over. Calls from friends for hanging out come in everyday. And yeah, I have 5 dues until 1-9 T_T.

But the particular thing that makes me dislike what I am doing is not that whole load of work (though it could be a part of the cause), but the fact that: I’m doing everything really really ineffectively. Spending several days reading through lots of Facebook API but still not be able to finish a working page for the site, spending a whole night to prepare for a clip but still not be able to choose any suitable music to start (?), it’s particularly unpleasant. I guess stress could be one of the reason which makes me under performed T_T. It could be other thing as well. But whatever the reason is, something needs to be changed :(.

So, things are starting off quite slowly for me :(. I’m trying to get the momentum, but it’s not always that easy.

 

Ok, and that’s the non-tech part. For the tech part of this week, though I’m starting off so slowlyyyyyyy, I have been able to learn quite a few things. Javascript, jQuery, Ajax and FB API are all the things that I have always stayed away from for a long time. Now when it comes to either “learn or die”, I have picked up a number of things after a week.

+ Setting up a cloud server is quite fun. Particularly fun when somebody else is paying for you :D.

+ Javascript’s syntax is (IMHO) quite weird. Anonymous function getting used everywhere T_T, object getting constructed in a Json- like manner, variables without type (ok it’s just PHP without the $), functions get lots and lots of () (which is the thing that I find a little bit annoying), among other things.

Some people says it’s beautiful (?) (such as my dear friend Jason). It makes me wonder: “so what’s the definition of a beautiful language then?”.

+ Facebook API (IMHO) is quite poorly documented T_T (Oh Hung Doan what have you done??? =) ). Maybe it’s because I’m starting off so slowly this time, but the document sometimes sounds like being written in a non-human language (j/k =) ). At least the very  truth is they uses too much jargon/ terminology, and probably it could take me more time to get familiar with. Now I feel part of the pain when somebody with too much tech-knowledge trying to explain some tech stuff to someone with not much knowledge about that topic. (or is it FB do not try at all? )

+jQuery and ajax, though seems quite daunting at first, now seems quite a bit less daunting, thanks to the workshop by Jason (good job :D). Though during the workshop, it seems like 80% of the people has known all the stuff (or is this because Jason looks so damn boring? =) ), but I still have to says it’s the most useful ws so far in the series. Maybe the reason is I’m much more new to JS, jQuery and ajax than all other things. But anyhow, the workshop is quite interesting. [Thank you, Jason :D]

+Food by prof Ben is always great =). Is it one of the main reason why there are so many people wants to take the course again? [j/k =) ]

 

Ok. So in short, the truth is: I’m quite frustrated with a slow start this week. (omfg, it’s just week 2 T_T). Thing should be better next week, hopefully, when I’m gaining more momentum.