Tuesday, April 22, 2008

tweetsearch - twitter search engine using thrudb and django


Last weekend Jake told me he's coding tweetsearch, a real-time twitter search engine, using thrudb as the data storage and indexing service. Since the original version of tweetsearch is coded in perl/cgi which is a little bit *old-school*, Jake asked me to port it to python/django for other new-school folks. I like the idea, so after some late nights, I've completely ported tweetsearch to python/django.

Thrudb is so great. I have been grabbing and indexing somewhat over 2 million tweets (Jake's number is 8 million!), and it never takes over 0.1s to search any query.

No doubt that the beauty of thrudb, the tanginess of django, and the zen of python all together give us a very strong technology platform on which we can leverage to build *the next big thing*.

Take the code, read the documentation, and start fulfilling your dream of world domination. Good luck.

Sunday, April 13, 2008

o^i ho^`ng nhan



Tối thứ bảy, đám Cù Sinh, Tô Hùng, Bông cùi ở Xóm Đẻ gọi điện rủ đi lai rai. Quán không nhỏ, không lớn, trông không có gì khác với những quán nhậu bình dân đầy rẫy ở cái quận 7 này. Khác biệt duy nhất, không đến từ mồi nhậu, cũng không đến từ khung cảnh, mà đến từ em chạy bàn.

Em tên là T, tầm 16-17, xinh ngẩn ngơ. Viết đến đây, chợt nghĩ, nếu em kô xinh thì tôi có viết cái entry này không ta? Chắc không quá . Ôi thì cũng là lẽ thường tình ở đời. Nếu mà gặp ai cũng nghĩ ngợi lung tung, hóa ra bị dở hơi àh?

Em quê ở Cái Bè, Tiền Giang. Em không kể, nhưng tôi cũng có thể tự hình dung ra được câu chuyện của em, đại loại như, nhà nghèo, đông anh em, ít ruộng, làm không đủ ăn, phải nghỉ học, bươn lên SG kiếm đường sống.

Nghĩ thấy buồn cười, lúc hỏi sao mà giàu sang dữ vậy, người ta sẽ có cả trăm cả ngàn câu chuyện để kể, nào là họ đã vượt qua khó khăn, chóp lấy thời cơ, biết nhìn xa trông rộng như thế nào, vân vân và vân vân; còn khi hỏi sao mà nghèo hèn thế này, hỏi trăm người, cả trăm chỉ có một câu chuyện sao mà giống nhau đến lạ.

Mỗi ngày em phải làm từ 5 PM đến 2 AM, đi ăn uống gì đó đến 5 AM, về nhà tắm rửa thay đồ, 6 AM bắt đầu ngủ đến 3 PM, dậy chuẩn bị đi làm tiếp. Cuộc sống cứ quay vòng như vậy, đến giờ chắc cũng được năm ba tháng rồi.

Khổ cực như vậy, nhưng em vẫn thấy vui lắm, bởi em tự nuôi sống được bản thân, lại còn hàng tháng gửi tiền về phụ tía má nuôi mấy thằng Út, con Chót nữa. Thế là vui rồi, còn hơn lúc trước ở dưới quê, đói trắng răng, em cười, miệng chúm chím. Răng em đúng là trắng thiệt.

Ở tuổi em, xinh xắn như em, và may mắn hơn em, người ta có một cuộc sống hoàn toàn khác.

Chẳng hạn như, sáng sáng nằm ngủ nướng, đợi bố mẹ đến lay mới chịu ngồi dậy, để chuẩn bị đi học. Ôi thôi thì đủ cả các công đoạn. Trước tiên là đi tắm, nào là phải có nước nóng, sữa rửa mặt, sữa tắm, nước hoa, nước khử mùi các loại.

Tắm xong thì đến màn chọn áo dài để mặc. Bộ nào đây ta, thiệt là khó nghĩ khi có đến năm bảy bộ để chọn. Ăn vận chỉnh tề xong rồi, xuống nhà, đã có đồ ăn sáng mẹ dọn sẵn cho, ăn xong rồi lên xe bố chở đi học.

Đến trường là có ngay một hai anh nhào ra, em xinh thế mà, giành nhau xách cặp táp giùm. Ngồi vào bàn, trong hộc bàn có một đóa hồng nhỏ, kèm theo một tấm thư be bé xinh xinh của một anh si tình nào đó. Ôi giời, trò này cũ rích, muốn làm em ngạc nhiên, làm ơn động não hơn một chút, nhé!

Đi học về, bố đón tận trường, về nhà mẹ lại dọn sẵn đồ ăn cho ăn. Trưa, trước khi đi ngủ, em còn tranh thủ ăn yaourt trộn với dâu tây cho nó đẹp da. 3-4h chiều thức dậy, em đi học thêm. Trời ơi, sao mà em ghét phải đi học thêm quá. Mà thôi kệ, đi học thêm em không phải mặc đồng phục, tha hồ điệu, cho mấy anh nhìn mê mệt.

Học thêm về, lại bố đón, lại mẹ dọn cho ăn. Tối một chút, em lên mạng, viết blog kể về cái sự đáng chán của cuộc đời em, nhưng cũng không quên kèm theo mấy tấm hình dễ thương em mới chụp hồi chiều.

Rồi em lớn lên, tốt nghiệp tú tài, đi du học tận trời Tây, mỗi tối vẫn viết blog than thở nhớ nhà, nhớ người yêu.

Còn em T sẽ ra sao?

Có thể ngay ngày mai, ba má gọi lên, báo tin dữ, chẳng hạn như thằng Út bị động kinh, cần tiền gấp. Em luýnh quýnh, chẳng biết làm sao, đành đi vay nóng của đám xã hội đen ở sát khu nhà trọ.

Rồi lãi mẹ đẻ lãi con, cái nghề chạy bàn của em không còn đủ trang trải nữa. Bà chị ở sát bên, bèn nhỏ to, thôi nghỉ đi, theo chị đi...tiếp thị bia, nghề nhàn nhã, mà lại có nhiều tiền.

Và ai cũng biết những gì xảy ra tiếp theo. Rồi ai cũng sẽ lên án em, có biết bao nghề đàng hoàng, sao lại bán thân nuôi miệng.

Em sẽ cười, miệng méo xệch, còn đâu nét hồn nhiên tươi vui hôm nay, bảo, òh thì tại nhà em nghèo...

(hình chôm của http://www.flickr.com/photos/fridaycafe)

Tuesday, April 1, 2008

matrix card - super cheap yet secure T-FA solution


For those who don't know what T-FA is, I recommend you guys take a look at the Two-factor authentication article on Wikipedia:
An authentication factor is a piece of information and process used to authenticate or verify a person's identity for security purposes. Two-factor authentication (T-FA) is a system wherein two different methods are used to authenticate. Using two factors as opposed to one delivers a higher level of authentication assurance. Using more than one factor is sometimes called strong authentication.
The first factor, and most of the time the only factor, people use to authenticate their customers is username & password which is something they know. Then to implement T-FA, you must have another authentication mechanism that's based on either something the customers have or something they are.

So what is a matrix card? That's something you as the service provider give your customers and use it as the second factor. Each customer will be mapped to one unique matrix card, then in order to be authenticated, they must prove that they have that particular card. Still confused? Take a look at this picture:

Why uses matrix card, instead of other "sth the customers have" solutions, e.g. RSA SecurID or smart card? Because it's cheap, both for you and your customers.

The last time I checked, a complete RSA SecurID solution for about 1,000 customers cost almost $70,000. With that amount of money, I can give for free each of our 250,000 customers a matrix card and still have enough bucks to book a 7 days business class trip to Singapore. Another reason is it's easy to develop yourself. It took us just two weeks from nothing to have a fully working prototype. In fact, one of the reason I choose matrix card is I don't like the idea of using third-party proprietary software for something as critical as the authentication system.

In addition, when you step in the customer's shoes, you will see that it makes no sense whatsoever if you force them to pay 30-40 bucks for the hardware token. Of course, some customers are willing to pay, but most of them are not. This is enough to ruin the solution since you can not merely protect 5% of your customers and ignore the rest.

So matrix card is definitively the way to go. It's a simple, easy to use, cheap to deploy yet secure solution.

If you read my previous entry, you probably recognize my last sentence and the title of this entry are kinds of snake oil. Secure against what, secure from whom? You may want to ask these questions. Let me state clearly that two-factor authentication can not help protecting your customers from man-in-the-middle phishing and/or trojan attack.

The only solution is not to authenticate the customer, but to authenticate the transaction. You must not make any assumption whatsoever about the identity of the one who's committing the transaction regardless of how strong you authenticate her.

If there's one general precept of security policy that is universally true, it is that nothing coming from the the other side of the communication can be trusted. Validate the data or you got BOF, SQL injection, and/or fraud transactions. I'm talking about an adaptive fraud detection system that can learn and analyze each customer behaviour, monitor all the transactions and alert whenever there's something abnormal going on. I'll probably write more about this later.

But T-FA with matrix card, of course, is not totally useless. At least it's a cost effective mechanism to reduce the risk of identity thieves to an acceptable level for now.