Tuesday, October 18, 2016

Face detection. Google Vision or Swift Core-Image or OpenCV or DLib

To improve Turbanizer, one thing I should accomplish is to put Turban and beard in real-time (like Snap-chat effect). It relates to a lot of Computer Vision techniques and many experiments.
Google Vision is a cloud for computing face detection. It is extremely strong but the drawback here is that it just supports API call over, so real-time face tracking is impossible with that. We consider the rest library because we can implement that inside Swift project, so real-time requirement can be fulfiled.
The library you should always think about when come to Computer Vision is Open CV. To implement OpenCV inside Swift, the setup is quite tedious. We should create C++ wrapper by Obj C and then call Obj C function inside Swift. With Haar Casacade face detection methods, openCV support detection of many kinds of face features such as nose, mouth, eyes. However, it turns out that the accuracy is very low.
DLib is a super powerful face detection library in which it supports facial land mark. The face shape, the chin curve can be detected using DLib. It is very big bonus because adding beard to face is a feature we really want to have and it can be easily with facial land mark detection. The drawback of DLib is the super complication in the setup with very heavy libraries dependencies. We did not choose it for the first prototype due to it complexity.
Swift Core Image. A nice solution for fast development. It is unbelievable easy to achieve face tracking with higher precision than OpenCV. However, its big disadvantage is that its functions are very limit and it returns mouth, eyes point position instead of bounding boxes. As a result, when apply turban and beard to face, they are not perfectly aligned. Because of the limit time, we still choose Swift Core Image as the main library for this project. 
I think I overestimate myself a little bit. This task is quite hard for me. I should choose the better work around way that can reduce user experience to attain better accuracy

Sunday, October 2, 2016

Turbanize :D

Hooray, final assignment.
After the external pitching, I was quite impressed by the Turbanizer idea. It is a very fun application requiring skills in image processing, which I also intended to build. I also respect Ash Singh because of his long experience in business and It will be great if I can learn from him. That's why I decide to team up my former CS3217 teammate for the final project. Manh is a IOS developer god who can deliver one feature per hour and I really trust him. Last semester, we got 2nd prize in STEPS showcase for ACT IT OUT!, which is thanks to his great contribution. The other two members are Piyush and Varun. We haven't worked before but as I know, Piyush is very good at Marketing and design and Varun is a very solid coder. Thus, I believe we can make a good team and deliver the best product for this final project.

The end of assignment 3

Assignment 3 has ended for 1 week but till now I can have the time to write about it.

Finally after a very tedious week, we can deliver a pretty good application. The map is shown with the emoji. The news feed is live and very funky.

The thing I'm quite proud of is the real time feeds, comments and votes. Even it works pretty well but I dont think my solution is implemented properly. I think I should pick Firebase in the first place because it eases a lot of work. However, we were using SQL as the main database, I didn't want to use one more database to support extra features.

Another thing that I'm regretting right now is that I host SQL server by Amazon RDS service and it is costing me some money. After the first deployment, I should better create SQL server on the host machine. It is now late to change because the data will be lost if we migrate. However, one good takeaway is that I know how to use RDS service :D.

Overall, Im quite satisfied with my Assignment 3. Thank you Leon, Larry, Kai Yi. We made a great team. Let's pray for the best.

Sunday, September 18, 2016

Assign 3

Assignment 3 has started for 2 weeks. It's so intense that I did not have time to write blog for last week T_T.
This assignment is very interesting because we now experience new field in digital marketing - mobile app. At first, I thought the only way for creating mobile application are by Android Studio or XCode but I was wrong. There is a thing called progressive web app that uses modern web capabilities to deliver an app-like user experience. This is super interesting because we can easily extend number of users from web to mobile. The framework for PWS is also very developed and will take not much time to achieve that.
For the assignment 3, I teamed up with Leon, Larry and Kai Yi. We spent two days for brainstorming and picking the ideas. All of the members had contributed a lot of interesting ideas and finally local-based chat application is our final decision. We support geolocation to show the location of the conversation on map so that we can enhance user experience and possibly earn bonus grades for that. After concede the idea, we immediately assigned each one with a suitable task. I and Larry handle the backend while Leon and Kai Yi is in charge of the front end.
Because everyone in our team all experienced with Node JS, Express and React in Assignment 1, It did not take much time for us to agree on the above set of framework. The hard part of this assignment is to interact with map and do real time chat. Mapbox GL is a very powerful toolkit for us to achieve the geolocation work. Till now, we can show the location of the user as well as the pin of a post. There are still some works to do with the map like showing the description of the pins or linking the pin with the post. About the real time update, Socket.io is a good candidate for us to achieve that. Socket.io has beautiful messages classification system for differentiating event types and also good transmission performance as well. Current status is that we can now make a real time chat for comments in a post and are about to make the feeds live also.
Some problems that I have during working in this assignment is that there is no fully-developed node module for SQL database ORM as in Python or Ruby on Rails (or I cannot find it), so building and improving schema costs me a lot of time. Besides, Socket part heavily requires the interaction between back-end and front-end, and I'm not well-experienced with react development, It costs me long time to create a sample of real-time update for comments.
So there are 5 days left to the deadline, there are still many things for us to work on. I will try my best to deliver the best product to CS3216.

Tuesday, August 30, 2016

Review: Shopback

This week we have a seminar about growing business in digital market. The class was divided into 10 groups and each one presented about an application. I'm assigned to give critiques about Shopback. Below is what I learn from the presentation from group 1 following with my opinion.

Shopback is the first South-east Asian cashback company. Starting at Singapore, even though the idea is not new, Shopback is the pioneer in this field locally. Its revenue mainly comes from the merchants when they reward Shopback for its advertisement with the deals on its website. By this way, both users and sellers can gain benefit. To be successful on creating the connection between clients and retailer, it should have a very big user base. The UI/UX of the website is one of the most important factor to decide its popularity, so Shopback put great effort to achieve that by providing browser add-on which help eliminate disturbing redirect.

However, there are still many obvious drawback in its UI. The dual language shown in some retailer description can confuse clients, make them think that they are mistakenly addressing local site or getting translation failure. As group 1 suggestion, it is better to separate the site with different language, so the website representation can be disjoint correspondingly.

Another big mistake in the UI is that some description and action are too verbose that can dim the importance of main function. The example given in the seminar is about the crucial shopback link lost in the wall of text. It not only reduces user comfort but also lower . To fix that, shopback should pay more attention to UI and UX and bring critical thing more intuitive.

In my opinion, even Shopback is unique and new locally, I don't see the great potential in it. Having released for 2 years, it still haven't acquired sufficient popularity in the community (I haven't heard that before the seminar also). As a result, It is not big and reputable enough to gain adequate trust from sellers. Moreover, because I find that the UI is not so impressive and eyes catching, I'm not attracted to use it and so do many people. In conclusion, I think Shopback needs much more effort to become successful.

Sunday, August 28, 2016

[CS3216] Third week

Things are getting more intense. First time I have to deal with overlap assignments for the same module. Assignment 2 is about learning from famous application. After review from CS3216 committee, we were assigned Paper and Pencil from 53. On the way evaluating Paper and Pencil, we achieved a lot of interesting knowledge from Paper and Pencil such as design, technology and business , we successfully delivered a considerably good slide to submit for the first milestone of assignment 2.

For assignment 1, after creating a stable codebase, things were getting better. The work in team are perfectly shared and we kept the same pace with each other. I am very happy that features were delivered continuously fast. However, we encountered some problems that blocked us for a while such as Facebook Graph API. Due to some recent changes, we can no longer get the full friend list and their photos from Facebook. The next task after Facebook login is choosing the right host for our image management. After some investigation, we decided to move forward with Cloudinary. It is a very impressive image service because It supports all the things we need to handle images work like Image Upload, Cloud Storage, Administration and especially Image Manipulation.  I was responsible for creating api to deal with image and in the third week, I completed API for uploading image and getting image list.


I hope we can continue this great work till the end the first assignment.

[CS3216] Week 2 of the first assignment


After we hada clear picture about our application idea, we discussed on the technology stack for our project.
Because of the familiarity of our team members and the fast development, we chose Node JS, React-Redux, MongoDB stack. This set is also very powerful in term of performance, which makes it becomes hot trend recently. In the mid-assignment submission, we tried to deliver a runnable website with our logo.

At first, we started our project codebase with React Boilerplate. The template is very great when it offers robust and customizable front end. However, when we deployed it to Amazon Web Server, our web application kept failing. We realized that Redux is over complicated that can decrease our efficiency. Due to all the troubles boilerplate bring, we consider not using it in the project and create our own template by configure React/Webpack/Redux from scratch. In the end, the template worked nicely and is also very easy to be deployed on AWS EC2.


The second week has shown me the heavy load of this module with the first deadline. It's so wonderful that we handled all of the issues and successfully met our first requirement. I and our team will try our best to deliver the best product for the next deadlines.

Sunday, August 21, 2016

[CS3216] First week of the first assignment

The module got intense just in the first week. Because I was not in Singapore in my first week, I was randomly matched with other fellows for my assignment 1 . My team includes Hiep, Thang, Thien and me. Surprisingly all of my teammates are my well known friends, so I think it will be easier for us to cooperate. We immediately started our project after our team is formed.

In my view, it is a pretty good team. Thien and Hiep are very familiar with React front-end framework while I and Thang gain some experience with back-end. The drawback of full tech team is that we might not have proper design and comfortable user experience. To handle it, we carefully discuss with each other for every upcoming feature so that we can have different perspective and find the best way to make our users enjoyable.

Our first task was to think about what application we should build for assignment 1. After coming up with many creative and unique ideas, carefully considering the feasibility and usefulness of each one, we all agree on photo joining application. The concept is about combining 2 photos, one from the user and one from his friend, into a special photo that can be later shared on Facebook. This idea will very interesting because of its sociability and doesn't require much work to be delivered.

What I hope to learn in CS3216

CS 3216 is a very renowned module in SoC faculty because of its high applicability and challenge. From this module, I expect to achieve:

1) Entrepreneurial knowledge:
This module is a very special when its main target is for developing a useful real life application. The diversity of students varying from Computer Science, Engineer to Business and Science majors helps increase the creativity and applicability of the products. Besides, students can learn from each other, so they can update their knowledge in non-tech fields. It is significantly helpful when we start our own business.

2) Improve my technical skill:
I have been interested in web application for a very long time. Even I had some internships with backend work before, I did not have deep insights in end to end web development because the codebase is always already existed inside the companies. As a result, my job scope is always limited and I did not gain enough exposure about web application. Taking this module will fully equip my fundamental understanding and help me form a good team to start a promising web project.

3) Challenges:
Beside the super excitement this module offers, rumour from many previous CS3216 batches also tells that it is super heavy. It challenges students and put them to limit, so they will work extremely hard to catch up with continuous deadlines. Therefore it will teach us to learn and do things faster, get used to pressure, adapt to the stressful real life work.

In conclusion, even this module is very hard, I find it really valuable for my future career. I believe that I will have a memorable experience in the upcoming CS3216 journey.