09/08/2011

Thêm ngày lễ vào lịch của dự án

Bài viết này áp dụng cho Microsoft Project 2007.
Trong Microsoft Project 2007 không có lịch những ngày lễ được thiết lập trước do đó bạn cần thêm các ngày nghỉ lễ của công ty bạn vào trong lịch của dự án một lần. Trong trường hợp bạn muốn dùng lại việc thiết lập này cho nhiều dự án thì bạn nên tạo template hoặc thêm lịch vào tập tin toàn cục hoặc enterprise global template.
  1. Tools > Change Working Time
  2. Trong danh sách "For calendar" chọn lịch mà bạn muốn thay đổi.Project Calendar chọn Standard (Project Calendar) hoặc 24 Hours hoặc Night Shift cho lịch của dự án.
  3. Chọn Exceptions trong Change Working Time.
  4. Đặt một cái tên ví dụ Ngay_le chọn thời điểm bắt đầu, thời điểm kết thúc
  5.  Nếu Ngay_le lập lại nhiều lần trong dự án thì nhấn chuột vào "Details"
  6. Trong Recurrence pattern chọn tần xuất lập lại từ "Daily" (hàng ngày) đến "Yearly" (hàng năm).Range of recurrence chọn "Start" cho thời điểm bắt đầu, chọn "End after" hoặc "End by" cho thời điểm kết thúc.
  7. Nếu bạn chọn   "End after" bạn phải nhập vào số lần mà Ngay_le lặp lại.Nếu bạn chọn "End by" bạn phải nhập vào ngày mà Ngay_le ngừng lặp.
Các task bạn schedule quanh Ngay_le sẽ bị schedule lại để Ngay_le là ngày không làm việc.

02/08/2011

July Album

IVC Champion Cup (07/31/2011)
SCAMPI A (07/30/2011)
 AAB-1101 Class (07/23/2011)
IVC Amazing Race (07/08/2011)

27/07/2011

Tại sao phải truy xuất View qua hàm findViewById

Trong khi lập trình Java, Delphi, C++ ... nếu chúng ta có Form a, b là Widget nằm trong a thì ta có thể truy xuất b bằng cách a.b hay một cách tương tự.
Vậy tại sao trong Android, nếu có Activity a và View b nằm trong file layout của a thì ta không truy xuất b qua a mà phải sử dụng hàm static của Activity findViewById?
Thật ra nếu ai nắm kỹ về định nghĩa Activity đều dễ dàng trả lời câu hỏi này:
Activity là đối tượng mà chúng ta đặt lên trên nó các View để xây dựng nên màn hình
Vậy các View không phải "nằm trong" hay đối tượng con của đối tượng Activity như trường hợp của Form ở trên.

24/07/2011

Tại sao mã nguồn Android có giấy phép sử dụng APL 2.0

Sau khi học qua Kiến trúc của Android:
Có một số bạn thắc mắc GNU libc có giấy phép sử dụng là LGPL vậy Android sử dụng GNU libc thì tại sao Android lại có giấy phép sử dụng là APL 2.0 chứ không phải là LGPL hay GPL?
Thật ra Android không dùng GNU libc (glibc) mà Android sử dụng Bionic libc.
Sau đây là một số đặc điểm của Bionic libc:
  • Giấy phép sử dụng: BSD License.
  • Kích thước: Vì libc được load lên trong mỗi process cho nên kích thước của libc càng nhỏ càng tốt. Bionic libc có kích thước khoảng 200KB bằng một nửa kích thước GNU libc.
  • Tốc độ:Bionic libc hiện thực lại pthread để nó nhỏ gọn hơn, tốc độ nhanh hơn để khắc phục hạn chế sức mạnh của CPU.
  • Bionic libc bổ sung thêm chức năng dành riêng cho Anroid như system properties và logging.
  • Bionic libc không hỗ trợ không số đặc điểm của POSIX như C++ exception, wchar cho nên Bionic libc không tương thích với GNU libc.

Tại sao gọi hàm setContentView trong onCreate?



Sau khi học qua vòng đời của một Activity:

có người thắc mắc rằng tại sao chúng ta không đặt lời gọi hàm setContentView để thiết lập layout cho Activity ở onStart hay onResume mà phải đặt nó trong onCreate?
Để trả lời cho câu hỏi này chúng ta xem xét mối quan hệ giữa các sự kiện xảy ra trong vòng đời một Activity và ba trạng thái của Activity (background/foreground/visible):
Chúng ta thấy rằng onStart/onResume ở trạng thái visible cho nên người dùng đã nhìn thấy màn hình của Activity. Nếu ta gọi hàm setContentView ở đây thì xảy ra tình trạng người dùng sẽ nhìn thấy màn hình trống trong khoảng thời gian nhất định.

19/07/2011

Gửi dữ liệu sang ứng dụng khác sử dụng Notification

Giả sử chúng ta muốn gửi dữ liệu sang ứng dụng khác có tên class:
com.nghelong.blogexample.MainActivity
sử dụng Notification. Điều này có nghĩa là khi ứng dụng chúng ta đang chạy thì xuất hiện một Notification message trên thanh status bar. Khi người dùng click vào Notification thì màn hình MainActivity bật lên.


Notification notification = new Notification(icon, tickerText, when);
Bundle xtra = new Bundle();
Intent ntent = new Intent(); 
ntent.setClassName("com.nghelong.blogexample",
                    "com.nghelong.blogexample.MainActivity");
//set data here
//xtra
ntent.putExtras(xtra);
int flags = Intent.FLAG_ACTIVITY_NEW_TASK
                    | Intent.FLAG_ACTIVITY_SINGLE_TOP
                    | Intent.FLAG_ACTIVITY_CLEAR_TOP; 
ntent.setFlags(flags);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
                ntent, PendingIntent.FLAG_UPDATE_CURRENT); 
notification.setLatestEventInfo(context, contentTitle, contentText,
                pendingIntent);
nm.notify(NOTIFICATION_ID, notification);