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).

Advertisements

Bài 4: Navigation giữa các Acitivities trong Android

1. Cơ chế Stack – based Navigation trong Android

Screen Shot 2018-06-10 at 7.45.50 AM

2. Phương thức Navigation tới Activity khác

  • Internal: Activity trong cùng Module
    // Khởi tạo Intent và điều hướng sang Product Activity
    
    Intent i = new Intent(“.ProductActivity”);
    // Hoặc khởi tạo Intent từ class
    Intent I = new Intent(getContext(), ProductActivity.class)
    
    startActivity(i);
  • External: Gọi Activity của hệ thống
    // Gọi ứng dụng phone để quay số
    Intent phoneIntent = new Intent(Intent.ACTION_DIAL); 
    phoneIntent.setData(Uri.parse(“tel:”+”+84 97 595 1910”)); 
    if(phoneIntent.resolveActivity(getPackageManager()) != null){
         startActivity(phoneIntent);
    }
    
    // Gọi ứng dụng Google Maps thông qua package name
    Uri intentUri = Uri.parse("geo:43.095, -77.5736?Z=20");
    Intent mapIntent = new Intent(Intent.ACTION_VIEW, intentUri);
    mapIntent.setPackage("com.google.android.apps.maps");
    startActivity(mapIntent);
  • Implicit Intent vs Explicit Intent
    • Explicit Intent: chính là các internal intent, chỉ sử dụng trong nội bộ ứng dụng
    • Implicit Intent: chính là external intent, sử dụng để thực hiện các action bên ngoài, như gửi email, thực hiện phone call…
    • Các activities có thể bị giả mạo intent >> Các ứng dụng độc hại khởi chạy 1 activity ở ứng dụng khác bởi việc giả mạo intent.
    • Mặc định explicit intent filter sẽ thiết lập thuộc tính android:exportedtrue >> Có nghĩa là bất kỳ app nào có thể gọi activity này nếu biết được đầy đủ tên của Activity đó (ex: com.ourcompany.catalog.NewsActivity)
    • Nếu ứng dụng chỉ cần các internal intent hoặc có Activity xử lý các dữ liệu nhạy cảm (sensitive information) thì phải đảm bảo intent filter của activity đó có thuộc tính android:exportedfalse

3. Các loại Common Intent

Screen Shot 2018-06-10 at 7.51.22 AM

4. Truyền dữ liệu giữa các Acitivty thông qua Intent Extras

  • Trước khi khởi chạy activity có thể truyền thêm dữ liệu cho activity thông qua phương thức putExtra()
    // Gửi thêm dữ liệu trước khi chạy activity
    Intent i = new Intent(“.CatalogDetailActivity”);
    i.putExtra(“price”, selectedPrice);
    startActivity(i)
    
    
    // Lấy thông tin về giá của sản phẩm khi CatalogDetailActivity được khởi chạy
    
    Intent i = getIntent();
    String productPrice = i.getExtras().getString(“price”);

5. Intent Flags

// Code xử lý khi nhấn button Return to Main từ các activity detail ở các level sau Intent i = new Intent(“.Main”);
 i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 startActivity(i);
  • FLAG_ACTIVITY_CLEAR_TOP: cờ này thực hiện theo cơ chế: nếu Main activity đang được chạy thì thay vì khởi tạo 1 instance mới, tất cả các activities ở stack trên Main activity sẽ bị đóng hết >> Quay trực tiếp về Main activity
  • Simple Flow

Screen Shot 2018-06-10 at 7.56.05 AM

  • Complex Flow

Screen Shot 2018-06-10 at 7.56.14 AM

Bài 3: Hướng dẫn tạo ứng dụng Android có nhiều Tab bằng ViewPager, Fragment và Tablayout

Mục tiêu:

  • Biết cách tạo giao diện ứng dụng dạng Tab

1. Lớp Fragment

  • Được tích hợp vào API level 4 support libraries nên có thể sử dụng ở các thiết bị cũ
  • Nhúng Fragment vào Activity bằng việc kế thừa Activity từ FragmentActivity hoặc AppCompatActivity
  • Thêm Fragment thông qua XML thẻ <fragment>
  • Hoặc thêm động trên code thông qua FragmentManager và FragmentTransaction

Ví dụ:

FragmentManager fm = getFragmentManager();

FragementTransaction ft = fm.beginTransaction();

SalesFragment sf = new SalesFragment();

ft.add(R.id.salesChart, sf);

ft.commit();

  • Giao tiếp giữa các Fragments
    • Fragment chỉ nên giao tiếp qua lại với parent Activity
    • Không nên giao tiếp trực tiếp giữa các Fragment với nhau

Ví dụ:

// Truy cập tới activity từ Fragment thông qua getActivity()

ListView employeeNames = (ListView) getActivity().findViewById(R.id.namesList);

// Fragment gửi thông tin cho activity bằng việc cài đặt hàm onItemSelectedListener()

// Khi đó Activity phải implement listener đó ở mức class

// Đây cũng là cách gián tiếp các fragment có thể giao tiếp với nhau

// Activity truy cập tới fragment thông qua tham chiếu trực tiếp

SalesFragment salesFragment = (SalesFragment) getFragmentManager().findFragmentById( R.id.SalesFragment );

  • Sử dụng Fragment như là Tab trong Activity
    • fragmenttabs
    • Để nhúng fragments là tab trong activity có thể sử dụng ViewPager
    • Khi đó mỗi fragment sẽ là 1 page
    • ViewPager quản lý layout và cho phép chuyển qua lại giữa các page
  • Thiết lập Action bar
    • actionbarsetup
    • ActionBar class có thể được sử dụng để thiết lập action bar
    • Tuy nhiên để điều khiển các action overflow dễ dàng hơn thì nên sử dụng Toolbar class
    • Dùng Toolbar cho phép thay đổi giao diện action bar: thêm logo, nút Up, tiêu đề cho activity…
    • Để dùng được Toolbar và loại bỏ ActionBar thì app cần extend AppCompatActivity và sử dụng theme NoActionBar

2. Action Overflow

  • Các tính năng ít dùng có thể đưa vào overflow
  • Cài đặt onCreateOptionsMenu() để inflate XML menu định nghĩa các item cho mỗi tuỳ chọn.
  • Cài đặt code tương ứng trong sự kiện khi item được chọn: onOptionsItemSelected()

3. Thực hành

Mở Android Studio và tạo project với Empty Activity, chỉnh sửa các nội dung như hướng dẫn sau

a. Trong res/layout

Mở activity_main.xml – layout của MainActivity

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android=
    "http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.ourcompany.catalog.MainActivity">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/appbar_padding_top"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/AppTheme.PopupOverlay">
        </android.support.v7.widget.Toolbar>

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</android.support.design.widget.CoordinatorLayout>

Thêm fragment_catalog.xml – layout cho tab Products

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.ourcompany.catalog.CatalogFragment">

    <!-- TODO: Update blank fragment layout -->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Catalog" />

</FrameLayout>

Tương tự fragment_news.xml, fragment_sales.xml và fragement_maps.xml lần lượt cho các tab News, Sales và Maps

b. Trong res/menu thêm main_menu.xml để chứa các action overflow có nội dung như sau

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.ourcompany.catalog.MainActivity">

    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="never" />

</menu>

c. Trong package source code, thêm các lớp cho các Fragment tương ứng

public class CatalogFragment extends Fragment {

    public CatalogFragment() {
        // Required empty public constructor
    }

    /**
     * Create new instance of CatalogFragment
     * @return
     */
    public static CatalogFragment newInstance(){
        CatalogFragment fragment = new CatalogFragment();
        return fragment;
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//        return super.onCreateView(inflater, container, savedInstanceState);
        // inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_catalog, container, false);
    }
}

Tương tự cho NewsFragment.java, SalesFragment.java và MapsFragment.java

d. Trong MainActivity.java, thêm vào inner class SectionPagerAdapter để làm Adapter cho ViewPager

/**
 * Adapter that represents each page in the app as a fragment
 */
public class SectionsPagerAdapter extends FragmentPagerAdapter{

    public SectionsPagerAdapter(FragmentManager fm){
        super(fm);
    }

    /**
     * Return the fragment with the position you specify
     * @param position
     * @return
     */
    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page
        switch (position){
            case 0:
                return CatalogFragment.newInstance();
            case 1:
                return NewsFragment.newInstance();
            case 2:
                return MapsFragment.newInstance();
            case 3:
                return SalesFragment.newInstance();
        }
        return null;
    }

    /**
     * Return the total number of views that are available to the SectionsPagerAdapter
     * @return
     */
    @Override
    public int getCount() {
        // show 4 total pages
        return 4;
    }

    /**
     * Set the label of the tab in a string format, depending on the tab view's position
     * @param position
     * @return
     */
    @Override
    public CharSequence getPageTitle(int position) {
        switch (position){
            case 0:
                return "Catalog";
            case 1:
                return "News";
            case 2:
                return "Maps";
            case 3:
                return "Sales";
        }
        return null;
    }
}

Trong lớp MainActivity, khai báo 2 biến sau

private SectionsPagerAdapter mSectionsPagerAdapter;
private ViewPager mViewPager;

e. Bổ sung thêm code vào hàm onCreate của MainActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // set up the toolbar
    // create toolbar using the layout
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    // set as action bar
    setSupportActionBar(toolbar);

    // Create adapter that will return a fragment for each of three primary sections of the activity
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

    // Set up ViewPager with the sections adapter
    mViewPager = (ViewPager) findViewById(R.id.container);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    // Set up tab layout with the ViewPager
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(mViewPager);
}

f. Thực hiện override hàm onCreateOptionsMenu của MainActivity để load các action overflow từ menu_main.xml

/**
 * Create action overflow menu
 * @param menu
 * @return
 */
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    //return super.onCreateOptionsMenu(menu);
    // inflate the action overflow based on a menu_main.xml layout file and add items to the menu
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

Chỉnh sửa thuộc tính android:theme của MainActivity trong AndroidManifest để sử dụng  tuỳ chọn NoActionBar

<activity
    android:name="com.ourcompany.catalog.MainActivity"
    android:label="@string/app_name"
    android:theme="@style/AppTheme.NoActionBar">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Lưu ý: build.gradle (Module:app) có các thư viện cần thiết (version có thể khác)

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:26.0.2'
    compile 'com.android.support:design:26.0.2'
    compile 'com.android.support:support-v4:26.0.2'
}

OK, giờ bạn có thể chạy thử ứng dụng trên Emulator và kết quả như sau

Screen Shot 2018-06-09 at 2.32.08 AM

———_END ————-

Bài 2: Làm việc với Framework của Android

Mục tiêu bài học

  • Hiểu cấu trúc ứng dụng dự án Android
  • Sử dụng các tài liệu hỗ trợ trong quá trình phát triển ứng dụng Android
  • Hiểu vòng đời của ứng dụng
  • Thiết kế ứng dụng đáp ứng yêu cầu và mong đợi của người dùng

1. Cấu trúc project Android

androidprojectstructure

2. Activity

  • Đại diện cho 1 màn hình người dùng sẽ tương tác với
  • Thường một ứng dụng có nhiều activities
  • Có 1 main activity sẽ được khởi chạy lần đầu
  • Mỗi Activity thông thường có 2 file gắn với nó: Java class kế thừa từ Activity class dùng để khởi tạo và xử lý các sự kiện tương tác. Và 1 file XML mô tả layout của nó.

3. Layout

  • Layout: cách UI được khởi tạo, các thành phần được hiển thị trên màn hình, kích thước, vị trí, màu sắc, viền, font chữ và các thuộc tính khác…
  • Có 2 cách để định nghĩa layout của Activity: qua code hoặc qua XML sau inflate trên code
  • Cách tạo layout trên XML cho phép bạn tách việc dựng layout khỏi hành vi, thay đổi layout động theo cấu hình thiết bị, dễ bảo trì, chuyên môn hoá…

4. View Group

androidviewgroup

5. View Objects

androidviewobjects

6. View Object Attributes

androidviewobjectattributes

7. Layout Measurements

androidlayoutmeasurement

8. Intent và Bundle

  • Bundle: là container sử dụng để truyền dữ liệu giữa các activities
  • Khi activity được khởi tạo hay huỷ, nó được đính với bundle lưu trữ và truy xuất trạng thái được cất giữ (frozen/saved state) và nội dung hiện tại của các components của actvity đó.
  • Intent: là đối tượng gửi thông điệp để ra lệnh chạy activity
  • Một cách dùng khác của bundle là lưu trữ thông tin trạng thái của activity khi nó bị suspend (vd: người dùng chuyển sang app khác…) và khi người dùng quay lại app thì OS có thể lấy lại thông tin trạng thái trước đó thông qua bundle để tiếp tục làm việc.

9. Common Resource Directories

commonresourcedirectory

10. Resource Variants

  • Android cho phép cung cấp các lựa chọn resources thông qua các suffix
  • Languages: value-es, value-fr…
  • Graphic images: drawable-ldpi, drawble-mdpi, drawable-hdpi…
  • Screen Orientation: landscapes or portrait

11. Android Manifest

androidmanifest

  • Permissions:
    • Xin cấp quyền tương tác với app khác, cung cấp khi tải và cài đặt app.
    • Từ API 23 trở lên: hỏi cấp quyền khi runtime
    • Chỉ khai báo xin quyền khi trong app thực sự sử dụng
  • android:exported trong thẻ <activity> = true cho phép khởi chạy từ activity khác ngoài app, = false chỉ các activities trong app mới chạy được. Nếu không chỉ định thì sẽ phụ thuộc vào ngữ cảnh.

12. Gradle

  • Công cụ được sử dụng cho quá trình tự động hoá build ứng dụng Android
  • Gradle(Project): mức toàn bộ dự án, áp dụng cho tất cả các modules trong dự án
  • Gradle(Module): mức độ module, hầu hết sẽ cấu hình build trên file này vì thông thường một app có 1 module

androidgradle

13. Code completion & Quick Fix

  • Android Studio hỗ trợ tự động suggest code khi đang gõ dở code thông qua tổ hợp phím
    • Windows: Ctrl + Space
    • MacOS: control + Space
    • codecompletion
  • Hỗ trợ Fix nhanh cú pháp/import code thông qua tổ hợp phím
    • Windows: Alt + Enter
    • MacOS: option + return
    • quickfix

14. Tài liệu và cộng đồng Android

androidreferencedocument

15. Các thành phần chính trên Android

androidorganization

  • Activity = customer service department
  • Fragment = customer service representative
  • Service = back office workers
  • Content provider = librarian or bookkeepers, manage storage of application data.
  • Intents = business partnerships
  • Broadcast receivers =network operators
  • Widgets = marketing department
  • Notifications = public relations department

16. Activity Lifecycle

  • Active or running: activity được nạp vào bộ nhớ, hiển thị cho người dùng thao tác
  • Paused: activity được nạp vào bộ nhớ, hiển thị một phần nhưng tạm thời người dùng không tương tác được
  • Stopped: activity được nạp vào bộ nhớ, nhưng không hiển thị cho người dùng. Ở trạng thái này activity vẫn lưu trữ trạng thái và dữ liệu
  • Killed: Nếu hệ thống thiếu bộ nhớ, activity ở trạng thái stopped và paused có thể bị kill. Khi quay lại activity đã bị kill thì sẽ phải restart và restore lại state của nó.

activitylifecycle

Mô tả các hàm callback

activitylifecyclemethods

Ghi chú: các task thông thường ở từng callback

  • onCreated: khởi tạo, load dữ liệu, tạo view
  • onResume: khôi phục các hoạt động bị tạm dừng khi onPause
  • onPause: tạm dừng các hoạt động như chơi nhạc, chơi video, animation. Giải phóng các hoạt động tốn CPU và power. Giải phóng tài nguyên mà activity sử dụng như GPS, camera, sensor. Commit các thay đổi chưa được lưu trữ. Lưu trữ trạng thái dữ liệu cần xử lý cho lần chạy tiếp theo và giải phóng các tài nguyên cần cho activity khác.
  • KHÔNG NÊN chạy các tác vụ tốn thời gian, tài nguyên ở onPause >> NÊN để ở onStop

17. Fragment Lifecycle

fragmentlifecycle.png

18. Các cách lưu trữ dữ liệu trên Android

External storage Nếu là ứng dụng client làm việc với web service thì app có thể lưu trữ và truy xuất dữ liệu từ mạng ở External storage
Preferences Khi cần lưu trữ và truy xuất dữ liệu nhỏ thì có thể dùng Preference. Dữ liệu có thể chỉ được dùng trong 1 activty hoặc có thể được chia sẻ giữa các thành phần trong ứng dụng
Local file hoặc content provider App sử dụng file local hoặc content provider như SQLite database để lưu trữ dữ liệu. Dữ liệu sẽ được lưu trữ ngay mỗi thao tác, khi nhận được sự kiện onPause sẽ thực hiện commit để tránh mất dữ liệu người dùng đã tạo ra/thay đổi.

19. Quản lý bộ nhớ và multitasking trên Android

  • Khi sử dụng thiết bị android người dùng có thể chuyển qua lại nhiều app mà không biết viêc hệ thống sẽ bị chậm đi hoặc tốn pin
  • Hệ thống tự động suspend, terminate và khởi động lại app ở background khi cần thêm bộ nhớ hoặc thấy bị tiêu hao pin mà người dùng không để ý đến.
  • Khi lập trình bạn cần nắm được cách quản lý resource thông qua lifecycle của activity

20. UX trên Android

  • Sử dụng Material Design
  • Giao diện và hành xử giống như các app Android thông thường
  • Không phụ thuộc vào thiết bị (kích thước màn hình, rotation…)
  • Chạy mượt mà.
  • Cung cấp phản hồi khi thích hợp.
  • Cung cấp các tuỳ chỉnh thiết lập.
  • Tương tác với các ứng dụng khác của hệ thống và phần cứng trên thiết bị.
  • Tối ưu hoá không gian màn hình thích hợp theo thiết bị.
  • Không có lỗi về ngữ pháp và chính tả.
  • Thẩm mỹ hài hoà.

21. Ràng buộc khi thiết kế UI trên mobile

  • Small screen: nhiều thiết bị có kích thước màn hình nhỏ. Giải pháp có thể là chia thành nhiều màn hình thao tác >> người dùng có thể mất thời gian hơn >> thiết kế phải đảm bảo cân bằng
  • Mobile data connection: thiết bị có thể sử dụng cellular data để truy cập dữ liệu web, sẽ có độ trễ nhất định >> cần được thiết kế đáp ứng vấn đề này
  • Low power consumption: Android tự động suspend các app chạy ở background để tiết kiệm nguồn. Người dùng dễ để ý tới các app sử dụng tốn tài nguyên và từ bỏ nó. Do vậy cần thiết kế đảm bảo tiết kiệm tài nguyên
  • Laborious text entry: Thiết kế tối thiểu việc nhập liệu bằng text. Nên sử dụng các dữ liệu mặc định, dữ liệu chọn, autocomplete…

 

Ref: giới thiệu một số công cụ để thiết kế prototype, thiết kế UI

Online tool: https://cacoo.com

Offline: MacOS Sketch, Windows: Visio/Photoshop

—————-END—————–

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————

Kỹ năng quản lý theo mục tiêu

I. LÝ THUYẾT

  1. Khái niệm

    • Mục tiêu là những trạng thái, cột mốc mà doanh nghiệp muốn đạt được trong một khoảng thời gian xác định.
    • Management By Objective (MBO)
  2. Ý nghĩa vai trò của mục tiêu

    • Là phương tiện để đạt được mục đích.
    • Nhận dạng được các ưu tiên làm cơ sở lập kế hoạch hoạt động và phân bổ các nguồn lực.
    • Thiết lập các tiêu chuẩn thực hiện/hoạt động.
    • Hấp dẫn các đối tượng hữu quan (cổ đông, khách hàng, nhân viên…).
    • Quyết định hiệu quả hoạt động của DN.
  3. Lợi ích

    • Khuyến khích tính chủ động sáng tạo của cấp dưới tham gia vào việc lập mục tiêu.
    • Kiểm soát dễ hơn.
    • Tổ chức được phân định rõ ràng.
    • Có sự cam kết của cấp dưới về yêu cầu, hiệu quả công việc của họ.
  4. Hạn chế của MBO

    • Sự thay đổi của môi trường có thể tạo ra các lỗ hổng.
    • Tốn kém thời gian.
    • Cần môi trường nội bộ lý tưởng.
    • Một số mục tiêu có tính ngắn hạn.
    • Sự nguy hiểm của tính cứng nhắc do ngần ngại thay đổi mục tiêu.
  5. Điều kiện của mục tiêu

Điều kiện của mục tiêu phải đảm bảo yêu cầu của nguyên tắc SMART

  • Specific – cụ thể, dễ hiểu
  • Measurable – đo lường được
  • Achievable – vừa sức.
  • Realistics – thực tế.
  • Timebound – có thời hạn.

Hiện nay, một số quan điểm phát triển nguyên tắc SMART thành SMARTER. Trong đó, E là engagement – liên kết và Ralevant là thích đáng.

5.1 SPECIFIC – Cụ thể, dễ hiểu

  • Chỉ tiêu phải cụ thể vì nó định hướng cho các hoạt động trong tương lai.
  • Đừng nói mục tiêu của bạn là dẫn đầu thị trường trong khi đối thủ đang chiếm 40 % thị phần.
  • Hãy đặt mục tiêu chiếm tối thiểu 41% thị phần, từ đó bạn sẽ biết mình còn phải cố đạt bao nhiêu % nữa.

5.2 MEASURABLE – Đo lường được

  • Chỉ tiêu này mà không đo lường được thì không biết có đạt được hay không?
  • Đừng ghi: “phải trả lời thư của khách hàng ngay khi có thể”. Hãy yêu cầu nhân viên trả lời thư ngay trong ngày nhận được.

5.3 ACHIEVABLE – Vừa sức

  • Chỉ tiêu phải có tính thách thức để cố gắng, nhưng cũng đừng đặt chỉ tiêu loại không thể đạt nổi.
  • Nếu bạn không có giọng ca trời phú thì đừng đặt chỉ tiêu trở thành siêu sao. Giữ trọng lượng ở mức lý tưởng 45kg có thể vừa sức hơn.

5.4 REALISTICS – Thực tế

  • Đây là tiêu chí đo lường sự cân bằng giữa khả năng thực hiện so vối nguồn lực của doanh nghiệp bạn (thời gian, nhân sự, tiền bạc..).
  • Đừng đặt chỉ tiêu giảm 20 kg trong một tháng để đạt trọng lượng lý tưởng 45 kg trong vòng một tháng, như vậy là không thực tế.

5.5 TIMEBOUND – Có thời hạn

  • Mọi công việc phải có thời hạn hoàn thành, nếu không nó sẽ bị trì hoãn.
  • Thời gian hợp lý giúp bạn vừa đạt được mục tiêu lại vừa dưỡng sức cho các mục tiêu khác.

5.6 ENGAGEMENT – Liên kết

  • Công ty phải liên kết được lợi ích của công ty và lợi ích của các chủ thể khác.
  • Khi các bộ phận, nhân viên tham gia thực hiện mục tiêu, họ sẽ được kích thích như thế nào. Nếu công ty không có chế độ này, việc thực hiện mục tiêu sẽ không có hiệu quả.

5.7 RALEVANT – Là thích đáng

  • Chỉ tiêu có hữu ích đối với một bộ phận nhưng bộ phận khác lại thờ ơ.
  • Ví dụ mức tồn kho, bộ phận bán hàng luôn muốn mức tồn kho cao trong khi bộ phận tài chính lại muốn mức tồn kho thấp.
  • Như vậy, mục tiêu phải thích đáng, công bằng với tất cả các bộ phận.

II. CÁC BƯỚC TRIỂN KHAI MBO

  1. Các phương pháp triển khai.

    • PP1 – Top down: Triển khai từ cấp công ty tới cấp bộ phận. Phương pháp này nhanh về mặt thời gian nhưng lại không khuyến khích các bộ phận tham gia vào hoạch định mục tiêu công ty.
    • PP2. – Bottom up: Triển khai từ dưới lên. Phương pháp này khuyến khích được các bộ phận nhưng lại chậm và có khi kết quả tổng hợp lại không phù hợp với mong muốn của BGĐ.
  2. Dự thảo mục tiêu cấp cao.

    • Xác định các mục tiêu chung của toàn công ty.
    • Xác định vai trò của các đơn vị cấp dưới tham gia vào việc thực hiện mục tiêu. 
    • Đây là các mục tiêu dự kiến, nó có thể được xem xét và điều chỉnh với các mục tiêu của cấp dưới.

GIỚI THIỆU CÁC LOẠI MỤC TIÊU THEO BSC:

    • BSC (Balanced Scorecard) là phương pháp quả lý thường được các DN của Mỹ áp dụng.
    • Đây là phương pháp quản trị chiến lược thông qua việc đưa ra “bảng cân đối điểm” các yếu tố liên quan đến khách hàng, tài chánh, đào tạo và phát triển, quy trình nội bộ.
    • Các yếu tố tài chính thường dùng
      • Total assets
      • Total assets per employee
      • Profit as % total assets
      • Return on assets (net & total).
      • Gross margin
      • Net income
      • Profits as of sales
      • Profit per employee
      • Revenue
      • Revenue from new products/services
      • Revenue per employee
      • Return on equity (ROE)
      • Return on capital employed (ROCE)
      • Return on investment (ROI).
      • Economic value added (EVA)
      • Market value added (MVA)
      • Value added per employee
      • Compound growth rate
      • Dividends
      • Market value
      • Share price
      • Shareholder mix
      • Shareholder loyalty
      • Cashflow
      • Total costs
      • Credit rating
      • Debt
      • Debt to equity
      • Times interest earned
      • Days sales in receivables
      • Accounts receivables turnover
      • Days in payables
      • Days in inventory
      • Inventory turnover ratio
    • Yếu tố khách hàng
      • Customer satisfaction
      • Customer loyalty
      • Market share
      • Customer complaints
      • Complaints resolved in first contact
      • Return rates
      • Response time per customer request
      • Direct price
      • Price relative to competition
      • Total cost to customer
      • Average duration of customer relationship
      • Customer lost
      • Customer retention
      • Customer qcquisition rates
      • % revenue from new customer
      • Number of new customer
      • Annual sales per customer
      • Win rate (sales closed/sales contacts)
      • Customer visits to the organization
      • Marketing cost as % of sale
      • Number of ads placed
      • Number of proposals made
      • Brand recognition
      • Response rate
      • Number of trade shows attended.
      • Sales volume
      • Share of target customer spending
      • Sales per channel
      • Average customer size
      • Customers per employee
      • Customer service expensive per customer
      • Customer profitability
      • Frequency (number of sales transactions)
    • Yếu tố Quy trình nội bộ
      • Average cost per transaction
      • On-time delivery
      • Average leadtime
      • Invertory turnover
      • Envistonmental emissions
      • Research & development expense
      • Community involvemetn
      • Patents pending
      • Average age of patents
      • Ratio of new products to total offerings
      • Stockouts
      • Labor utilization rates
      • Response time to customer requests
      • Defect %
      • Rework
      • Customer database availability
      • Breakeven time
      • Cycle time improvement
      • Continuous improvement
      • Warranty claims
      • Lead user identification
      • Products & services in the pipeline
      • Internal rate of return on new projects
      • Waste reduction
      • Space utilization
      • Frequency of returned purchases
      • Downtime
      • Planning accuracy
      • Time to market of new products
      • New products introduced
      • Numberof positive media stories
    • Đào tạo phát triển
      • Employee participation in pro or trade associations
      • Training inversment per customer
      • % of employees with advanced degress
      • Number of cross-trained employees
      • Absenteeism
      • Turnover rate
      • Employee suggestions
      • Employee satisfation
      • Participatopm om stpcl ownership plans
      • Lost time accidents
      • Value added per employee
      • Motivation index
      • Outstanding number of applications for employment
      • Diversity rate
      • Empowerment index (number of managers)
      • Quality of work environment
      • Internal communication rating
      • Employee productivity
      • Number of scorecards produced
      • Health promotion
      • Training hours
      • Competency coverage ratio
      • Personal goal achievement
      • Timely completion of performance appraisals
      • Leadership development
      • Communication planning
      • Reportable accidents
      • % of employees with computers
      • Strategic information ratio
      • Cross-functional ssigemetns
      • Knowledge management
      • Ethics violations
  1. Xác định mục tiêu cấp dưới

    • Cấp trên thông báo cho cấp dưới về các mục tiêu, chiến lược của công ty.
    • Cấp trên cùng với cấp dưới bàn bạc thảo luận về những mục tiêu mà cấp dưới có thể thực hiện.
    • Cấp dưới đề ra mục tiêu và cam kết với cấp trên, được cấp trên duyệt và thông qua.
    • Cấp trên đóng vai trò là cố vấn kiên nhẫn, khuyến khích cấp dưới đề ra mục tiêu.
    • Mục tiêu được đề ra phải do sự chủ động của cấp dưới. 
    • Mục tiêu đưa ra phải hỗ trợ tốt cho mục tiêu cao hơn và hỗ trợ tốt cho các mục tiêu của các bộ phận khác.
  2. Thực hiện mục tiêu

    • Cấp trên cung cấp các điều kiện và phương tiện cần thiết cho cấp dưới.
    • Cấp dưới chủ động sáng tạo xây dựng và thực hiện kế hoạch.
    • Cấp trên nên trao quyền hạn tối đa cho cấp dưới trong việc thực hiện nhiệm vụ.
    • Kế hoạch thực hiện mục tiêu (gantt)
      • Screen Shot 2018-06-04 at 9.35.25 PM
    • Huấn luyện về mục tiêu
      • Huấn luyện cho nhân viên về ý nghĩa của mục tiêu.
      • Giải thích các nội dung trong mục tiêu.
      • Giải thích các bước để thực hiện mục tiêu, trách nhiệm của mỗi thành viên tham gia.
      • Giải thích các chính sách và nguồn lực để thực hiện mục tiêu.
      • Đưa ra yêu cầu và mục tiêu của từng nhân viên.
  3. Tiến hành kiểm tra và hiệu chỉnh.

    • Cấp trên định kỳ phải tiến hành kiểm tra việc thực hiện của cấp dưới nhằm điều chỉnh hoặc giúp đỡ kịp thời.
    • Ngay từ khâu hoạch định, cấp trên nên thiết lập một số điểm kiểm soát trọng yếu để dễ dàng theo dõi việc thực hiện mục tiêu.
    • Việc kiểm tra ở đây chỉ giúp cấp dưới thực hiện tốt hơn, không đưa ra sự đánh giá và kết luận.
  4. Tổng kết và đánh giá.

     

    • Căn cứ mục tiêu đã cam kết và kết quả thực tế, cấp trên sẽ đánh giá công việc của cấp dưới.
    • Thành tích của cấp dưới sẽ căn cứ vào mức độ hoàn thành mục tiêu đã cam kết.

III. HỖ TRỢ THỰC HIỆN MỤC TIÊU

  1. Xây dựng chính sách.

    • Các chính sách được hiểu là các nguyên tắc chủ đạo, phương pháp để hỗ trợ và thúc đẩy việc thực hiện mục tiêu.
    • Chính sách được hiểu đơn giản là công cụ hỗ trợ thực hiện mục tiêu.
    • Chính sách thường là những phạm vi, cơ chế bắt buộc và những giới hạn cho các hành vi để thưởng phạt cho các hành vi cư xử của CNV.
    • Chính sách bao gồm: chính sách kinh doanh, chính sách nhân sự, chính sách tài chính…
  2. Phân bổ các nguồn lực.

KHÁI NIỆM NGUỒN LỰC: PHƯƠNG PHÁP 5M

  • Man     = nguồn nhân lực.
  • Money  = Tiền bạc
  • Material = nguyên vật liệu/hệ thống cung ứng.
  • Machine = máy móc/công nghệ.
  • Method  = phương pháp làm việc.

—— END ——