[Tự học lập trình Android] Bài 5: Tổ chức tài nguyên & Truy cập tài nguyên trong ứng dụng Android

Tổ chức tài nguyên & Truy cập tài nguyên trong ứng dụng Android  

Có nhiều item mà bạn sử dụng để xây dựng một ứng dụng Android. Ngoài việc coding cho các ứng dụng, bạn phải quan tâm đến các resources khác như nội dung  chương trình của bạn sử dụng, chẳng hạn như ảnh, màu sắc, bố trí các định nghĩa, giao diện người dùng, .... Những tài nguyên này luôn được duy trì một cách riêng biệt trong nhiều thư mục con dưới res/ thư mục của dự án.

 
Hướng dẫn này sẽ giải thích cho bạn làm thế nào bạn có thể tổ chức tài nguyên ứng dụng của bạn, xác định các nguồn tài nguyên thay thế và truy cập chúng trong các ứng dụng của bạn.
 Tổ chức Tài nguyên  (Organize Resources)

Bạn nên đặt từng loại tài nguyên trong một thư mục con cụ thể của res / thư mục của dự án của bạn. Ví dụ, đây là hệ thống phân cấp tập tin cho một dự án đơn giản:
MyProject/
    src/  
        MyActivity.java  
    res/
        drawable/  
            icon.png  
        layout/  
            activity_main.xml
            info.xml
        values/  
            strings.xml 
Res / thư mục chứa tất cả các tài nguyên trong các thư mục con khác nhau. Ở đây chúng ta một nguồn tài nguyên hình ảnh (drawable), giao diện (layout), một tập tin chứa chuối (string). Bảng dưới đây đưa ra một chi tiết về các thư mục nguồn hỗ trợ trong dự án res / thư mục.
Thư mụcKiểu tài nguyên
anim/Các tập tin XML định nghĩa thuộc tính hình ảnh động . Chúng được lưu trong res/anim/ thư mục và truy cập từ lớp R.anim
color/Các tập tin XML định nghĩa các màu sắc sử dụng trong ứng dụng. Chúng được lưu trong  res/color/ và truy cập từ lớp R.color.
drawable/Tập tin hình ảnh có đinh giạng .png, .jpg, .gif hoặc các tập tin XML được dịch thành bitmaps, danh sách trạng thái, hình, ảnh động. Chúng được lưu trong  res/drawable/ và truy cập từ lớp R.drawable.
layout/Các tập tin XML định nghĩa các lớp giao diện. Chúng được lưu trong res/layout/ và được truy cập từ lớp R.layout.
menu/Các tập tin XML định nghĩa các ứng dụng menu, giống như Options Menu, Context Menu, hoặc Sub Menu. Chúng được lưu trong  res/menu/ và được truy cập từ lớp R.menu.
raw/Tập tin bất ký lưu dưới dạng thô. Ban cần gọi phương thức Resources.openRawResource() với tài nguyên ID, đó là R.raw.filename để mở file nguyên gốc như vậy.
values/Tập tin XML chứa các giá trị đơn giản, chẳng hạn như chuỗi, số nguyên, và màu sắc. Ví dụ, đây là một số quy ước tên tập tin cho các nguồn lực bạn có thể tạo ra trong thư mục này:
  • arrays.xml cho tài nguyên mảng, và truy cập từ lớp R.array.
  • integers.xml cho tài nguyên số nguyên, và truy cập từ lớp R.integer.
  • bools.xml cho tài nguyên logic, và truy cập từ lớp R.bool.
  • colors.xml cho giá trị màu, và truy cập từ lớp R.color.
  • dimens.xml cho các giá trị kích thước, và được truy cập từ lớp R.dimen.
  • strings.xml cho giá trị string, và được truy cập từ lớp R.string .
  • styles.xml cho styles, và truye cập từ lớp R.style.
xml/Các tập tin XML tùy ý có thể được đọc tại thời gian chạy bằng cách gọi Resources.getXML().
Bạn có thể lưu các tập tin cấu hình khác nhau ở đây mà sẽ được sử dụng tại thời gian chạy.

Tài nguyên khác (Alternative Resources)

Ứng dụng của bạn nên cung cấp nguồn tài nguyên thay thế để hỗ trợ cấu hình thiết bị cụ thể. Ví dụ, bạn nên bao gồm tài nguyên drawable thay thế (ie.images) cho độ phân giải màn hình khác nhau các nguồn tài nguyên chuỗi thay thế cho các ngôn ngữ khác nhau. Khi chạy, Android phát hiện các cấu hình thiết bị hiện tại và tải các nguồn lực thích hợp cho ứng dụng của bạn.
Để xác định lựa chọn thay thế cấu hình cụ thể cho một tập hợp các nguồn, thực hiện theo các bước sau:
  • Tạo thư mục mới trong res/ tên thư mục có dạng <resources_name>-<config_qualifier>. Ở đây resources_name sẽ là một trong các nguồn nêu ở bảng trên, như layout, drawable etc. qualifier sẽ chỉ định một cấu hình cá nhân các nguồn sẽ được sử dụng. Bạn có thể kiểm tra tài liệu chính thức cho một danh sách đầy đủ của vòng loại cho loại khác nhau của các nguồn tài nguyên.
  • Lưu các nguồn tài nguyên thay thế tương ứng trong thư mục mới này. Các tập tin tài nguyên phải được đặt tên chính xác giống như các tập tin tài nguyên mặc định như trong ví dụ dưới đây, nhưng những tập tin này sẽ có nội dung cụ thể để thay thế. Ví dụ mặc dù tên tập tin hình ảnh sẽ tương tự nhưng cho màn hình độ phân giải cao, độ phân giải của nó sẽ cao.
Dưới đây là một ví dụ trong đó xác định hình ảnh cho một màn hình mặc định và hình ảnh thay thế cho màn hình độ phân giải cao.
MyProject/
    src/  
        MyActivity.java  
    res/
        drawable/  
            icon.png
            background.png
        drawable-hdpi/  
            icon.png
            background.png  
        layout/  
            activity_main.xml
            info.xml
        values/  
            strings.xml 
Dưới đây là một ví dụ khác mà xác định bố trí cho một ngôn ngữ mặc định và bố trí thay thế cho ngôn ngữ Ả Rập.
MyProject/
    src/  
        MyActivity.java  
    res/
        drawable/  
            icon.png
            background.png
        drawable-hdpi/  
            icon.png
            background.png  
        layout/  
            activity_main.xml
            info.xml
        layout-ar/
            main.xml
        values/  
            strings.xml 

Truy cập vào tài nguyên

Trong phát triển ứng dụng của bạn, bạn sẽ cần phải truy cập tài nguyên được xác định hoặc trong mã của bạn, hoặc trong các tập tin XML giao diện của bạn. Phần dưới đây giải thích làm thế nào để truy cập tài nguyên của bạn trong cả hai kịch bản:
TRUY CẬP TÀI NGUYÊN TRÊN MÃ (CODE)

Khi ứng dụng Android của bạn được biên dịch, một lớp R được tạo ra, trong đó có ID tài nguyên cho tất cả các nguồn sẵn có trong thư mục res/. Bạn có thể sử dụng lớp R để truy cập vào tài nguyên sử dụng thư mục và tài nguyên tên hoặc trực tiếp tài nguyên ID.
Ví dụ:
Truy cập res/drawable/myimage.png và thiết lập ImageView bạn sẽ sử dụng code:

ImageView imageView = (ImageView) findViewById(R.id.myimageview);
imageView.setImageResource(R.drawable.myimage);
Ở dòng đầu tiên bạn tìm tìm đến nguồn R.id.myimageview để tạo ImageView với định danh idmyimageview  trong tập tin Layout. Dòng thứ 2 khai báo R.drawable.myimage để tạo một ảnh có tên myimage trong thư mục con /res.

Ví dụ:
Xem xét ví dụ tiếp theo, tại res/values/strings.xml định nghĩa sau đây:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string  name="hello">Hello, World!</string>
</resources>
Bây giờ bạn tạo ra đối tượng TextView với ID msg sử dụng  ID dưới đây:
TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello);

Ví dụ:
Xem xét mộtlayout res/layout/activity_main.xml  với định ng:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent" 
   android:layout_height="fill_parent" 
   android:orientation="vertical" >
<TextView android:id="@+id/text"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="Hello, I am a TextView" />
<Button android:id="@+id/button"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="Hello, I am a Button" />
</LinearLayout>
Code ứng dụng này sẽ load một layout  Activity, trong phương thức onCreate():
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
}

TRUY CẬP NGUỒN TRÊN XML

Xem xét các tập tin XML nguồn
res/values/strings.xml bao gồm màu sắc và chuỗi:
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <string name="hello">Hello!</string>
</resources>
Bây giờ bạn có thể sử dụng các nguồn tài nguyên trong các tập tin bố trí sau đây để thiết lập màu sắc văn bản và chuỗi văn bản như sau:
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:textColor="@color/opaque_red"
    android:text="@string/hello" /> 

*******

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Giáo trình: Lập Trình Android [Click để xem]

# Khoá học online:  Lập trình Android toàn tập [Click để xem]

-----------------------------------------
Xem thêm bài và ví dụ khác:

 

[Java] Xử Lý Ngoại Lệ Trong Java [Exceptions]


Ngoại lệ (Exceptions) trong Java là các đối tượng có kiểu lớp (class) định nghĩa sẵn, biểu diễn trạng thái (status) lỗi tự động phát sinh trong trường hợp nào đó khi một hàm được thực hiện. Các hàm trong Java được định nghĩa sẵn trong trường hợp nào thì có kiểu ngoại lệ nào đó sẽ phát sinh.

Khi một ngoại lệ nảy sinh, có thể lựa chọn hai khả năng xử lý: 
- Bắt lỗi để xử lý hay 
- Bỏ qua không xử lý.

Các lệnh xử lý ngoại lệ thực hiện thông qua năm từ khoá : try, catch, finally, throw và throws

Cụ thể:

1. Câulệnh try…catch…finally

Cú pháp: 

  try {

     //  Các câu lệnh có thể sinh ngoại lệ;

  } 
  catch (Exception-Tên kiểu ngoại lệ 1 ) 
  {

     //  Các câu lệnh xử lý khi gặp ngoại lệ 1;

  }
  catch (Exception-Tên kiểu ngoại lệ 2 ) 
  {
   
     //  Các câu lệnh có thể sinh ngoại lệ 2;

   }

     …

    finally 
    {

       //  Các câu lệnh luôn thực hiện ngay cả khi có ngoại lệ;

    }


    
Câu lệnh : có thể là một hay nhiều lệnh đơn, hay cấu trúc điều khiển.

Ý nghĩa:

    - try : định nghĩa một khối lệnh mà ngoại lệ có thể xảy ra.

    - catch : đi kèm với try, để bắt ngoại lệ. Những câu lệnh trong chương trình mà bạn muốn bắt ngoại lệ được đưa vào giữa khối try, nếu một ngoại lệ xảy ra trong khối try, thân của mệnh đề catch có kiểu ngoại lệ tương ứng sẽ được thực hiện. Có thể có nhiều mệnh đề catch bắt các kiểu ngoại lệ khác nhau.

    - finally : thân của mệnh đề finally luôn luôn thực hiện trước khi lệnh try kết thúc, cho dù có hay không có ngoại lệ, mệnh đề finally có thể có hay không.

2. Mệnh đề throws

Nếu một hàm chứa lệnh (lời gọi hàm) có nảy sinh ngoại lệ mà bạn không bắt lấy bằng lệnh try… catch, khi đó bạn phải cho qua ngoại lệ bằng cách thêm mệnh đề throws vào cuối khai báo hàm, nếu không trình biên dịch sẽ báo lỗi. 

Sau throws liệt kê các kiểu ngoại lệ hàm có thể gây ra:

    throwsException-Type1, Exception-Type2…

     Exception-Type1, Exception-Type2… là các kiểu ngoại lệ cách nhau dấu phẩy


Ngoại trừ kiểu Error, RuntimeException và các kiểu lớp con của chúng có thể không cần try … catch hay throws, trình biên dịch sẽ không báo lỗi

3. Lệnh throw

Cú pháp: 
    
   throw Exception-Instance;

 Exception-Instance là một đối tượng của kiểu ngoại lệ

Có hai cách tạo một đối tượng kiểu ngoại lệ : dùng một tham đối trong mệnh đề catch hay tạo một đối tượng mới bằng toán tử new

Ví dụ: 
   
    throw new NumberFormatException();


Ý nghĩa:

Câu lệnh throw được đưa vào khối try, cho phép bạn điều khiển điều kiện phát sinh ngoại lệ. Khi gặp lệnh throw, các câu lệnh sau throw sẽ được bỏ qua, và lệnh try chứa lệnh throw, sẽ tìm khối lệnh của mệnh đề catch có kiểu ngoại lệ tương ứng để thực hiện

Ví dụ: 
  
   Viết chương trình nhập vào họ tên, và năm sinh với điều kiện họ tên không quá 30 ký tự, và năm sinh từ 1990 đến 2000

import java.io.*;
import java.util.Scanner;

class Nhap {

  // Cho qua kiểu ngoại lệ IOException là lỗi nhập xuất phát sinh khi thực hiện hàm

  // readLine() của lớp BufferedReader

  public static void main (String[] args) throws IOException{

     Scanner inp=new Scanner(System.in);

     String s = null;

     // Nhap ho ten

    do { 

         System.out.print(“Nhap Ho va ten khong qua 30 ky tu: “);
       
         s =inp.nextLine();

    } while (s.length()>30 || s.length()==0);

   System.out.println(“Ho va ten là : “+s);

    // Nhap nam sinh

   while (true) {
 
    try {

         System.out.print(“Nhap nam sinh : “);
         s = inp.nextLine();
       
        //Hàm parseInt() của lớp Integer phát sinh lỗi định dạng số
       
        int ns =Integer.parseInt(s);
       
        //Điều kiện phát sinh lỗi định dạng số NumberFormatException
       if (ns<1990 || ns>2000) throw new NumberFormatException();
          System.out.println(“Nam sinh la : “+ns);

       break;

    }

   //Bắt kiểu ngoại lệ NumberFormatException
   catch(NumberFormatException e){
          System.out.println(“Ban nhap lai nam sinh tu 1980 -1985″);
   }
  }
 }
}

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Tài liệu: Lập trình hướng đối tượng JAVA core dành cho người mới bắt đầu học lập trình [Click để xem]

# Khoá học online: Lập trình Java trong 4 tuần [Click để xem]


[iOS - Android] So sánh lập trình iOS và Android

Tác giả Lubos Mikusiak là người Hà Lan sống ở Amsterdam, là lập trình viên nhiều kinh nghiệm, có thể lập trình nhiều ngôn ngữ và có nhiều app cho iOS và Android

1. Giới thiệu
Năm 2011, tôi có viết vài app trên nền tảng iOS nó trở nên khá nổi, tôi nhận được nhiều câu hỏi là khi nào thì có bản cho Android, Vào tháng 11 năm 2012 tôi bắt đầu chuẩn bị vài tuần học Android và và mất vài tháng để chuyển các app của tôi sang nên tảng này.

Trong khi lập trình tôi đã rút ra được một số kinh nghiệm tôi sẽ chia sẻ với các bạn trong bài viết này. Tôi sẽ trung vào việc phân tích cách lập trình native Objective C trên iOS và Java trên Android. Thực ra tôi thích lập trình trên iOS hơn và tôi cũng sẽ xem xét 1 số khía cạnh để lập trình Android tốt hơn.

2. Về môi trường phát triển
Bạn sẽ cần thiết bị iOS và android như iPhone, iPad, android phone..., PC hoặc laptop. Nếu bạn chỉ có ý định học tập nghiên cứu thì PC/laptop với IDE và SDK là đủ, nếu có ý định phát triển app và đưa lên store thì bạn phải có mobile device.

Apple và Apple

Nếu muốn lập trình cho iOS bạn phải có máy Mac. IDE cho lập trình iOS là Xcode cùng với SDK và simulator chỉ chạy trên máy Mac, cho đến tháng 4-2011 thì chỉ có mỗi thứ này là có thể dùng để lập trình trên iOS, sau này có thêm AppCode của JetBrains nhưng mà nó cũng chỉ chạy trên Mac

Android và nhiều OS

bạn có thể lập trình Android trên Windows, MacOS hoặc Linux. Việc dễ nhất để bắt đầu lập trình Android là download Android Development Tools, IDE cho lập trình Android bạn có thể chọn Eclipse hoặc Intelij Idea của Jet Brains. Intelij Idea bản commmunity là quá đủ để lập trình android.

3. Hiều về Platform


iOS - Cổ xưa hơn bạn nghĩ


iOS là một platform hoàn thiện, nó được dựa trên hệ thống NeXTStep của những năm 90 thế kỷ trước (Nếu bạn biết về iOS API bạn có thể nhận thấy có rất nhiều class có tên bắt đầu bằng NS). Platform NeXTStep sau đó phát triển thành Mac OS, iOS là một phiên bản rút gọn của Mac OS. iOS được phát triển nhanh và liên tục có những version mới, API cũng thay đổi theo từng version.

Android - đang đi đến đích

Bản alpha release của Android xuất hiện năm 2007, các giao diện của nó đã trải qua khá nhiều biến đổi cho đến ngày nay. Các phiên bản alpha đầu tiên được lấy cảm hứng từ một phần của Blackberry, các phiên bản sau giống hơn với iOS. Android 3.0 dường như được lấy cảm hứng từ Windows Metro với rất nhiều không gian đen/trắng góc cạnh. Android 3.0 cũng bỏ đi 4 nút điều hướng cứng mà thay vào đó là 4 nút mềm trên màn hình cảm ứng. Các phiên bản của Android đã có những cải tiến quan trọng, điều này đặt gánh nặng lên các lập trình viên, muốn tận dụng được phần cứng và trải nghiệm mới cho người dùng phần mềm phải được cập nhật liên tục.

4. Về phần cứng


iPhone

iPhone ban đầu được tung ra với CPU ARM 412MHz, 128MB RAM và 4GB bộ nhớ flash và cho đến gần đây iPhone 5 với Dual core 1.3GHz Apple A6 CPU, 1GB RAM và 16GB bộ nhớ tối thiểu flash. Khi lập trình iOS bạn phải nhớ rằng bộ nhớ không phải là vấn đề, bạn có thể mở nhất nhiều view trong phần mềm của bạn và chúng sẽ chiếm bộ nhớ kể cả lúc không hiện ra, khi bộ nhớ đầy, hệ điều hành sẽ tự dọn dẹp khi đầy để tránh việc rò rỉ bộ nhớ.

Một GPU hỗ trợ OpenGL đã mặt định trong iPhone, có nghĩa là hình ảnh động có thể tận dụng lợi thế của OpenGL. Đó là lý do tại sao hình ảnh động trên iPhone luôn mượt mà và trơn tru.

Android phone

Các yêu cầu ban đầu cho các thiết bị Android trong năm 2008 như sau: CPU 200MHz, RAM 32MB và 32MB bộ nhớ flash. Yêu cầu tối thiểu cho Android 3.0 và cao hơn là CPU 1GHz, RAM 256MB và 512MB bộ nhớ flash. Mặc dù yêu cầu phần cứng tăng đáng kể, Android vẫn cư xử như những hạn chế bộ nhớ từ năm 2008. Nó giới hạn số lượng dữ liệu, trong đó các ứng dụng có thể giữ trong bộ nhớ. Khi một view không được hiện, Android sẽ deallocate tất cả các yếu tố giao diện người dùng của view đó khỏi bộ nhớ. Tiếp theo khi view được hiển thị, các yếu tố giao diện được tái tạo lại một lần nữa, lúc này các lập trình viên phải viết code để lưu trữ các trạng thái giao điện để nó còn được thể hiện ở các lần sau đó. OpenGL không phải là một yêu cầu phần cứng ngay từ đầu, các hình ảnh động trên các thiết bị Android được render bằng CPU làm cho hình ảnh thể hiện không được mượt mà bằng iOS.

5. Emulator và Simulator

Android Emulator – Vẫn còn chặng đường dài phía trước

Android Emulator là một máy ảo giả lập chạy trên máy chủ, chạy được trên cả Windows, Mac OS và Linux. Emulator có cả mặt tốt và mặt hạn chế, mặt tốt là một bản dịch của phần mềm có thể chạy được trên cả Emulator và Android phone, mặt hạn chế là nó chạy rất chậm do phải dịch lại, mỗi lệnh chạy trên CPU máy ảo phải được dịch lại để chạy trên CPU máy chủ. Hầu hết các tùy biến trên Emulator được thực hiện thông qua console bởi telnet, từ console này bạn có thể config network, mô phỏng cuộc gọi hay SMS, GPS.... Ngoài ra còn có một tập phong phú các phím tắt kích hoạt các sự kiện khác nhau của Emulator như quay số, gác máy, tăng giảm volume, xoay điện thoại...

Mỗi khi bạn chạy thử phần mềm trên Emulator, phải mất 1-5 phút để Emulator khởi động tùy thuộc vào tốc độ của CPU máy bạn, điều này làm tôi rất bực mình, nếu Emulator mà lại treo giữa chừng hoặc SDK bị crash khi đang debug thì lại phải khởi động lại Emulator, và lại phải chờ đợi rất mệt mỏi. Để cải thiện nhược điểm này, người ta có thể có tùy chọn là lưu lại trạng thái của máy ảo trong bộ nhớ (giống hibernate ở Windows) nhưng cũng không khá hơn là mấy vì đôi khi Emulator không restore lại được từ trạng thái hibernate và bạn lại phải khởi động lại. Thường thì người ta cứ để Emulator chạy liên tục trong lúc debug chương trình để đỡ mất thời gian khởi động.

Tài liệu hướng dẫn cài đặt Android khuyến cáo tăng cách tốc máy ảo để CPU Intel có thể tậ dụng được các phần mở rộng của CPU ảo hóa, các tài liệu cũng cho rằng đây chỉ là tính năng thử nghiệm và có thể có nhiều lỗi. Tôi cài cài này trên Macbook pro và cứ mỗi khi khởi động máy ảo là máy thật lại bị treo và phải dùng uninstall.sh để gỡ bỏ nó. Chúng ta hi vọng nó sẽ được cải thiện tốt hơn trong tương lai.

iOS Simulator – Trải nghiệm mượt mà

iOS Simulator được tích hợp trong phần mềm soạn thảo Xcode, bạn có thể giả lập cả iPhone và iPad. Mỗi phiên bản Xcode chứa iOS SDK của phiên bản hiện tại và một phiên bản trước đây, bạn cũng có thể tải về cài đặt các phiên bản cũ hơn. Xcode biên dịch các ứng dụng mô phỏng cho chipset Intel. Việc này có ưu điểm và cũng có nhược điểm. Ưu điểm là các ứng dụng được mô phỏng nhanh chóng nó chạy như một ứng dụng desktop chạy trong một container mô phỏng. Nhược điểm là bản dịch này khác với bản dịch cho iDevice CPU (kiến trúc ARM). Apple khuyến cáo sử dụng các Simulator như một công cụ kiểm tra sơ bộ để tăng tốc độ lập trình và không phải là một sự thay thế của các thử nghiệm trên thiết bị. Cá nhân, tôi tìm thấy vài lỗi trên thiết bị, mà tôi đã không phát hiện trên simulator

*******

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Giáo trình: Lập Trình Android [Click để xem]

# Khoá học online:  Lập trình Android toàn tập [Click để xem]

Theo ZiiZapp

[Tiện ích - Thủ thuật] Tiện ích mở rộng của Google Chrome

[Tiện ích - Thủ thuật] Tiện ích mở rộng của Google Chorme
Google Chrome là trình duyệt web phổ biến nhất thế giới có rất nhiều tính năng vượt trội. Ngoài những tiện ích mà bạn sử dụng thường xuyên thì còn nhiều tiện ích thú vị khác mà bạn chưa biết đến. Trang bài viết này tôi sẽ giới thiệu tới bạn một số tiện ích mở rộng độc đáo khác trên trình duyệt Google Chrome.

Mỗi trình duyệt Web đều có những đặc điểm riêng, tuy nhiên không ai có thể phủ nhận được Google Chrome cùng những tính năng, tiên ích của nó vẫn là sự lựa chọn trên toàn thế giới.

Một trong những ưu điểm vượt trội của Google Chrome so với các đối thủ cạnh tranh đó là nó được hỗ trợ bởi một số lượng lớn các tiện ích mở rộng thú vị và hữu ích.

1. Videostream - tiến ích dùng cho Google Chromecast 



Chromecast không chỉ cho phép đưa các nội dung video trực tuyến lên TV, mà nó còn có thể mang nội dung của một tab trên trình duyệt Google Chrome lên TV. Để sử dụng tính năng này, bạn cần phải cài một tiện ích mở rộng cho Google Chrome. Trong đó, Videostream for Google Chromecast là một trong những sự lựa chọn hàng đầu với nhiều tính năng và tốc độ truyền tải hình ảnh cao.

Cài đặt tiện ích Videostream tại đây: https://chrome.google.com/webstore/detail/videostream-for-google-ch/cnciopoikihiagdjbjpnocolokfelagl

2. Ballloon – tiện ích sử dụng các dịch vụ lưu trữ đám mây
Ballloon là một tiện ích độc đáo và hữu ích dành cho người dùng hay sử dụng các dịch vụ lưu trữ đám mây như Dropbox, Google Drive, hay OneDrive. Nhiệm vụ của tiện ích này rất đơn giản, đó là cho phép bạn lưu trữ hình ảnh nhanh chóng vào bộ nhớ đám mây cá nhân chỉ bằng cách click chuột phải vào hình ảnh, sau đó chọn Save link to => rồi lựa chọn bộ nhớ mà bạn mong muốn.

Cài đặt tiện ích Ballloon tại đây: https://chrome.google.com/webstore/detail/ballloon-for-chrome/kbmligehjhghebleanjcmenomghmcohn

3. Floating Youtube – Tiện ích Youtube 


Floating Youtube là tiện ích độc đáo giúp bạn tạo ra một cửa sổ riêng biệt dành riêng cho việc trình chiếu video Youtube trong khi vẫn có thể làm việc cùng các tác vụ khác. Tất cả những gì bạn cần phải làm đó là dán đường dẫn Youtube vào công cụ trình chiếu nhạc vào lựa chọn vị trí phù hợp cho nó.

Cài đặt tiện ích Floating YouTube tại đây: https://chrome.google.com/webstore/detail/floating-youtube/jjphmlaoffndcnecccgemfdaaoighkel

4. Linkclump – Tiên ích mở và làm việc cùng nhiều đường dẫn

Nếu công việc yêu cầu bạn phải thường xuyên mở và làm việc cùng nhiều đường dẫn, thì tiện ích Linkclump chắc chắn sẽ là món quà không thể tuyệt vời hơn. Cụ thể, Linkclump sẽ giúp bạn mở rất nhiều đường dẫn bằng cách nhần giữ chuột và kéo chọn giống như thao tác lựa chọn icon trên Windows vậy.

Cài đặt tiện ích Linkclump tại đây: https://chrome.google.com/webstore/detail/linkclump/lfpjkncokllnfokkgpkobnkbkmelfefj

5. OneTab – Tiện ích bạn nhóm tất cả các tab trình duyệt đang mở thành một tab duy nhất 


Ngược lại với LinkClump, thì OneTab lại giúp bạn nhóm tất cả các tab trình duyệt đang mở thành một tab duy nhất. Điều này giúp người dùng dễ dàng quản lý công việc, cũng như tránh được tình trạng đầy bộ nhớ RAM bởi trình duyệt Google Chrome vốn được biết đến như một trong những ứng dụng "gốn" RAM nhiều nhất trên PC và Laptop.

Cài đặt tiện ích OneTab tại đây: https://chrome.google.com/webstore/detail/onetab/chphlpgkkbolifaimnlloiipkdnihall

6. Panelizer – Tiện ích Youtube 


Tiện ích Panelizer cũng giống như Floating Youtube, giúp bạn tạo ra một hoặc nhiều cửa sổ nhỏ nằm ở góc dưới bên phải màn hình để tăng khả năng làm việc đa nhiệm, cũng như giúp bạn theo dõi các cập nhật mới nhất từ Facebook hoặc Gmail khi đang làm việc mà không muốn mất công chuyển đổi tab.

Cài đặt tiện ích Panelizer tại đây: http://dantri.com.vnhttps://chrome.google.com/webstore/detail/panelizer/dpefooogphgomhpbgebhpmhpbmideaab

7. Tab.pics – Tiện ích cài đặt các theme wallpaper độc đáo 


Đây là tiện ích cho phép bạn cài đặt các theme wallpaper độc đáo và đẹp mắt khi mở tab mới trên trình duyệt Google Chrome. Mặc dù không mang góp phần cải thiện hiệu năng khi sử dụng, nhưng tiện ích này có thể mang đến cho bạn những giây phút thư thái khi làm việc căng thẳng.

Cài đặt tiện ích Tab.pics tại đây: https://chrome.google.com/webstore/detail/tabpics/hcaanmfcilckhmibiacbenapbdjgcnfa
Tham khảo: dantri

[C\C++] Bài tập: Cấu trúc if [160915]

[C\C++] Bài tập: Cấu trúc if [160915] (Chưa bài tập về nhà, lớp ĐH Tin K6 - TDU)

// --------------------
Bài 1. Giải và biện luận ax^2 + bx + c=0
//---------------------
/* Viết trên DEV C++*/

/* Cách 1: (không sử dụng chương trình con- hàm) */

#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
// hàm chính
int main(){
// khai bao bien
float a,b,c;
// Nhap
cout<<"\n Nhap he so:";
cout<<"\n a: "; cin>>a;
cout<<"\n b: "; cin>>b;
cout<<"\n c: "; cin>>c;
// Bien luan
if(a==0)
if(b==0)
if(c==0)
cout<<"\n Phuong trinh vo so nghiem";
else
cout<<"\n Phuong trinh vo nghiem";
else
cout<<"\n Phuong trinh co 1 nghiem x="<<-c/b;
else
{
// tinh delta
float d=b*b-4*a*c;
if(d<0)
cout<<"\n Phuong trinh vo nghiem";
if(d==0)
cout<<"\n Phuong trinh co nghiem kep x1=x2="<<-b/(2*a);
if(d>0)
{
float x1= (-b-sqrt(d))/(2*a), x2=(-b+sqrt(d))/(2*a);
cout<<"\n Phuong trinh co 2 nghiem x1="<<x1<<"; x2="<<x2;
}
}
getch();
return 0;
}


//-------------------------------------------------
/* Cách 2: (sử dụng chương trình con- hàm) */

#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
float a,b,c;
// Ham hap he so
void NhapHS(){
cout<<"\n Nhap he so:";
cout<<"\n a: "; cin>>a;
cout<<"\n b: "; cin>>b;
cout<<"\n c: "; cin>>c;
}
// Ham giai va bien luan
void GiaiPT(float a, float b, float c){
if(a==0)
if(b==0)
if(c==0)
cout<<"\n Phuong trinh vo so nghiem";
else
cout<<"\n Phuong trinh vo nghiem";
else
cout<<"\n Phuong trinh co 1 nghiem x="<<-c/b;
else
{
// tinh delta
float d=b*b-4*a*c;
if(d<0)
cout<<"\n Phuong trinh vo nghiem";
if(d==0)
cout<<"\n Phuong trinh co nghiem kep x1=x2="<<-b/(2*a);
if(d>0)
{
float x1= (-b-sqrt(d))/(2*a), x2=(-b+sqrt(d))/(2*a);
cout<<"\n Phuong trinh co 2 nghiem x1="<<x1<<"; x2="<<x2;
}
}
}
// hàm chính
int main(){
// goi ham
NhapHS();
GiaiPT(a,b,c);
getch();
return 0;
}

//---------------------------------------------------
Bài 2:
- Nhập vào điểm Toán rời rạc
- In ra điểm chữ
- Tính điểm tích lũy
(0<= điểm <=10)
//----------------------------------------------------

/* Viết trên DEV C++*/

#include<iostream>
#include<conio.h>
using namespace std;
int main(){
// Khai bao bien
float diemTRR;
// Nhap diem
cout<<"\n Nhap diem TRR: ";
cin>>diemTRR;
if(diemTRR<0 || diemTRR>10)
cout<<"\n Gia tri nhap vao khong phu hop!";
else
{
// diem chu
char diemChu; if(diemTRR<4)
diemChu='F';
  else if(diemTRR<5.5)
diemChu='D';
else if(diemTRR<7)
diemChu='C';
else if(diemTRR<7)
diemChu='B';
else if(diemTRR<8.5)
diemChu='B';
else diemChu='A'; // Diem tich luy
float diemTL;
if(diemChu=='F')
diemTL=0;
  else if(diemChu=='D')
diemTL=1;
else if(diemChu=='C')
diemTL=2;
else if(diemChu=='B')
diemTL=3;
else
diemTL=4;
// in ket qua
cout<<"\n * Diem so: "<<diemTRR;
cout<<"\n * Diem chu: "<<diemChu;
cout<<"\n * Diem tich luy: "<<diemTL; }
getch();
return 0;
}
// Các bạn có thể triển khai code theo cách khác.

>> TẢI VỀ TẠI ĐÂY

Tự học lập trình máy tính thật đơn giản

[apps1pro.com] Tự học lập trình máy tính thật đơn giản

Bạn là lập trình viên hoặc một lập trình viên mới bắt đầu. Trong bài viết này tôi gửi cho bạn những thông tin thú vị, các lập trình là công việc thực sự thú vị. Có rất nhiều cách khác nhau để học lập trình thành công.


Chưa bao giờ tài liệu học tập lập trình lại đa dạng và nhiều như bây giờ. Bạn có thể tìm hiểu trực tiếp trên website, hoặc bạn có thể tải về các ứng dụng để lập trình thiết bị của bạn để tự học.

Tôi vui mừng giới thiệu với bạn danh sách các ứng dụng chạy trên điện thoại Android để giúp bạn tự học lập trình mọi lúc, mọi nơi. Nội dụng các ứng dụng này được tập hợp từ nhiều nguồn, có chất lượng cao, được trình bày bằng tiếng Anh, có nhiều ví dụ kèm theo.

Xem và tải về ứng dụng tại đây: http://goo.gl/q1gVRz


Bạn có rất nhiều lựa chọn: C, C ++, C #, Java, VB, lắp ráp, Android, PHP, ASP, iOS, Xcode, Javascript, Python, Ruby, Fortran, Pascal, SQL, MySQL, JSON, ...

Chúc các bạn thành công với niềm đam mê và sự lựa chọn của bạn.

Tham khảo apps1pro.com

[ASM + C/C++] Ví dụ sử dụng ASM nhung trong C++ để vẽ đoạn thẳng

Ví dụ sử dụng ASM nhung trong C++ để vẽ đoạn thẳng:

#include <iostream.h>
#include <conio.h>
void main()
{
clrscr();
asm{
mov ah,00          //Chuyen ham mau sac 00 vao ah trong ngat 10h.
mov al,18       //Che do 18,mau sac mono.
int 10h            //Goi ngat 10h.
//Ve duong thang
mov cx,350         //Vi tri diem ve(chieu ngang),350 la diem anh man hinh
mov dx,180         //Vi tri diem ve(chieu doc),dx= 180
}
ve:
asm{
mov ah,0ch         //Ham ve 1 diem anh len man hinh.
mov al,3         //Dua mau vao al,3= xanh lam
int 10h
inc cx             //Tang diem ve cx.
cmp cx,551         //So sanh cx va 551.
jnz ve         //Lap lai ve.day den khi ket qua so sanh= 0(cx=551).
}
getch();
}

// Lưu ý: Ví dụ chạy tốt trên môi trường TC3.0

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Giáo Trình: Kỹ Thuật Lập Trình C/C++ Căn Bản Và Nâng Cao [Click để xem]

# Khoá học online: Học lập trình C/C++ TỪ A - Z [Click để xem]

Categories

AI (13) AI programming (1) ASP (1) Android (32) App Honeygain (5) Assembly (17) Biểu diễn thuật toán (1) Bubble-Sort (1) Bài giảng (2) Bài giảng lập trình C và Cpp (21) Bài viết hay (109) Bản đồ tư duy (1) C Plus Plus (103) C/C++ (16) CDSL phân tán (1) CSS (2) Cơ sở dữ liệu (11) Danh ngôn lập trình (1) Datamining (4) Genetic Algorithm (1) Giáo trình (2) Giải thuật tiến hóa - thuật toán di truyền (2) Google App Engine (2) Góc học tập (34) HTML (1) Hướng dẫn kiếm tiền online tại nhà (7) Hướng dẫn sử dụng Emu8086 (1) Học lập trình (131) Học lập trình C và CPP qua ví dụ (17) Java (54) Java Căn bản (6) JavaScript (5) Kỹ năng đọc hiệu quả (1) Kỹ thuật lập trình (16) Kỹ thuật đồ họa máy tính (10) Lý thuyết Cơ sở dữ liệu (2) Lý thuyết đồ thị (11) Lập trình Cơ sở dữ liệu (2) Lập trình Python (2) Lập trình căn bản (8) Lập trình hướng đối tượng với Java (7) Lập trình mobile (9) Lập trình mạng (6) Lập trình nhúng (1) Lập trình trí tuệ nhân tạo (2) ML (1) MMO (7) MS Access (1) Machine learning (2) Mạng máy tính (1) Mẹo tìm kiếm trên Google (1) Nghiên cứu khoa học (3) Ngôn ngữ lập trình (2) Những cuốn sách hay mà bạn nên đọc khi còn trẻ (1) Pascal (3) Phương pháp tính toán tối ưu (2) Phương pháp tối ưu (2) Quản lý dự án CNTT (1) SEO (1) SQL (5) Swift (9) Sách hay (4) Thiết kế Web (2) Thuật toán (51) Thuật toán Sắp Xếp -Sort (9) Thuật toán Tìm kiếm - Search (5) Thuật toán di truyền (4) Thực hành Android (2) Tin học văn phòng (5) Tiện ích máy tính (3) Toán rời rạc (13) Treo máy kiếm tiền (3) Trí tuệ nhân tạo (18) Tài liệu tham khảo (5) Tìm hiểu Blockchain (2) Tự học Android (3) Tự học Android qua ví dụ (1) Tự học JavaScript (1) Tự học lập trình (9) Tự học lập trình Android (17) Tự học lập trình C và CPP (14) Tự học lập trình java qua các ví dụ (8) XML (1) blockchain (2) bài giảng quản lý dự án CNTT (1) bài tập java (3) bài tập lập trình (4) cấu trúc dữ liệu giải thuật (15) hướng dẫn viết báo (1) học lập trình Java (11) học máy (5) hợp ngữ (8) lập trình viên (3) phưng pháp đơn hình (2) thuật toán AI (2) tài liệu CNTT miễn phí (4) tính toán tối ưu (1) tự học lập trình iOS (8) tự học lập trình python (1) ví dụ Assembly (1) Đại số gia tử và ứng dụng (1) Đồ họa (4)