Category Archives: Uncategorized

How to find anything with Google


You can find almost every kind of information with Google. That’s nothing new. But how?

A quick example: Yesterday, my friend’s headphone seems go wrong suddenly. When he views his favorite “comedie musicale” (he likes to say it so), he can hear the music, but not the voice of the singer. Such a crime to art.

So I advise him to ask the know-it-all of our century, Dr. Google. Though my friend must be kind of a difficult person himself, he is still far from this Doctor. Dr. Google answers every question thrown at him, but with one condition. You should know what you ask for.


After my friend throws in a dozen of query, like, “how can’t I hear my musicale”, I can’t standby any more. Putting in “headphone hear music but no voice”, go view first three links in SuperUser, skim through stuff, and find the right solution.

Below is some tips for doing it more efficiently.

1. Put thought in your search query. Be concrete. Think about what people may say if they have the same problem. Chances are, hundreds people have solved your problem before,

2. Identify reliable sources. SuperUser is a site I often search first when having problems with my computer. Clear question, short answer, easy to read, to the point, and saves lots of time. You can find your source by yourself.

3. Try searching by English first. If it doesn’t work, try a different language. You will be surprised when you see the gap between documents of different languages.



Dear 20/11,

This small letter is a note for myself, but also, my wish for someone else..

1) For a teacher that I’m in debt with. I don’t know how I can make up for my mistakes… But I’m yearning to become a Master, and will become a Master. You will see… It’s my promise.

2) For someone to whom I may never met again : I wish you a great career as a professor, much-loved by the students, and be a great teacher. There’s nothing as fulfilled as a job filled with love and happy laughs.

Sincerely yours,


Dependency Injection

/* Vietnamese: Bài viết này nhằm mục đích giải thích một cách đơn giản nhất khái niệm Dependency Injection – một khái niệm mới mẻ những đã khá phổ biến trong thế giới lập trình hiện nay */

To my readers (if there’s any yet): I have written this blog for a while. At first, it should reflect my learning process – not all, but every post is a mark somehow. For over half of a year, now I think it’s best to make many short posts instead of lengthly ones. Thank all of you for your support.

Dependency Injection is a fairly new concept. Its origin can be traced back to Rod Johnson – the founder of Spring Framework. But we won’t go to history lesson now, let’s skip to the content itself.

The basic idea of “Dependency Injection” lies on the problem: how we should manage the dependency between modules(in the simplest case, object) in a large system.

An object should not initialize its dependencies. Dependencies of an object should be given to it by the environment.

Let’s see the following example:

Naturally, when a module A(Printer) need module B(PaperService), the original OOP thinking styles should produce something like this:

class Printer {

PaperService paperService;

public Printer () {

paperService = new PaperServiceImpl();




But by Dependency Injection way, it should be like this:

 class Printer {

PaperService paperService;

public Printer(PaperServiceImpl service) {

this.paperService = service;




Finding key issues of the framework

Website System

1. How to learn a framework fast?

2. To learn a framework, you should grasp the “key” issues. But how to know what is a key issue?

Those two questions are pinned in my head somehow.

Not long ago, I’m investigating MVC model in Spring Framework 3.0. Most of the concept is fine, but I have problems doing the work with Spring 3 annotation config. It just seems all the book out there mention about Spring 2.x syntax, which is “xml configuration”. It’s easy to understand because that Spring 3 just appear and it will take a relative time to make a book available. So my habit about following book guides was discarded aside. I must try to find another source.

According the advice of my seniors, I go to the Spring document & find most of the thing is already here. Enough details, though a bit complex to a not-quite-familiar-with-java coder. I struggle with those concept a bit. But by comparing the document to several examples, finally I got some “working things”, which is great.

But here comes the most complicated part: integrating between frameworks. In one of my projects, I should use Spring combined with Freemarker. I investigate, and luckily enough, find this page which tell me how to use Freemarker macro to perform bindings (it’s not an easy luck).

But WTH, I can’t find a way to use the formCheckboxes! I found no working sample, and I’m not alone.

Dozens people out there can’t find a way to use that macro.

And the solution?

Well, I write my own macros.

It took me quite a time before I relize that simple solution, and curse how stupid I am. Since the end results of freemarker is HTML, who cares if it was rendered by supported macro or customed macro?

When you know what actually happens inside that big system, the answer seems to be natural.

Still remember 2 questions at the beginning of this post?

I must says the truth, that I don’t know the best answer. But I have something that seems to work:

The solution depends on the needs. If you just use the surface of the libraries API as the common “players”, some popular tutorials might be enough. Parsing XML maybe a good example for this issue. With the same reason, I think with beginner, Grails (instead of Spring) is a good start, cause it requires little work to make a full-fledge simple application.

If you want to create a customized & not-so-popular web application, it requires more tons of work. And a solid background is preferable.

Start at StackOverflow: A new way to gain reputation

/** Vietnamese: Một cách dễ dàng hơn để kiếm điểm reputation tại StackOverflow, đặc biệt cho người mới bắt đầu **/

In some previous posts, I have mentioned about some tips for starting at StackOverflow. Most of them require the new user to understand the basic value of the site, and then create good questions & answers. That way works perfectly in the long term, but people always want to speed up the process. Ok, I’m here to present a fairly new way (and maybe easier) to do that.

It’s about editing.

Previously, StackOverflow have a fairly strict rule about who can edit a post. If you read the FAQ carefully, you probably know that all your questions/answers can be modified by anyone with reputation-point more than 2000, though changes will get logged. And that’s how StackOverflow mimics Wikipedia: summoning the community support to refine the content on the site, without fearing misbehaviors from malicious users.

But now, editing is open for all users: actually, anyone can submit an edit, but it needs acceptance from users more than 2000 to effect the original post. If your edit gets accepted, you get 2 reputation points in return. That’s the new shiny suggested edit function. The total up to 1000 reputation points can be rewarded by this way.

With this new rule, new comer may have better times leveling up the reputation a bit (yes, it’s not that good to earn 1000 rep points by fixing others’ formatting mistakes). Anyway, I think it’s a good opportunity for starters.

What to do when the computer go crazy

Last week I go to see a trouble laptop of a friend. There are two problems: the DVD drive doesn’t play, and she can’t use Microsoft Office to edit documents. Those things was just fine before re-installing Windows, so I don’t think it’s a hardware-related problem; if yes, a visit to professional repair service is needed.

I tackled the second one first: re-installing Microsoft Office. An error pops out: can’t un-installing MS Office Home & Student. Fine, a search in Google: “can’t uninstall MS Office student home” solve it.

The first one is more trickier. Checking drivers: no problem. Inserting disk: nothing happen. I detect no abnormal symptom, except the additional “DVD Region” on the device manager was pointing to US. Try changing it, the disk shout that an “appropriate region disk” is required. So I… Google again :)

I got some relevant results, just like the first case, but this time it can’t be sure what cause the problem. My only guess is that the “DVD region” might be responsible. Walking through lots of proposed solutions yield no good result.

I gave up at that time. After home, I re-think and find out that my methods depends too much in finding how people solve similar problems. It may not work for a brand new problem, as the solution doesn’t actually arise from the problem itself. I’ll put a short list of my thinking here – hope this list saves someone a little time. On the other hand, if anyone have a propose to improve the methods, I’m more than pleased to discuss it :)

1) What’s strange with the computer? Is there any new software just installed? Is Windows re-installed? Is there any abnormal symptom or configuration?

2) Googling: in my experience, searching in English yield more good results than in native language (Vietnamese). The more you specify the problem, the better the results you get.

3) Ask on supporting forum: there are plenty of them out there. I prefer asking in English global forum like superuser, but any native technical forums is also good.

4) Consider re-installing Windows/Linux/Mac (your operating system). This solution is better if you prepared a Ghost of your system or keeping the original install disk. Otherwise, finding drivers might become a painful task.

5) Ask the experts.

Dollar sign($) and the ReplaceAll Gotchas

/* Vietnamese summarization: String.replaceAll() là một hàm tiện dụng của Java, nhưng do cách đặt tên lại dễ bị hiểu nhầm tác dụng với String.replace(). Bài viết trình bày sự khác biệt giữa hai hàm này qua một trường hợp nhầm lẫn ngớ ngẩn của người viết. */

Today I got a “big” mistake, which take a fairly long time to solve. It’s a problem related to String.replaceAll() function of Java. The experience is so hot that I want to share it immediately.

Here’s the simplified problem: I need to construct a template for sending Email. The web application will take the template and insert user information into it. This task is performed by replacing some placeholder by user true information, for example:

Template: {USER_NAME}‘s hometown is {USER_COUNTRY}

Sending content: Long‘s hometown is Vietnam.

Usually, content = template.replaceAll(“{USER_NAME}”,username); is enough. It works well in most cases, but problem occurs when username contains some special characters, specifically, the dollar signs ($).

I know the “$” must have been interpreted different by Regex, so I try to escape the character. My first thought is that replacing “$” by “$”, but no matter how many “”, “QE” or “String.quote()” I put in, replaceAll still refuse to work.

I do a quick search on Google, and find this post. The writer once had the same problem but find no answer, so he decided to go for a quick fix. Temporarily, I accept the proposed solution.

But when asking the seniors about the solution, he tells me that there’s one thing I missed at the beginning: in Java6, ReplaceAll is for regex-replacement , in my case, I can use String.replace() instead!

In short, replaceAll() when you use Regex, if not, a String.replace() is enough.

Về “Thách Thức” – cuộc thi học thuật dành cho sinh viên Công nghệ thông tin Tp. Hồ Chí Minh

** This post is written in Vietnamese only **

Thách Thức

Thách Thức là một cuộc thi học thuật thường niên được tổ chức bởi khoa Công nghệ thông tin, Đại học Khoa học Tự Nhiên, TP. Hồ Chí Minh. Được tổ chức lần đầu vào năm 2000, Thách Thức dần dần đã thu hút được số lượng đông đảo sinh viên từ các trường đại học trong địa bàn thành phố.

Mỗi trận đấu của Thách thức có 3 đội tham gia, chia thành nhiều phần thi nhỏ. Nhìn chung, các phần thi kiểm tra 3 mặt kĩ năng của sinh viên:

  1. Kiến thức tổng quan IT: các kiến thức nền tảng cơ bản về mạng máy tính, ngôn ngữ lập trình, thuật toán…
  2. Kĩ năng lập trình – thuật toán: đây là kĩ năng cơ bản được tập trung rèn luyện ở môi trường đại học. Trong cuộc thi, kĩ năng này chủ yếu được kiểm tra ở vòng thi lập trình. Luật chơi: Thành viên của mỗi đội sẽ hợp sức cùng giải một bài toán mà ban tổ chức đưa ra. Điều đặc biệt của phần thi này là ở chỗ: thời gian hội ý của mỗi đội bị giới hạn, và sau đó thành viên của các đội phải luân phiên thay nhau lập trình (mỗi thành viên chỉ có khoảng một phút để lập trình trên máy tính, sau đó phải nhường chỗ cho thành viên khác)
  3. Kĩ năng phối hợp đồng đội: ngoài phần thi lập trình tiếp sức, một phần thi khác cũng đòi hỏi sự phối hợp nhóm cao là “Nối mạng toàn cầu”.

    Luật chơi
    : mỗi đội sẽ phải chia làm 2 nhóm, nhóm truyền tin sẽ nhận một đoạn mật mã dưới dạng chuỗi bit. Sau đó nhóm truyền tin phải dùng các động tác để truyền tin cho nhóm giải mã. Nhóm giải mã dùng khóa được cung cấp giải mã tin rồi ghi ra kết quả, nộp về cho ban tổ chức. 

    Luật chơi nhìn có vẻ đơn giản, nhưng thật sự đây là một phần thi mang tính “thách thức” nhất. Do thời gian rất hạn chế, nên các đội phải phát huy tính sáng tạo của mình: làm sao cho truyền tin nhanh nhất, giải mã đúng nhất. Trong số 27 đội lọt vào chung kết, thường chỉ có 3, 4 đội có khả năng giải mã kịp thời gian; nhưng tính chính xác lại là một vấn đề khác :)

“Thách Thức” có thể tốt hơn?

Theo suy nghĩ cá nhân, tôi nghĩ “Thách thức” sẽ đầy đủ và phong phú hơn nếu thêm vào những phần chơi bổ trợ cho những kĩ năng sau:

Kĩ năng giải quyết bài toán mở:

Thách Thức có một phần thi gọi là Robot tìm đường. Mỗi đội sẽ điều khiển một Robot trên bàn cờ, cố gắng tìm cách làm sao để ăn được nhiều “quà” nhất. Phần thi sẽ kết thúc nếu có một đội về đến đích.

Tôi tự nghĩ, không biết sẽ thế nào nếu ta cho phép các đội lập trình cho robot đi, thay vì điều khiển bằng tay? Ý tưởng thi đấu các chương trình không mới, nhưng có lẽ sẽ làm cuộc thì thú vị hơn.

EDIT: Xin lỗi về việc chậm cập nhất thông tin: phần thi đấu Robot tìm đường đã thay đổi, từ Thách thức 2011 các đội sẽ viết code để điều khiển robot :)

Kĩ năng hiểu và vận dụng code “có sẵn”:

Khi đi làm, thường xảy ra trường hợp lập trình viên phải đọc hiểu code của người khác, sau đó sửa chữa, bảo trì và bổ sung tính năng mới. Tôi nghĩ sẽ rất tốt nếu Thách thức có một phần thi tương đương như vậy: cho một chương trình lớn đã chạy, tìm cách sửa chữa sao cho đáp ứng được yêu cầu thay đổi của “khách hàng” đề ra.

Tôi nghĩ phần thi này sẽ thiết thực và thú vị hơn phần thi “giải mã tiếp sức”, vốn thường là dạng “đánh đố” cú pháp ngôn ngữ C.

Chiều ngày hôm nay, 02/04/2011, Thách Thức 2011 sẽ chính thức khởi động ở Giảng đường I, Đại học Khoa học Tự Nhiên với trận đấu đầu tiên giữa ba đội: Vietchallenge, Zeros và BK 09. Nếu bạn là dân CNTT thì đừng nên bỏ qua cơ hội này: ngoài những vòng thi gay cấn, ban tổ chức còn thường dành ra những câu hỏi thú vị và những món quà cho khán giả.

Suy nghĩ sau khi xem cuộc thi “Phương pháp học tập hiệu quả”

The English version  of this post can be found here.

Chủ nhật vừa rồi tôi có dịp đến vòng chung kết của cuộc thi “Phương pháp học tập hiệu quả” do Nhà văn hóa sinh viên tổ chức. Tuy thời gian quan sát rất ngắn ngủi, nhưng tôi cũng cảm thấy rất thú vị với sự sáng tạo của các đội chơi. Từ cách thể hiện chuyên nghiệp trên tập san, đến những câu trả lời dí dỏm và đầy thông minh trên sân khấu, đã cho thấy các đội đều đã nắm rất chắc những phương pháp học tập mà nhóm mình trình bày.

Cuộc thi kết thúc tốt đẹp với chiến thắng thuộc về đội “Đại năng nổ” của Đại học mở TP. HCM. Những nhóm học tập còn lại cũng tích lũy được thêm những bài học kinh nghiệm quý báu. Tuy thế, khi ra về tôi có một chút băn khoăn. Nhà văn hóa sinh viên tổ chức cuộc thi này để góp phần khuấy động phong trào cải thiện khả năng học tập của sinh viên. Nhưng liệu có thể làm tốt hơn nữa được hay không?

Từ lâu, báo chí đã nhắc nhiều đến việc những sinh viên mới than phiền mình không được hướng dẫn, bị sốc khi chuyển giao vào môi trường đại học. Nhưng tôi không chắc rằng trong số mấy trăm sinh viên ngồi trong khán phòng của cuộc thi này, có bao nhiêu phần trăm có thể áp dụng được những phương pháp được trình bày hôm nay.

Vì sao lại như vậy?

Bởi vì xét kỹ mà nói, bản thân việc “truyền đạt phương pháp” cũng là một việc không đơn giản.

Người ta vẫn thường nói truyền đạt tri thức, truyền đạt công nghệ, khoa học kĩ thuật… chứ chưa từng nghe đến “truyền đạt phương pháp”. Đó là vì tri thức là những kiến thức “tĩnh”, bất biến, có thể được ghi lại trên mặt giấy, ai đọc chịu khó ngẫm cũng hiểu được ít nhiều. Hoặc giống như các thầy đồ gàn xưa kia, không hiểu thì có thể học thuộc lòng. Kiểu như “một công một là hai” vậy.

Còn “phương pháp”, tự thân nó là một tri thức động. Phương pháp được hình thành dựa trên sự kiểm nghiệm và cải tiến cách thức làm việc của con người sao cho tối ưu, có lợi nhất. Với mỗi môi trường và điều kiện, với mỗi con người khác nhau, phương pháp có thể cần được sửa đổi cho phù hợp.

Hãy nói về chuyện đơn giản nhất: viết chữ. 90% chúng ta viết chữ bằng tay, nhưng Nguyễn Ngọc Ký và không ít những người tàn tật khác lại viết bằng chân. Về việc học, có người học tốt nhất khi ở yên tĩnh một mình, người khác lại ưa học trong phòng đông người. Mỗi một phương pháp có những ưu điểm và khuyết điểm riêng, tất cả tùy thuộc vào người vận dụng.

Cũng giống như việc học võ, chẳng ai có thể học bằng cách đọc hay nhìn người khác biểu diễn. Tự bản thân người học phải luyện tập, cảm nhận được từng thế di chuyển, từng miếng ra đòn mới có thể áp dụng được. Để học một “phương pháp”, người học buộc phải áp dụng, thí nghiệm, lật đi lật lại để điều chỉnh phương pháp đó sao cho phù hợp với hoàn cảnh và tính cách của mình.

Vậy vấn đề đặt ra ở đây là: Áp dụng phương pháp học như thế nào?

Tôi đọc qua một số bài thảo luận trong cuộc thi, thấy trình bày về rất nhiều phương pháp ghi nhớ, phân loại, sơ đồ tư duy (mind-mapping) rất ấn tượng. Nhưng để áp dụng được nó thì vẫn còn là chặng đường dài. Và chưa kể, trong hàng chục hàng trăm cách cải tiến, thì ta nên áp dụng cách nào trước?

Theo tôi, khi muốn áp dụng một phương pháp học mới, người học cần chú ý những điều sau:

1) Các phương pháp học chỉ là các công cụ, không phải chìa khóa vạn năng. Ý tưởng này tôi “mượn” từ một quyển sách Quản lý dự án (“No silver bullet”).

2) Mục tiêu. Xác định được mục tiêu sẽ cho người học động lực. Đây có thể xem là điều quan trọng nhất, đóng vai trò định hướng giúp người học “đi đúng đường”, vượt qua những trở ngại trong quá trình học.

3) Chú ý đến thói quen. Thói quen dẫn dắt hành động, hành động định hình số phận. Hãy hình thành những thói quen lý tưởng mà bạn muốn có, chúng sẽ là tài sản cố định lâu dài của bạn.

4) Tính kỷ luật, tự chủ của người học. Lúc đầu sẽ rất khó để thay đổi. Ít nhất cho đến khi thói quen được hình thành. Kỷ luật là công cụ giúp hình thành thói quen tốt nhất.

5) Rút kinh nghiệm và tự điều chỉnh: Không có gì có thể hoàn hảo ngay từ lần đầu tiên. Phải kiên nhẫn làm đi làm lại, mỗi lần tự hoàn thiện cho tốt hơn. Kết quả cuối cùng sẽ là câu trả lời tốt nhất.

6) Học nhóm: sẽ rất tốt nếu có thể học hỏi được từ nhiều người khác nhau.

Flock vs. Rockmelt – It’s a new age for Social Browser?

Flock & Rockmelt

Flock & Rockmelt

**Vietnamese: trong bai viet nay, toi gioi thieu van tat ve 2 trinh duyet web co tich hop tinh nang mang xa hoi hien nay.**

They are two so-called brand new browsers which change the user-experience toward social-perspective. I have prepared some materials to present about them, but it seems I can’t for now, so just experience it yourselves. Maybe that will be even better!


Flock was first released in 2005, based on Mozilla engine (like Firefox). Then it’s ported to chromium platform. Flock support several social platform, include Facebook, Twitters… You must register a Flock account to use its social features.

Experience: Very simple and user-friendly. I am surprised when I use it the first time. Nice concept & good design, in short.

Flock browser

Flock browser


In 2010, Rockmelt was born on Chromium platform. Later than 5 years, but it has a better interface compared to Flock(color combination & notification system are much better). When first saw it, I must says “wow”. The bad side is that it requires you have a facebook account to start, and you must give Rockmelt nearly full control of that account. And the long time it took to start may count, too.

Rockmelt browser

Here’s a short comparison list of these two browsers (maybe a bit out-dated).