Saturday, September 29, 2012

Mobile App - DONE!

Third assignment is down (check http://coffee.yrmichael.com/!) 

Reflections for the assignment:

I didn't really do any coding this time round (which is embarrassing) but I think because of this, I have a better understanding of... things. I think I like to work with a clear idea of how this application is going to be, but this time round, I didn't manage to have a clear picture of the app at all. In fact, I had no idea what the full feature list was going to be, till Div coded it. >.> (On his defense, I think he didn't want to promise anything until he was going to deliver it.)

In any case, it's also a matter of style? Me and Yujing are the type that will check every single detail with each other when coding but I don't think Div and Michael are the type to do so. So I think I was a bit annoying to them at first, when I gchatted them very often. I think it's really hard to adjust my mode of operation (or modus operandi) so in the end, I gchatted with people outside my group. A lot.

Actually, there's a whole timeline of events that led to me giving up on coding, but I think it was Wednesday that triggered it. At 4am, Div and Michael decided to give up our original (complicated) plan and build something much simpler, and by the time Michael showed me the stuff at 11am, I figured out two things:
1) I won't be able to help much under such a short time and,
2) Div and Michael are incredibly fast at coding, and they understand each other very well. 

The second point is important. Also, I really, really trust Div and Michael to come up with a working product...

So I did the report. There were a few questions that I didn't really know how to answer, but at that time, I didn't want to ask questions and disturb the two coders, so it became more of a "Div, read this and see whether it's okay" thing, which seems to work better. After a while, report-writing was quite fun. I was with a friend while writing, and we'll ask and answer each other's questions when writing our reports. ("Does this sentence sound okay?". "HMMM..." etc.) I also had to look around and understand about microblogging (my friend taught me this one!) as well as authentication schemes (had to research a lot for this one!) In a way, I ended up learning a lot via research. 

In any case, my project group-mates were good! We got work done, and a pretty solid product. It's really usable and neat on the mobile phone, and I think my group-mates really put a lot of thought into the usability of the product.

On the other hand, this isn't what I consider an ideal group to work in, mainly because I'm not pulling my own weight. Also, Div is a Baa Baa Black Sheep (BBBS). I think while I have learnt some technical stuff, I learnt a lot more about group dynamics, and why Prof has always considered our CS3217 group to be really good. Also, I feel that there was quite a bit of miscommunication sometimes. Mmm, I also probably need to level up my coding skills quite a bit.

Time to start speeding up for final project in any case! Whee~!

Sunday, September 23, 2012

Most Exciting Day

I just had the most exciting time of my life.

I accidentally switched off my laptop while the battery was taken out, and it died. Like, terribly. It started up but I couldn't get into my login screen because it just couldn't load that part. Imagine my horror! 

D:

In any case, after trying to use their tools, I ended up with something that I could log in, but without any fonts. Haha, so I had all my desktop icons without any words below them. When I opened up directories, all I could see were the folders/file icons but absolutely no words to indicate what they were. At the address bar, instead of the usual " > Computer > Local Disk (C:) > Windows > System32", all I saw was " > > > > ". Honestly!

Thank goodness I found my way to running cmd.exe as administrator (had to find out where the file was located, so that I could right-click it to run as admin, and even so, I only recognised that command because of its icon) and do a "sfc /scannow"

And that took a very long time. But it recovered mostly everything. Had to reinstall/reconfigure node + git. Had to break a lock in mongodb also. (Ummm, anyone knows how to break it correctly? I umm... just deleted it.)

But everything's back to normal, I think. 

(Haha, there was this time also that I was really panicking because I thought command prompt wasn't working because I did "ls" and nothing was showing! Until my brother came in and told me "windows doesn't have ls". =.=)

Anyway, regardless of what they tell you about not leaving the battery in your laptop, just leave the battery in. Or you could well, gain a good experience in spending 5 hours trying to recover your laptop. 

It was really fun though. :D

Thursday, September 20, 2012

Fifth and Sixth Week

Fifth week was filled with meetings, debating on what app to do. In the end, we settled on a todo list, which is a pretty good idea. It's simple, but it's hard to do simple things, right?

Following that, this week has been filled with plenty of reading of documentation. I am very clueless about Node.js + the rest of the stuff that my team is using, so I'm really trying very hard to catch up. Hopefully, I can contribute work :S Michael also attempted to explain things to me, and after eyeballing hush, I sort of understand what's going on (what calls on what). Understanding it is one thing, but being able to code in it is another. Hopefully, I can contribute to the project. (If not, I'm going to buy coffee and what not for them.) Speaking of coffee, I am also really liking coffee-script, although it's hard to learn stuff while reading coffee-script - all the examples given online are in .js. The entire framework and all the libraries that my team is using is also really magical somewhat so haha, not easy to learn? But yes, I shall eyeball, and practice writing more code. 

Meanwhile, I seem to be having more luck with Maths recently. My midterm last week didn't go that badly (umm, marks aren't out though), and I'm starting to get really interested in geometry. 



This was part of my assignment answers for MA3229 (Geometric modelling). Mmm, I recently discovered components (e.g. slider bar, text area, plot area), so I used it in my assignment. (The number of points that interpolate the curve changes when you slide the bar.) In any case, I started wondering how come Maths Professors don't do it more often, like using all these tools to help their students visualise what they are learning. In any case, I'm starting to feel that I could be on my road to my FYP, since my FYP needs to combine both Maths and CS. I really need to conceptualise it better however.

But in the meantime, I really need to check my students' work and finish up a Maths assignment.  Good night everyone, and sweet dreams!

P.S. I really need to exercise the other side of my brain to come up with ideas for CS3216.
P.P.S. My skills in identifying hot games has also improved, although for now, it's a lot less useful than being able to identify who will get off the train first whenever I want a seat in a crowded train. Mmm, maybe I should have advertised that as my talent in the talent show at the beginning of the course.
P.P.P.S. There is some backstory to my group. I think that in CS3217, I really wanted to partner up with a lot of other people whom I hadn't worked before with (e.g. Eldwin, Div etc.). So at least in CS3216, I finally got the opportunity to work with Div, who was the first person I approached for the team. 

Friday, September 7, 2012

Third and Fourth Week + Facebook/iPad Seminar

If you're here to see my critique, it's downstairs in another post...

In any case, we have survived through the first CS3216 Assignment! I'll probably blog more about what our application does later. In the meantime, I'll blog about my third and fourth week. Third week was spent coding throughout the weekend as well. :S Jon Lew also talked, but I felt that his presentation could have been a bit longer. And I realised how hard it is to structure the talks for 3216 because each and every talk would have been very useful if we had learnt it at the start? Haha, I guess the learning curve for CS3216 is really steep. On the other hand, it's good that I knew some of the stuff (Twitter bootstrap!) + I did play around with Facebook API during the summer. 

Anyway, we did our Facebook/iPad seminar on....



I had very good team-mates for this assignment. We had two people who could really talk (Omer + Jim). and Trung did the slides really nicely. I talked also, but I'm really amazed at how my groupmates managed to articulate their thoughts so clearly. I am in awe of them :D (And I am happy that I didn't screw up as much as I thought I would.)

To be honest, I don't think we spent a lot of time on the seminar. Originally, we wanted to write .js script for the presentation, but we didn't have time. (Heck, I started on the slides at 4pm on Sunday.) On the other hand, we did meet up before that to consolidate our thoughts on the application so I guess our points were quite well-discussed among our team-mates. 

Prior to this, I've never really thought about how apps make money (i.e. what business model are they adapting etc.), but through the discussions with my group-mates and research, I've really gained an insight into it. The seminar also really helped, and I can understand why people spend so much time thinking about the business model of the applications etc. For a coder, I feel like I just build what I want, but to really release an application, we really have to think of how to market it.

I didn't really like the Pecha Kucha style, but I speak fast enough (not Ben Leong speed though). The problem I feel is to slow down and extract out the main points. There's no point in speaking too fast if your listeners can't digest what you are saying. I certainly didn't manage to listen to a few speakers who spoke too fast, just to cover their points. Maybe a good style would be to speak slow enough, and use fewer words to express what you feel (i.e. only say the main points and don't digress). That, I find, is the beauty of Pecha Kucha. 

Also, I had other apps that I really wanted to talk about for the seminar. Three applications that I thought about presenting for the seminar, or Free Advertisement For These Applications:

1) Cubie


I discovered this application only after we had to submit our three choices. It's like WhatsApp, but cuter, and available on both the Android and Apple App Store. You can also draw stuff on it. It would have been interesting to do the seminar on what is essentially, a WhatsApp clone (I mean, if products are good, people will try to copy them, right?), but I discovered this application too late to even suggest it. 

2) Puzzle and Dragons


I've been playing this game since the start of summer holidays, so that's more than three months. Basically, you train up your dragons and go into dungeons to fight other monsters. Those monsters may end up dropping eggs, which hatches into your own monsters. To fight in the dungeons, you have to play this sliding puzzle game, where you drag the orbs to form three or more in a row. The corresponding colour of the orbs indicates which monster of yours will attack. (I.e. if you make a three-in-a-row for the blue orbs, only your blue monsters will attack.) They make money by tempting you to buy "magic stones" (in-game currency) which you can use to expand your monster box, or attempt to get rarer creatures.

This game is really exciting because they have new dungeons every week, and I'm really tempted to spend money on it. Unfortunately, it's entirely in Japanese. (Yes, you can check out the engrish on its App Store for confirmation). We thought that it would have been unfair to choose this application for the seminar, as it was in Japanese and that could have limited people's comments on it because they can't really download the application and try it out. (You'll need a Japanese App Store account!) But I really liked how they took the Dungeon-Crawling + Pokemon Collecting idea along with some form of Bejewelled Puzzle concepts together to form this application. Nothing really new in that sense, but somehow, it's combined nicely such that the game becomes really fun. (And kekeke, they're releasing an Android version of it soon!) 

To be honest, I feel that this game can become really popular. I've got a fair few stares on the NUS shuttle bus whenever I play this game. Future Angry Birds? Perhaps.

3) Swordigo


This is a really good game that I finished over the summer, but once you complete it, you don't really go back to it. I heard it's like Zelda, but I can't confirm because I've never played Zelda. But the battles are real-time and you go around hacking and slashing at monsters and ... pots. There are tons of hidden treasures, so you must really think to figure out how to get to those treasures. I really found this game very innovative. It's a free application on the iPad, so do try it out!

Although these applications were good, I'm really happy at our choice (The Guardian), because it was really a good choice to talk about. I was also out of my comfort zone (because I'm used to talking about games more than serious applications like The Guardian), so I guess the choice of The Guardian on Facebook really broadened my horizons. In all, the Facebook/iPad Seminar was quite a good assignment, even though I did kind of doubt its value at the start of the course. 

Tuesday, September 4, 2012

Facebook/iPad Seminar - BranchOut Application Critique

I was actually rushing out this critique on my way home, but when I reached home, the momentum to finish this blog entry just died down. At that moment in time, my sister was walking by me and started asking, "do you know about matrices?" As it turns out, her friend, who is a Biology major, was doing some Mathematics problems, and she was looking to my sister (incidentally a Physics major) for help. I peeped at the questions and with the help of Google and my Maths understanding skills, my sister and I managed to help my sister's friend. As it turns out, connections are really important, aren't they?



That brings me to the application that I am reviewing, which is BranchOut. 




From what I heard yesterday, BranchOut is a Facebook application that makes use of the reach of Facebook (apparently 850 million people) in order to connect jobs to people. Companies can make use of the strong network on Facebook, while job seekers can make use of their own (and their friends') connections to find jobs. This makes it sort of like LinkedIn. However, BranchOut profits a lot from the strong user base in Facebook, as every user on Facebook is very well-connected with a lot of other users. For Facebook, most people end up friend-ing everyone that they know (or even people that they might not know), but LinkedIn is more "professional", so the connections are not as many as Facebook. In a way, if BranchOut manages to successfully use Facebook's network, it can become even more popular (and hence, more useful) than LinkedIn. Armed with Facebook JS SDK (just keep sharing, appearing on people's ticker etc.), as well as the sheer number of hours people spend on Facebook, I believe that it is possible that BranchOut can become more popular than LinkedIn. 

However, as was mentioned, Branchout mixes the professional and personal side of life, which is a bad point if you do really silly stuff with your friends. In addition, some of your profile information can be queried on BranchOut, so any information that you unknowingly leave behind can be pretty lethal to your own employment. This may cause the application to lose out on a large set of users who manage to recognise this fact. However, in a way, it could be useful also. Companies do not necessary look for people based on their skills' only; they also look out for people with certain personality traits, and if you manage to demonstrate those traits somehow in your profile, it could actually benefit you. To be honest, it's a double-edged sword, but in this case, I personally feel that it would probably harm you more than do good for you.

The third important point of the presentation is that Branchout needs to grow its user-base first. BranchOut was developed using funding, so it's important that it is able to sustain itself. BranchOut earns money through premium subscriptions, services for job recruiters and job postings. In order to break off from their funding and sustain themselves, they definitely need to branch out (pardon the pun) even more to people and companies. I'm not sure how sustainable the growth of BranchOut is, but if it is not able to a) branch out and b) keep the existing users active within BranchOut, I don't think the application would survive. Moreover, it seems like BranchOut is intended for users of all collars, but it is highly doubtful that professionals will use BranchOut rather than LinkedIn. The rest of the users (who are not professionals) don't seem to be the type that will pay for such an application also. Hence, I feel that BranchOut's current revenue model may not work out.

I'm always interested about potential competitors, and while researching about BranchOut, I found this Facebook application called Talent.me, and it seems to be similar to BranchOut, but it has the ability to post your resume, which BranchOut lacks. I think it would be interesting to see how BranchOut and Talent.me work out in the end.

In addition, BranchOut also serves to connect people to internships, which is more vital to me at this moment, since I won't be graduating yet. As such, I wonder if it might be better if BranchOut tries to serve this niche market better, especially since Facebook has a large user base of university students (since it did start out with university students.)

To conclude, I feel that BranchOut is an interesting idea and it makes great use of Facebook's extensive network. Unfortunately, without the use of proper control over what is exposed on BranchOut (BranchOut doesn't allow for custom resumes), it seems that BranchOut may lose the edge over LinkedIn. It's a good idea, but I feel that the implementation doesn't seem to be well-thought-out.

Monday, August 27, 2012

Mid-assignment submission

Mid-assignment submission was a few hours' ago, and I am drained. We were panicking during the lecture itself because we were trying to double-check everything and seeing if we had misunderstood anything. (e.g. Does 'icon' in Aspiration 3 refer to favicon or the actual icon?) We ended up badgering Div and Jon Lew a lot. 

My contributions this time round was mainly drawing the schema, and for suggesting to use Mercurial and Code Igniter. I think, to Jin Guan and Shao Hua, using frameworks is too much of an effort, when they can just code everything in raw PHP, but I found it rather useful, especially in database access. I think I'm just too used to the Drupal 7 way of writing SQL queries. But in any case, I think it's good that we learnt a different framework (along with MVC!), especially one that is much lighter as compared to Drupal 7. 

One smart thing that I did was using MySQL Workbench to generate the schema, by connecting to the actual database. All you have to do is to provide your credentials, and tada, the schema is ready for viewing. It even draws out the Foreign Keys correctly. I learnt about this software during CS2102, from Jon Lew, and I think it's really useful, as it can even forward-engineer (i.e. from schema to actual SQL code.) 

It probably took me a longer time to draw the arrow
 than for MySQL Workbench to generate the schema.

Another thing I played with was drawing the favicon! I used a favicon generator to make the favicon.


Although it looks like a lol, it's not really it. Rather than that, it's supposed to look like a person cheering you on with his two arms, and that ties in with our app. I guess I better explain that somewhere in our application itself, since most people I talked to didn't know the relevance of it.

The interesting point about favicon is that the actual colour may not be seen when it is displayed as a small favicon. In the picture above, you can see tons of blue and brown, but once you shrink it down, you can only recognise it as black. It's interesting how our eye can trick us in that sense. Also, you may ask why brown and blue instead of it being grey. In painting, to add dark tones, we sometimes use dark blue and brown instead of just adding black (which is considered too dark), so I guess the same concept occurs here, i.e. using dark blue and brown to lighten and soften the edges. 

Ahh, and that was my foray into doing part of the design for our Facebook app. Back to playing with the database!

Edit: Also, I did something silly. I forgot to set the Mercurial Repository settings to 'Private'. BIG FACEPALM there. Thank goodness Colin reminded us to check.

Second week!

This weekend was working week, as we stayed back in school from Friday to Saturday to work. We also met up on Sunday to work on the report and the application. Unfortunately, I don't think we accomplished much. On the other hand, we managed to have a framework of how the app is going to be like, so we all have a clear idea of what to work on. 

Frankly, I feel that we didn't accomplish much because we were battling with Facebook SDK. Not Facebook API, mind you. We were stupid at some points in time (e.g. forgetting to include the permissions, script to connect to the javascript SDK - Chun Teck reminded us on this), but some problems were just pure bad luck - like how school internet is slow, so we only managed to get the JS SDK to work half the time. The PHP queries also kept timing out because of this. Also, I had followed the instructions for the iframe canvas app by looking at the signed request through the POST function, but it was not viable for our canvas app. I found that it works better if we had found the signed request through the PHP SDK instead, reason being that in our app, we actually have different pages to navigate to, so the POST request will end up being lost. (Jin Guan found this bug) I think at one point in time, I was quite tempted to write a wrapper to access Facebook API.

My job in the project is to manage the database, and after writing wrappers and wrappers to query the code, I'm quite tired of it. But I'm not a HTML/CSS/JS/jQuery/AJAX expert, so I'm leaving those to the rest of my team-mates who are doing very innovative things. I'm impressed by even the smallest thing my groupmates do, like changing the colour of the input field when it is in focus. Such things really do help to improve the UI of the app. Unfortunately, due to the existence of different browsers (we have a Safari user, a Firefox user, and two Google chrome users) and the need to ensure compatibility, we sometimes face a lot of difficulties in ensuring that the same UI is shown. 

Wednesday talks were interesting. I heard the first talk, or at least parts of it (the achieving potential part), during CS3217, but the delivery was different. The second talk I don't really remember much, but mainly because I've heard of Scrum before, so it wasn't as educational to me. On the other hand, I was comparing Scrum with our CS3217 working habits. The checking-with-each-other part (on what we're going to do etc.) is something that me and Yujing do a lot, and I think it's a good habit to have. Unfortunately, it might not be as easy to implement it in other groups, especially people whom I am not very close to. We'll see how the other two projects go then :)

The third talk probably interested me best, as I knew the speaker from CVWO. I concurred with a lot of his experience, probably because I have had similar experience, although I have never worked with Jon Low before. I agree that sometimes when projects don't turn out well, we might end up ignoring what the person says, but it's really important to listen just in case that person says something intelligent as well. 

Saturday talks were well-done also. The presentation talk pointed out something rather obvious to us - it's the message that is more important than whatever interesting slides you have, and I think this is something most people forget. For me, the audience's understanding is very important, and I tend to panic during presentations if I see a blur face in the crowd, so subconsciously, I must admit, whether the audience understands what you are saying really matters in a presentation. 

The next talk was a Photoshop talk, which was less hands-on because Su Yuen talks very fast, but I didn't have Photoshop anyway, so it was okay. She gave a lot of interesting tips on design, and a lot of her demonstrations were something that we all could do, even coders. This is actually quite useful for my team, as all four of us are coders. 

During lunch, Su Yuen also sat down with us and mentioned something rather obvious to us when we mentioned that we had a group of all-coders - "If all four people are coders, you obviously don't do a game", so part of me is happy that we were subconsciously smart enough to not do a game for our first assignment.

The last talk was on Javascript, and I think even though his to-do list is small, it's actually very nicely-coded. The slide-up and slide-down transitions also make the application more dynamic-looking. Also, there are little details like changing the mouse cursor which I didn't really notice, but kudos to Angad for paying attention to all these little details. I realised that a lot of effort can go in to make even the smallest application and to be honest, I feel that I don't have what it takes to do that, mostly because I tend to think of the general design instead.

I haven't mentioned about what my group is doing, but I'm pretty sure that everyone (or at least the tutors and Colin) will know when we submit our mid-assignment submission. Something else that I can mention is the fact that instead of using Git, we are using Mercurial instead. There's not a lot of reason why we're using Mercurial, but it is pretty similar to Git, and as long as it gets the work done, no harm right? I also heard that the GUI for Mercurial is better, but when I was using Git, I didn't use the GUI version so there's no basis for comparison. Anyway, we were added to the CS3216 organisation pretty late, so we didn't know we were supposed to use Git. I think perhaps, the good part about using Git for this assignment is because the Facebook PHP SDK is in Git, so it makes it easier for you to update it (when you add it as a submodule to your Git repository).