Kỹ năng huấn luyện và đánh giá nhân viên

Nội dung

  • Huấn luyện và kèm cặp nhân viên
    • Huấn luyện là gì?
    • Tại sao phải huấn luyện?
    • Quytrình huấn luyện
    • Cácphương pháp huấn luyện
    • Trở thành người huấn luyện hiệu quả
  • Đánh giá nhân viên
    • Tầm quan trọng của việc đánh giá đúng nhân viên
    • Quy trình đánh giá nhân viên

Qua bài chia sẻ này các bạn sẽ học hỏi được:

  • Nắm vững được một số kiến thức cơ bản về Huấn luyện và kèm cặp
  • Học hỏi được một số kỹ năng quan trọng về Huấn luyện và kèm cặp
  • Tự tin hơn trong công tác đào tạo và phát triển nhân viên
  • Nắm vững tầm quan trọng và quy trình đánh giá nhân viên

coaching

I. HUẤN LUYỆN NHÂN VIÊN

  1. Huấn luyện là gì?

    • “Huấn luyện là một hoặc nhiều phương pháp để cải tiến cách thức, hình thành thói quen làm việc mới của những người khác.”
    • Định nghĩa khác: “Huấn luyện là một quy trình có tính chất tương tác và thông qua đó các nhà quản lý và giám sát sẽ giải quyết vấn đề về năng lực thực hiện và phát triển khả năng của nhân viên.”
  2. Tại sao phải huấn luyện?

    • Khắc phục các vấn đề về năng lực thực hiện
    • Giúp nhân viên có năng suất cao hơn
    • Giải phóng thời gian của quản lý
    • Quản lý có thể quản lý nhóm nhiều nhân viên hơn
    • Quản lý có thể dành thời gian cải tiến, phát triển các kinh nghiệm, kỹ năng trong công việc chung
    • Tạo ra năng suất chung của bộ phận ngày càng cao hơn
    • Nuôi dưỡng một môi trường văn hóa làm việc tích cực
    • whycoaching
  3. Quy trình huấn luyện?

    • Screen Shot 2018-07-02 at 3.31.52 PM
  4. Bước 1: Chuẩn bị

    • Quan sát để hiểu rõ tình huống, bản thân nhân viên và các kỹ năng hiện tại của người đó.
    • Xác định điểm mạnh và điểm yếu của nhân viên
    • Quan sát hành vi của nhân viên theo cách không chính thức (quan sát trong khi họp,..) lẫn chính thức ( như khi pair coding,…) để phát hiện nhân viên thực hiện tốt/không tốt điều gì
    • Tránh phán xét vội vàng
    • Lắng nghe chủ động 
    • Nếu nhân viên yêu cầu giúp đỡ, bạn nên cư xử như thế nào? hãy khơi gợi bằng cách hỏi: “Phần nào trong công việc của anh khiến anh thấy rắc rối nhất?”.
    • Yêu cầu nhân viên chuẩn bị bằng cách để nhân viên đó tự đánh giá năng lực thực hiện công việc của mình. Việc tự đánh giá của nhân viên đem lại hai lợi ích: Lôi kéo nhân viên tham gia vào quy trình huấn luyện. Đem lại cho nhà quản lý một quan điểm nhìn nhận khác về công việc của cấp dưới cũng như các vấn đề liên quan
  5. Bước 2: Thảo luận

    • Chuẩn bị rõ ràng về mục đích thảo luận
    • Sẵn sàng đối thoại chia sẻ các chiến lược để khắc phục những vấn đề về năng lực thực hiện và xây dựng các kỹ năng.
    • Tập trung vào cách hành xử thay vì thái độ
    • Đặt câu hỏi thăm dò để hiểu người đối thoại
    • Câu hỏi đóng “Có” hoặc “Không” để nhấn mạnh câu trả lời, khẳng định lại những gì người kia đã nói, duy trì sự nhất trí của 2 bên
    • Câu hỏi mở để tìm giải pháp, khám phá thái độ, động cơ
    • “Anh đã thử chưa?”

      “Anh nghĩ cách tốt nhất để là gì?”

      “Anh nghĩ điều gì sẽ xảy ra nếu anh ?”

      “Vậy là anh đã thử và kết quả thật đáng thất vọng. Anh có giả định gì về sự việc đó không?”

      “Tôi để ý thấy anh hiếm khi chia sẻ quan điểm của mình trong các cuộc họp nhóm. Tại sao vậy?”

    • Tạo bầu không khí thoải mái
    • Lắng nghe những cảm xúc ẩn sau lời nói
    • Gạt bỏ thành kiến
    • Đưa ra kế hoạch huấn luyện được thống nhất cả người huấn luyện và người được huấn luyện
    • Nhân viên chấp nhận thay đổi khi họ hiểu được hậu quả từ hành vi và công việc của họ
    • Khuyến khích nhân viên bày tỏ điểm bất đồng
  6. Bước 3: Huấn luyện

    • Cấu trúc huấn luyện bao gồm: ĐỊNH NGHĨA (Xác định mục tiêu làm việc) ->  PHÂN TÍCH (Hiểu rõ tình trạng hiện thời) -> KHÁM PHÁ (Tìm ra cách thức đi tới mục tiêu đề ra ) -> HÀNH ĐỘNG (Xác định thời gian hoàn thành mục tiêu) -> HỌC HỎI (Thực thi những gì đã thống nhất ) -> PHẢN HỒI (Kiểm tra lại toàn bộ quá trình trong buổi huấn luyện kế tiếp ).
    • Quá trình huấn luyện: Huấn luyện là một quá trình không có điểm dừng – mỗi một thành công sẽ là nền tảng cho thách thức mới. Tuy nhiên khi huấn luyện phải luôn chú ý tới quá trình 6 bước ở trên để đi tới đích.
    • Một số lưu ý:

      -Đạt được sự nhất trí về mục tiêu

      -Đảm bảo nhân viên thấy được lợi ích rõ ràng trong các mục tiêu huấn luyện

      -Nhân viên nên được tạo cơ hội để soạn thảo một kế hoạch nhằm khắc phục những nhược điểm trong năng lực thực hiện

      -Bạn đang giúp cấp dưới thực hiện những nhiệm vụ gì? Bạn đã cung cấp cho họ những ví dụ cụ thể về công việc đó khi được thực hiện tốt chưa?

      -Chia sẻ kinh nghiệm của riêng bạn nếu chúng tỏ ra hữu ích.

       

    • Khi đưa ra phản hồi, nên:

      -Tập trung vào cải thiện năng lực, tránh chỉ trích hay nhấn mạnh kết quả yếu kém

      -Tập trung vào vấn đề có thể điều chỉnh và cải thiện trong tương lai

      -Đưa ra phản hồi càng sớm càng tốt

      -Tập trung vào cách hành xử chứ không phải tính tình, thái độ và nhân cách

      -Tránh nói chung chung, hãy chân thành, thực tế

  7. Bước 4: Theo dõi

    • Để giám sát sự tiến bộ
    • Giúp các cá nhân đi đúng hướng
    • Quy trình theo dõi liên tục
      • Xác định ngày giờ cụ thể để thảo luận theo dõi
      • Kiểm tra sự tiến bộ của cá nhân
      • Tiếp tục quan sát
      • Kiểm tra cách thực hiện của nhân viên và đề nghị giúp đỡ khi cần thiết
      • Xác định những phần việc có thể điều chỉnh cho kế hoạch hành động
      • Tìm hiểu những gì có tác dụng và những gì có thể cải thiện trong buổi huấn luyện.
  8. Các phương pháp huấn luyện

    1. Phương pháp ĐẨY
      • Huấn luyện viên đưa cho người được huấn luyện những yêu cầu rõ ràng về cách thực hiện từngbước
      • Hướngdẫn cụ thể, yêu cầu làm theo
      • Kiểm tra, đánh giá kết quả và yêu cầu tập đi tập lại
    2. Phương pháp KÉO
      • Chỉ ra mục tiêu, yêu cầu học viên tự đề xuất phương án giải quyết
      • Đánh giá các ưu, nhược điểm và lựa chọn giải pháp
      • Tìm ra các điểm cần cải tiến
      • Khuyếnkhích nhân viên tự tìm cách cải tiến
      • Góp ý và cùng nhân viên điều chỉnh cách cải tiến
    3. So sánh phương pháp ĐẨY vs KÉO
      • Screen Shot 2018-07-02 at 3.57.03 PM.png
    4. Phương pháp kết hợp ĐẨY và KÉO
      • Screen Shot 2018-07-02 at 3.57.19 PM
  9. Thế nào là huấn luyện hiệu quả?

    1. Huấn luyện viên NÊN:
      • Lắng nghe trước, sau đó sẽ đặt câu hỏi, đưa ra những phản hồi mang tính xây dựng và sẵn sàng đề ra những ý tưởng mới.
      • Hãy phát triển nhân viên bằng cách giao việc để tận dụng khả năng của họ.
      • Giúp đỡ nhân viên học hỏi từ những sai lầm mà họ mắc phải, xác định mục tiêu
      • Động viên, khuyến khích nhân viên
      • Thực hiện văn hóa dám thay đổi và chấp nhận rủi ro
      • Có trách nhiệm đối với kết quả huấn luyện
    2. Huấn luyện viên KHÔNG NÊN:
      • Trì hoãn việc huấn luyện cho đến trong khi không có việc gì tốt hơn để làm
      • Sợ tốn thời gian vào việc huấn luyện
      • Sợ rủi ro không giao quyền thực hiện
    3. Học viên NÊN
      • Chủ động chia sẻ cảm giác, trải nghiệm của bạn về quá trình đào tạo, điều gì chưa ổn cần điều chỉnh.
      • Hãy xem việc tiếp nhận huấn luyện là việc quan trọng bậc nhất (lùi 1 để tiến 2).
      • Hãy tận dụng tối đa thời gian và năng lực của Huấn luyện viên để đạt được tối thiểu 70-80% khả năng của họ (có thể điều này lớn hơn cả mục tiêu huấn luyện)
      • Tận dụng tối đa công việc thực tế để được trải nghiệm
      • Có trách nhiệm đối với kết quả huấn luyện
    4. Học viên KHÔNG NÊN
      • Trì hoãn việc huấn luyện cho đến trong khi không có việc gì tốt hơn để làm
  10. Tham khảo một số quy trình huấn luyện khác
    1. EDAC
      • Screen Shot 2018-07-02 at 4.03.47 PM
    2. GROW
      • Screen Shot 2018-07-02 at 4.05.11 PM.png
    3. 5D
      • Screen Shot 2018-07-02 at 4.05.38 PM.png

II. ĐÁNH GIÁ ĐÚNG NHÂN VIÊN

  • Số liệu thống kê Nhân viên mong muốn gì? (1 = Quan trọng nhất, 10 = ít quan trọng)

 

Tiêu chí Cấp quản lý nghĩ Nhân viên mong muốn
Đãi ngộ tốt 1 5
An toàn trong công việc 2 4
Cơ hội thăng tiến 3 7
Điều kiện làm việc tốt 4 9
Công việc thú vị 5 6
Được đảm bảo 6 8
Kỷ luật mềm dẻo 7 10
Đánh giá đúng về công việc đã hoàn thành 8 1
Thông cảm/giúp đỡ các vấn đề cá nhân 9 3
Cảm thấy được tham gia trong mọi việc 10 2
  • Trong công việc có 2 điều mà nhân viên luôn luôn tự hào về mình- đó là Lời khen và Sự ghi nhận của quản lý.
  • Screen Shot 2018-07-02 at 4.09.59 PM.png
  • Quy trình đánh giá nhân viên
    • Rà soát kết quả của kỳ trước
      • Hỗ trợ bằng những dữ kiện, bằng chứng cụ thể, xác thực
      • Chuẩn bị để giải quyết những vấn đề không thống nhất được
    • Tiến hành đánh giá theo mục tiêu công việc
      • Yêu cầu nhân viên tự đánh giá những mục tiêu đề ra trong năm
      • Tự mình đánh giá: nghiêm túc, chuẩn xác
      • Thu thập ý kiến từ các nhân viên khác
    • Đăt mục tiêu cho kỳ tới
      • Cung cấp các thông tin chiến lược kinh doanh, mục tiêu dự án của phòng/ công ty trong năm tới
      • Cùng nhân viên thảo luận, đánh giá, sửa đổi và thống nhất mục tiêu SMART kỳ tới
      • Ký cam kết thực hiện các mục tiêu
    • Phỏng vấn đánh giá
      • Screen Shot 2018-07-02 at 4.14.36 PM
    •  
    • Hoàn tất đánh giá
      • Khen ngợi các thành tích
        • Hỏi: Điều gì làm cho họ đạt được như vậy
      • Chỉ ra các điểm yếu và góp ý
        • Hỏi: Nguyên nhân là gì và giải pháp của nhân viên
        • Đưa ra các giải pháp của người quản lý
      • Chia sẻ ý kiến của mình
      • Thông báo kết quả đánh giá

Chúc các bạn thành công!

Advertisements

Leader – Hiểu về hành vi tổ chức, hành vi cá nhân để trở thành lãnh đạo giỏi

Mục tiêu:

  • Giúp hiểu khái niệm cơ bản về các yếu tố tác động đến hành vi cá nhân trong tổ chức.
  • Giúp hiểu và xác định được tính cách của bản thân và công việc phù hợp, phân công công việc phù hợp cho các thành viên trong nhóm do mình quản lý.

Nội dung bao gồm:

  • Khái niệm Hành vi tổ chức, hành vi cá nhân, tính cách
  • Các yếu tố tác động đến hành vi cá nhân• Các mô hình nghiên cứu về tính cách
  • Thực hành

1. Hiểu về Hành vi tổ chức

  • Hành vi tổ chức là một lĩnh vực nghiên cứu tác động của các yếu tố thuộc về cá nhân, nhóm làm việc và thuộc về tổ chức đối với hành vi tại nơi làm việc của một cá nhân nhằm mục đích cải thiện hiệu quả làm việc của tổ chức.

2. Tầm quan trọng của nghiên cứu Hành vi

Screen Shot 2018-06-22 at 10.51.25 AM

3. Các yếu tố ảnh hưởng tới hành vi cá nhân

Screen Shot 2018-06-22 at 10.52.25 AM

4. Khái niệm tính cách

Screen Shot 2018-06-22 at 10.53.40 AM.png

  • Các yếu tố ảnh hưởng tới tính cách: Gen di truyền, môi trường
  • Theo lý thuyết của William Marston thì:

Screen Shot 2018-06-22 at 10.55.13 AM

 

5. Phân Loại Tính Cách Theo Mô Hình MBTI

  • Hướng nội (I) hay hướng ngoại (E)
  • Giác quan (N) hay trực giác (S)
  • Lý tính (T) hay cảm tính (F)
  • Nguyên tắc (J) hay linh hoạt (P)
  • Thái độ đối với thế giới bên ngoài

Screen Shot 2018-06-22 at 10.57.45 AM

  • Nhận thức về thế giới bên ngoài

Screen Shot 2018-06-22 at 10.58.23 AM

  • Cách ra quyết định

Screen Shot 2018-06-22 at 10.59.02 AM

  • Thái độ trong cuộc sống

Screen Shot 2018-06-22 at 10.59.36 AM

  • 16 loại tính cách theo MBTI

Screen Shot 2018-06-22 at 11.00.17 AM.png

  • 16 cặp tính cách chủ yếu

Screen Shot 2018-06-22 at 11.01.08 AM

Screen Shot 2018-06-22 at 11.00.56 AM

  • Mô hình MBTI giúp cho các nhà quản lý
    • Hiểu về hành vi của cá nhân
    • Nhận ra sự khác biệt cá nhân
    • Phát triển cá nhân

6. Phân loại tính cách theo mô hình Big 5

Screen Shot 2018-06-22 at 11.05.03 AM.png

  • Tính hướng ngoại
    • Cởi mở, quảng giao, ưa giao du
    • Quyết đoán, mạnh mẽ
    • Sáng tạo
    • Tham vọng, linh hoạt, lanh lợi về mặt xã hội
  • Tính hoà đồng:
    • Lịch sự, thân ái
    • Hợp tác, đáng tin cậy
    • Không cay cú, biết chấp nhận thất bại để học hỏi
    • Tận tụy và cống hiến, biết giúp đỡ và hỗ trợ người khác khi cần
  • Tận tâm, ngay thẳng
    • Có trách nhiệm và đáng tin cậy
    • Minh bạch và trung thực
    • Sắp đặt mọi thứ rõ ràng, là người có óc tổ chức, có thể dự đoán được hành vi ứng xử
    • Kiên định trước những lời tán dương và khen ngợi, sự công nhận, phê bình hoặc chỉ trích
  • Ổn định cảm xúc
    • Tự tin, không hay cáu giận
    • Có thể dự đoán được về mặt cảm xúc (vui, buồn…)
    • Không chuyển áp lực từ cấp trên hay những gắng nặng của riêng mình hoặc sự căng thẳng cho các đồng sự
  • Sẵn lòng trải nghiệm
    • Sẵn sàng học hỏi, sẵn sàng thay đổi
    • Sáng tạo, chịu đổi mới, tò mò nhưng không dò xét
    • Được giáo dục tốt, quan tâm tới các vấn đề về văn hoá, kỹ thuật

7. Mô hình tính cách của Holland

Mô hình 6 loại tính cách để định hướng nghề nghiệp

Screen Shot 2018-06-23 at 4.21.31 PM.png

Screen Shot 2018-06-23 at 4.21.48 PM.png

8. DISC

Screen Shot 2018-06-22 at 11.35.18 AM

Screen Shot 2018-06-22 at 11.35.24 AM

Screen Shot 2018-06-23 at 4.23.48 PM.png

9. Thực hành

  • Giới thiệu website http://mbti.toppion.com/
  • Bài tập tại khóa học: 15 phút. Đánh giá tính cách và công việc phù hợp của bản thân dựa vào mô hình MBTI.
  • Bài tập thực hành thêm: Cho NV mình đang trực tiếp quản lý đánh giá thử, gửi lại kết quả cho quản lý. Quản lý xem để tham khảo và chiêm nghiệm việc mình phân công công việc hiện nay cho NV đã phù hợp chưa.

Chúc các bạn thành công!

Dev Lead – Checklist review code cho lập trình viên web full stack

Là một Dev Lead/Team Lead bạn nhiệm vụ của bạn không những chỉ hoàn thành công việc của mình mà một nhiệm vụ vô cùng quan trọng là review code của các thành viên trong nhóm để có chất lượng tốt nhất, đồng thời qua đó cũng huấn luyện họ có kỹ năng code tốt hơn. Trong bài này mình xin đưa ra Checklist dùng cho các Lead khi review code của 1 lập trình viên Web Full Stack.

  1. Giao diện

    • Đã tuân thủ đầy đủ UI Convention hay chưa?
    • Đã vẽ theo Thiết kế UI hay chưa?
  2. Tính năng

    • Tính năng đã được thực hiện đúng chưa? đã pass hết các functional test case chưa?
  3. Tuân thủ Coding convention

    • Đã tuân thủ Naming convention chưa?
    • Có Comment code đầy đủ chưa?
    • Đã tuân thủ Quy định về bẫy lỗi chưa?
    • Biến khai báo đúng scope, đúng kiểu dữ liệu chưa?
    • Tái sử dụng các hàm dùng chung, thư viện chưa?
    • Code có dễ bảo trì không?
    • Tuân thủ các nguyên lý clean code SOLID chưa?
    • Có FixCode (số, chuỗi…) không?
    • Có duplicate code không?
    • Code đã được tổ chức gom nhóm hoặc chia hàm nhỏ cho dễ đọc chưa?
    • Các biểu thức điều kiện phức tạp đã được đưa thành biến hoặc hàm riêng hay chưa?
  4. Đảm bảo hiệu năng tầng Application

    • JS/HTML/CSS
      • Số lượng request đã tối ưu chưa?
      • Sử dụng Bundle javascript, css chưa?
      • Sử dụng sprite images để giảm số lượng request lấy ảnh chưa? VD: ảnh icon…
      • Sử dụng CDN để tăng số lượng file download đồng thời chưa?
      • Đặt expired time cho các static resource hợp lý chưa? Các file js, css, image, icon cần có expired time khác nhau tùy theo mức độ thay đổi của file
      • Sử dụng các file css, javascript bên ngoài trang HTML để cache chưa
      • Dung lượng request tối ưu chưa? Minification javascript/css chưa? Sử dụng nén gzip các file static, dynamic resource chưa?
    • Code .NET
      • Hạn chế việc throw exception: Kiểm tra các điều kiện trước để tránh exception? Try cacth ở sự kiện hoặc method gốc?  Hạn chế rethrow, nếu có sử dụng chỉ sử dụng từ khóa throw thay cho throw ex
      • Không dùng exception điều khiển luồng logic
      • Sử dụng kiểu dữ liệu tối thiểu đáp ứng được bài toán
      • Ưu tiên sử dụng mảng thay list, chỉ định size trước nếu có thể, chỉ kiểu cụ thể của phần tử trong mảng
      • Dùng addRange thay cho add nhiều lần đối với dữ liệu dạng list
      • Với array lớn dùng for thay foreach
      • Khi cộng chuỗi với nhiều tham số, dùng StringBuilder thay cho + hoặc & (Từ 3 tham số trở lên)
      • Các phép so sánh chuỗi dùng IgnoreCase thay cho toLower
      • Hạn chế dùng dynamicInvoke
      • Hạn chế vòng lặp lồng nhau
      • Tránh dùng đệ quy
      • Dung Private thay cho Public
      • Boxing, Unboxing cast type
    • Data/ADO.Net:
      • Chỉ lấy đủ cột cần dùng?
      • Ưu tiên dùng DataReader thay Dataset?
      • Tránh dùng Auto-Generated command, command builder khi runtime.
      • Giữ Transaction ngắn nhất có thể
      • Khi muốn truy xuất nhanh thì sử dụng dataview thay cho Datatable
    • GC
      • Không tự gọi GC.Collect
      • Set Null các object không dùng đến
      • Dùng Using hoặc Try Catch Finally để giải phóng đối tượng IDisposable
      • Gọi dispose các biến có kiểu IDisposable khi dispose object chính
    • Kiểm tra MemoryLeak
    • Thread:
      • Tránh gọi Abort, để thread tự exit
      • Tránh gọi Suspend, Resume, nên dùng Monitor để quản lý thread
      • Dùng threadpool để tạo Tránh sử dụng chính object đang chứa code để làm object lock
      • Cần có một try catch cho tất cả đoạn code trong thread
    • Khi cần lấy giá trị của một hàm hoặc property thì cần gán ra một biến để tránh gọi lại hàm hoặc property nhiều lần
    • WebForm:
      • Tắt SessionState khi không dùng
      • Hạn chế số lượng request tới Server
      • Chỉ dùng ViewState khi cần thiết
      • Loại bỏ HttpModule không cần thiết
      • Dùng AJax khi có thể Validate dưới client-side thay cho server-side nếu có thể
      • Đã sử dụng thuộc tính IsPostback để tránh gọi nhiều lần các đoạn code xử lý trong hàm pageLoad() khi load lại page
      • Chỉ trả về thông tin tối thiểu vừa đủ để giảm dung lượng
      • Những task long-running chuyển sang worker xử lý
      • Sử dụng Server.Transfer thay có Response.Redirect khi có thể
    • Server caching:
      • Cân nhắc sử dụng local memory để cache dữ liệu trong phiên làm việc thay vì couchbase
      • Cache phải có timeout hợp lý
      • Chia nhỏ, phân loại cache theo nhu cầu sử dụng (tránh lưu một object lớn mà mỗi lần lấy chỉ sử dụng 1 phần nhỏ)
      • Không nên dùng key quá dài
    • Session state:
      • Không  lưu trữ dữ liệu lớn vào session
      • Sử dụng Cache và Session đã hợp lý hay chưa?
  5. Đảm bảo hiệu năng tầng Database

    • Chú ý kiểu dữ liệu, độ rộng của các biến, cột kiểu text (nvarchar, nvarchar…). Tránh lỗi khi gán dữ liệu lớn hơn giá trị max của kiểu dữ liệu
    • Nếu dùng bảng tạm thì phải khai báo collation để tránh lỗi khi collation của DB khác với collation mặc định của instance sql.
    • Chú ý giá trị NULL Trong phép so sánh =, <>, IN
    • Chú ý khi sử dụng lệnh SELECT… INTO. Kiểu dữ liệu, độ lớn của cột dữ liệu sẽ phụ thuộc vào dữ liệu —> cần cast về kiểu mong muốn
    • Chỉ dùng cursor khi không còn cách nào khác
    • Hạn chế sử dụng sub query
    • Hạn chế dùng Trigger
    • Hạn chế join với bảng dữ liệu lớn
    • Hạn chế dùng hàm trong mệnh đề WHERE –> không dùng được index
    • Tránh việc sử dụng mệnh để sau khi không cần thiết ORDER BY, DISTINCT, GROUP BY, UNION, NOT LIKE
    • Nếu có dùng biến kiểu bảng @Table có join với bảng khác thì cần có OPTION (RECOMPILE) sau câu lệnh đó
    • Tránh lấy dư thưa các cột không cần thiết trong kết quả trả về của cầu SELECT hoặc trong bảng tạm
    • Nên sử dụng GROUP BY thay cho DISTINCT
    • Cân nhắc khi sử dụng UNION hay UNION ALL: UNION tương tự DISTINCT, UNION ALL lấy tất
    • Xem xét giảm thiểu số lần select vào bảng dữ liệu lớn->nên truy xuất 1 lần để lấy kết quả ra bảng tạm và xử lý trên tập kết quả ít hơn
    • Tham số truyền vào mà được ghép bởi nhiều phần tử cần được chuyển đổi thành bảng rồi mới đưa vào tính toán
    • Dùng store khi có thể, thiết lập NO COUNT ON, READ UNCOMMIT trong store khi có thể
    • Không được dùng Transaction trên SQL trừ trường hợp đặc biệt
    • Mở connection muộn nhất, đóng connection sớm nhất khi có thể, chủ động đóng connection thay vì timeout
    • Thiết lập timeout riêng với từng loại connection (connection report để timeout lâu, còn lại để thấp, tránh để tất cả timeout lâu)
    • Hạn chế roundtrip đến database
    • Các query đã viết ra thì xem xét xem có sử dụng được Index hay không
  6. Tuân thủ các tiêu chuẩn bảo mật

    • Việc Download file phải dùng thư viện dùng chung
    • Hàm download không được phép có tham số là đường dẫn đến File trên Server.
    • Chỉ được phép Upload các loại file nhất định, không được phép upload các file có khả năng thực thi
    • Upload theo các định dạng file và dung lượng cho phép
    • Lưu trữ file do người dùng upload phải được lưu dạng mã (Guid, ID)
    • Việc Upload phải dùng thư viện dùng chung
    • Đã tuân theo các quy tắc lưu trữ file upload, file xuất khẩu hay file temp của hệ thống chưa?
    • Chỉ cho phép xuất khẩu theo một số định dạng file theo quy tắc đã chỉ ra
    • Định dạng file hỗ trợ nhập khẩu: excel, xml, csv
    • Đảm bảo không bị các lỗi bảo mật SQL injection
    • Các control cho phép người dùng nhập liệu đã kiểm tra lỗi XSS hay chưa?

———————— END ————–

iOS – Newbie – Hướng dẫn cách bắt Exception khi ứng dụng bị crash

Là một lập trình viên iOS đang tập toẹ vào nghề có lẽ bạn không khỏi ngỡ ngàng và tốn nhiều thời gian vào việc tìm hiểu tại sao ứng dụng của mình chạy lên bị crash ngay lập tức.

  • Lỗi gặp kiểu như “Thread 1: signal SIGABRT”

Screen Shot 2018-06-21 at 3.14.47 PM

  • Bạn không biết chuyện gì xảy ra, không biết lỗi xảy ra từ đâu và có thể mất nhiều thời gian để chạy đi chạy lại ứng dụng để đoán lỗi và khoanh vùng lỗi.

Đây có lẽ là điều các newbie iOS developer chằng thích chút nào. Làm sao để biết được lỗi exception ở đoạn code nào trong ứng dụng của ta đây.

Các bạn hãy làm theo 3 bước hướng dẫn dưới đây để xác định vùng gây ra lỗi để xử lý nhé!

  • Bước 1: dừng chạy ứng dụng, từ menu Debug xổ ra truy cập vào sub-menu Breakpoint và chọn Create Exception Breakpoint…

Screen Shot 2018-06-21 at 3.39.04 PM

  • Khi đó trong vùng Breakpoint sẽ xuất hiện thêm thông tin All Exceptions với ý nghĩa sẽ dừng tại dòng code mà ném ra ngoại lệ.

Screen Shot 2018-06-21 at 3.39.18 PM.png

  • Bước 2: chạy lại ứng dụng và tái lặp theo tình huống đã gây ra lỗi trước đó, bạn sẽ thấy trên XCode sẽ dừng ở dòng code sẽ gây ra ngoại lệ kèm theo callstack, giá trị các biến tại thời điểm đó.

Screen Shot 2018-06-21 at 3.39.48 PM

  • Bước 3: từ thông tin được cung cấp bạn dễ dàng tìm ra nguyên nhân gây ra lỗi exception. Các lỗi exception có thể: Null Pointer Exception, Index Out Of Bound, File Not Found Exception…

Ngoài ra, trong bài này mình cũng hướng dẫn bạn thực hiện Debug trên XCode trong tình huống chủ động đặt Breakpoint

  • Bạn có thể đặt Breakpoint tại dòng code bất kỳ trong project của mình bằng cách click chuột vào vùng hiển thị dòng code, ví dụ hình ảnh dưới của mình là dòng 29.

Screen Shot 2018-06-21 at 3.50.27 PM.png

  • Chạy ứng dụng theo kịch bản đợi khi nó dừng ở điểm Breakpoint bạn vừa đặt

Screen Shot 2018-06-21 at 3.53.32 PM

  • Tại điểm Breakpoint đang dừng, để chuyển qua lần lượt các dòng code tiếp theo bạn sử dụng phím tắt F6 (Step Over) hoặc biểu tượng ở phía dưới thanh Debug

Screen Shot 2018-06-21 at 3.55.45 PM

  • Để nhảy vào trong một hàm nào đó bạn dùng phím tắt F7 (Step Into) hoặc biểu tượng ở thanh Debug.

Screen Shot 2018-06-21 at 3.56.19 PM

  • Để thoát khỏi hàm vừa nhảy vào ra dòng lệnh tiếp theo ở bên ngoài, bạn sử dụng phím tắt F8 (Step Out)

Screen Shot 2018-06-21 at 3.56.44 PM.png

  • Và tiếp tục chạy chương trình bằng cách nhấn vào biểu tượng như nút Play trên thanh Debug (sau biểu tượng Breakpoint màu xanh)

Screen Shot 2018-06-21 at 3.55.45 PM

Chúc các bạn thành công nhé!

——————— END ——————–

 

 

iOS – Hướng dẫn tạo certificate và provisioning khi phát triển

Là một lập trình viên iOS “thực thụ” bạn cần biết được làm thế nào để tạo certificate và provisioning để build được sản phẩm đưa vào thiết bị test cũng như đẩy ứng dụng lên App Store. Sau đây mình sẽ hướng dẫn các bạn các bạn phần thứ nhất về tạo certificate và provisioning cho môi trường phát triển (Development) cũng như môi trường triển khai (Production).

Bước 1: Tạo CertificateSigningRequest từ KeyChain, các bạn làm theo các hướng dẫn sau

Mở LaunchPad, tìm kiếm ứng dụng KeyChain

Screen Shot 2018-06-13 at 5.51.43 AM

Từ Keychain Access chọn Certificate Assistant, trong sub-menu chọn Request a Certificate From a Certificate Authority…

Screen Shot 2018-06-13 at 5.52.00 AM

Hộp thoại Certificate Assistant hiển thị, bạn nhập các thông số User Email Address là địa chỉ email bất kỳ nào của bạn (Khuyến nghị nên dùng địa chỉ email đăng ký trong Apple Developer Account), nhập Common Name và tích chọn Saved to disk

Screen Shot 2018-06-13 at 5.52.43 AM

Screen Shot 2018-06-13 at 5.52.52 AM

Lưu lại file CertificateSigningRequest.certSigningRequest


Bước 2: Tạo file .cer chứng thực từ Apple

Mở liên kết https://developer.apple.com trên trình duyệt web, chọn menu Account

Screen Shot 2018-06-13 at 6.07.05 AM.png

Đăng nhập vào bằng tài khoản Apple Developer Account của bạn

Screen Shot 2018-06-13 at 6.06.45 AM

Screen Shot 2018-06-13 at 6.09.36 AM

Sau khi đăng nhập vào, chọn mục Certificates, Identifiers & Profiles để chuyển sang phần quản lý certificate, app id, device test cũng như sinh provisioning.

Trong phần Certificates, chọn mục Development (sinh .cer cho môi trường phát triển, môi trường Production làm tương tự)

Screen Shot 2018-06-13 at 6.11.07 AM

Nhấn chọn biểu tượng icon dấu “+” cạnh nút search để bắt đầu vào tiến trình sinh file .cer. Tại màn hình Add iOS Certificate, tích chọn iOS App Development.

Screen Shot 2018-06-13 at 6.12.14 AM

Screen Shot 2018-06-13 at 6.12.44 AM

Nhấn Continue để chuyển sang bước “Request”, tại bước này chỉ là các hướng dẫn để sinh file CertificateSigningRequest.certSigningRequest mà chúng ta đã làm ở bước 1.

Screen Shot 2018-06-13 at 6.13.27 AM

Screen Shot 2018-06-13 at 6.12.44 AM

Nhấn Continue để chuyển sang bước “Generate”

Screen Shot 2018-06-13 at 6.13.41 AM

Nhấn vào nút Choose File… để upload file CertificateSigningRequest.certSigningRequest lên.

Screen Shot 2018-06-13 at 6.14.00 AM

Sau khi upload xong tại màn hình “Generate” nhấn nút Continue để chuyển sang màn hình “Download”.

Screen Shot 2018-06-13 at 6.14.20 AM

 

Nhấn vào nút Download để tải file .cer về máy tính.

Screen Shot 2018-06-13 at 6.14.36 AM

Mở file .cer vừa tải về máy trong Finder và Double Click (nháy kép) vào file đó để thực hiện thêm thông tin cer này vào Keychain.

Screen Shot 2018-06-13 at 6.14.52 AM

Mở lại ứng dụng KeyChain và kiểm tra .cer này đã được thêm vào

Screen Shot 2018-06-13 at 6.15.38 AM


Bước 3: Khai báo App ID cho ứng dụng

 

Trong mục “Identifiers” click vào “App IDs” để vào trang khai báo App ID cho ứng dụng

Màn hình danh sách các App IDs đã khai báo sẽ hiển thị như hình.

Screen Shot 2018-06-20 at 4.31.46 PM

Click vào nút biểu tượng dấu “+” ở góc trên bên phải để mở form đăng ký App ID mới

  • Điền tên ứng dụng

Screen Shot 2018-06-20 at 4.33.11 PM

  • Điền Bundle ID của ứng dụng (định danh duy nhất của App trên chợ, thường được viết dưới dạng <Domain_Name>.<App_Name>, ex: vn.viethai.CasioCalculator)

Screen Shot 2018-06-20 at 4.34.03 PM

  • Lựa chọn các dịch vụ tích hợp trong App (nếu có), nếu không có gì đặc biệt thì để mặc định. Nhấn nút “Continue”

Screen Shot 2018-06-20 at 4.34.30 PM

  • Sau khi nhấn nút “Continue” sẽ chuyển sang màn hình xác nhận lại các thông tin đăng ký của App

Screen Shot 2018-06-20 at 4.34.48 PM

  • Nếu cần chỉnh sửa lại thông tin thì nhấn nút “Back” để quay lại bước trước để chỉnh sửa thông tin.
  • Các thông tin đã đúng thì nhấn nút “Register”

Screen Shot 2018-06-20 at 4.34.54 PM

  • Màn hình thông báo việc đăng ký App ID mới đã thành công.

Screen Shot 2018-06-20 at 4.35.07 PM.png

  • Nhấn nút “Done” để hoàn tất quá trình.

Screen Shot 2018-06-20 at 4.35.14 PM


Bước 4: Khai báo thiết bị dùng để debug/test sản phẩm trong quá trình phát triển

Chuyển xuống mục “Devices” và chọn menu “All”. Màn hình danh sách tất cả các thiết bị đã đăng ký để debug/test sẽ xuất hiện.

Screen Shot 2018-06-20 at 4.48.04 PM

  • Click chọn nút có icon dấu “+” góc trên bên phải để mở form đăng ký thêm thiết bị debug/test.  Lưu ý: mỗi tài khoản chỉ được phép đăng ký tối đa 100 thiết bị/mỗi loại thiết bị.
  • Tại form đăng ký, bạn có thể đăng ký từng thiết bị bằng cách nhập tên và UDID của thiết bị

Screen Shot 2018-06-20 at 4.51.18 PM

  • Lưu ý: để lấy UDID của thiết bị bạn dùng cáp cắm thiết bị vào máy tính có cài đặt phần mềm iTunes, khi đó iTunes sẽ tự động nhận thiết bị. Trên iTunes, nhấn vào biểu tượng hình điện thoại để truy xem thông tin thiết bị

Screen Shot 2018-06-21 at 10.14.06 AM

Thông tin thiết bị mặc định hiển thị số Serial Number, click chuột vào vùng Serial Number sẽ chuyển sang thông tin UDID, click chuột phải để copy số UDID.

Screen Shot 2018-06-21 at 10.14.21 AM


Bước 5: Tạo provisioning để build sản phẩm đưa  vào thiết bị phục vụ debug/test

  • Trong mục “Provisioning Profiles” click vào menu “Development” để vào danh sách quản lý các provisioning cho môi trường phát triển (“Distribution” cho môi trường release sản phẩm)

Screen Shot 2018-06-21 at 10.27.11 AM

  • Click vào nút có biểu tượng “+” để mở form tạo provisioning mới. Để tạo provisioning cho môi trường phát triển (build vào thiết bị test) tích chọn “iOS App Development”

Screen Shot 2018-06-21 at 10.27.26 AM

Screen Shot 2018-06-21 at 10.27.34 AM

  • Nhấn nút Continue để chuyển sang bước chọn App ID của cho provisioning.

Screen Shot 2018-06-21 at 10.32.34 AM

  • Nhấn Continues để chuyển sang bước chọn certificate cho provisioning. Chọn tất cả hoặc chọn đúng certificate đã yêu cầu ở bước trước đó.

Screen Shot 2018-06-21 at 10.32.54 AM

Screen Shot 2018-06-21 at 10.32.43 AM.png

  • Chọn thiết bị cho provisioning, các thiết bị được chọn ở bước này mới có thể được nhận dạng khi dùng provisioning để build lên thiết bị test. Chọn tất cả.

Screen Shot 2018-06-21 at 10.33.07 AM

  • Nhấn Continue để hoàn tất quá trình tạo Provisioning. Nhấn nút Download để tải về máy tính.

Screen Shot 2018-06-21 at 10.37.39 AM.png

  • Và nhấn nút Done

Screen Shot 2018-06-21 at 10.37.47 AM.png

Screen Shot 2018-06-21 at 10.40.49 AM

  • Sau khi file Provisioning được tải về máy tính thì mở trong thư mục tải về, double click vào file đó để XCode nhận.

Screen Shot 2018-06-21 at 10.38.15 AM


Bước 6: Cấu hình provisiong trên XCode để build trên thiết bị debug/test

  • Mở ứng dụng CasioCalculator trên XCode, vào phần TARGETS cho sản phẩm, mục General và lựa chọn Provisioning cho mục Signing(Debug) như hình sau

Screen Shot 2018-06-21 at 12.57.52 PM.png

Chúc các bạn thành công!

Trong bài tiếp theo mình sẽ hướng dẫn các bạn cách build sản phẩm để đưa vào thiết bị test và đưa lên chợ ứng dụng App Store (Xem tại đây).

Kỹ năng điều hành cuộc họp

Điều gì là quan trọng nhất dẫn đến sự thành công của một cuộc họp?

Biết xác định mục tiêu và luôn gắn chặt vào mục tiêu

  1. Các hình thức họp
    • Họp để giải quyết vấn đề
    • Họp để đưa ra quyết định
    • Các loại hình thức họp khác: truyền thông, báo cáo, tiếp nhận ý kiến phản hồi…
  2. Họp để giải quyết vấn đề
    • Là cuộc họp mà người chủ trì chưa biết cách giải quyết nên cần ý kiến, trí tuệ, kinh nghiệm của người khác.
    • Sự chuẩn bị của thành viên rất quan trọng đặc biệt theo kinh nghiệm, kiến thức của cá nhân họ.
    • Người chủ trì cần dùng các cách để thu lượm nhiều ý kiến chuyên gia nhất để lựa chọn cách giải quyết phù hợp.
    • Cần bỏ qua cái tôi để thu lượm nhiều ý kiến.
  3. Họp để ra quyết định
    • Là cuộc họp mà người chủ trì cần phải thông báo đến các thành viên 1 quyết định quan trọng. Quyết định này có thể thay đổi không khí họp. Có thể là quyết định đem lại niềm vui bất ngờ hoặc buồn. VD: Quyết định cho ai đó nghỉ việc, quyết định về lương thưởng, bổ nhiệm…
    • Cuộc họp này thường gây ra các trao đổi bên ngoài phòng họp nên người chủ trì cần khéo léo để đảm bảo không gây ra thêm bức xúc.
    • Nên có trao đổi trước với 1 số thành viên quan trọng để họ chuẩn bị trước tâm thế và hỗ trợ giải thích thêm nếu cần.
  4. Họp truyền thông
    • Là cuộc họp mà người chủ trì cần phải thông báo đến các thành viên các yêu cầu, nội dung công việc (thường do cấp trên yêu cầu truyền thông xuống nhân viên)
    • Cuộc họp này thường gây ra các câu hỏi từ nhân viên về tính khả thi khi thực hiện nên người chủ trì cuộc họp cần lưu ý đến các câu hỏi có thể có từ nhân viên.
    • Nên có trao đổi trước với 1 số thành viên quan trọng để họ chuẩn bị trước tâm thế và hỗ trợ giải thích thêm nếu cần.
  5. Họp xin ý kiến
    • Là cuộc họp mà người chủ trì cần phải lựa chọn một quyết định hoặc xin ý kiến để gửi lên trên.
    • Người chủ trì nên chuẩn bị sẵn các phương án và các phân tích ưu, nhược điểm từng phương án để thành viên có căn cứ lựa chọn.
    • Nên có trao đổi trước với 1 số thành viên quan trọng để xin ý kiến trước.
  6. Cuộc vấn đề nào không nên tổ chức họp
    • Chỉ liên quan đến những vấn đề cá nhân
    • Bạn không có thời gian chuẩn bị
    • Có cách khác hiệu quả hơn như nhắc nhở, thư điện tử hoặc điện thoại
    • Vấn đề đã được giải quyết
    • Nội dung cuộc họp không hữu ích đối với mọi người.
  7. Cuộc họp như thế nào được đánh giá là hiệu quả
    • Đạt được mục tiêu
    • Mất ít thời gian
    • Mang đến cho người tham gia cảm giác nhiệm vụ đó đã có cách giải quyết và được triển khai thực hiện
  8. Các vai trò trong một cuộc họp
    • Screen Shot 2018-06-06 at 6.02.43 PM
  9. Nhiệm vụ của Chủ trì cuộc họp
    • Biết rõ mục đích, mục tiêu họp ĐỂ chuẩn bị tốt cuộc họp
    • Biết, dự kiến được thời gian, thời lượng họp ĐỂ điều khiển họp đúng thời gian
    • Biết:
      • Thành phần tham dự họp
      • Lý do vì sao cần họ
      • Nội dung, tài liệu mỗi người cần chuẩn bị
    • Biết ai sẽ hỗ trợ và cần hỗ trợ gì ĐỂ cuộc họp suôn sẻ không gặp sự cố đáng tiếc
    • Hình dung rõ kịch bản chi tiết: ai sẽ trình bày gì từ đầu tới cuối buổi ĐỂ không mất thời gian của những người tham dự họp
    • Soạn nội dung chuẩn bị họp ĐỂ Thư ký hỗ trợ tổ chức hiệu quả
  10. Nội dung lịch trình cuộc họp
    • Mục đích của cuộc họp là gì?
    • Thời gian diễn ra cuộc họp
    • Thành phần gồm những ai, vai trò tham gia là gì? cần phải chuẩn bị gì?
    • Kịch bản cuộc họp sẽ như thế nào?
  11. Nhiệm vụ của thư ký
    • Biết nội dung Yêu cầu chuẩn bị họp ĐỂ chuẩn bị chu đáo điều kiện tổ chức họp
    • Truyền thông với các thành viên liên quan mục ĐỂ đảm bảo thành viên hiểu rõ mục đích cuộc họp, nhiệm vụ của mình trước và trong cuộc họp
    • Đảm bảo: 
      • Mọi người đến họp đầy đủ, đúng giờchuẩn bị đủ,  đúng nội dung yêu cầu
      • Cuộc họp diễn ra đúng thời gian
      • Hỗ trợ chủ trì theo dõi kết quả thực hiện BB họp
      • Review lại Kết quả thực hiện BB họp kỳ trước trong đầu giờ họp
  12. Nhiệm vụ của thành viên
    • Biết, hiểu rõ mục đích cuộc họp, nhiệm vụ của mình trước và trong cuộc họp >> ĐỂ cuộc họp diễn ra đúng thời gian và hiệu quả
    • Chuẩn bị đủ, đúng nội dung yêu cầu 
    • Đến họp đầy đủ, đúng giờchuẩn bị đủ,  đúng nội dung yêu cầu >> ĐỂ cuộc họp diễn ra đúng thời gian
  13. Checklist kiểm tra lại cuộc họp có tổ chức tốt không?
    • Có thấy rõ ràng vai trò Chủ trì, thư ký, thành viên
    • Có rõ ràng mục tiêu cuộc họp
    • Các thành viên tham dự có hiểu rõ mục đích, mục tiêu và nhiệm vụ của mình trước và trong cuộc họp
    • Việc tranh luận, phát biểu có đảm bảo trật tự phát biểu, không cãi vã, nói chen?
    • Cuộc  họp kết thúc đúng thời gian
    • Cuộc họp có đạt mục tiêu đặt ra
    • Các thành viên dự họp có rõ nhiệm vụ sau cuộc họp?
    • Biên bản họp có đủ rõ ràng không?

————- END —————

Kỹ năng quản lý lịch làm việc cá nhân

1. Khi nào nên lập lịch?

  • Khi có công việc phát sinh mà thời hạn kết thúc không phải trong ngày (đặc biệt các công việc không bắt đầu ngay)
    • Công việc: lập báo cáo, gọi điện giục khách hàng trả tiền, lịch hẹn trước với khách hàng, hẹn họp, hẹn ngày hoàn thành công việc, …
    • Gia đình, cá nhân: lịch tiêm chủng, lịch khám lại, lịch kiểm tra, bảo dưỡng thiết bị gia đình, lịch họp mặt bạn bè, gia đình và các lịch định kỳ khác
  • Khi có công việc định kỳ

2. Tại sao phải lập lịch cá nhân?

  • Tạo cho cá nhân tác phong làm việc chuyên nghiệp, hiện đại, hi-tech, pờ rồ trong mắt sếp, đồng nghiệp, bạn bè, gia đình.
  • Tạo cho cá nhân khả năng sử dụng thời gian đúng yêu cầu, đúng mong muốn.
  • Luôn hoàn thành mọi việc mình cần làm mà không mất nhiều công sức của những người xung quanh để giục giã, nhắc nhở, mắng mỏ hoặc thất vọng về mình
  • Không bị khách hàng, đồng nghiệp cấp trên than phiền “hứa nhưng không làm”
  • Không bị rối tinh trong công việc – “đầu bù tóc rối”

3. Không lập lịch thì có những hậu quả gì?

  • Bị sếp mắng vì trễ hạn, quên việc → không được đánh giá cao → khó được đề bạt lên vị trí cao hơn hoặc thu nhập tốt hơn
  • Bị đồng nghiệp kêu ca vì trễ hạn
  • Bị cấp dưới than phiền vì không kiểm soát được thời gian, giao việc lung tung không có kế hoạch → khó làm gương, đào tạo, kèm cặp được cấp dưới
  • Bị khách hàng than phiền “hứa mà không làm” → mất uy tín cá nhân và Công ty
  • Bị gia đình kêu “việc gì cũng quên”
  • Bị bạn bè trách “lúc nào cũng thấy nó bận” “lại hoãn”
  • Bị hỏng việc quan trọng: VD quên không đến 1 sự kiện quan trọng hoặc quên không tiêm chủng dẫn đến bị bệnh, …

4. Lịch cá nhân và gia đình có cần phải đưa vào lịch không?

Rất cần vì:

  • Nhiều phát sinh, trễ công việc hay xin hủy công việc, công tác vì các lý do cá nhân hoặc gia đình mà không phải không dự phòng trước được

5. Lịch định kỳ nào nên lập sẵn?

  • Họp giao ban tuần
  • Các lịch liên quan đến chăm sóc sức khỏe: uống thuốc, khám mắt, răng, …
  • Các lịch liên quan đến gia đình: giỗ, liên hoan gia đình, sinh nhật, …

6. Công cụ hỗ trợ lập lịch

  • Mobile: Google Calendar
  • PC: Task/Event on Mail
  • Task (Công việc): công việc,
    • Có thời gian bắt đầu, kết thúc
    • Người thực hiện: duy nhất là mình, không chọn được người khác
    • Có trạng thái: hoàn thành/ chưa hoàn thành… 
    • Task được nhắc nhở cho đến khi hoàn thành và không tiếp tục theo dõi dù chưa kết thúc thời hạn.
  • Event (Sự kiện): Sự kiện cần làm ở 1 thời điểm cụ thể
    • Có thời gian bắt đầu, kết thúc
    • Người tham gia: có thể chọn 1 hoặc nhiều người
    • Event chỉ có giá trị trước thời điểm cần xảy ra, sau thời gian đó sự kiện không còn ý nghĩa, không cần nhắc nhở nữa.

       

       

       

       

       

———–END————