19/12/2012

nlctim version 2.0 release

Phiên bản 2.0 của nlctim được release vào 19/12/2012.
Phiên bản này tương thích với Yahoo! Messenger 11.5
Tải nlctim về tại http://nlctim.sf.net

09/12/2012

Student Visit Tour Document

Thời gian vừa qua Folami có cơ hội được trò chuyện với các bạn sinh viên HCMUT (cũng là các bạn đồng môn F). Nội dung chính là các bạn chuẩn bị gì để trở thành một nhà phát triển phần mềm C/C++ và một vài kinh nghiệm cho buổi phỏng vấn xin việc. Tất cả những vấn đề nêu ra đều xuất phát từ ý kiến cá nhân của F trong quá trình phỏng vấn các bạn sinh viên mới ra trường xin việc làm. Nếu có thông tin gì không đúng hay có gì muốn trao đổi với F thì đừng ngần ngại gửi email cho F.

06/12/2012

Hiển thị tập tin Freemind trong Blogger


  •  Tải visorFreemind.swf từ trang nhà của Freemind
  • Upload visorFreemind.swf lên một host miễn phí nào đó ví dụ http://www.000webhost.com. Giả sử URL của file visorFreemind.swf là http://www.example.com/visorFreemind.swf
  • Upload file Mindmap example.mm lên host tương tự như tập tin visorFreemind.swf. Giả sử URL của file này là  http://www.example.com/example.mm
  • Tạo bài viết mới trong blog của bạn chọn tab "HTML" và post nội dung bên dưới vào:
<div style="width: 100%;height:500px;">
<object data="http://www.example.com/visorFreemind.swf" height="100%" type="application/x-shockwave-flash" width="100%">
<param name="movie" value="http://www.example.com/visorFreemind.swf" />
<param name="quality" value="high" />
<param name="flashvars" value="initLoadFile=http://www.example.com/example.mm&amp;openUrl=_self&amp;startCollapsedToLevel=3&amp;maxNodeWidth=200&amp;mainNodeShape=elipse&amp;justMap=false&amp;defaultToolTipWordWrap=200&amp;offsetX=middle&amp;offsetY=middle&amp;buttonsPos=top&amp;min_alpha_buttons=20&amp;max_alpha_buttons=100&amp;scaleTooltips=false&amp;bgcolor=0xF8FBFC" />
</object>
</div>
Sau đây là một ví dụ:

05/12/2012

Những điểm mới trong XCode 4.5

Hiện nay XCode có phiên bản mới nhất là 4.5.2. So với phiên bản 4.5 thì các phiên bản 4.5.1 và 4.5.2 chủ yếu là để sửa các lỗi trong phiên bản 4.5. So với các phiên bản trước đó thì XCode 4.5 có những điểm nổi bật như sau:

  1. LLDB là trình gỡ rối mặc định thay cho GDB.
  2. Hỗ trợ OpenGL debugging & performance analysis.
  3. Auto layout.
  4. Object-C literal trong NSArray và NSDictionary.
  5. Hỗ trợ truy xuất bằng toán tử [].
  6. Hỗ trợ chuẩn C++11.
Trong các điểm này thì 4 và 5 là hai điểm hấp dẫn nhất:

  • NSNumber literals:
  // character literals.
  NSNumber *theLetterZ = @'Z';          // equivalent to [NSNumber numberWithChar:'Z']

  // integral literals.
  NSNumber *fortyTwo = @42;             // equivalent to [NSNumber numberWithInt:42]
  NSNumber *fortyTwoUnsigned = @42U;    // equivalent to [NSNumber numberWithUnsignedInt:42U]
  NSNumber *fortyTwoLong = @42L;        // equivalent to [NSNumber numberWithLong:42L]
  NSNumber *fortyTwoLongLong = @42LL;   // equivalent to [NSNumber numberWithLongLong:42LL]

  // floating point literals.
  NSNumber *piFloat = @3.141592654F;    // equivalent to [NSNumber numberWithFloat:3.141592654F]
  NSNumber *piDouble = @3.1415926535;   // equivalent to [NSNumber numberWithDouble:3.1415926535]
  // BOOL literals.
  NSNumber *yesNumber = @YES;           // equivalent to [NSNumber numberWithBool:YES]
  NSNumber *noNumber = @NO;             // equivalent to [NSNumber numberWithBool:NO]
 #ifdef __cplusplus
  NSNumber *trueNumber = @true;         // equivalent to [NSNumber numberWithBool:(BOOL)true]
  NSNumber *falseNumber = @false;       // equivalent to [NSNumber numberWithBool:(BOOL)false]
 #endif
Lưu ý:
    • Giá trị sau @ là một giá trị đơn, không chấp nhận biểu thức. Trong trường hợp cần đóng gói
      (boxing) cho một biểu thức thì sử dụng cú pháp:@(expression)
    • Đóng gói giá trị enum thì giá trị này chuyển sang kiểu của enum, nếu enum không khai báo kiểu
      thì kiều mặc định là số nguyên.
    • Đóng gói C string chuyển thành NSString với UTF8 encoding.
  • Container literals:
    • Array: NSArray*a = @[Danh sách các đối tượng ngăn cách nhau bằng dấu phẩy];
    • Dictionary: NSDictionary*b = @{ 1 danh sách các cặp @"key":object cách nhau bằng dấu phẩy}.
  • Object subscripting:
NSMutableArray *array = ...;
NSUInteger idx = ...;
id newObject = ...;
id oldObject = array[idx];
array[idx] = newObject;      // replace oldObject with newObject

NSMutableDictionary *dictionary = ...;
NSString *key = ...;
oldObject = dictionary[key];
dictionary[key] = newObject; // replace oldObject with newObject
  • Sử dụng #if __has_feature(objc_array_literals|objc_dictionary_literals|objc_subscripting) để kiểm tra chức năng này có hay không.

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.