Thứ Tư, 28 tháng 2, 2018

20 Templates Bootstrap cho Admin Dashboard miễn phí


Trong machine learning , có một thứ gọi là định luật ” No Free Lunch “. Nói một cách ngắn gọn, điều đó cho rằng không có một thuật toán nà tốt nhất trong mọi vấn đề và nó đặc biệt hiệp với supervised learning – việc học dưới sự giám sát ( ví dụ là predictive modeling – mô hình tiên đoán).

tỉ dụ, bạn không thể nói rằng các kết nối nơ-ron luôn tốt hơn cây quyết định – decision trees (hay ngược lại). Có rất nhiều yếu tố ảnh hưởng chẳng hạn như kích tấc và cấu trúc của bộ dữ liệu.

Do đó, bạn nên thử nhiều thuật toán khác nhau cho vấn đề của bạn, trong khi sử dụng một “ tập rà soát ” còn lại để đánh giá hiệu suất và chọn ra giải pháp tối ưu nhất.

hẳn nhiên, các thuật toán bạn thử phải ăn nhập với vấn đề của bạn, đó là việc bạn chọn đúng công việc cho machine learning. hao hao, nếu bạn cần dọn dẹp nhà cửa, bạn có thể dùng máy hút bụi, một cây chổi hoặc một cái giẻ lau, nhưng bạn sẽ không sử dụng một cái xẻng và đào.
The Big Principle

Tuy nhiên, có một nguyên tắc chung là cơ sở cho mọi thuật toán machine learning được giám sát cho mô hình tiên lượng.

Các thuật toán machine learning được mô tả như việc học một target function (f) để biến bản đồ đầu vào (X) thành biến xuất (Y): Y = f (X)

Đây là một nhiệm vụ học tập tổng quát mà chúng ta muốn đưa ra những tiên đoán trong ngày mai (Y) với các thí dụ mới về các biến đầu vào (X). Chúng ta không biết chức năng (f) trông như thế nào hoặc dạng của nó. Nếu chúng ta làm như vậy, chúng ta sẽ sử dụng nó trực tiếp và không cần phải học nó từ dữ liệu bằng cách dùng các thuật toán machine learning.

Phương thức phổ thông nhất của machine learning là học cách lập bản đồ Y = f (X) để đưa ra dự đoán của Y cho biến X mới. Điều này được gọi là mô hình tiên lượng hoặc phân tách tiên đoán và đích của chúng ta là làm cho các dự đoán xác thực nhất có thể được.

Đối với những người mới học về machine learning muốn hiểu được cơ bản của nó, đây sẽ là một chuyến khám phá nhanh về 10 thuật toán machine learning hàng đầu được các nhà khoa học dữ liệu sử dụng.
Linear Regression – Hồi quy tuyến tính

Hồi quy tuyến tính có nhẽ là một trong những thuật toán nổi danh nhất và được hiểu rõ nhất trong thống kê và machine learning.

Mô hình tiên lượng chính yếu quan hoài đến việc giảm thiểu sai sót của mô hình hoặc đưa ra các dự đoán chính xác nhất có thể, với một phí tổn giải trình. Chúng tôi sẽ mượn, dùng lại và lấy các thuật toán từ nhiều lĩnh vực khác nhau, bao gồm số liệu thống kê và sử dụng chúng cho những mục đích này.

biểu diễn hồi quy tuyến tính là một phương trình biểu hiện một đường thẳng biểu thị hợp nhất mối quan hệ giữa các biến đầu vào (x) và các biến đầu ra (y), bằng cách tìm các trọng số cụ thể cho các biến đầu vào được gọi là các hệ số (B).



ví dụ: y = B0 + B1 * x

Chúng ta sẽ dự đoán y với biến x cho trước và đích của thuật toán hồi quy tuyến tính là tìm các giá trị cho các hệ số B0 và B1.

Các kĩ thuật khác nhau có thể được sử dụng để tìm mô hình hồi quy tuyến tính từ dữ liệu, chả hạn như một giải pháp đại số tuyến tính cho Ordinary least square và việc tối ưu hóa Gradient descent.

Hồi quy tuyến tính đã được phát minh khoảng hơn 200 năm và đã được nghiên cứu rộng rãi. Một số lề luật tốt khi dùng kĩ thuật này là loại bỏ các biến hao hao nhau (correlated) và để loại bỏ bớt nguyên tố nhãng từ dữ liệu của bạn, nếu có thể. Đây là một kĩ thuật đơn giản và mau chóng, và là thuật toán tốt trước tiên để thử.

2. Logistic Regression – Hồi quy logistic

Hồi quy logistic là một thuật toán khác được mượn bởi machine learning từ lĩnh vực thống kê. Đây là phương thức tốt nhất cho các vấn đề phân loại nhị phân (vấn đề với hai lớp giá trị).

Hồi quy logistic giống như hồi quy tuyến tính với mục đích là để tìm ra các giá trị cho các hệ số mà trọng lượng mỗi biến đầu vào. Không giống như hồi quy tuyến tính, dự đoán đầu ra được chuyển đổi bằng cách sử dụng một hàm không tuyến tính được gọi là hàm logistic.

Hàm logistic trông giống như một S lớn và sẽ biến đổi bất kỳ giá trị nào thành 0-1. Điều này rất hữu ích vì chưng chúng ta có thể ứng dụng một lề luật cho đầu ra của hàm logistic để tăng giá trị cho 0 và 1 (ví dụ IF ít hơn 0.5 sau đó đầu ra 1) và dự đoán một lớp giá trị.



Vì cách mô hình được học, các dự đoán thực hiện bởi hồi quy logistic cũng có thể được dùng như là xác suất của một ví dụ dữ liệu một mực thuộc lớp 0 hoặc lớp 1. Điều này có thể bổ ích cho các vấn đề khi bạn cần đưa ra nhiều lý do cho một dự đoán.

Giống như hồi quy tuyến tính, hồi quy logistic hoạt động tốt hơn khi bạn loại bỏ các tính chất không liên quan đến biến đầu ra cũng như các thuộc tính na ná nhau (correlated). Đó là một mô hình có thể học hỏi nhanh và có hiệu quả với các vấn đề phân loại nhị phân.

3. Linear Discriminant Analysis – phân tách phân loại tuyến tính

Hồi quy Logistic là một thuật toán phân loại truyền thống giới hạn vào các vấn đề phân loại hai lớp. Nếu bạn có nhiều hơn hai lớp thì thuật toán phân tách phân loại tuyến tính nên được ưu tiên.

Sự bộc lộ của LDA khá đơn giản. Nó bao gồm các thuộc tính thống kê của dữ liệu của bạn, được tính cho mỗi lớp. Đối với một biến đầu vào duy nhất, nó bao gồm:
Giá trị trung bình cho mỗi lớp.
Phương sai được tính trên quờ các lớp.




Dự đoán được thực hành bằng cách tính giá trị phân biệt cho mỗi lớp và dự đoán cho lớp đó có giá trị lớn nhất. Kĩ thuật giả thiết rằng dữ liệu có một phân bố Gaussian (bell curve), do đó tốt hơn là bạn nên loại bỏ các giá trị ngoại vi khỏi dữ liệu của bạn trước. Đây là một phương pháp đơn giản và mạnh mẽ để phân loại các vấn đề mô hình dự báo.

4. Classification and regression trees – Cây phân loại và hồi quy

Decision trees là một loại thuật toán quan trọng cho mô hình tiên đoán machine learning.

Sự biểu diễn của mô hình decision tree là một cây nhị phân. Đây là cây nhị phân của bạn từ các thuật toán và cấu trúc dữ liệu, không có gì quá ưa thích. Mỗi node đại diện cho một biến đầu vào độc nhất vô nhị (x) và một điểm phân chia trên biến đó (giả tỉ biến đó là số).



Các node lá của cây chứa một biến đầu ra (y) được dùng để dự đoán. Các tiên lượng được thực hiện bằng cách đi trên các nhánh của cây cho đến khi đến một node lá và đưa ra lớp giá trị tại node lá đó.

Cây có thể học rất nhanh và có thể dùng để dự đoán rất nhanh. Chúng thường chuẩn xác cho nhiều loại vấn đề và dữ liệu của bạn không cần bất kỳ sự chuẩn bị đặc biệt nào.

5. Naive Bayes

Naive Bayes là một thuật toán đơn giản nhưng mạnh mẽ về mô hình tiên đoán.

Mô hình bao gồm hai loại xác suất có thể được tính trực tiếp từ dữ liệu của bạn:

1) Xác suất của mỗi lớp;

2) Xác suất có điều kiện cho mỗi lớp với mỗi giá trị x.

Sau khi tính, mô hình xác suất có thể được sử dụng để đưa ra dự đoán cho dữ liệu mới bằng Định lý Bayes. Khi dữ liệu của bạn có giá trị thực, giả thử một phân phối Gaussian (bell curve) khá phổ biến nên bạn có thể dễ dàng ước tính được các xác suất này.






Naive Bayes được gọi là naive vì nó giả định rằng mỗi biến đầu vào là độc lập. Đây là một giả định mạnh mẽ và không thực tại đối với dữ liệu thực, tuy nhiên, kĩ thuật này rất hiệu quả trên một phạm vi rộng lớn với các vấn đề phức tạp.
K – Nearest Neighbors – KNN

Thuật toán KNN rất đơn giản và rất hiệu quả. Mô hình đại diện cho KNN là tất tật dữ liệu tập huấn. Đơn giản phải không?

Dự đoán được thực hành cho một điểm dữ liệu mới bằng cách tìm thông qua sờ soạng tập đào tạo cho hầu hết các ví dụ K giống nhau (láng giềng) và tóm tắt biến đầu ra cho các thí dụ K. Đối với các vấn đề hồi quy, đây có thể là biến đầu ra làng nhàng, đối với các vấn đề phân loại, đây có thể là mode (hoặc phổ quát nhất) của lớp.

Bí quyết là làm thế nào để xác định sự giống nhau giữa các trường hợp dữ liệu. Kĩ thuật đơn giản nhất nếu các thuộc tính của bạn có cùng kích cỡ (thí dụ vớ đều là inch) là sử dụng khoảng cách Euclide, một con số bạn có thể tâm tính trực tiếp dựa trên sự khác biệt giữa mỗi biến đầu vào.




KNN có thể yêu cầu rất nhiều bộ nhớ hoặc không gian để lưu trữ tuốt luốt dữ liệu, nhưng chỉ thực hiện tính tình (hoặc học) khi một dự báo là cấp thiết, chỉ vừa đúng lúc. Bạn cũng có thể cập nhật và tổ chức các bài tập đào tạo theo thời kì để giữ các dự đoán chuẩn xác.

Ý tưởng về khoảng cách hoặc độ gần có thể bị phá vỡ với các quy mô rất cao (rất nhiều biến đầu vào) có thể ảnh hưởng thụ động đến hiệu suất của thuật toán đối với vấn đề của bạn. Đây được gọi là lời nguyền của quy mô. Nó cho thấy bạn chỉ sử dụng những biến đầu vào có hệ trọng nhất đến dự đoán biến đầu ra.

7. Học Vector Quantization

Nhược điểm của K- Nearest Neighbors là bạn cần phải giữ nguyên bộ dữ liệu đào tạo của mình. Thuật toán Quantization về Vector (hay LVQ) là một thuật toán mạng tâm thần nhân tạo cho phép bạn chọn có bao nhiêu trường hợp đào tạo để treo lên và tìm hiểu chính xác những trường hợp này sẽ như thế nào.




Sự trình diễn cho LVQ là một giao hội các codebook vector. Chúng được lựa chọn tình cờ từ đầu và thích ứng để tóm tắt tốt nhất tập dữ liệu đào tạo qua một số lần lặp của thuật toán. Sau khi học được, các vector mã có thể được sử dụng để tạo ra các dự đoán giống như K- Nearest Neighbors. Các láng giềng hao hao nhất ( ăn nhập với codebook vector nhất ) được tìm thấy bằng cách xem khoảng cách giữa mỗi vector và tỉ dụ dữ liệu mới. Lớp giá trị hoặc (giá trị thực trong trường hợp hồi quy) cho đơn vị kết hợp tốt nhất sau đó sẽ được trả về như dự đoán. Kết quả tốt nhất đạt được khi bạn đổi thay dữ liệu của mình để có cùng khuôn khổ, chẳng hạn như giữa 0 và 1.

Nếu bạn phát hiện ra rằng KNN mang lại kết quả tốt trên tập dữ liệu của bạn, hãy thử dùng LVQ để giảm yêu cầu về bộ nhớ để lưu trữ tất thảy tập dữ liệu đào tạo.

8. Support Vector machines

Support vector machines có nhẽ là một trong những thuật toán machine learning phổ biến nhất và được nói về nhiều nhất.

Một hyperplane là một đường phân chia không gian biến đầu vào. Trong SVM, một hyperplance được chọn để phân tách tốt nhất các điểm trong không gian các biến đầu vào theo lớp của chúng, hoặc là lớp 0 hoặc lớp 1. Trong hai chiều, bạn có thể mường tưởng nó như một đường thẳng và giả tỉ rằng quờ quạng các biến đầu vào của chúng ta có thể được tách hoàn toàn bằng dòng này. Thuật toán SVM tìm ra các hệ số dẫn đến sự phân tích tốt nhất của các lớp theo hyperplance.


Khoảng cách giữa hyperplane và điểm dữ liệu gần nhất được gọi là biên. Hyperplane tốt nhất hoặc tối ưu có thể tách riêng hai lớp là dòng có biên lớn nhất. Chỉ những điểm này có hệ trọng đến việc xác định hyperplane và trong việc xây dựng các điểm phân loại. Những điểm này được gọi là các vector hỗ trợ. Chúng tương trợ hoặc xác định hyperplane. Trong thực tế, một thuật toán tối ưu được dùng để tìm các giá trị cho các hệ số tối đa hóa biên.


SVM có thể là một trong những phương pháp phân loại hàng đầu mạnh mẽ nhất và đáng thử trên tập dữ liệu của bạn.

9. Bagging and Random Forest

Random Forest là một trong những thuật toán machine learning phổ quát nhất và mạnh nhất. Nó là một loại thuật toán machine learning được gọi là Bootstrap Aggregation hoặc Bagging.

Bootstrap là một phương pháp thống kê mạnh mẽ để ước lượng số lượng từ một mẫu dữ liệu. chẳng hạn như một giá trị nhàng nhàng. Bạn lấy rất nhiều mẫu dữ liệu của bạn, tính giá trị nhàng nhàng, sau đó nhàng nhàng toàn bộ các giá trị làng nhàng của bạn để bạn ước tính tốt hơn giá trị nhàng nhàng thật sự.

Trong bagging, cách tiếp cận na ná được dùng, nhưng thay vì để ước lượng tuốt mô hình thống kê, thường là decision trees. Nhiều mẫu dữ liệu đào tạo của bạn được lấy sau đó các mô hình được xây dựng cho mỗi mẫu dữ liệu. Khi bạn cần dự đoán dữ liệu mới, mỗi mô hình sẽ dự đoán và các dự đoán được tính nhàng nhàng để ước tính tốt hơn giá trị đầu ra thật sự.




Random forest là một sự tinh chỉnh trên phương pháp tiếp cận này, nơi các decision trees được tạo ra để thay vì chọn các điểm phân chia tối ưu, việc phân chia tối ưu được thực hiện bằng cách đưa ra sự tình cờ.

Các mô hình được tạo cho mỗi mẫu dữ liệu dị biệt nhiều so với chúng đáng ra phải như thế, tuy nhiên vẫn chính xác theo những cách độc đáo và dị biệt. kết hợp dự đoán của chúng dẫn đến một ước tính tốt hơn về giá trị đầu ra căn bản.

Nếu bạn nhận được kết quả tốt với một thuật toán có độ biến thiên cao (như decision trees), bạn thường có thể nhận được kết quả tốt hơn bằng cách bagging thuật toán đó.

10. Boosting và AdaBoost

Boosting là một kĩ thuật đồng bộ nhằm thế tạo ra một phương pháp phân loại mạnh từ một số phương pháp phân loại yếu. Điều này được thực hiện bằng cách xây dựng mô hình từ dữ liệu đào tạo, sau đó tạo ra một mô hình thứ hai ráng sửa lỗi từ mô hình trước tiên. Các mô hình được thêm vào cho đến khi tập đào tạo được dự đoán hoàn hảo hoặc thêm một số mô hình tối đa.

AdaBoost là thuật toán boosting thành công đầu tiên được phát triển để phân loại nhị phân. Đây là điểm khởi đầu tốt nhất để hiểu về boosting. Các phương pháp boosting đương đại xây dựng trên AdaBoost, đáng chú ý nhất là các máy boosting gradient ngẫu nhiên.



AdaBoost được dùng với các decision trees ngắn. Sau khi cây trước hết được tạo ra, hiệu suất của cây trên mỗi trường hợp huấn luyện được dùng để đo độ để ý của cây kế tiếp được tạo nên để ý đến từng trường hợp đào tạo. Dữ liệu đào tạo khó dự đoán sẽ có trọng lượng hơn, trong khi những trường hợp dễ dự đoán có ít trọng lượng hơn. Các mô hình được tạo theo thứ tự tuần tự, mỗi lần cập nhật các trọng số trên các trường hợp đào tạo ảnh hưởng đến việc học được thực hiện bởi cây kế tiếp trong chuỗi. Sau khi cả thảy các cây được xây dựng, dự đoán được thực hành cho dữ liệu mới, và hiệu suất của mỗi cây được đo lường bằng cách nó đã được về dữ liệu đào tạo.

bởi vì rất nhiều sự để ý được đưa ra để sửa sai trái theo thuật toán, điều quan trọng là bạn phải có dữ liệu sạch với các giá trị biên.

Last Takeaway

Một câu hỏi điển hình được hỏi bởi những người mới bắt đầu, khi phải đối mặt với rất nhiều thuật toán machine learning, là “Tôi nên dùng thuật toán nào?” Câu giải đáp cho câu hỏi thay đổi tùy thuộc vào nhiều nguyên tố, bao gồm:

1) kích tấc, chất lượng và thuộc tính của dữ liệu;

2) thời kì tính;

3) Tính thúc bách của nhiệm vụ; v

4) Bạn muốn làm gì với dữ liệu.

Ngay cả một nhà khoa học dữ liệu giàu kinh nghiệm cũng không thể biết được thuật toán nào sẽ thực hiện tốt nhất trước khi thử các thuật toán khác nhau. dù rằng có nhiều thuật toán machine learning khác, đây là những thuật toán phổ quát nhất. Nếu bạn là một newbie trong mảng machine learning, đây sẽ là một điểm khởi đầu tốt để tìm hiểu.

Thứ Ba, 27 tháng 2, 2018

Lệnh IF/ELSE, Lệnh SWITCH/CASE trong Java

Như các ngôn ngữ lập trình khác, ngôn ngữ Java cũng hỗ trợ cấu trúc điều khiển luồng. Với cấu trúc này, chương trình sẽ thẩm tra một hoặc nhiều điều kiện và nếu các điều kiện này là true, thì lệnh hoặc các lệnh tương ứng với điều kiện true này sẽ được thực hiện, nếu không thì các lệnh tương ứng với điều kiện false sẽ được thực thi.
 

 

học lập trình java ở đâu

 
Bảng dưới đây kê các lệnh giúp bạn điều khiển luồng trong Java. Các lệnh đó là:
 
Lệnh tả

Lệnh if

Một lệnh if trong Java bao gồm một Bieu_thuc_Boolean được theo sau bởi một hoặc nhiều lệnh. Nếu Bieu_thuc_Boolean được ước tính là true thì các lệnh trong phần thân lệnh if sẽ được thực thi.

Lệnh if...else

Một lệnh if có thể được theo sau bởi một lệnh else tùy ý, mà thực thi khi Bieu_thuc_Boolean là false.

Lồng lệnh if

Nó là hợp lệ để lồng các lệnh if-else, tức thị bạn có thể sử dụng một lệnh if hoặc else if bên trong lệnh if hoặc else if khác.

Lệnh switch

Lệnh switch cho phép bạn rà soát một biến đồng đẳng với một danh sách các giá trị. Mỗi giá trị được gọi là một case – trường hợp. Nếu giá trị này trùng với case nào thì các lệnh tương ứng với case đó sẽ được thực thi.
  
Toán tử điều kiện (? :) trong Java

Ngoài các lệnh kể trên, ngôn ngữ Java còn có một loại toán tử điều kiện giúp bạn rà soát nhanh các điều kiện và thực hành phép gán giá trị cho một biến một cách rất nhanh chóng.

Toán tử này gồm ba toán hạng và được sử dụng để ước tính các biểu thức quan hệ. đích của toán tử là quyết định giá trị nào sẽ được gán cho biến. Toán tử này được viết như sau:
 
bien x = (bieu_thuc) ? (giatri1 neu true) : (giatri2 neu true);

//hoac ban cung co the su dung trong cac lenh RETURN
return (bieu_thuc) ? (giatri1 neu true) : (giatri2 neu false);
đương nhiên, bạn không cấp thiết phải sử dụng các dấu ngoặc đơn như trên. Mình viết như vậy để giúp các bạn dễ nhìn hơn. Sau đây là ví dụ minh họa toán tử điều kiện (? :) trong Java:
 
public class Test 

   public static void main(String args[])
      int a , b;
      a = 10;
      b = (a == 1) ? 20: 30; //Day la vi du ve toan tu dieu kien.
      System.out.println( "Gia tri cua b la : " +  b );

      b = (a == 10) ? 20: 30; //Day la vi du ve toan tu dieu kien.
      System.out.println( "Gia tri cua b la : " + b );
   
Nó sẽ cho kết quả sau:
 
Gia tri cua b la : 30
Gia tri cua b la : 20

Chương tiếp theo bàn về chủ đề gì trong Java?

Chương tới bàn về lớp Number (trong java.lang package) và các lớp phụ của nó trong tiếng nói Java.

Chúng ta sẽ coi xét một số tình huống mà bạn sẽ sử dụng các khởi tạo của các lớp ngoài các kiểu dữ liệu gốc, cũng như định dạng, các hàm toán học mà bạn cần biết khi làm việc với Number.

Chủ Nhật, 25 tháng 2, 2018

Huawei đã có thể điều khiển siêu xe nhờ vào trí tuệ nhân tạo Mate 10 Pro

Không chỉ dừng lại ở smartphone, nhà sinh sản Trung Quốc này còn nuôi tham vọng 'đánh chiếm' lĩnh vực xe tự lái với công nghệ AI của mình.

 


Ngày nay người dùng thường đánh giá chất lượng của các mẫu smartphone tiền tiến duyệt y chỉ số trên benchmark như tốc độ, hiệu suất hay đồ họa... Nhưng rất có thể trong tương lai gần sẽ có thay đổi với sự xuất hiện của công nghệ AI trên điện thoại. Mới đây, trên các trang mạng đã xuất hiện những hình ảnh cho thấy khả năng tự động tài xế của chiếc Huawei Mate 10 Pro. Thực tế, Huawei tuyên bố hãng đã dùng một chiếc smartphone tích hợp công nghệ trí tuệ nhân tạo (AI) để điều khiển một... chiếc ô tô. Như vậy, có thể nói nhà sản xuất Trung Quốc đã bắt đầu mở rộng tham vọng chinh phục AI của mình sang cả lĩnh vực tự động hóa, mà cụ thể ở đây là xe không người lái.

trước tiên có thể bạn cho rằng điều này không có gì quá đặc biệt bởi điện thoại có thể dễ dàng kết nối với hệ thống lái xe và điều khiển chúng. Tuy nhiên nếu đang đi trên đường bất thần gặp trở lực vật thì sao? Hơn nữa làm thế nào để một chiếc điện thoại có thể phân biệt được từng loại khác nhau để tránh? Theo dự án RoadReader, Huawei đã dùng một chiếc Mate 10 Pro để nhận mặt và phân biệt những đối tượng khác nhau như động vật (chó, mèo), đồ vật (các loại bóng, xe đạp) và “học cách xử lý cảnh huống sao cho hiệp nhất”. Với Huawei Mate 10 Pro, hệ thống có thể nhận mặt được vật cản và tránh chúng phê duyệt NPU.

Đại diện công ty này cho biết: “Không chỉ dừng lại ở việc nhận diện các chướng ngại vật như những hệ thống xe tự lái khác, công nghệ AI của Huawei còn biến một chiếc Porsche Panamera thành một dụng cụ không người lái có thể cảm nhận và hiểu môi trường xung quanh”.

 


Không chỉ dừng lại ở smartphone, Huawei đã bắt đầu nghiên cứu công nghệ AI dành cho xe không người lái.

Ban đầu, Huawei dự định tích hợp công nghệ AI nhận diện đồ vật vào Mate 10 Pro nhằm cải thiện tính năng chụp ảnh cho thiết bị thay vì phải phụ thuộc vào các con chip do bên thứ ba cung cấp. Tuy nhiên, chỉ sau 5 tuần nghiên cứu và thí nghiệm, hãng đã đạt được thành tựu đáng ngạc nhiên này.

Andrew Garrihy, Giám đốc Marketing của Huawei Western Europe cho biết: “Smartphone của chúng tôi sở hữu khả năng nhận mặt đồ vật cực tốt. do vậy, chúng tôi muốn thử nghiệm xem liệu trong một thời kì ngắn, nó có thể “học” lái xe cũng như tự mình tránh các trở lực vật trên đường hay không”.

Peter Gauden, Giám đốc mảng lăng xê sản phẩm toàn cầu tại CBG London Hub, Huawei Technologies giảng giải thêm: “Không chỉ dừng lại ở khả năng nhận mặt đồ vật mà công nghệ AI còn hướng đến việc đưa ra những quyết định hợp lý tùy theo cảnh huống gặp phải".

 


AI của Huawei có thể giúp xe tự lái nắm bắt môi trường xung quanh và xử lý cảnh huống linh hoạt hơn.

Trong chũm đẩy mạnh công nghệ AI của mình, Huawei đã chính thức cộng tác với gã khổng lồ Trung Quốc Baidu vào tháng 12/2017 để xây dựng một hệ sinh thái AI di động mở mang lớn, bao gồm nhiều nền tảng, công nghệ, dịch vụ Internet và các khối nội dung khác nhau.


Được biết, hệ sinh thái trên được xây dựng dựa trên nền móng HiAI và đơn vị xử lý neural (NPU) của Huawei phối hợp với framework deep-learning PaddlePaddle và Baidu Brain (bao gồm các dữ liệu và dịch vụ AI) của Baidu. Các lập trình viên AI có thể tùy ý dùng những công nghệ do hệ sinh thái này cung cấp.

Bên cạnh đó, Baidu và Huawei cũng sẽ hiệp tác để cải thiện khả năng nhận mặt giọng nói, hình ảnh trên các thiết bị sáng ý, song song xây dựng thêm một hệ sinh thái phần cứng và phần mềm tích hợp thực tiễn tăng cường (AR) để người dùng sử dụng.

Felix Zhang, Trưởng phòng Công nghệ Phần mềm người tiêu dùng kiêm Giám đốc Công nghệ sáng ý tại Huawei cho biết việc tích hợp AI vào các thiết bị smartphone sẽ mang đến một đổi thay công nghệ cực lớn. Tiềm năng mà AI sở hữu là bất tận, và để dễ hình dung thì nó mang ý nghĩa hao hao như khi động cơ hơi nước mới ra đời. Cả hai đều tụ tập đủ yếu tố cần thiết để thay đổi hoàn toàn đời sống của nhân loại.

 


Baidu và Huawei đã chính thức cộng tác thúc đẩy phát triển AI di động vào ngày 21/12/2017.

Công nghệ AI di động sẽ đổi thay hai yếu tố chủ chốt trong lĩnh vực smartphone, bao gồm: Các thức tương tác giữa người - máy, và “tính năng mở được cá nhân hóa”.

Về khía cạnh đầu tiên, hiệu quả sử dụng giữa người dùng và thiết bị sẽ được cải thiện vượt bậc qua các tác vụ liên can đến hình ảnh, video, tin nhắn, giọng nói và các cảm biến. Đối với khía cạnh thứ hai, AI sẽ cung cấp các dịch vụ cũng như tổng hợp thông báo từ nhiều vận dụng, nội dung, những tính năng do bên thứ ba cung cấp, những tính năng sẵn có trên máy,...

Tháng 9/2017, Huawei đã trình làng dòng chip Kirin 970 tích hợp công nghệ AI và khẳng định đây chính là “ngày mai của smartphone”. Có thể nói, công nghệ AI di động của hãng được hình thành nhờ sự phối hợp giữa thiết bị tích hợp AI và hệ thống AI đám mây.

 


Kirin 970 - bộ vi xử lý di động trước nhất tích hợp công nghệ AI của Huawei.

CEO Richard Yu của Huawei Consumer Business Group cho biết: “Huawei cam kết sẽ phát triển các thiết bị sáng ý bằng cách xây dựng và tương trợ sự phát triển liên kết giữa chip, thiết bị và hệ thống đám mây. Mục đích rốt cục của chúng tôi là nâng cấp tối đa trải nghiệm người dùng. Kirin 970 là sản phẩm đầu tiên trong dòng chip mới cung cấp các tính năng AI mạnh mẽ cho những thiết bị của chúng tôi và nâng sự cạnh tranh lên một tầm cao mới”.

Hai smartphone cao cấp của Huawei là Mate 10 và Mate 10 Pro đều được trang bị bộ xử lý Kirin tích hợp AI với khả năng xử lý đến 2.000 bức ảnh trong 1 phút nhờ công nghệ nhận mặt hình ảnh hiện đại. Bên cạnh đó, Kirin 970 còn đóng vai trò như một nền tảng mở cho phép đối các lập trình viên AI cũng như những đối tác của Huawei dùng để đẩy mạnh hơn nữa sự phát triển của công nghệ này trong mai sau.

Thứ Sáu, 23 tháng 2, 2018

Tất tần tật những điều bạn cần biết về Java 9

 


Sau hơn 3 năm kể từ Java 8, rút cục Java đã ban bố phiên bản tiếp theo vào tháng 9 năm 2017 vừa qua. 

Java 9 được đánh giá là một bước ngoặt đối với chính bản thân Java. Bài này chúng ta sẽ đàm luận các tính năng mới của Java 9. Từ quan điểm hoạt động, những thay đổi và cải tiến trong hiệu suất và bảo mật.


Mô đun (Modularity)

Hãy bắt đầu với tính năng quan yếu nhất của Java 9 – Hệ thống Java Platform Module System. Vấn đề lớn nhất với Java là runtime library. Hai mươi năm phát triển trên một nền tảng lớn đã tạo ra nhiều đống cực với các classes bị chồng chéo vào nhau. Thậm chí còn không có cách nào tối ưu để khai triển các classes trong JDK. Điều đó dẫn đến việc phải dùng tới các thư viện phụ bên ngoài, khiến cho việc phát triển của nền tảng Java bị ngăn cản.

Với Java 9, JDK cũng chính là mô đun cũng như là đi kèm với 90 mô-đun biệt lập khác. Chỉ các package được xuất ra một cách rõ ràng từ mô-đun mới có thể truy cập được tới các mô-đun khác. rút cục, các classes thực hành nội bộ giờ đây có thể được thực thụ đóng gói. Ngoài ra, các mô-đun có thể express các dependencies vào các mô-đun khác. Những dependencies luôn được soát bởi hệ thống mô-đun cả trong quá trình compile và thực hiện.

Các module cũng có thể được sử dụng để mô đun hóa các vận dụng chứ không chỉ là JDK. Thay vì dùng các đường dẫn (classpath) phong phanh, hiện thời bạn có thể tạo ra các mô-đun riêng của mình.

Các mô-đun cung cấp một đường dẫn đến các áp dụng có cấu trúc rõ ràng và đáng tin hơn. Tuy nhiên, hệ thống mô-đun mới này sẽ không thay đổi Java trong một sớm một chiều. Sẽ mất một thời gian trước khi hệ thống mô đun được áp dụng rộng rãi. May mắn thay là cộng đồng đã chào đón sự thay đổi này rất hăng hái.

Năng suất

Ngoài hệ thống mô-đun, Java 9 còn có các tính năng nhỏ để cải thiện năng suất. Ví dụ, các phương pháp collection factory cho phép bạn tạo các collection bất biến với các phần tử được xác định trước trong một câu lệnh. Nhờ đó mà Không cần phải giải quyết thêm nhiều phiền toái để tạo các collection nhỏ, được xác định trước.

Một tính năng giúp tăng tốc năng suất chính khác là JShell, một mã Read-Eval-Print-Loop cho Java. Thay vì compile và chạy các classes nhỏ để rà soát code, bạn có thể tương tác nhập và đánh giá các đoạn mã Java trong JShell với khả năng phản hồi tức tốc. JShell đã được tích hợp với các IDE như IntelliJ IDEA, cho phép bạn mở một môi trường tương tác với quyền truy cập vào mã vận dụng của bạn.

Hiệu suất

Khi chạy một phiên bản Java mới thường có nghĩa là bạn sẽ nhận được cải tiến về hiệu suất mà không cần thay đổi code. Java 9 cũng không ngoại lệ. Một thí dụ về sự cải tiến như vậy là tính năng Compact Strings. Bất kỳ chuỗi nào có thể được thấy rõ đầy đủ chỉ với bộ ký tự ASCII sẽ được lưu trữ với chỉ một byte cho mỗi ký tự. Các chuỗi có các ký tự nằm ngoài khuôn khổ ASCII sẽ lấy hai byte cho mỗi ký tự. Nếu chúng là các chuỗi đơn giản, điều này sẽ giúp làm giảm lượng bộ nhớ được dùng.

Một đổi thay quan yếu khác trong Java 9 là việc để Garbage Collector G1 (Garbage First) ở chế độ mặc định. Được thiết kế để dùng với qui mô lớn, bạn sẽ nhận được độ trễ thấp hơn khi code được thực hiện. Đổi lại, G1GC sử dụng tài nguyên CPU nhiều hơn để đạt được điều này.

Bảo mật

Bản thân nền móng cũng đã có được nhiều tính năng mới được cập nhật để tăng cường bảo mật. Hầu hết các cải tiến về bảo mật trong Java 9 can dự đến networking. Các phiên bản mới nhất của (D) TLS hiện được tương trợ cho các kết nối HTTPS an toàn.

Các tăng cường bảo mật khác bao gồm khả năng lọc dữ liệu lần lượt. Việc sắp xếp theo trật tự vốn là điều mà Java luôn bỏ qua, dẫn đến nhiều cuộc tiến công an ninh trong những năm gần đây. Giờ đây, bạn có thể lọc các luồng dữ liệu lần lượt, giúp giảm thiểu mức độ tấn công của Java serialization.

Chu kỳ phát hành

Cho đến nay, chúng tôi đã tụ họp vào các tính năng của Java 9. Nhưng có một lý do khác chứng minh việc Java 9 là một phiên bản quan yếu: Nó đánh dấu sự kết thúc của kỷ nguyên của các phiên bản Java chỉ hội tụ vào “tính năng”. Trong dĩ vãng, một số tính năng quan trọng đã được chọn, và khi đã sẵn sàng, một phiên bản mới của Java mới được tạo ra. Trong thực tế, điều này đã dẫn đến khoảng cách ít nhất ba năm giữa các phiên bản chính. Điều này vốn là chẳng thể chấp nhận được đối với thời đại hiện tại. Do đó, Oracle và OpenJDK đang chuyển sang việc phát hành các phiên bản dựa trên mốc thời kì.

bây giờ, cứ mỗi 6 tháng, một phiên bản mới của Java sẽ được phát hành. Nó sẽ chứa thảy các tính năng đã sẵn sàng tại thời điểm đó. Giữa những bản phát hành 6 tháng này, hãng cung sẽ tung ra bản cập nhật với các bản sửa lỗi quan trọng nếu cần. Lịch trình phát hành mới này có một số ý nghĩa. Hiện tại Java sẽ tung ra các bản cập nhật lớn vào tháng 3 và tháng 9 hàng năm. Có tức thị phiên bản tiếp theo vào tháng 3 năm 2018 sẽ là Java 10. Tuy nhiên, công ty vẫn chưa đưa ra thông tin chính thức công nhận mốc thời điểm trên.

tuy thế, việc update thẳng thớm Java cũng không phải là tin vui với nhiều công ty. Do đó, sẽ có các phiên bản dài hạn (LTSs) được chỉ định ba năm một lần. Phiên bản trước nhất của LTS sẽ được phát hành tháng 9 năm 2018. Điều này cũng có tức thị Java 9 sẽ không có trong các phiên bản dài hạn được hỗ trợ.

Lời kết

Những chiến lược mới này làm cho Java trở nên linh hoạt hơn bao giờ hết. Các tính năng chính sẽ được chia thành các bước nhỏ và cập nhật mỗi 6 tháng một lần. Như vậy là ngay cả sau hơn 20 năm, Java vẫn đấu phát triển với tốc độ sôi động và nhanh chóng.

Thứ Năm, 22 tháng 2, 2018

Hằng số trong PHP

Khóa đào tạo lập trình PHP

Một hằng (constant) là một tên hoặc một định danh cho một giá trị đơn. Giá trị của hằng chẳng thể đổi thay trong quá trình thực thi script. Theo mặc định, một hằng là phân biệt kiểu chữ. Theo qui ước, các định danh hằng xoành xoạch là chữ hoa. Tên hằng bắt đầu với một chữ cái hoặc dấu gạch dưới ( _ ), được theo sau bởi bất kì số lượng chữ cái, số hoặc dấu gạch dưới nào. Nếu bạn đã định nghĩa một hằng số, nó có thể không bao giờ được đổi thay hoặc định nghĩa lại.
 
Để định nghĩa một hằng số trong PHP, bạn phải sử dụng hàm define() và để lấy giá trị của một hằng, bạn phải chỉ ra tên của nó. Không giống như biến, bạn không cần thêm $ vào hằng. Bạn cũng có thể dùng hàm constant() để đọc một giá trị của hằng nếu bạn muốn lấy tên của hằng một cách linh hoạt.
Hàm constant() trong PHP

Như tên hàm đã đề cập, hàm này sẽ trả về giá trị của hằng số.

Điều này là rất hữu dụng khi bạn muốn lấy giá trị của một hằng, nhưng bạn không biết tên của nó, ví du: nó được lưu giữ trong một biến hoặc được trả về bởi một hàm.
thí dụ hàm constant() trong PHP

Chỉ có dữ liệu vô hướng (Boolean, integer, float và string) có thể được giữ trong các hằng số.
Khác nhau giữa hằng số và biến trong PHP là:

Để định nghĩa biến cần viết kí tự $ vào trước, ngược lại hằng thì không cần.

Hằng chẳng thể được định nghĩa bằng phép gán đơn giản, chúng chỉ có thể được định nghĩa bằng cách sử dụng hàm define().

Hằng có thể được định nghĩa và truy cập bất cứ đâu mà không quan hoài đến luật lệ phạm vi biến.

Một hằng khi đã được định nghĩa, nó không thể định nghĩa lại hoặc hủy định nghĩa.

Tên hằng hợp lệ và không hợp thức trong PHP
// thí dụ các tên hằng hợp lệ
define("ONE",     "tỉ dụ tên hằng hợp lệ 1");
define("TWO2",    "tỉ dụ tên hằng hợp lệ 2");
define("THREE_3", "thí dụ tên hằng hợp lệ 3")

// thí dụ các tên hằng không hợp thức
define("2TWO",    "Ví dụ tên hằng không hợp lệ 1");
define("__THREE__", "Ví dụ tên hằng không hợp thức 2"); 

Hằng số Magic trong PHP

PHP cung cấp một số lượng lớn các hằng số được định nghĩa trước để bất kỳ script nào cũng có thể dùng nó.

Có 5 hằng số magic, thay đổi tùy thuộc vào nơi chúng được dùng. Ví dụ, giá trị của __LINE__ phụ thuộc vào dòng mà nó được dùng trong script của bạn. Các hằng đặc biệt này là phân biệt kiểu chữ.

Bảng dưới kê một số hằng magic trong PHP:
Tên biểu đạt
__LINE__ Dòng ngày nay của file
__FILE__ Đường dẫn đầy đủ và tên đầy đủ của file. Nếu dùng bên trong một include thì tên của file được include sẽ được trả về. Từ PHP 4.0.2, __FILE__ luôn luôn chưa một đường dẫn tuyệt đối, trong khi ở phiên bản cũ hơn chúng chứa đường dẫn tương đối trong một số trường hợp
__FUNCTION__ Tên của hàm. (Được thêm trong PHP 4.3.0) Như PHP 5, hằng số này trả về tên của hàm như nó đã khai báo trước đó (phân biệt kiểu chữ). Trong PHP 4, giá trị của nó luôn là chữ in thường
__CLASS__ Tên của lớp. (Được thêm trong PHP 4.3.0) Như PHP 5, hằng số này trả về tên của lớp như nó đã khai báo trước đó (phân biệt kiểu chữ). Trong PHP 4 giá trị của nó luôn là chữ in thường
__METHOD__ Tên phương thức lớp. (Được thêm trong PHP 5.0.0) Tên phương thức này được trả về như đã khai báo trước đó (phân biệt kiểu chữ).

Thứ Tư, 21 tháng 2, 2018

Con đường trở thành thực tập sinh tại Google


Tôi là sinh viên chuyên ngành môi trường tại đại học Yale-NUS (một trường cao đẳng nghệ thuật), có thể bạn thấy khá là bất ngờ khi tôi lại trở thành thực tập tại Google – kẻ đồ sộ về công nghệ. Bởi suy cho cùng thì việc nghiên cứu về môi trường cũng như là nghệ thuật thì có hệ trọng gì tới công nghệ hay kinh dinh?

Câu giải đáp sẽ khiến bạn ngạc nhiên đấy! Đó là bởi bất cứ ai cũng có thể làm việc cho Google hay những kẻ khổng lồ công nghệ khác nếu họ thật sự ráng. nên chi, hãy để tôi giảng giải và chia sẻ một số lời khuyên về những gì bạn có thể làm để có được một chuyến tập sự tại Google.

1.Tôi đã làm 9 công việc tập sự khác nhau

Trước khi học đại học: The Thought Collective (một doanh nghiệp từng lớp.
Mùa hè trước nhất: Philanthropy in Motion (một tổ chức phi lợi nhuận)
Học kỳ trước nhất của năm thứ hai: Part-time intern tại Flare Communications (một công ty chuyên về huấn luyện nhân sự và điều hành)
Vào tháng 12, năm thứ hai: JFDI.Asia / QLC.io và Clickstream Ventures (nay là Cocoon Capital)
Học kỳ thứ hai của năm thứ hai: Tôi là một part-time intern tại Green Pea Cookie (một startup về đồ ăn)
Năm thứ ba: tập sự sáu tháng tại Founder Institute (một công ty chuyên về vườn ươm) và tập sự thực tập năm tháng tại Tilt

Tôi biết bạn đang nghĩ gì: “Làm cách nào mà có thể làm ngần ấy việc?”. Đúng là nó nghe có vẻ điên cuồng, nhưng như bạn đã thấy, tôi đã làm nhiều việc tập sự khác nhau ngay từ khi còn đang đi học.

TIP: Hãy tập sự càng nhiều càng tốt để có thật nhiều kinh nghiệm làm việc. Bạn thậm chí có thể vừa làm part-time trong khi vẫn học thường ngày. Startups có thiên hướng giờ giấc linh hoạt hơn và sẵn sàng chấp thuận cho bạn vào làm thực tập viên ngay cả khi không có nhiều kinh nghiệm.

2. Tôi đồng sáng lập một doanh nghiệp và giúp tăng vốn lên 70.000 đô la

Trong năm đầu tiên ở trường đại học, tôi đã đồng sáng lập một doanh nghiệp mạng tầng lớp – tên gọi là SDI Academy cùng với hai sinh viên khác. đích của nó là để bảo vệ lợi quyền cho người lao động nhập cư duyệt việc dạy tiếng Anh cũng như giúp họ hòa nhập tốt hơn.

Với tư cách là đại diện cho SDI Academy, tôi tham dự vào hai chương trình gọi là Business Challenge và SIF Young Social Entrepreneurs Program. Hai sự kiện này đã dạy tôi rất nhiều về cách phát triển kinh dinh và cho phép tôi được gặp gỡ nhiều người anh tài trong startup cũng như là entrepreneur.

TIP: Mặt dù đây là một cơ hội học tập nhẵn, bạn không thắt phải như tôi, làm một startup. bởi nó tứ tung khó nên tôi cũng khuyên bạn đừng nhảy vào nếu chỉ đơn thuần làm để thu lợi nhuận. Tuy nhiên, bạn có thể bắt đầu với các dự án nhỏ mà bạn thực sự ham mê, hoặc dự các cuộc thi về kinh doanh và vậy xây dựng một mạng lưới kết nối và quen biết.


3. Tôi tham dự 10 cuộc thi hackathons và giành được chiến thắng 4 lần

Tôi sẽ thành thực: Tôi thực thụ không giỏi code đến vậy. Do đó, làm thế nào để giành chiến thắng trong hackathons? Bí quyết nằm ở việc tìm được một đội ngũ có chung lý tưởng. Thường thì nó sẽ bao gồm hai developer, một designer và một người thật giỏi trong việc thuyết trình. Mặt khác, một ý tưởng năng khi nó giải quyết đúng vấn đề, tương đối độc đáo, không quá phức tạp, và có thể cho ra lợi nhuận.

Nếu bạn không biết làm thế nào để code, thì nên ráng trở thành một người thuyết trình thực sự giỏi và hùng hồn. Với khả năng có thể viết một kịch bản mang tính thuyết phục cũng như thiết kế các slide thuyết trình bắt mắt. Bằng cách đó, bạn vẫn có thể đem lại giá trị cho đội. Đôi khi, việc thuyết trình cũng quan trọng như bản thân sản phẩm, do đó bạn phải đảm bảo rằng bạn có thể làm tốt. Tôi là người thuyết trình trong hồ hết các hackathon tôi tham dự, và tôi xoành xoạch bảo đảm rằng mình luôn làm tốt nhất có thể.

TIP: Hãy cứ dự hackathons bất kể trình độ của bạn.Bởi vững chắc là bạn sẽ học được điều gì đó. ngoại giả, biết đâu may mắn lại mỉm cười và bạn có khả năng để giành chiến thắng.

4. Tôi tới làm ở Thung lũng Silicon trong vòng một năm

Tôi đã trải qua một năm làm việc tại Thung lũng Silicon phê duyệt chương trình NUS Overseas College. Tôi dự các lớp học kinh doanh tại Đại học Stanford, nơi mà tôi đã học được từ các nhà đầu tư mạo hiểm và các thương gia nổi danh, bao gồm Elon Musk!

TIP: Dành thời gian học tập hoặc làm việc tập sự ở nước ngoài. Nó sẽ cho phép bạn trải nghiệm sống trong một môi trường hoàn toàn mới. Rất nhiều công ty đa nhà nước kiêng những người có kinh nghiệm này vì họ có thể dễ dàng thích ứng với các nền văn hoá khác nhau.
 
5. Tôi đã đi đến 300 sự kiện

Tôi là một kẻ cuồng các sự kiện lớn, nhưng đi đến nhiều công nghệ và sự kiện startup đã giúp tôi rất nhiều thứ:
Cải thiện những kỹ năng mềm của tôi: như tiếp cận mọi người và chuyện trò với họ một cách dễ dàng
Tìm hiểu thêm về xu hướng công nghệ mới nhất
xúc tiếp với Startup
kết duyên với rất nhiều người nhân tài trong lĩnh vực công nghệ
Khám phá các nhịp để trở nên một tập sự viên ở các công ty Startup.

Tôi chẳng thể chỉ liệt kê những kết quả mà không đề cập đến những đổi thay. Để có thể làm được nhiều việc thực tập, bắt đầu kinh dinh, tham dự nhiều cuộc thi, và dự hàng trăm sự kiện, tôi phải hy sinh những điều khác:
Tôi đã có ít thời kì hơn cho việc học của mình cũng như bạn bè.
Trong khi tôi là thành viên của một số câu lạc bộ trong năm đầu tiên, tôi đã phải giảm bớt thời gian dự các hoạt động ngoại khóa.
Tôi chẳng thể dành nhiều thời kì đi chơi với bạn bè vì tôi thường phải làm rất nhiều việc.

TIP: Có thể bạn sẽ phải đối mặt với những điều, nên chi hãy coi xét thật kĩ việc nếu nhận được một công việc tập sự hay làm việc trong một công ty công nghệ hàng đầu là điều bạn thật sự muốn. Nếu không, hoặc bạn chỉ thích một công việc ổn định và an toàn thì điểm số cao luôn là một trong những tiêu chí quan trọng.

***

Tôi khá kiên cố rằng nếu bạn làm theo những gì tôi đã làm, bạn có thể có được một công việc thực tập hoặc làm việc tại một công ty công nghệ lớn. Bạn sẽ gặt hái nhiều ích lợi và thành công, nhưng hãy nhớ rằng bạn sẽ cần phải hy sinh một số thứ khác.

Thứ Năm, 8 tháng 2, 2018

Cách viết testcase cho một form đăng ký tài khoản

 

kiểm thử phần mềm - ảnh minh họa



Bài viết này sẽ nêu lên một số ý kiến test một form đăng ký trương mục cũng như là cách viết testcase cho một form đăng ký bất kỳ trong quá trình thực hành test để bao quát được vơ các trường hợp xảy ra. Các bạn tham khảo nhé chưa đích thực đầy đủ đâu.


Form đăng ký bao gồm các phần:
 
  • Tên đăng nhập
  • Mật khẩu
  • Email
  • Số điện thoại
  • Nút “Đăng ký”

Điều kiện:
  • Trường tên đăng nhập không được dùng ký tự đặc biệt chỉ được sử dụng số và chữ, giới hạn độ dài từ 6-12 ký tự
  • Trường mật khẩu được sử dụng ký tự đặc biệt, giới hạn độ dài từ 6-12 ký tự
  • Trường số điện thoại yêu cầu từ 10-12 ký tự bắt đầu bằng 0 hoặc 84 đều được

Với đề nghị như thế này thì ta cần viết testcase như thế nào để bao quát hết được?
Sau đây là một số ý kiến góp ý cho các bạn trong quá trình viết testcase thế nào cho tốt?

Check rà thông báo khi chưa nhập thông báo gì
 
  • Không nhập thông tin vào các trường => chọn nút “Đăng ký”
  • Nhập thông báo vào một trường các trường còn lại để trống => chọn nút “Đăng ký”
Check validate trường tên trương mục

Với trường tên đăng nhập cần check các ký tự đặc biệt như: !@#$… hoặc space
Check tiếng việt có dấu, không dấu
 
  • Check chữ thường chữ hoa
  • Check độ dài 6-12 ký tự (Dùng phương pháp giá trị biên check các giá trị: 5,6,7,10,11,12,13)
Check trùng trương mục đã đăng ký rồi
 
  • Check validate trường email
  • Check email không đúng định dạng như: abc@, a@b.c, 12121@gmail….
  •  
  • Check trùng email đã đăng ký rồi

Check validate trường mật khẩu
  • Check nhập giá trị vào thì có được mã hóa thành dấu **** hay không
  • Check nhập vào các chữ, ký tự đặc biệt
  • Check độ dài 10-12 ký tự (Dùng phương pháp giá trị biên check các giá trị: 9,10,11,12,13)
Check validate trường số điện thoại
  • Check không phải là đầu số 0, 84
  • Check đúng đầu số nhưng không đúng số điện thoại (VD: 8400000000)
Check trùng số điện thoại đã đăng ký rồi

Trên đây là một đôi quan điểm về viết testcase tuy chưa đủ nhưng cũng phần nào giúp đỡ được các bạn bao quát được hết toàn bộ các trường hợp kiểm thử, để đem lại một sản phẩm hoàn chỉnh nhất ?

Thứ Ba, 6 tháng 2, 2018

Cấu trúc của Android

Hệ điều hành Android là một ngăn xếp của các thành phần phần mềm mà có thể đại khái phân chia thành 5 khu vực và 4 lớp chính. Hình dưới đây minh họa sơ đồ cấu trúc Android.

Lớp Linux Kernel trong Android

Linux Kernel là lớp thấp nhất. Nó cung cấp các chức năng cơ bản như quản lý tiến trình, quản lý bộ nhớ, quản lý thiết bị như: Camera, bàn phím, màn hình, … ngoại giả, nó còn quản lý mạng, driver của các thiết bị, điều này gỡ bỏ sự khó khăn về giao tế với các thiết bị ngoại vi.
Libraries trong Android

Phía trên Linux Kernel là tập hợp các bộ thư viện mã nguồn mở WebKit, bộ thư viện nức danh libc, cơ sở dữ liệu SQLite hữu dụng cho việc lưu trữ và san sẻ dữ liệu, bộ thư viện thể phát, thu thanh về âm thanh, hoặc video. Thư viện SSL chịu trách nhiệm cho bảo mật Internet.


Android Libraries

Phần này gồm các thư viện dựa trên Java. Nó bao gồm các Framework Library giúp xây dựng, vẽ đồ họa và truy cập cơ sở dữ liệu trở thành dễ dàng hơn. Dưới đây là một số Android Library mấu chốt có sẵn cho lập trình viên Android: −

android.app − Cung cấp truy cập tới mô hình vận dụng và nó là nền tảng cho tất tật ứng dụng Android.

android.content − Việc truy cập nội dung, các thông điệp giữa các ứng dụng và các thành phần ứng dụng trở thành dễ dàng hơn.

android.database − Được sử dụng để truy cập dữ liệu được công bố bởi Provider và bao gồm các lớp quản lý cơ sở dữ liệu SQLite.

android.opengl − Một Java Interface cho OpenGL ES 3D phê duyệt API.

android.os − Cung cấp cho các ứng dụng sự truy cập tới các dịch vụ chuẩn của hệ điều hành như thông tin, dịch vụ hệ thống và giao dịch nội tiến trình.

android.text − Được sử dụng để bình phục và thao tác text trên một thiết bị hiển thị.

android.view − Các khối kiến trúc nền tảng của ứng dụng UI.

android.widget − Một tập kết các UI được xây dựng trước như button, label, list view, layout manager, radio button, …

android.webkit − Một hội tụ các lớp cho phép khả năng để trình duyệt trên web được xây dựng bên trong các vận dụng.

Having covered the Java-based core libraries in the Android runtime, it is now time to turn our attention to the C/C++ based libraries contained in this layer of the Android software stack.
 
Android Runtime

Đây là thành phần thứ 3 trong cấu trúc, thuộc về lớp 2 tính từ dưới lên. Phần này cung cấp một thành phần quan trọng gọi là Dalvik Virtual Machine là một máy ảo Java đặc biệt, được thiết kế tối ưu cho Android.

Máy ảo Dalvik VM dùng các tính năng cốt lõi của Linux như quản lý bộ nhớ, đa luồng, mà bản tính là bên trong ngôn ngữ Java. Máy ảo Dalvik cho phép tuốt luốt các ứng dụng Android chạy trong tiến trình riêng của nó

Android Runtime cũng cung cấp bộ thư viện cốt lõi, cho phép các lập trình viên Android dùng để viết các áp dụng Android.

Application Framework

Lớp Application Framework cung cấp nhiều dịch vụ cấp cao hơn cho các vận dụng trong các lớp Java. Các lập trình viên cũng được phép dùng các dịch vụ này trong các áp dụng của họ.

Application Framework bao gồm các dịch vụ chính sau: −

Activity Manager − Điều khiển các khía cạnh của vòng đời ứng dụng và Activity Stack.

Content Providers − Cho phép các ứng dụng công bố và chia sẻ dữ liệu với các vận dụng khác.

Resource Manager − Cung cấp sự truy cập tới các resource được nhúng (không phải code) như chuỗi, thiết lập màu, UI layout.

Notifications Manager − Cho phép các áp dụng hiển thị thông tin tới người dùng.

View System − Một tụ hội các view được dùng để tạo UI cho vận dụng.

Những trường hợp khó xử trong javascrip


max() vs min() 

Math.max() > Math.min() // false 

CHUYỆN GÌ VẬY? Max không lớn hơn min? KHÔNG 😱 nhưng nó có lý do của nó. 

Theo định nghĩa Math.max ([value1 [, value2 [, …]]]) trả về số lớn nhất của số được gán. Tuy nhiên, khi không có đối số, nó sẽ trả về giá trị tối thiểu có thể ( minimum possible value ) , đó là -Infinity. 

Như bạn đã biết, Math.min () trả về Infinity khi không có đối số được cung cấp, thí dụ giá trị cao nhất có thể ( highest possible value ) 

bởi vậy, so sánh Math.max ()> Math.min () là không công bằng. 

It’s not fair. – Infinity its way lower than Infinity. 

0.1 + 0.2 

0.1 + 0.2 === 0.3 // false 

Đây không phải là vấn đề của JS để công bằng. Đây là floating point math . 

Máy vi tính chỉ có thể lưu trữ các số nguyên, do đó, họ cần một số cách để đại diện cho số thập phân. Sự diễn đạt này đi kèm với một chừng độ không xác thực. Đó là lý do vì sao, rất thẳng tuột, .1 + .2! = .3 – 0.300000000000004.com 

Vấn đề nằm ở cách các máy lưu trữ các giá trị số (tỉ dụ sự trình diễn nhị phân.) Trong trường hợp các giá trị số nguyên, chỉ những số nguyên có thể được trình diễn bằng luỹ thừa của hai mới có thể đại diện chuẩn xác. 

Đối với rational numbers (như 0,1, là 1/10) chỉ các giá trị mà mẫu số có thể được biểu diễn bằng luỹ thừa của hai mới có thể đại diện xác thực. 

dù rằng 0.1 và 0.2 có thể được trình diễn chuẩn xác trong cơ sở 10 nhưng điều đó không đúng đối với cơ sở 2. Khi điều này xảy ra, máy của chúng tôi tạo ra một giá trị ngót nghét giá trị thật sự (kết quả là một giá trị lặp ). 

> 0.1.toString(2) 

‘0.0001100110011001100110011001100110011001100110011001101’ 

> 0.2.toString(2) 

‘0.001100110011001100110011001100110011001100110011001101’ 

Do đó, kết quả của 0,1 + 0,2 sẽ là một giá trị lặp. 

Trong cơ sở 10, nó được viết là 0.30000000000000004 

[ ] +  

[] + // ‘[object Object]’ 

+ [] // 0 

Toán + có những ý nghĩa khác nhau trong mỗi ví dụ. 

Nó hoạt động như một toán tử bổ sung cho biểu thức [] + , và là toán tử một ngôi cho biểu thức + []. 

Khi giảng giải các biểu thức [ ] + JS xác định một bước bổ sung , nhưng trước khi thêm cả hai toán hạng, nó sẽ chuyển đổi chúng thành số nguyên thủy. Điều này được thực hành bằng việc triển khai phương thức tĩnh .toString (). 

Kết quả là chúng ta kết thúc với operation ” + ‘[object Object]’. 

Chỉ ở thời đoạn này, JS biết rằng toán tử bổ sung + có mục đích nối chuỗi. Và giá trị rốt cuộc của ‘[object Object]’ sẽ được trả về. 

Tiếp theo! 

Đối với biểu thức + [], toán tử trước hết là một cặp dấu ngoặc nhọn ( tỉ dụ một khối rỗng). Khối rỗng này có nghĩa là “ không có gì để làm “. Do đó JS tiếp thực hành biểu thức. 

Khi đạt đến toán tử +, nó hoạt động như toán tử một ngôi bởi nó không có toán hạng trái. Bằng cận [ ] , nó được chuyển sang 0. 

true + true 

true + true === 2 // true 

true – true === 0 // true 

true === 1 // false 

Ở đây, toán tử + hoạt động như một toán tử bổ sung và thêm cả hai toán hạng. Tuy nhiên trước khi nó có thể làm điều đó, nó cần phải chuyển đổi chúng thành ToNumber. 

Theo định nghĩa, ToNumber trả về 1 nếu đối số đúng, 0 nếu đối số là sai. 

Vì lý do này, biểu thức true + true của chúng ta dịch thành 1 + 1, tức là 2. 

1 < 2 < 3 

1 < 2 < 3 // true 

3 > 2 > 1 // false 

Cảnh báo mâu thuẫn: Lại là cận ép 😎 

Ở đây, hãy cùng đi lại từng bước cho cả hai thí dụ: 

1 <2 <3 
vày JS giảng giải và thực hiện các biểu thức từ trái sang phải, nó sẽ chạy biểu thức 1 <2 đầu tiên, do đó “true” <3; 
Tiếp theo, cận ép, ToNumber (true) <3 có nghĩa là 1 <3; 
Trả lại “true” (vì 1 là thấp hơn 3); 

3> 2> 1 
vì chưng 3> 2 là “true” nên “true” > 1; 
ToNumber (true)> 1 chuyển thành 1> 1 ( lại khó hiểu 👌); 
Trả về “false” (vì 1 không lớn hơn 1); 

‘5’ + 3 

‘5’ + 3 // ’53’ 

‘5’ – 3 // 2 

Theo định nghĩa , toán tử bổ sung thực hiện nối chuỗi hoặc bổ sung số . 

Khi một trong số các toán hạng là một chuỗi, JS chuyển đổi toán hạng khác thành một chuỗi và trả về kết nối của cả hai . Trong trường hợp ‘5’ + 3, do toán hạng trái là một chuỗi, kết quả cuối cùng là việc nối cả hai ‘5’ và ToString (3) thành ’53’. 

Toán tử trừ thực hiện một phép trừ với hai toán hạng. 

Tuy nhiên, khi một toán tử không thuộc kiểu Number, nó sẽ được chuyển đổi ToNumber. Vì lý do đó, chuỗi ‘5’ được chuyển thành số 5 được trừ đi 3. Kết quả rút cục là 2. 

Stack Overflow đã phát hành nghiên cứu hàng năm về ngành công nghiệp lập trình.

Công ty cho biết ấn bản 2018 của nó đại diện cho nghiên cứu 'lớn nhất từng có' về thái độ, lương và nhân khẩu học của nhà phát triển...