24/06/2012

Lập trình Qt cho Android

Nếu bạn đã có một chương trình Qt chạy khá tốt trên các nền tảng khác bây giờ bạn muốn chuyển nó qua Android mà bạn không muốn tốn nhiều công sức để viết lại từ đầu sử dụng Android SDK thì đây là bài viết phù hợp cho bạn.
Tôi cũng là một nhà phát triển phần mềm sử dụng Qt/QML. Tôi cũng có một mong muốn giống bạn. Tôi đã bắt đầu từ Android Lighthouse. Tuy nhiên gần đây tôi đã phát hiện ra Necessitas. Necessitas đã cung cấp cho người  dùng một bộ SDK khá hoàn chỉnh để phát triển chương trình Qt/QML cho Android. Necessitas sử dụng Android Lighthous, Qt Creator, Ministro. Tuy Necessitas chưa được ổn định nhưng đã phần nào đáp ứng nhu cầu của tôi.
Tôi đã thử phát triển chương trình QML và deploy trên Android phone. Chương trình chạy rất OK.

13/06/2012

Lần đầu tiên sử dụng dịch vụ nhờ thu hộ Séc

Nhớ lần đầu tiên tôi nhận Séc của GMI. Tôi không biết phải làm sao để sử dụng nó. Tôi lên mạng hỏi nhà thông thái Google. Thì ra tôi phải ra ngân hàng sử dụng dịch vụ thu hộ Séc. Gần chỗ tôi làm có phòng giao dịch của ngân hàng STB. Khi tôi đưa tờ Séc ra cô nhân viên xinh đẹp hỏi tôi có phải Séc du lịch không? Trời ơi tui biết Séc du lịch là cái gì tui chết liền ý. Tôi mới trả lời là mình không biết. Cô ấy chạy lại hỏi cấp trên một hồi và nói:
-Anh ơi cái này anh qua VCB ấy, bên đó họ mới thanh toán Séc quốc tế.
Tôi trở về mà lòng buồn buồn và tự hỏi sao mà phiền phức tiếp. Có được vài từ khoá qua cuộc trao đổi với cô tiếp tân của STB tôi quyết định hỏi bác Google lần nữa. Lần này tui hỏi bác ấy ngân hàng nào chấp nhận thanh toán. Bác ấy trả lời là BIDV. Sáng hôm sau tôi đến phòng giao dịch BIDV lấy số thứ tự và ngồi chờ. Đến lượt tui, tui đưa cái Séc ra, cô nhân viên BIDV lại lắc đầu lia lịa:
-Anh ui cái  này anh qua VCB kế bên nha, bên đó họ mới thanh toán Séc quốc tế.
Tôi đành phải qua phòng giao dịch VCB kế bên. Lần này không phải lấy số đâu nhé vì trưa rồi không còn ai nữa. Tôi đưa tờ Séc cho anh đẹp trai, anh ta lại lắc đầu nguầy nguậy:
-Anh ui cái này anh phải đến chi nhánh cơ. Ở TP.HCM thì anh đến CN Kỳ Đồng hay CN Bến Chương Dương.
Tôi không quên cảm ơn anh.
Hôm sau, tôi lên CN Kỳ Đồng vì chỗ này gần chỗ tôi. Tôi bắt số và ngồi chờ đến lượt. Cuối cùng cũng đến lượt tôi. Tôi đưa tờ Séc cho cho bank teller, cô ta nói giọng Huế ngọt lịm:
-Anh ui, cái này anh đến chỗ Bến Chương Dương nha, ở đó mới có bộ phận làm việc này.
Trong lòng bắt đầu chán nản nhưng tôi cũng cố lên Bến Chương Dương:
-Anh ui, cái địa chỉ trong Séc không giống trong CMND, địa chỉ này là địa chỉ tạm trú à. Vậy anh có đem sổ tạm trú không?
-Trời ơi sao tôi biết cái này phải đem sổ tạm trú chứ! Chị vui lòng cho tôi bổ sung khi đến nhận tiền không?
-Không được anh à! Vì sếp em duyệt nữa mà không có sổ tạm trú là không được duyệt rùi.
Tôi đành phải chạy về nhà để mượn sổ tạm trú. Khi quay lên tôi lại không đi đường cũ mà chạy lạc qua hầm chui Thủ Thiêm. Lần đầu tiên tôi chạy qua cái hầm này. Trời đất ơi cái hầm sao mà dài và qua hầm lại không có chỗ quay đầu xe. Cuối cùng cũng đến được VCB một lần nữa. Lần này mọi thứ suôn sẻ. Tiền thu từ Séc có thể tự động chuyển vào tài khoản.

02/06/2012

PHP: Phân biệt Android Phone và Android Tablet

Đầu tiên lấy thông tin UA từ server:
$userAgent = $_SERVER['HTTP_USER_AGENT'];
Nếu chuỗi này có chứa từ Android thì client device đang chạy Android OS:
if (stripos($userAgent, 'Android') !== false){
//Cần xác định Android Phone hay Android Tablet ở đây.
Không có một cách nào chính xác để phân biệt giữa Android Phone và Android Tablet (chưa kể một số web browser cho phép người dùng thiết lập UA). Tuy nhiên có một số mẹo sau:
  • Android 3.x chỉ sử dụng cho các Tablet.
  • Google khuyên các nhà sản xuất bỏ chữ 'Mobile' ra khỏi chuỗi UA.
  • Một số thiết bị Kindle Android lại có chữ Mobile trong UA nhưng nó lại không có chữ Silk.
if (stripos($userAgent, 'Android') !== false){
if (stripos($userAgent, 'Android 3') !== false || 
 stripos($userAgent, 'Tablet') !== false || 
stripos($userAgent, 'Mobile') === false || 
 stripos($userAgent, 'Silk') !== false )
  {
  //Android Tablet  
}else{
//Android Phone
}
}