Home Blog Page 193

Top những thuật toán machine learning mà bất cứ Data Scientist nào cũng cần phải biết (Phần 2)

Top những thuật toán machine learning

Có nhiều cách khác nhau mà thuật toán có thể mô hình hóa một vấn đề vì nó liên quan đến sự tương tác với trải nghiệm. Nói cách khác, bạn sẽ cần phải xác định được phong cách học tập của một thuật toán. Thật may là chỉ có một vài kiểu học tập chính mà thuật toán Machine Learning có thể có. Do đó mà bạn phải suy nghĩ kĩ về vai trò của dữ liệu input và quá trình chuẩn bị môi trường cho thuật toán học tập để có được kết quả tốt nhất.

Thuật toán ML thường được chia nhóm tùy theo sự giống nhau về chức năng của chúng. Ví dụ, phương pháp cây quyết định (decision tree) và phương pháp lấy cảm hứng từ mạng thần kinh. Tôi nghĩ đây là cách hữu ích nhất để phân chia nhóm các thuật toán machine learning và đó cũng là cách tiếp cận chúng ta sẽ sử dụng ở đây.

Thuật toán Bayesian – Bayesian Algorithms

Những phương pháp áp dụng Định lý Bayes để giải quyết các vấn đề được đưa ra. Chẳng hạn như phân loại và hồi quy. Một số những thuật toán Bayes phổ biến nhất bao gồm:

  • Naive Bayes
  • Gaussian Naive Bayes
  • Multinomial Naive Bayes
  • Averaged One-Dependence Estimators (AODE)
  • Bayesian Belief Network (BBN)
  • Bayesian Network (BN)

Thuật toán phân cụm – Clustering Algorithms

Clustering, giống như hồi quy, mô tả class của vấn đề và class của các phương thức. Các thuật toán Clustering được tổ chức theo các phương thức mô hình hóa như dựa trên centroid và phân cấp. Mặt khác, tất cả các thuật toán này đều chú trọng đến việc sử dụng cấu trúc inherent trong dữ liệu. Các thuật toán phân cụm phổ biến nhất là:

  • k-Means
  • k-Medians
  • Expectation Maximisation (EM)
  • Hierarchical Clustering

Qui tắc trong thuật toán machine learning – Association Rule Learning Algorithms

Phương pháp này trích xuất các quy tắc. Những quy tắc này có thể khám phá các mối quan hệ hữu ích và quan trọng trong các tập dữ liệu đa chiều lớn. Nhờ đó có thể được khai thác và phân tích bởi một tổ chức. Các thuật toán phổ biến nhất là:

  • Thuật toán Apriori
  • Thuật toán Eclat

Tham khảo thêm: TOP vị trí tuyển machine learning job in vietnam lương cao

Thuật toán mạng nơron nhân tạo – Artificial Neural Network Algorithms

Đây là những mô hình được lấy cảm hứng từ cấu trúc của mạng nơron thần kinh của con người. Có thể gọi chúng là một class các mẫu hợp nhau được sử dụng cho các vấn đề hồi quy và phân loại. Tuy vậy, nó cũng có một subfield vô cùng lớn đến từ sự kết hợp hàng trăm thuật toán và biến thể. Những thuật toán mạng nơron nhân tạo phổ biến nhất bao gồm:

  • Perceptron
  • Back-Propagation
  • Hopfield Network
  • Radial Basis Function Network (RBFN)

Thuật toán Deep Learning – Deep Learning Algorithms

Deep learning có thể xem là phiên bản cập nhật hiện đại cho Artificial Neural Network với hướng tập trung khai thác vào các thuật toán tính toán đơn giản và dồi dào. Nhờ đó mà có thể xây dựng được những mạng thần kinh lớn và phức tạp hơn nhiều. Các thuật toán Deep Learning phổ biến nhất bao gồm:

  • Deep Boltzmann Machine (DBM)
  • Deep Belief Networks (DBN)
  • Convolutional Neural Network (CNN)
  • Stacked Auto-Encoders

Thuật toán giảm kích thước – Dimensionality Reduction Algorithms

Giống như các phương pháp phân cụm, việc giảm kích thước tìm kiếm một cấu trúc inherent trong dữ liệu. Mặc dù, trong trường hợp này, là để rút gọn lại.

Nói chung, nó có thể hữu ích để hình dung dữ liệu đa chiều. Ngoài ra, chúng ta có thể sử dụng nó trong một phương pháp học được giám sát (supervised learning). Một số thuật toán tiêu biểu mà bạn có thể áp dụng để sử dụng trong phân loại và hồi quy.

  • Principal Component Analysis (PCA)
  • Principal Component Regression (PCR)
  • Partial Least Squares Regression (PLSR)
  • Sammon Mapping
  • Multidimensional Scaling (MDS)
  • Projection Pursuit
  • Linear Discriminant Analysis (LDA)
  • Mixture Discriminant Analysis (MDA)
  • Quadratic Discriminant Analysis (QDA)
  • Flexible Discriminant Analysis (FDA)

Thuật toán Ensemble – Ensemble Algorithms

Về cơ bản, các thuật toán này là các mô hình bao gồm các mô hình yếu hơn. Ngoài ra, khi chúng được đào tạo thì sẽ kết hợp lại theo một cách nào đó để đưa ra dự đoán. Do đó, đây là một class kỹ thuật rất mạnh và phổ biến.

  • Boosting
  • Bootstrapped Aggregation (Bagging)
  • AdaBoost
  • Stacked Generalization (blending)
  • Gradient Boosting Machines (GBM)
  • Gradient Boosted Regression Trees (GBRT)
  • Random Forest

Danh sách các thuật toán machine learning phổ biến

Phương thức phân loại thuật toán machine learning của Naïve Bayes

Nói chung, sẽ rất khó và gần như là không thể để phân loại trang web, tài liệu, email hay các ghi chú văn bản dài khác theo cách thủ công. Vì vậy, chúng ta sẽ cần tới thuật toán Naïve Bayes Classifier Machine Learning.

Ngoài ra, trình phân loại là hàm phân bổ giá trị phần tử của một tập hợp. Ví dụ, Spam Filtering là một ứng dụng phổ biến của thuật toán Naïve Bayes. Do đó, bộ lọc spam ở đây là một trình phân loại và gán nhãn “Spam” hoặc “Not Spam” cho tất cả các email. Về cơ bản, nó là một trong những phương pháp machine learning phổ biến nhất được nhóm lại theo những điểm giống nhau và hoạt động dựa trên định lý Bayes về Xác suất.

Thuật toán machine learning K Means Clustering

Nói chung, K-means là một thuật toán machine learning không giám sát để phân tích cụm. Ngoài ra, K-Means là một phương pháp không xác định và lặp lại. Bên cạnh đó, thuật toán hoạt động trên một tập dữ liệu đã cho thông qua một số cụm được xác định trước, k. Do đó, đầu ra của thuật toán K Means là cụm k với dữ liệu đầu vào được phân tách giữa các cụm.

Thuật toán machine learning Support Vector

Về cơ bản, nó là một thuật toán machine learning được giám sát để phân loại hoặc giải quyết các vấn đề hồi quy. Nói cách khác, SVM có thể phân loại bất kỳ dữ liệu mới nào. Ngoài ra, nó hoạt động bằng cách phân loại dữ liệu vào các class khác nhau vì vậy mà còn được sử dụng để tách các dataset thành class. Hơn nữa, SVM còn cố gắng tối đa hóa khoảng cách giữa các class khác nhau. SVM được phân thành hai loại:

  • SVM tuyến tính – Về cơ bản, trong dữ liệu đào tạo phải được phân loại riêng bằng hyperplane.
  • SVM phi tuyến tính- Về cơ bản, bạn sẽ không thể tách dữ liệu đào tạo bằng hyperplane

Thuật toán Machine Learning Apriori

Về cơ bản, nó là một thuật toán machine learning không giám sát được sử dụng để tạo ra các quy tắc kết hợp từ một tập dữ liệu đã cho. Ngoài ra, quy tắc kết hợp ngụ ý rằng nếu một mục A xảy ra, thì mục B cũng xảy ra với một xác suất nhất định.

Hơn nữa, hầu hết các quy tắc kết hợp được tạo ra đều ở định dạng IF_THEN.

Ví dụ: NẾU mọi người mua một iPad THÌ họ cũng mua một chiếc iPad Case để bảo vệ nó.

Cách thức mà thuật toán machine learning Apriori hoạt động: Nếu một tập hợp mục (item set) xảy ra thường xuyên thì tất cả các tập hợp con của tập hợp mục (item set) đó cũng xuất hiện thường xuyên và ngược lại.

Tham khảo thêm: Tuyển dụng Machine Learning lương cao

Thuật toán machine learning hồi quy tuyến tính (Linear Regression Machine Learning Algorithm)

Nó cho thấy mối quan hệ giữa 2 biến. Ngoài ra, cho thấy sự thay đổi trong một biến sẽ có tác động như thế nào đến biến khác. Về cơ bản, thuật toán cho thấy những tác động lên biến bị phụ thuộc vào biến độc lập. Do đó, các biến độc lập có thể được xem như là các biến giải thích vì chúng cho biết các yếu tố tác động đến biến bị phụ thuộc.

Thuật toán machine learning cây quyết định (Decision Tree Machine Learning Algorithm)

Về cơ bản, thuật toán sử dụng phương pháp phân nhánh để minh họa tất cả các kết quả có thể có của một quyết định. Với phần thân chính là đại diện cho một test lên các thuộc tính, cành là kết quả và lá chính là một class label.

Thuật toán Machine Learning rừng ngẫu nhiên (Random Forest Machine Learning Algorithm)

Đây là thuật toán sử dụng phương pháp đóng gói để tạo ra một loạt các cây quyết định với một subset dữ liệu ngẫu nhiên. Vì vậy nên chúng ta phải đào tạo một mô hình nhiều lần trên mẫu ngẫu nhiên của tập dữ liệu. Tuy nhiên, bạn sẽ cần đạt được hiệu suất dự báo tốt từ thuật toán rừng ngẫu nhiên. Ngoài ra, trong phương pháp học tập toàn bộ này, chúng ta phải kết hợp đầu ra của tất cả các cây quyết định để đưa ra dự đoán cuối cùng.

Thuật toán học tập hồi quy logistic (Logistic Regression Machine Learning Algorithm)

Nói chung, tên của thuật toán này có thể hơi dễ nhầm lẫn vì nó chỉ tập trung vào nhiệm vụ phân loại và các vấn đề không phải là hồi quy. Hơn nữa, thuật toán này áp dụng một hàm hậu cần (logistic function) cho một sự kết hợp các tính năng tuyến tính với khả năng cần phải phân loại được một biến bị phụ thuộc.

TopDev via dzone

Có thể bạn muốn xem:

  Machine Learning thật thú vị: Dự đoán giá nhà đất

Top những thuật toán machine learning mà bất cứ Data Scientist nào cũng cần phải biết (Phần 1)

Top những thuật toán machine learning

Giới thiệu về thuật toán Machine Learning

Có hai cách để phân loại các thuật toán Machine Learning mà bạn có thể gặp qua.

  1. Các thuật toán được phân loại theo phong cách học tập.
  2. Các thuật toán được phân loại dựa trên sự giống nhau về hình thức hoặc chức năng

Nói chung, cả hai cách này đều hữu ích. Tuy nhiên, trong bài viết này, tôi sẽ tập trung vào việc phân loại các nhóm thuật toán theo sự giống nhau và phân tích sâu hơn vào từng loại

Phân loại thuật toán Machine Learning dựa vào cách chúng học tập

Có nhiều cách khác nhau mà thuật toán có thể mô hình hóa một vấn đề vì nó liên quan đến sự tương tác với trải nghiệm. Nói cách khác, bạn sẽ cần phải xác định được phong cách học tập của một thuật toán. Thật may là chỉ có một vài kiểu học tập chính mà thuật toán Machine Learning có thể có. Do đó mà bạn phải suy nghĩ kĩ về vai trò của dữ liệu input và quá trình chuẩn bị môi trường cho thuật toán học tập để có được kết quả tốt nhất.

Sau đây, chúng ta hãy xem xét ba phong cách học tập khác nhau trong thuật toán Machine Learning:

Học tập có giám sát (Supervised Learning)

Về cơ bản, trong thuật toán machine Learning có giám sát này, input data được gọi là dữ liệu huấn luyện với kết quả đã biết tại một thời điểm. Trong đó, một mô hình được chuẩn bị thông qua một quá trình đào tạo để yêu cầu các thuật toán này đưa ra dự đoán. Những dự đoán sai sẽ ngay lập tức được thông báo để chỉnh sửa. Như vậy, quá trình đào tạo sẽ tiếp tục cho đến khi mô hình đạt được mức hoàn thiện mong muốn.

  • Các ví dụ về vấn đề thường gặp là phân loại và hồi quy (classification và regression).
  • Các ví dụ về thuật toán bao gồm hồi quy logistic và mạng thần kinh (logistic regression và back propagation Neural Network.).

Học tập không giám sát (Unsupervised Learning)

Trong thuật toán machine learning không giám sát này, input data đều không được dán nhãn và không có kết quả rõ ràng. Vì vậy, chúng ta phải chuẩn bị mô hình bằng cách suy đoán các cấu trúc có trong input data. Điều này có thể là trích xuất các quy tắc chung. Nó có thể là thông qua một quá trình toán học để giảm sự sai lệch và lỗi.

  • Các ví dụ về vấn đề là phân cụm (cluster), giảm kích thước, và các kết hợp quy tắc trong học tập.
  • Các ví dụ về thuật toán bao gồm thuật toán Apriori và k-Means.

Học bán giám sát (Semi-Supervised Learning)

Input data là một hỗn hợp của các dữ liệu được gắn nhãn và không gắn nhãn. Trong đó chúng ta có đặt ra một kết quả và mục tiêu theo mong muốn. Nhưng mô hình thuật toán cần phải học các cấu trúc để tổ chức dữ liệu cũng như đưa ra các dự đoán.

  • Các ví dụ về vấn đề là phân loại và hồi quy (classification và regression).
  • Các ví dụ về thuật toán là các phần mở rộng cho các phương thức học tập linh hoạt khác.

Phân loại thuật toán Machine Learning dựa vào đặc điểm

Thuật toán ML thường được chia nhóm tùy theo sự giống nhau về chức năng của chúng. Ví dụ, phương pháp cây quyết định (decision tree) và phương pháp lấy cảm hứng từ mạng thần kinh. Tôi nghĩ đây là cách hữu ích nhất để phân chia nhóm các thuật toán machine learning và đó cũng là cách tiếp cận chúng ta sẽ sử dụng ở đây.

  Top 10 thuật toán machine learning dành cho newbie
  Áp dụng Machine learning, xây dựng ứng dụng chatbot của riêng bạn

Thuật toán hồi quy (Regression Algorithms)

Thuật toán hồi quy có liên quan mật thiết với việc mô hình hóa mối quan hệ giữa các biến, mà ta có thể tinh chỉnh bằng cách sử dụng một thước đo tần suất các lỗi xuất hiện trong dự đoán được thực hiện bởi thuật toán machine learning.

Những phương pháp này là có liên quan mật thiết tới thống kê và statistical machine learning. Điều này có thể gây nhầm lẫn bởi vì chúng ta có thể sử dụng hồi quy để tham khảo class của bài toán và class của thuật toán. Thuật toán hồi quy phổ biến nhất là:

  • Ordinary Least Squares Regression (OLSR)
  • Linear Regression
  • Logistic Regression
  • Stepwise Regression
  • Multivariate Adaptive Regression Splines (MARS)
  • Locally Estimated Scatterplot Smoothing (LOESS)

Mô hình này sử dụng dữ liệu đào tạo cá thể để giải quyết vấn đề và đưa ra quyết định được coi là quan trọng hoặc cần thiết. Phương pháp này sẽ cho ra một database để nó có thể so sánh dữ liệu mới.

Vì lý do này, bạn có thể xem phương thức chọn tất cả những kẻ chiến chiến thắng và học tập dựa trên thông tin từ bộ nhớ. Các thuật toán dựa trên cá thể phổ biến nhất là:

  • k-Nearest Neighbor (kNN)
  • Learning Vector Quantization (LVQ)
  • Self-Organizing Map (SOM)
  • Locally Weighted Learning (LWL)

Tham khảo thêm: Tuyển dụng lập trình Machine Learning lương cao

Thuật toán chuẩn hóa (Regularization Algorithms)

Một phần mở rộng được thực hiện cho một phương pháp khác. Chỉ thích hợp với các mô hình đơn giản. Tôi nhắc tới các thuật toán chuẩn hóa ở đây vì chúng rất phổ biến, mạnh mẽ và thường là những sửa đổi đơn giản được thực hiện cho các phương pháp khác. Các thuật toán phổ biến nhất là:

  • Ridge Regression
  • Least Absolute Shrinkage và Selection Operator (LASSO)
  • Elastic Net
  • Least-Angle Regression (LARS)

Thuật toán cây quyết định (Decision Tree Algorithms)

Như cái tên, đây là phương pháp xây dựng một mô hình đưa ra quyết định. Điều đó được thực hiện dựa trên những giá trị của các thuộc tính trong dữ liệu. Phương pháp cây quyết định được đào tạo về dữ liệu của các vấn đề phân loại và hồi quy. Đây là phương pháp rất nhanh chóng và chính xác nên nhận được rất nhiều quan tâm trong cộng đồng machine learning. Một số thuật toán cây quyết định phổ biến nhất bao gồm:

  • Classification và Regression Tree (CART)
  • Iterative Dichotomiser 3 (ID3)
  • C4.5 và C5.0
  • Chi-squared Automatic Interaction Detection (CHAID)
  • Decision Stump
  • M5
  • Conditional Decision Trees

(Hết phần 1)

Bài viết gốc được đăng tải tại dzone

BI là gì? Vì sao có nhiều doanh nghiệp đầu tư vào BI?

Bạn có thể nói Business Intelligence là:

▪️ BI là công cụ biến dữ liệu thô thành những kết quả có nghĩa, dùng được và hỗ trợ ra quyết định.
▪️ BI là các ứng dụng dùng công nghệ để doanh nghiệp hành động dựa trên những kết quả phân tích bài bản.
▪️ BI hỗ trợ tạo ra quy trình quản lý doanh nghiệp thông minh
▪️ BI là một tiến bộ công nghệ chưa bao giờ ngừng phát triển và lan rộng trong thế giới kinh doanh.

Nói một cách khác hơn, BI sẽ mang lại insights cho bạn dựa trên những số liệu đã có để trở thành một nền tảng vững chắc cho các quyết định sắp xảy ra, chính vì thế BI lại là công cụ vẽ ra một bức tranh tổng thể hơn là gợi ý cho bạn đến những trend trong tương lai.

  Artificial Intelligence (AI) đã thay đổi cuộc chơi Marketing

Các thành phần chính của 1 hệ thống Business Intelligence:

– Data sources: dữ liệu thô từ các nguồn khác nhau như HRM, CRM, website TMĐT,..

– Data warehousing: là nơi lưu trữ dữ liệu lâu dài của tổ chức

– Integrating Server: chịu trách nhiệm trung gian vận hành công cụ ETL để chuyển đổi dữ liệu từ Data Sources vào Data Warehouse.

– Analysis Server: nơi nhận dữ liệu đầu vào để trả về kết quả dựa trên tri thức nghiệp vụ được định nghĩa sẵn.

– Reporting Server: thực thi các report với output nhận được từ Analysis Server.

– Data Mining: là quá trình trích xuất thông tin dữ liệu đã qua xử lý, khâu này khá quan trọng!

– Data Presentation: các báo cáo, biểu đồ từ quá trình data mining được tạo ra từ đây.

~

Theo Gartner, “Đến năm 2020, các doanh nghiệp có khả năng cấp quyền cho người dùng truy cập vào danh mục dữ liệu đã qua chọn lọc, cả nội bộ và bên ngoài, sẽ tạo ra gấp đôi giá trị kinh doanh từ các khoản đầu tư phân tích.” Do đó, khả năng kết nối giữa các nền tảng và hệ thống sẽ có giá trị cao trong tương lai. Nền tảng phân tích dữ liệu và BI cấp tiến với việc triển khai trên đám mây ngày càng phổ biến.

Có thể nói BI hội tụ những yếu tố mà một người làm kinh doanh điển hình đang tìm kiếm, nó đến từ việc kết hợp và trích xuất dữ liệu để từ đó chuyển hóa thành thông tin hữu ích phục vụ cho các quyết định kinh doanh hàng ngày.

VÌ SAO NGÀY CÀNG CÓ NHIỀU DOANH NGHIỆP ĐẦU TƯ VÀO BI? TẦM QUAN TRỌNG CỦA MỘT HỆ THỐNG BI?

Thị trường BI càng ngày có nhiều ông lớn tham gia như Microft là Power BI, Oracle BI, Qlikview, Tableau và IBM hoặc dễ hình dung nhất như Grab dùng BI từ Tableau để “siêu bản địa hóa” ứng dụng đặt xe,…

Các quyết định “thần tốc”, đúng thời điểm, đúng đối tượng không hoàn toàn dựa trên cảm đoán mà là doanh nghiệp đó nhận định được tầm quan trọng của dữ liệu họ sở hữu, chính BI đã chứng minh điều đó, vì đây là cách tiếp cận dữ liệu một cách nhanh gọn và minh bạch nhất.

Không dừng ở đó khi kỷ nguyên công nghệ đã đến, quan hệ Human – Computer là xử lý ngôn ngữ tự nhiên (NLP) trở thành công cụ không thể thiếu. Việc kết hợp giữa AI, Machine learning và ngôn ngữ học sẽ biến BI của doanh nghiệp thành chatbox, “hiểu” được thắc mắc đồng thời điều phối khách hàng đến với mục đích của doanh nghiệp. Mục đích của một nền tảng phân tích Business Intelligence tích hợp sẽ khai thác sâu hơn các câu hỏi vì sao, ở đâu, cái gì và như thế nào về khách hàng, sản phẩm và công ty. Điều này sẽ giúp các quyết định được đưa ra một cách hiệu quả và nâng cao hiệu suất hoạt động.

🔥 Đây chỉ là một phần về Business Intelligence, để hiểu rõ và có một cái nhìn trực quan hơn, sự kiện “Digital Transformation & Business Intelligence tăng sức cạnh tranh của doanh nghiệp” sẽ là nơi bạn nắm bắt ngay cho mình những tuyệt chiêu từ các chuyên gia quản lý doanh nghiệp thông minh!

business intelligence là gì

Độc giả Techtalk.vn có thể tham gia sự kiện theo thông tin bên dưới:

  • Link đăng ký: https://meetup.vn/e/mLY 
  • Thời gian & Địa điểm: 18:00 ngày 06/03/2019 – SIHUB 273 Điện Biên Phủ, P7, Q3, HCM

 

AJAX là gì? Chi tiết về Asynchronous Javascript and XML

AJAX là gì? Chi tiết về Asynchronous Javascript and XML

AJAX là một kỹ thuật phát triển web mạnh mẽ được sử dụng để giúp các trang web nhanh và mượt mà hơn như đang dùng app desktop. Trong bài viết này, cùng TopDev khám phá cách AJAX hoạt động, lợi ích mà nó mang lại và cách bạn có thể áp dụng nó vào các dự án web của mình.

AJAX là gì?

AJAX là từ viết tắt của Asynchronous Javascript and XML (JavaScript và XML không đồng bộ). AJAX là phương thức trao đổi dữ liệu với máy chủ cho phép cập nhật một hay nhiều phần của trang web, hoàn toàn không reload lại toàn bộ trang.

Ajax được viết bằng Javascript chạy trên client, tức là mỗi browser sẽ chạy độc lập hoàn toàn không ảnh hưởng lẫn nhau. Về mặt kỹ thuật, nó đề cập đến việc sử dụng các đối tượng XmlHttpRequest để tương tác với một máy chủ web thông qua Javascript.

XMLHttpRequest (XHR) là một API cho phép gửi các yêu cầu HTTP tới máy chủ và nhận các phản hồi một cách đồng bộ hoặc không đồng bộ.

>> Đọc thêm: XML là gì?

Tại sao lại sử dụng AJAX?

Tại sao lại sử dụng AJAX?

AJAX là một trong những công cụ giúp chúng ta đem lại cho người dùng trải nghiệm tốt hơn. Khi cần một thay đổi nhỏ thì sẽ không cần load lại cả trang web, làm trang web phải tải lại nhiều thứ không cần thiết.

Những lợi ích mà AJAX mang lại:
  • AJAX được sử dụng để thực hiện một callback. Được dùng để thực hiện việc truy xuất dữ liệu hoặc lưu trữ dữ liệu mà không cần phải reload lại toàn bộ trang web. Với những server nhỏ thì việc này cũng tiết kiệm được băng thông cho chúng ta hơn.
  • Cần gì thì chỉ gửi dữ liệu phần đó, load lại 1 phần nhỏ để cập nhật thông tin chứ không load cả trang. Bằng cách này thì có thể giảm thiểu được tốc độ tải trang giúp người dùng có trải nghiệm tốt hơn.
  • Trang web bạn tạo ra cũng sẽ đa dạng và động hơn.

>>> Xem thêm: Search cha con trong wordpress sử dụng ajax

Cách thức hoạt động Ajax

Cách thức hoạt động Ajax

AJAX hoạt động dựa trên việc gửi các yêu cầu HTTP từ phía client đến server ở chế độ nền, sau đó cập nhật từng phần của trang web mà không cần tải lại toàn bộ trang. Đây là quy trình tổng quát:

  • Tạo yêu cầu XMLHttpRequest: Khi một sự kiện được kích hoạt (ví dụ: người dùng nhấn nút hoặc nhập dữ liệu vào biểu mẫu), một đối tượng XMLHttpRequest (XHR) được tạo ra trong JavaScript.
  • Gửi yêu cầu đến server: Đối tượng XHR được cấu hình để gửi một yêu cầu HTTP (GET hoặc POST) đến server chứa các tham số và dữ liệu cần thiết.
  • Nhận phản hồi từ server: Server xử lý yêu cầu và gửi lại dữ liệu cần thiết dưới dạng XML, JSON, hoặc HTML.
  • Cập nhật trang web: Dữ liệu nhận được từ server được sử dụng để cập nhật nội dung trang web một cách linh hoạt mà không cần tải lại toàn bộ trang. Điều này có thể thực hiện bằng cách thay đổi nội dung của các phần tử DOM hoặc chèn dữ liệu mới vào trang.

Ví dụ thực tế: Khi bạn tìm kiếm trên Google và nhập từ khóa, AJAX sẽ gửi từng ký tự bạn nhập đến server và nhận lại các gợi ý tìm kiếm ngay lập tức, tất cả đều diễn ra mà không cần tải lại trang.

>>> Xem thêm: Instant AJAX Search với Laravel và Vuejs

Ví dụ một ứng dụng đơn giản sử dụng ajax bằng jQuery

Jquery cung cấp một số method để thực hiện ajax. Chúng ta có thể yêu cầu các dữ liệu, HTML, XML và JSON từ server sử dụng giao thức HTTP là GET và POST.

Xem thêm: AJAX trong jQuery

load()

Phương thức load() lấy dữ liệu từ server và trả dữ liệu cho phần tử được chọn.

Cú pháp:

$(selector).load(URL,data,callback);
  • URL: mà bạn muốn lấy dữ liệu.
  • Data: cặp key/value gửi đi cùng với yêu cầu.
  • Callback: tên của hàm sẽ được thực thi sau khi phương thức load hoàn thành.

Ví dụ : Ta có file demo.html

<h2>TopDev is Awesome!</h2> 

<p id="p1">This is some text in a paragraph.</p>

Load nội dung của file “demo.html” vào trong một div với id = div-1

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.14.4/jquery.min.js"></script>
<script>
$(document).ready(function(){
    $("button").click(function(){
        $("#div-1").load("demo.html");
    });
});
</script>
</head>
<body>

<div id="div-1"><h2>Let jQuery AJAX Change This Text</h2></div>

<button>Get External Content</button>

</body>
</html>

Post trong JQuery

Có tác dụng lấy dữ liệu từ server bằng phương thức HTTP POST REQUEST

Cú pháp:

$(selector).post(URL,data,function(data,status,xhr),dataType)
  • url: required , đường dẫn đến file cần lấy thông tin
  • data: không bắt buộc ,là một đối tượng object gồm các key : value sẽ gửi lên server
  • function(data, status , xhr): là function sẽ xử lý khi thực hiện thành công với các parameters:
    • data : bao gồm các dữ liệu trả về từ request
    • status : gồm trạng thái request (“success” , “notmodified” , “error” , “timeout” , or “parsererror”)
    • xhr : gồm các đối tượng XMLHttpRequest
  • dataType: là dạng dữ liệu trả về. (text, json, script, xml,html,jsonp )

Get trong Jquery

Là phương pháp lấy dữ liệu từ server bằng phương thức HTTP GET

Tương tự như phương thức Post , phương thức get có cú pháp là :

$.get(URL,data,function(data,status,xhr),dataType)

Ứng dụng phổ biến của AJAX

Email Web Clients (Gmail): AJAX giúp Gmail cập nhật hộp thư đến theo thời gian thực mà không cần làm mới trang. Khi bạn xóa email, nó biến mất ngay lập tức. Khi bạn mở một email, nội dung hiển thị ngay lập tức. Viết email mới? Cửa sổ đó mở lên không có độ trễ nào. Trải nghiệm này giúp quản lý hộp thư nhanh chóng và tiện lợi.

Tìm kiếm theo thời gian thực (Google Search): Khi bạn gõ vào thanh tìm kiếm, AJAX gửi từng ký tự đến máy chủ và nhận về các gợi ý liên quan ngay tức thì. Tính năng này, được gọi là autocomplete, dự đoán những gì bạn có thể tìm kiếm và cung cấp cho bạn một danh sách các tùy chọn.

Mạng xã hội (Facebook, Twitter): Trên các nền tảng như Facebook và Twitter, AJAX giúp cập nhật liên tục nguồn cấp dữ liệu. Khi bạn cuộn, thích bài viết, bình luận hoặc nhận thông báo mới, tất cả những hành động này được cập nhật một cách linh hoạt mà không cần tải lại trang. Điều này giữ cho bạn tương tác liên tục và mượt mà.

Ứng dụng bản đồ (Google Maps): Google Maps sử dụng AJAX để cập nhật dữ liệu bản đồ khi bạn điều hướng. Khi bạn kéo hoặc thu phóng bản đồ, nó tải các ô bản đồ mới và chèn chúng mà không cần làm mới toàn bộ trang. Điều này mang lại trải nghiệm điều hướng mượt mà và tương tác.

Forms and Live Validation (Nhiều trang web): AJAX thường được sử dụng để xác thực dữ liệu biểu mẫu trong thời gian thực. Ví dụ, khi đăng ký dịch vụ, AJAX có thể kiểm tra xem tên người dùng bạn chọn đã được sử dụng hay chưa hoặc định dạng email của bạn có đúng không trước khi bạn nhấn gửi. Phản hồi ngay lập tức này cải thiện trải nghiệm người dùng và giúp tránh lỗi.

Dynamic Content Loading (Trang tin tức, thương mại điện tử): Trên các trang tin tức và cửa hàng trực tuyến, AJAX có thể tải các bài báo hoặc sản phẩm mới một cách linh hoạt khi bạn cuộn. Tính năng cuộn vô tận này đảm bảo bạn luôn nhận được nội dung mới mà không cần làm mới trang, giữ bạn tương tác lâu hơn.

Trên đây là những kiến thức cơ bản về khái niệm, ưu điểm cũng như ứng dụng của AJAX. Thông qua ví dụ, hi vọng TopDev đã giúp các bạn hiểu AJAX là gì, theo dõi TopDev để cập nhật nhiều hơn kiến thức về công nghệ bạn nhé!

Truy cập ngay các công việc IT đãi ngộ tốt trên TopDev

Bách khoa toàn thư giải quyết mọi vấn đề của lập trình viên mới học code!

Bách khoa toàn thư giải quyết mọi vấn đề của lập trình viên mới học code

Tiếp nối series Q&A cho các bạn trẻ mới gia nhập làng code học lập trình, dưới đây tôi sẽ trả lời cho các bạn những thắc mắc và băn khoăn nóng hổi nhất về ngành lập trình đang được đông đảo các bạn quan tâm.

Đâu là thời điểm thích hợp để tôi bắt đầu nhúng tay vào các project ?

Hãy thực hiện dự án của mình càng sớm càng tốt! Khi bạn đã nắm được các nguyên tắc cơ bản của một ngôn ngữ lập trình, hãy kết hợp chúng lại để thử build nên một cái gì đó. . Nếu bạn có một ý tưởng trong đầu, điều này sẽ giúp bạn có thể học được nhiều thứ hơn nữa. Chỉ cần biết rõ các nguyên tắc cơ bản của ngôn ngữ, bạn đã có thể tạo ra rất nhiều command line game. Thậm chí còn xây dựng những thứ tuyệt vời hơn với các nguyên tắc cơ bản của phát triển web!

Đối với một dev kỹ năng quan trọng nhất là gì?

Nếu chỉ được chọn một thứ, tôi sẽ lựa chọn kỹ năng tự học – tự trau dồi bản thân những điều mới một cách hiệu quả. Nếu là một developer, bạn sẽ không ngừng phát triển bản thân và tạo ra các công nghệ mới. Việc tự trau dồi bản thân còn quan trọng hơn bất cứ công cụ hay công nghệ nào.

Làm sao để các Javascript arguments hoạt động?

Trước khi tôi bắt đầu chúng ta cùng phân tích nhanh từng thuật ngữ:

Arguments (đối số): Đây là đại diện cho giá trị truyền cho parameter khi chúng ta thực hiện lời gọi hàm.

Parameters (các tham số): Đây là những gì chúng ta gọi khi định nghĩa một hàm.

Trong function myFunction(x, y , x và y là các parameter . Khi chúng ta thực hiện hàm đó bằng cách chạy myFunction(1, 3), 1 và 3 là các argument.

Để có thể phù hợp với hai tuýp người có 2 lối suy nghĩ khác nhau, tôi thường dạy các chức năng theo hai cách. Cách đầu tiên là một đoạn code có thể tái sử dụng bằng cách gắn các giá trị vào để giúp cho code của bạn trở nên linh hoạt và ít lặp lại hơn. Trong trường hợp này, các argument là các mẫu thông tin “động” được gắn vào đoạn code cho nên khi bạn gọi hàm giá trị có thể thay đổi. Có khá là nhiều biến khác nhau mỗi khi bạn chạy hàm.

Một cách giải thích khác đó là các chức năng như một loạt các input and output – giống như một chiếc máy nhỏ. Khi bạn đặt vào đó một cái gì đó thì sẽ xuất hiện một cái khác dựa trên nó. Các argument là những thứ bạn đang cho vào máy và giá trị trả về là những gì được xuất ra. Điều này hoàn toàn trùng khớp với định nghĩa đại số của các hàm chặt chẽ hơn – nếu bạn nhớ f(x) = 2x + 1 từ toán học đó là các hàm chỉ được viết trên giấy thay vì viết theo chương trình.

Trong JavaScript, thứ tự của các argument được gắn vào hàm tương ứng với thứ tự của các parameter trong khai báo hàm. Vì vậy, nếu khi báo hàm của tôi giống như  function add(x, y)và sau đó tôi gọi hàm với add(1, 2)trong hàm 1 sẽ là x và 2 sẽ là y.Thay vào đó, nếu tôi chạy add(100, 50), x sẽ là 100 và y sẽ là 50. Vì x là parameter đầu tiên của tôi, nên argument đầu tiên của tôi gắn vào hàm se là x và vì y là thứ 2, giá trị thứ hai I vượt qua sẽ là y. Thỉnh thoảng nó sẽ hữu ích để thiết lập sơ đồ này.

function subtract(x, y) {
 return x - y
}

add(5, 2) // 3, 5 is x, 2 is y
add(200, 50) // 150, 200 is x, 50 is y
add(20, 70) // -50, 20 is x, 70 is y

x y subtract(x, y)
5 2 3
200 50 150
20 70 -50

Theo bạn thì ngôn ngữ nào thì nên có kiến thức và hiểu biết về nó để làm việc hiệu quả ?

Tôi nghĩ đây là một câu hỏi rất xem nặng về skillset (bộ kĩ năng). Tôi có thể chia sẻ rất nhiều  về khoa học dữ liệu và phát triển web vì đây chính là điểm bắt đầu sự nghiệp của mình. Khi đề cập đến khoa học dữ liệu, tôi sẽ nói về Python – trụ cột ở thời điểm hiện tại. Tôi muốn mình biết được ít nhất một trong số chúng. Còn về lập trình web HTML/ CSS/ JavaScript chính là điều bạn cần. Hiện tại với  JavaScript bạn có thể xây dựng mọi thứ, đó là một ngôn ngữ vô cùng linh hoạt.

  Những nguyên tắc, định luật của lập trình mà chúng ta nên có sẵn trong đầu

Làm thế nào để vững lòng bước tiếp khi những người trong ngành công nghệ liên tục bảo không nên?

Đây chính là điều mà thỉnh thoảng tôi vẫn thường phải đối mặt và tôi vẫn chưa tìm ra được câu trả lời hoàn hảo cho vấn đề này. Tôi thực sự đã từng từ bỏ coding khi còn ngồi ở ghế trường đại học vì luôn nghĩ mình không đủ giỏi và phải đối mặt với những lời thô lỗ từ những người xung quanh khiến tôi thường xuyên nghĩ đến việc chuyển sang ngành khác.

Nhưng tôi đã tiếp tục đấu tranh và suy nghĩ đến những điều giúp tôi tiếp tục ở trong ngành công nghệ như sự phát triển ngày càng linh hoạt, những người tuyệt vời mà tôi đã gặp, những điều tuyệt vời mà tôi đã tạo ra.

Những thứ khiến nó trở nên xứng đáng cho dù có bao nhiêu khó khăn đi nữa. Thật đáng thương cho những người luôn gây tổn thương cho người khác khi cảm thấy bị đe dọa. Cả hai đều cảm thấy thiếu tự tin và điều đó chỉ khiến mọi việc tệ đi.

Tôi cũng lưu lại những tài liệu để lưu giữ những “chiến thắng” của mình: những thứ tuyệt vời mà mình đã xây dựng, những phản hồi tích cực từ khách hàng, những thành tựu mà tôi đã đạt được. Vào những ngày cảm thấy khó khăn, tôi thường trở về và xem lại những gì đã qua và nhắc nhở mình về những điều tuyệt vời mà tôi đã làm.

Làm thế nào cải thiện khả năng lập trình logic và giải quyết vấn đề?

Đây là chủ đề mà tôi vô cùng yêu thích và tôi có thể nói liên tục về điều này. Tôi đang thực hiện hiện một khóa học về chủ đề này. Hãy theo dõi và tìm hiểu thêm ở đó nhé.  Tôi rất tiếc vì không thể mang đến một câu trả lời ngắn gọn hơn. Nhưng chủ yếu là về việc suy nghĩ trừu tượng và chia nhỏ từng vấn đề để giải quyết một vấn đề lớn.

Làm cách nào để học code miễn phí?

Tham khảo ngay từ những nguồn yêu thích của tôi: https://topdemy.vn có nhiều khóa miễn phí học theo roadmap.

Tôi nên học ngôn ngữ lập trình nào đầu tiên?

Theo ý kiến cá nhân của tôi thì bạn nên bắt đầu với JavaScript hay Python. Python là một ngôn ngữ linh hoạt với cú pháp phù hợp dành cho những lập trình viên mới vào nghề. Còn JavaScript là một công cụ cần thiết để có thể xây dựng một trang web và bạn có thể xây dựng những thứ khác với nó nhanh hơn các ngôn ngữ khác.

Làm sao để có thể nhớ được hết các công cụ/ thao tác?

Tôi chưa bao giờ thử ghi nhớ những thứ cụ thể theo ngôn ngữ hay cú pháp. Chúng ta có thể tra cứu mỗi khi cần sử dụng và chương trình soạn thảo văn bản sẽ giúp tôi trong vấn đề này. Đối với những khái niệm quan trọng tôi thường tập trung vào việc hiểu về nó hơn là cố gắng học thuộc lòng!

Nên bắt đầu từ Project nào để build?

Tôi luôn nghĩ rằng mạo hiểm một chút sẽ luôn mang đến cho chúng ta cảm giác tươi mới. Hãy chọn một project có sẵn, chỉnh sửa nó từ nhỏ đến lớn, sau đó khi nắm rõ được project thì hãy build theo chức năng mình mong muốn.

Hi vọng cẩm nang này đủ bao quát và hữu ích để giúp bạn vượt qua chặng đường coding sắp tới!

TopDev

Tìm việc IT lương cao, đãi ngộ tốt trên TopDev ngay!

Data scientist vs data analyst: những khác biệt mà bạn cần biết

Data (data scientist vs data analyst) đang ngày càng trở nên quan trọng hơn bao giờ hết đối với các doanh nghiệp và tổ chức trên toàn thế giới. Song song đó, các ông lớn đang tìm cách khai thác tiềm năng của dữ liệu để tăng doanh thu và lợi nhuận, cải thiện năng suất hoạt động và nâng cao sự hài lòng của khách hàng.

Có thể bạn quan tâm: Tuyển dụng data analyst up to 20M

  Top 10 thư viện Python tốt nhất cho Data Scientist nửa đầu năm 2024
  Top các khóa học miễn phí Computer Science, Programming, Data Science cần học ngay!

Vậy, ai sẽ làm tất cả những điều này? Tất nhiên là các nhà Data scientists và analysts. Trong bài viết này, tôi sẽ cung cấp cho bạn một cái nhìn tổng quan ngắn gọn về sự khác biệt của hai vai trò này và một số điều bạn cần biết cho công việc.

Data scientist

Trước khi trả lời câu hỏi data scientist là gì? Trước hết hãy trả lời data science là gì?

Data science là một quá trình phân tích dữ liệu bằng cách sử dụng các cách sáng tạo (như data inference) và sử dụng công nghệ phát triển thuật toán để tìm giải pháp cho các vấn đề phức tạp.

Chúng liên quan đến việc tách rời và tập hợp các tập dữ liệu để tìm ra các thông tin như thói quen và sở thích của người tiêu dùng. Nó cũng có thể chỉ đơn giản là tìm ra xu hướng bán hàng của một dòng sản phẩm cụ thể.

Ví dụ, Amazon khai thác các mẫu dữ liệu người dùng để xác định các sản phẩm được đề xuất cho từng người dùng. Việc làm này đòi hỏi sự kết hợp giữa chuyên môn thống kê, lập trình và kiến ​​thức kinh doanh.

Thống kê chính là trái tim của data science. Do đó mà lĩnh vực này yêu cầu một người có khả năng tìm ra các xu hướng phức tạp trong một tập dữ liệu có thể bao gồm hơn 1 triệu hàng.

Kỹ năng lập trình, mặt khác, cần phải liên quan tới số liệu thống kê. Để phân tích thống kê xảy ra, bạn cần một người thông thạo ngôn ngữ lập trình (như Java, SQL và Python) để chia nhỏ tập dữ liệu ở các định dạng dễ đọc hơn.

Cuối cùng, kiến ​​thức kinh doanh cũng cần thiết để đảm bảo rằng bạn đang giải quyết các vấn đề phù hợp với mục tiêu của tổ chức.

Cuối cùng, bạn sẽ có khả năng để tạo ra một “data product” như hệ thống đề xuất của Amazon.

Video: Cách thiết kế Database đáp ứng khả năng mở rộng và lượng truy xuất cao

Data analyst

Vai trò của một nhà data analyst tương tự như một nhà data scientist theo nhiều phương diện. Họ cũng phân tích dữ liệu và thu được những hiểu biết từ chúng. Điểm khác biệt chính là các nhà data scientist tỏa sáng khi khối lượng dữ liệu của tổ chức vượt quá một quy mô nhất định, dẫn đến nhu cầu tạo ra các sản phẩm dữ liệu để giúp phân tích nó.

Vì vậy, trong khi điều này có nghĩa rằng các nhà data analysts cũng làm công việc của data science nhưng họ không bắt buộc phải biết nhiều về lập trình. Nhưng các data analyst vẫn phải có kiến ​​thức về thống kê và hoạt động kinh doanh.

Mặt khác, một nhà data analyst cần phải có khả năng đưa ra kết quả của mình dưới dạng báo cáo hoặc một bài thuyết trình.

So sánh

Dưới đây là những khác biệt lớn giữa các nhà data scientist và data analyst:

Data scientist Data analyst
Yêu cầu tạo ra prototype và phát triển “data product” để đưa ra các quyết định thông minh thúc đẩy hướng đi của doanh nghiệp.

Yêu cầu phải biết một số lượng lớn các ngôn ngữ lập trình

Chỉ có trong các tổ chức yêu cần giải quyết những tập dữ liệu lớn (big data)

Có thể hoặc không bắt buộc phải phát triển “data product”.

Có thể không bắt buộc phải biết một số lượng lớn các ngôn ngữ lập trình. Trên thực tế, nhiều tổ chức chỉ dựa vào các bảng tính excel để chạy các hoạt động phân tích dữ liệu của họ.

Tồn tại trong hầu hết các tổ chức,

Yêu cầu công việc

Như đã đề cập ở trên, để trở thành nhà data scientist hoặc data analyst, bạn sẽ cần phải có kỹ năng thống kê, lập trình và sự nhạy bén trong kinh doanh. Như vậy, bắt đầu với các điểm dưới đây sẽ là một khởi đầu tốt:

  1. Thống kê và áp dụng toán học

Có một nền tảng vững chắc trong thống kê và toán học là điều bắt buộc. Là một phần của việc xây dựng nền tảng này, bạn chắc chắn sẽ cần phải là một chuyên gia về tính toán và đại số tuyến tính.

  1. Làm quen với cơ sở dữ liệu và các công cụ dữ liệu lớn

Hầu hết các tổ chức đều sử dụng phần mềm quản lý dữ liệu như MySQL hoặc Cassandra do đó sẽ thuận lợi hơn khi bạn làm quen với chúng. Kiến thức về các công cụ dữ liệu lớn như Hadoop cũng sẽ cung cấp cho bạn một lợi thế.

  1. Phát triển khả năng viết code

Kiến thức về các ngôn ngữ lập trình thống kê như Python, R và SAS là rất cần thiết và được mong đợi từ tất cả các nhà data scientist và ở một mức độ thấp hơn với các nhà data analyst.

  1. Có được kinh nghiệm kinh doanh và trình bày dữ liệu chính

Bạn cần phải tham gia vào các dự án kinh doanh cũng như tiếp cận với cách thức hoạt động của doanh nghiệp và hiểu điều gì làm cho tổ chức của bạn trở nên nổi bật.

TopDev via Techinasia

Flutter Vs. React Native – Nên chọn framework nào?

Flutter Vs. React Native - Nên chọn framework nào?

Flutter và React Native là hai framework được rất nhiều người quan tâm ở thời điểm hiện tại. Điểm chung của cả 2 đều là Cross Platform Mobile, build native cho cả Android và iOS. Cả 2 có thể giao tiếp với native để viết các module base on native (gần như bắt buộc). Hãy cùng so sánh Flutter vs React Native xem chúng có những ưu và nhược điểm nào trong bài viết của TopDev.

Cơ bản về Flutter

Flutter là một là SDK (Software Development Kit) nguồn mở của Google dùng để tạo các ứng dụng chất lượng cao cho Android và iOS cách sử dụng một codebase duy nhất. Nó cho phép các nhà phát triển xây dựng các ứng dụng di động chất lượng cao bằng cách sử dụng ngôn ngữ lập trình Dart. Flutter nổi bật với khả năng cung cấp các giao diện người dùng mượt mà, đẹp mắt và hiệu suất gần như native nhờ vào việc sử dụng các thành phần giao diện tùy chỉnh.

Project Google Hummingbird (ra mắt 04/12/2018) cho phép các developer chỉ cần build một ứng dụng một lần và sau đó có thể chạy nó ở bất kỳ nơi nào.

Ứng dụng sử dụng framework Flutter

Ứng dụng sử dụng framework Flutter

  1. Google Ads
  2. Alibaba
  3. Hamilton Musical
  4. Reflectly
  5. Tencent
  6. eBay Motors
  7. Philips Hue
  8. BMW
  9. Abbey Road Studios
  10. The New York Times
  11. Realtor.com
  12. Groupon

Ưu điểm của Flutter

Như đã được đề cập ở trên, SDK nguồn mở và miễn phí này được hỗ trợ bởi Google và được dùng để phát triển các ứng dụng cho Android và iOS. Các feature chính của platform này là:

  • SDK cho platform chính xác và chi tiết
  • Các widget được thiết kế chi tiết, chính xác
  • Môi trường hoàn toàn tùy chỉnh
  • API hỗ trợ các hiệu ứng, animation và gesture 2D
  • Giao tiếp gần như trực tiếp với native
  • Feature Stateful Hot Reload để phát triển app nhanh hơn
  • Static language nhưng với syntax hiện đại, compiler linh động giữa AOT (for archive, build prod) và JIT (for development, hot reload)
  • Có thể dùng để build các bundle/framework gắn và app native để tăng performance.
  • Có thể chạy được giả lập mobile ngay trên web, tiện cho development. Các metric measure performance được hỗ trợ sẵn giúp developer kiểm soát tốt performance của app.

Tháng 05/2017, Google giới thiệu Flutter tới cộng đồng, sau đó vào ngày 04/12/2018, phiên bản ổn định hơn của Flutter được phát hành. Bên cạnh đó, Flutter có thể được sử dụng để tạo các ứng dụng cho Google Fuchsia, một hệ điều hành dựa trên khả năng của Google.

Xem việc làm Flutter lương cao tại TopDev

Nhược điểm của Flutter

  • Bộ render UI được team author gần như viết lại, không liên quan tới UI có sẵn của Framework native, dẫn đến memory sử dụng khá nhiều.
  • Phải học thêm ngôn ngữ DART, bloc pattern, DART Streaming
  • Khó khăn trong việc styling cho các component
  • Quản lý vòng đời phức tạp hơn so với React Native
  • Dù đã release 1.0 chính thức, tuy nhiên còn khá mới. Một số plugin rất quan trọng như Google Map vẫn còn đang phát triển, chưa stable.

Cơ bản về React Native

React Native là một framework mã nguồn mở được phát triển bởi Facebook, sử dụng ngôn ngữ lập trình JavaScript và React để phát triển ứng dụng di động. React Native sử dụng các thành phần giao diện người dùng native, điều này giúp nó cung cấp trải nghiệm gần như native cho người dùng.

  React Native là gì? Kiến thức tổng quan về React Native

Ứng dụng sử dụng framework React Native

Ứng dụng sử dụng framework React Native

  1. Facebook
  2. Instagram
  3. Airbnb
  4. Tesla
  5. Walmart
  6. Bloomberg
  7. Pinterest
  8. Uber Eats
  9. Skype
  10. SoundCloud Pulse
  11. Discord
  12. Salesforce

>> Bài viết liên quan: 9 ứng dụng tuyệt vời viết bằng React Native

Ưu điểm của React Native

  • Thiên về development/hotfix nhanh (hot reload, bundle injection), cho phép xem ngay các thay đổi trong mã nguồn mà không cần phải biên dịch lại toàn bộ ứng dụng, giúp tăng tốc độ phát triển.
  • Sử dụng JS (quen thuộc với nhiều developer) và có thể share business logic codebase với frontend (js).
  • Back bởi Facebook, họ dùng cho product của họ hàng ngày nên developer hưởng lợi khá nhiều từ đây.
  • Hiện tại đã rất nhiều thư viện, gần như đã rất đầy đủ cho các nhu cầu app thông dụng.

Tham khảo tuyển dụng React Native lương cao hấp dẫn

Nhược điểm của React Native

  • Giao tiếp với native thông qua các bridge, dễ bị bottleneck nếu không được kiểm soát tốt.
  • Dùng JS nên mang theo các đặc điểm của JS: rất dễ làm nhưng cũng dễ sai, dẫn tới khó maintain về sau.
  • Hiệu năng animation là điểm yếu của RN, muốn làm tốt phải làm từ native, tầng js chỉ call vào, setup views. Tuy nhiên với các interactive animation thì rất đau khổ.
  • Không thích hợp cho các app cần năng lực tính toán cao (hash, crypto, etc).

Điểm tương đồng giữa Flutter và React Native

Cả hai đều được thiết kế để phát triển cross-platform app

React Native và Flutter đều cung cấp hiệu suất ứng dụng vượt trội, nhanh chóng và chất lượng cao trên nhiều platform bao gồm Android, iOS và UWP.

(Lưu ý: Flutter hỗ trợ platform Android và iOS)

Cả hai framework được hỗ trợ bởi các cộng đồng công nghệ khổng lồ

React Native được cung cấp bởi Facebook còn Flutter là SDK nguồn mở của Google để phát triển mobile app. Cả hai đều có cộng đồng các developer mạnh mẽ

Nguồn mở, miễn phí và nhanh chóng

React Native và Flutter là các SDK nguồn mở và miễn phí cho phép các developer tạo ra các app tuyệt vời một cách nhanh chóng dựa vào native performance của chúng.

Documentation chi tiết và luôn được cập nhật

Các cộng đồng của cả hai framework này luôn nỗ lực hết sức để liên tục cập nhập documentation mới nhất với các tài liệu tham khảo API và tài nguyên toàn diện.

Hỗ trợ UI và Native Experience tuyệt vời

React Native sử dụng các yếu tố xây dựng UI cơ bản trong Android / iOS để mang lại native experience. Flutter cũng sử dụng các widget để cung cấp native experience đáng chú ý trên platform Android và iOS.

Hot reloading và sửa đổi nhanh

React Native hỗ trợ “Hot reloading” cho phép đồng thời chạy code mới và giữ trạng thái ứng dụng, thay vì phải recompile. Tính năng này làm cho sự phát triển nhanh hơn, tức thì và hiệu quả.

Flutter cũng không hề kém cạnh. “Stateful Hot Reloading” của nó hỗ trợ phản ánh các thay đổi ngay lập tức mà không cần restart hoặc trong trường hợp mất trạng thái ứng dụng.

Chúng ta đã điểm qua sự giống nhau của React Native và Flutter, bây giờ hãy cùng xem qua những khác biệt của chúng trong process, flow, và feature.

React Native vs Flutter

React Native vs Flutter

Dưới đây là bảng so sánh giữa React NativeFlutter:

Tiêu chí React Native Flutter
Ngôn ngữ và công cụ Không cần học ngôn ngữ mới nếu bạn đã biết JavaScript hoặc TypeScript. Tuy nhiên, việc làm quen với các công cụ và thư viện của React Native có thể phức tạp và tốn thời gian. Dart là ngôn ngữ mới, nhưng rất dễ học và thân thiện với nhà phát triển, đặc biệt nếu bạn đã quen với TypeScript, C#, hoặc Kotlin. Quá trình thiết lập và sử dụng công cụ của Flutter đơn giản hơn.
Tính năng React Native yêu cầu sử dụng nhiều thư viện cộng đồng để bổ sung các tính năng như UI, quản lý trạng thái, và localization. Môi trường và công cụ phức tạp hơn, nhưng cộng đồng hỗ trợ lớn. Flutter cung cấp rất nhiều tính năng từ đầu, bao gồm Material Design, Cupertino components, và các công cụ phát triển tiên tiến. Có thể phát triển ứng dụng mà không cần đến thư viện bên thứ ba.
Giao diện người dùng Sử dụng các thành phần UI native của từng nền tảng, điều này có thể dẫn đến sự không nhất quán giữa các nền tảng khác nhau. Giao diện người dùng tùy biến mạnh mẽ nhờ sử dụng CSS. Sử dụng engine đồ họa riêng để vẽ UI, giúp giảm thiểu sự khác biệt giữa các nền tảng. Styling khác biệt với CSS nhưng cung cấp nhiều tùy chọn tùy chỉnh và dễ sử dụng sau khi làm quen.
Hiệu suất Hiệu suất tốt nhưng có thể bị ảnh hưởng khi xử lý các tác vụ phức tạp do phải thông qua JavaScript Bridge. Không thích hợp cho các ứng dụng yêu cầu đồ họa cao. Hiệu suất vượt trội hơn nhờ vào engine riêng, cung cấp trải nghiệm người dùng mượt mà và hỗ trợ tốt cho các animation phức tạp. Tuy nhiên, tiêu thụ bộ nhớ có thể cao hơn so với ứng dụng native.
Công cụ phát triển và trải nghiệm Expo cung cấp nhiều công cụ phát triển mạnh mẽ và tiện lợi như Expo Go để test app trực tiếp mà không cần sideloading. Cộng đồng và hệ sinh thái phong phú với nhiều thư viện hỗ trợ. Tích hợp chặt chẽ với VS Code và có công cụ hot reload mạnh mẽ. Tuy không có dịch vụ tương đương Expo, Flutter vẫn cung cấp các công cụ phát triển tốt và dễ sử dụng.
Trải nghiệm phát triển Có thể gây khó chịu do cần sử dụng nhiều thư viện bên thứ ba và các vấn đề không đồng bộ giữa các nền tảng. Tuy nhiên, cộng đồng lớn giúp giải quyết vấn đề nhanh chóng. Trải nghiệm phát triển mượt mà, ít gặp phải các vấn đề phát sinh. Các công cụ và tính năng sẵn có giúp giảm thiểu thời gian và công sức phát triển.
Document Tài liệu tổng quát, dựa nhiều vào các bộ dev kit bên ngoài. Tài liệu không trực quan bằng Flutter. Tài liệu dễ đọc, chi tiết, có cấu trúc rõ ràng và trực quan hơn.
Mức độ phổ biến Được sử dụng rộng rãi hơn và phổ biến hơn so với Flutter. Nhiều nhà phát triển sử dụng do quen thuộc với JavaScript. Flutter là một framework mới hơn và ít được sử dụng hơn, nhưng đang dần thu hút sự quan tâm của cộng đồng.
Cộng đồng và hỗ trợ Ra mắt dưới dạng mã nguồn mở trên GitHub vào năm 2015, có cộng đồng lớn và nhiều câu hỏi trên Stack Overflow. Flutter là framework mới, cộng đồng nhỏ hơn nhưng đang phát triển nhanh chóng.
Cơ hội nghề nghiệp Sử dụng phổ biến nên cơ hội việc làm nhiều. Cơ hội việc làm hiện tại ít hơn, nhưng có thể tăng trong tương lai.

Bảng trên cung cấp cái nhìn tổng quan về sự khác biệt giữa React Native và Flutter, giúp bạn lựa chọn framework phù hợp dựa trên các tiêu chí như ngôn ngữ lập trình, hiệu suất, cộng đồng hỗ trợ, và cơ hội nghề nghiệp.

Vậy nên chọn React Native hay Flutter cho Mobile App?

Flutter phù hợp với các dự án focus về animation, các layout phức tạp, với thế mạnh sử dụng bộ render tự làm, giao tiếp trực tiếp với GPU và một SDK để viết anim dễ dàng. Cực kỳ phù hợp với các team native (đang có nhu cầu làm thêm các UX có hiệu năng cao vào app native có sẵn). Flutter Developer hiện tại chưa nhiều, sẽ khó tìm người hơn.

React Native phù hợp với các team dùng JS as main language, không có quá nhiều animation phức tạp. RN hiện tại tuyển người khá/rất dễ so với Flutter.

Những điểm tương đồng này cho thấy cả React Native và Flutter đều là những lựa chọn mạnh mẽ và linh hoạt trong việc phát triển ứng dụng di động đa nền tảng. Việc lựa chọn giữa hai framework sẽ phụ thuộc vào nhu cầu cụ thể của dự án và kỹ năng của đội ngũ phát triển.

Không chỉ React Native với Flutter, ngay cả Xamarin chen chân vào cuộc chiến cũng khiến các dev cân nhắc lựa chọn. Vậy dùng Flutter, React Native hay Xamarin phù hợp với dự án, với công ty hay với con đường sự nghiệp của bạn? Không có tốt nhất, chỉ có sự phù hợp nhất mới đem lại hiệu quả.

Xem thêm việc làm IT tại TopDev!

(Nguồn tham khảo: Việt Trần)

Bài viết liên quan:

Bài học về kỹ năng giải quyết vấn đề – Hãy tư duy như một Lập trình viên!

bai-hoc-ve-ky-nang-giai-quyet-van-de-hay-tu-duy-nhu-mot-lap-trinh-vien

Nếu bạn là một người yêu thích lập trình thì không thể không biết đến câu nói sau về kỹ năng mềm lập trình viên:

Mọi người đều nên học lập trình, bởi nó không chỉ dạy bạn code – nó dạy bạn cách tư duy – Steve Jobs”

Có bao giờ bạn tự hỏi rằng làm sao để có thể suy nghĩ như một lập trình viên?  Bất ngờ là, tất cả chỉ xoay quanh câu hỏi: Đâu là hướng giải quyết vấn đề hiệu quả hơn?

Mục đích của tôi khi thực hiện bài viết này là bật mí cho bạn các bí quyết để có thể suy nghĩ và giải quyết vấn đề một cách tốt hơn.

  Những nguyên tắc, định luật của lập trình mà chúng ta nên có sẵn trong đầu
  6 điều tôi vỡ lẻ khi tự học code (P1)

Vì sao điều này lại quan trọng?

Giải quyết vấn đề là một kỹ năng quan trọng.

Tất cả chúng ta đều có vấn đề, từ lớn cho đến nhỏ. Đôi khi cách mà chúng ta giải quyết vấn đề của chính mình khá là … ngẫu nhiên.

Trừ khi bạn đã có một hệ thống rõ ràng hơn thì có lẽ là cách mà bạn “giải quyết” một vấn đề (đây cũng là lộ trình tôi làm theo khi mới bắt đầu viết code ):

  1. Thử một giải pháp nào đó.
  2. Thử một cách khác nếu nó không hiệu quả.
  3. Nếu vẫn không hiệu quả, lặp lại bước 2 cho đến khi may mắn mỉm cười với bạn.

Đôi khi may mắn sẽ đến nhưng thực tế đây  là một cách tồi tệ nhất khi giải quyết một vấn đề, nó khiến bạn lãng phí thời gian của mình.

Theo ý kiến cá nhân của mình, cách tốt nhất để giải quyết vấn đề chính là:

  1. Có một phương pháp cụ thể
  2. Thực hành nó thật nhuần nhuyễn liên tục

Báo cáo Hacker Rank’s 2018 Developer Skill có chỉ ra :

“Kỹ năng giải quyết vấn đề ở ứng viên gần như là một tiêu chuẩn không thể thiếu mà các nhà tuyển dụng tìm kiếm… Nó còn được săn đón hơn cả việc thông thạo các ngôn ngữ lập trình, khả năng fix bug hay thiết kế hệ thống.

Điều này cũng có nghĩa là những kỹ năng mềm như giải quyết vấn đề cũng quan trọng không kém các kỹ năng kỹ thuật cơ bản cho công việc.

Có một khuôn khổ rõ ràng

Để có thể tìm được một khuôn phù hợp với bản thân, tôi đã tham khảo và làm theo lời khuyên từ quyển sách The 4-Hour Chef của Tim Ferriss.

Tôi thật may mắn khi có cơ hội được trò chuyện cùng với hai con người vô cùng đáng ngưỡng mộ  đó là C. Jordan Ball (xếp thứ nhất hoặc thứ hai trong số 65.000 người dùng trên Coderbyte) và V. Anton Spraul (tác giả của Think Like a Programmer: An Introduction to Creative Problem Solving).

Tôi đã l đặt cho cả hai các câu hỏi giống nhau, bạn thử đoán xem câu trả lời là gì? Surprise! Câu trả lời của họ đều khá giống nhau.

“Sai lầm lớn nhất mà tôi thấy ở các lập trình viên là chỉ biết tập trung vào việc học cú pháp (syntax) thay vì học cách giải quyết vấn đề  V. Anton Spraul

Vì thế nếu bạn gặp phải một vấn đề cần giải quyết ở lần tới hãy áp dụng các bước sau nhé:

1/ Hiểu rõ bản chất của sự việc

Bạn cần phải biết chính xác những việc mình đang gặp phải hay những gì được hỏi. Các vấn đề trở nên khó khăn là do bạn không hiểu rõ về chúng.

Vậy làm sao để biết rằng mình đã hiểu rõ một vấn đề? Chính là khi mà bạn có thể giải thích nó một cách đơn giản nhất.

Đa số các lập trình viên đều hiểu  cảm giác khi bản thân bắt đầu giải thích một thứ và ngay lập tức nhìn ra được các lỗ hổng trong logic mà mình chưa bắt gặp trước đây. Đó là lý do tại sao bạn nên viết ra vấn đề của mình, vẽ một sơ đồ, hoặc nói với ai đó về nó ( thậm chí là với một con vịt đồ chơi cũng được).

Richard Feynman từng nói, “Nếu bạn không thể giải thích điều gì đó một cách đơn giản thì có nghĩa là bạn không hiểu nó.”

2/ Lên kế hoạch rõ ràng

Đừng đâm đầu vào giải quyết một vấn đề nào nó một cách may rủi mà không có kế hoạch. Sẽ không ai có thể giúp bạn nếu bạn không lập kế hoạch rõ ràng cho các giải pháp và viết ra chính xác từng bước cần thực hiện.

Trong lập trình, điều có nghĩa là họ dành thời gian để não bộ phân tích vấn đề và xử lý thông tin thay vì bắt đầu hack ngay lập tức.

Để có một kế hoạch hoàn hảo hãy trả lời câu hỏi sau:

“Cho đầu vào X, các bước cần thiết để trả về Y đầu ra là gì?”

3/ Phân chia

Đây là bước quan trọng nhất hãy chú ý thật kỹ nhé!

Đừng cố giải quyết 1 vấn đề to bự! Bạn sẽ vã ra mất.

Bạn sẽ “khóc thét” khi cố gắng giải quyết một vấn đề lớn đấy. Thay vào đó hãy chia nhỏ nó ra thành các vấn đề phụ để có thể giải quyết một các dễ dàng hơn.

Sau đó hãy giải quyết từng vấn đề theo thứ tự ưu tiên từ đơn giản cho đến phức tạp. Đơn giản có nghĩa là bạn có thể giải quyết vấn đề này một mình mà không cần sự trợ giúp hay phụ thuộc vào những người khác.

Khi đã giải quyết các vấn đề phụ hãy kết nối chúng lại với nhau. Congratulations, bạn đã tìm ra cách giải quyết cho vấn đề ban đầu rồi đấy.

Hãy nhớ thật kỹ vì kỹ thuật này chính là nền tảng của quá trình giải quyết vấn đề (Có thể đọc bước này một lần nữa nếu cần thiết).

Theo V. Anton Spraul:

“Nếu tôi có thể dạy cho lập trình viên một  kỹ năng giải quyết vấn đề, thì đó sẽ là làm giảm tính phức tạp của vấn đề”. Ví dụ như bạn là một lập trình viên nhận được yêu cầu viết một chương trình đọc 10 số và tìm ra đâu là con số lớn thứ ba. Đây là một nhiệm vụ khó khăn dành cho một lập trình viên mới vào nghề cho dù nó chỉ yêu cầu cú pháp lập trình cơ bản.

Nếu bạn gặp khó khăn hãy giải quyết vấn đề ở mức độ đơn giản hơn.  Thay vì số thứ ba cao nhất, hãy tìm số cao nhất? Vẫn còn quá khó khăn? vậy kiếm số lớn nhất trong 3 số thì sao? Hãy giảm vấn đề xuống mức mà bạn biết có thể giải quyết. Sau đó, mở rộng vấn đề một chút và viết lại giải pháp cho phù hợp. Tiếp tục cho đến khi bạn quay lại nơi bạn đã bắt đầu.”

Video: Google Update 2019 – Youtube Update 2019

4/ Khi bế tắc nên giải quyết như thế nào?

Đến giờ nếu bạn đang có suy nghĩ  “Hey Richard, nghe có vẻ cool đấy, nhưng nếu tôi vẫn bị bí và thậm chí còn không thể giải quyết được những vấn đề phụ đã chia thì sao ?”

Trước tiên hãy hít một hơi thật sâu. Thứ hai, đây là điều vô cùng bình thường mà ai cũng sẽ mắc phải nên đừng lo lắng nhé!

Điều làm nên khác biệt giữa người lập trình viên và người giải quyết vấn đề giỏi nằm ở việc họ sẽ cảm thấy thắc mắc hơn về lỗi chứ không bị nản chí.

Thực tế, đây là 3 điều bạn cần phải thử qua:

  • Gỡ lỗi: Kiểm tra lại lần lượt các giải pháp của bạn để tìm ra nơi mình đã đi sai hướng. Các lập trình viên gọi đó là debug

“Nghệ thuật debug chính là tìm ra những gì bạn đã nói với chương trình của mình để hơn là những gì bạn đã nói nó làm” – Andrew Singer

  • Tiếp cận lại vấn đề: Nhìn vào vấn đề từ một khía cạnh khác. Bạn có thể tiếp cận điều gì một cách tổng quát hơn không? Một cách đánh giá lại khác là bắt đầu lại. Hãy xóa mọi thứ và bắt đầu lại ở khía cạnh mới. Tôi nghiêm túc đấy! Bạn sẽ bất ngờ khi thấy được mức độ hiệu quả của việc này.

“Đôi khi chúng ta chỉ tập trung vào các chi tiết của một vấn đề mà quên đi các nguyên tắc chung có thể giải quyết chúng ở cấp độ tổng quát hơn.

Một ví dụ cơ bản cho vấn đề này chính là tập hợp các số nguyên liên tiếp, 1 + 2 + 3 + … +n, mà Gauss từ rất trẻ đã nhận ra từ rất sớm đó chỉ đơn giản là n (n + 1) / 2, tránh được việc phải nỗ lực làm thêm.” C. Jordan Ball

  • Nghiên cứu: Đây chính là lúc tỏa sáng của Google. Dù bạn có vấn đề gì đi nữa, ai đó có thể đã giải quyết nó, vì vậy hãy tìm người / giải pháp đó. Thực tế, hãy làm điều này ngay cả khi bạn đã giải quyết được vấn đề bởi vì bạn có thể học được rất nhiều từ các giải pháp của người khác.

Đừng tìm giải pháp cho một vấn đề lớn hãy tìm kiếm giải pháp cho những vấn đề phụ. Vì sao nên làm như vậy? Bởi vì bạn sẽ gặp phải khó khăn mà không học được gì. Nếu bạn không học được gì, thì bạn đang lãng phí thời gian của mình.

Thực hành

Bạn đừng hy vọng rằng mọi thứ sẽ trở nên tuyệt vời chỉ sau một tuần. Nếu bạn muốn trở thành một “bậc thầy” trong việc giải quyết tốt các vấn đề hãy thực hành giải quyết nhiều vấn đề. Sẽ chỉ còn là vấn đề thời gian đến khi bạn gặp phải một vấn đề và tự động nghĩ rằng “cái này chỉ cần giải quyết bằng cách <cách thức>.

Làm sao để thực hành? Cờ vua, các vấn đề toán học, sudoku, trò chơi điện tử, cryptokitties… có rất nhiều sự lựa chọn dành cho bạn.

Đơn giản là bạn chỉ việc ngồi chơi trò chơi điện tử? Dĩ nhiên là không. Những gì bạn nên làm là tìm một lối thoát để thực hành giải quyết nhiều vấn đề vi mô, lý tưởng nhất là những hoạt động mà bạn thích. Giống như tôi thích những thử thách code, mỗi ngày tôi cố gắng giải quyết ít nhất một thử thách (thường là trên Coderbyte).

Kết luận

Giờ đây, bạn đã biết rõ hơn ý nghĩa của việc “suy nghĩ và giải quyết vấn đề như một Lập Trình Viên.” Bạn cũng biết rằng giải quyết vấn đề là một kỹ năng đáng kinh ngạc cần được trau dồi. Và điều tuyệt vời hơn nữa đó là bạn cũng biết phải làm gì để thực hành kỹ năng giải quyết vấn đề của mình rồi.

“Ngay khi bạn nghĩ rằng bạn đã thành công vượt qua một chướng ngại vật, thì một điều khác lại xuất hiện. Nhưng điều đó lại mang đến điều thú vị cho cuộc sống.

Cuộc sống là một quá trình liên tục vượt khó vượt qua những trở ngại này – một loạt hàng rào kiên cố mà chúng ta phải vượt qua.

Mỗi lần, bạn sẽ học được điều gì đó.

Mỗi lần, bạn sẽ phát triển sức mạnh, trí tuệ và quan điểm.

Mỗi lần, một chút nữa của cuộc thi sẽ biến mất. Cho đến khi tất cả những gì còn lại là bạn: phiên bản tốt nhất của bạn.” – Ryan Holiday (The Obstacle is the Way)

Bây giờ hãy đi giải quyết vấn đề của mình đi nào!

Và chúc bạn may mắn.

TopDev via Medium

Tìm việc IT lương cao, đãi ngộ tốt trên TopDev ngay!

TOPICA – vị thế hàng đầu, nơi dừng chân đáng mơ ước của các chuyên gia IT

Tổ hợp Công nghệ Giáo dục TOPICA là đơn vị đào tạo trực tuyến hàng đầu Đông Nam Á, là tổ chức Việt Nam đầu tiên xuất khẩu công nghệ giáo dục ra nước ngoài. Với những lợi thế trong công nghệ giáo dục hiện đại và dẫn đầu xu thế phát triển nguồn nhân lực, TOPICA luôn đi đầu trong việc đào tạo và là sân chơi đầy tiềm năng – nơi tài năng được khai sáng, phá vỡ mọi giới hạn dành cho dân IT.

TOPICA – những con số biết nói, khẳng định vị thế hàng đầu

Mang sứ mệnh chiếm lĩnh thị trường công nghệ giáo dục trực tuyến tại Đông Nam Á, TOPICA không ngừng nỗ lực và chinh phục nhiều thị trường trong khu vực:

  • Với hơn 1400+ nhân viên toàn thời gian, 1000+ cộng tác viên và 1000+ giảng viên bán thời gian ở các văn phòng Manila, Singapore, Bangkok, Hà Nội, TP. HCM và Đà Nẵng;
  • TOPICA UNI là một sản phẩm của Tổ hợp công nghệ giáo dục TOPICA, cung cấp hạ tầng công nghệ và dịch vụ cho 16 trường Đại học ở Việt Nam, Mỹ và Philippines;
  • TOPICA Native triển khai chương trình luyện nói tiếng Anh trực tuyến cho học viên tại Thái Lan, Indonesia và Việt Nam, và là đơn vị đầu tiên trên thế giới phát triển ứng dụng luyện nói qua Google Glass;
  • TOPICA Founder Institute là vườn ươm khởi nghiệp duy nhất tại Việt Nam đã có các startup nhận đầu tư tổng cộng gần 10 triệu USD.

Tuy nhiên các con số này vẫn chưa là tất cả, TOPICA vẫn đang tiếp tục khẳng định vị thế và mở rộng đội ngũ nhân sự, đặc biệt là chiêu mộ các nhân tài trong lĩnh vực công nghệ thông tin – đội ngũ nắm giữ vai trò quan trọng trong bộ máy vận hành của TOPICA.

TOPICA và hành trình nuôi dưỡng tài năng từ giấc mơ công nghệ 

Bắt đầu hành trình từ con số 0 cho đến sự vươn mình lớn mạnh khắp Đông Nam Á – TOPICA chứng minh công nghệ làm nên mọi thứ và sẵn sàng tạo mọi điều kiện để ươm mầm các tài năng IT. Các ứng viên đến với TOPICA không phải đơn thuần chỉ là để tìm thấy một sự nghiệp ổn định, mà đó còn là việc khẳng định bản thân, được công nhận và làm chủ các sản phẩm do chính mình “đẻ” ra. Các thách thức tại TOPICA luôn đặt ra không ngừng, nhưng đây lại là nền tảng để mọi ứng viên được vượt qua chính mình, dám lên tiếng và chinh phục những đam mê, hoài bão. Khi giới hạn bị phá vỡ, đó cũng chính là lúc Developer tỏa sáng thành ngôi sao của mỗi dự án.

25 Master Code hiện đang là chương trình tuyển dụng chuyên gia IT cao cấp của Tổ hợp Công nghệ Giáo dục Topica. Với cơ hội được dùng công nghệ mới nhất của thế giới để phục vụ mục tiêu “Triệu người nâng trí tuệ”, TOPICA trở thành “vùng đất lành” để nuôi dưỡng các tài năng trẻ trở thành chuyên gia IT. Chưa dừng lại ở đó, TOPICA còn mang đến những phúc lợi mà bất cứ Developer nào cũng khao khát. Quan trọng hơn nữa là tại TOPICA không cần làm sếp, vẫn thu nhập cao!

Từ ngay ngày đầu, ứng viên đã có thể lựa chọn tham gia ngay các dự án trọng điểm cấp tổ hợp như dự án Ecosystem xây dựng hệ sinh thái giáo dục trên nền tảng công nghệ mà core value là AI, machine learning – ứng dụng công nghệ 4.0 tiên tiến nhất cùng nhiều platform con để xoáy dữ liệu người dùng. Bên cạnh đó, ứng viên còn được thỏa sức chinh phục các dự án tập trung những chuyên gia, quản lý hàng đầu Tổ hợp cũng như lựa chọn core team với nhiều chuyên gia, quản lý IT khủng để đầu quân.

Đãi ngộ cực đỉnh từ chương trình tuyển dụng Master Code

Trong chương trình tuyển dụng Master Code của TOPICA, các ứng viên sẽ được trải nghiệm nhiều thách thức thú vị, bao gồm các hoạt động:

  • Tham gia phát triển hệ thống phần mềm lớn, trọng điểm cùng các software architect của tổ hợp;
  • Phát triển sản phẩm/module mới hoạt động ổn định;
  • Chịu trách nhiệm về chất lượng sản phẩm và chất lượng code;
  • Tuân thủ quy trình phát triển sản phẩm theo mô hình Agile, Scrum;
  • Đào tạo, hướng dẫn hoặc là techleader các thành viên khác trong team.

Và đi kèm mức lương hấp dẫn cùng với nhiều phúc lợi:

  • Vươn lên vị trí Senior, thu nhập như mơ lên đến $2,000 mỗi tháng;
  • Cơ chế thưởng hoành tráng, lên “vèo vèo” 2 chức trong 6 tháng liền;
  • Tự động tăng lương 2 lần trong năm, thoải mái chi tiêu, được nhiều hơn mất;
  • Được quyền lựa chọn làm các công nghệ Java, .NET, PHP, Ruby, Python… và các công nghệ trending (AI, Bigdata, ML, IOT, Blockchain…);
  • Cân bằng cuộc sống và công việc với kì nghỉ “xả láng” 6~10 ngày sau mỗi 3 tháng làm việc;
  • “Đồng nghiệp mình là một gia đình” với teambuilding, dã ngoại, thể thao, tiệc tùng linh đình hằng tháng.

E-Learning đang được xem là xu thế giáo dục tương lai của thế giới, và đây cũng chính là thị trường “màu mỡ” để TOPICA tiếp tục khai thác với nhiều giấc mơ lớn lao hơn. Và để đáp ứng được tốc độ phát triển thần tốc, TOPICA luôn mong muốn tìm kiếm và bồi dưỡng nguồn nhân lực trẻ, đam mê công nghệ, có tố chất để đảm đương các vị trí software architect hoặc CTO trong tương lai.

Nếu bạn ngại sự thay đổi, lo sợ thách thức quá lớn khiến bạn không chinh phục nổi thì TOPICA chưa phải là nơi dành cho bạn. Nhưng nếu bạn tự tin với bản lĩnh mình có, TOPICA chính là nơi để bạn viết nên câu chuyện thành công của riêng mình tại thị trường quốc tế.


  • Thông tin về chương trình tuyển dụng Master Code: https://topdev.vn/s/wPvOOYRS
  • Khám phá thêm các vị trí hấp dẫn khác tại TOPICA

Triển khai CI/CD với Gitlab

CI/CD

Cũng hơn một tháng kể từ bài viết gần nhất, nay mới có thời gian ngồi viết lách tiếp. Dạo gần đây thường release các dự án outsource nên cũng hay làm documentation cũng như  mở các dự án mới nên việc setup CI/CD thường xuyên hơn và chân tay hơn.

Thấy các kiến thức này hay nên hôm nay mình sẽ chia sẻ mọi người quy trình CI/CD bên mình áp dụng cho “đại dự án” Teamcrop cũng như các dự án outsourcing mà Moout thực hiện.

CI/CD là gì?

CI/CD là một bộ đôi công việc, bao gồm CI (Continuous Integration)CD (Continuous Delivery), ý nói là quá trình tích hợp (integration) thường xuyên, nhanh chóng hơn khi code cũng như thường xuyên cập nhật phiên bản mới (delivery).

Tại sao phải quan tâm đến CI/CD?

Ngày nay, với xu hướng agile/lean dẫn đến việc phát triển tính năng là điều bình thường, quan trọng phải là thần thái, ý lộn, quan trọng là phải nhanh. Nếu một tính năng mà mất 2, 3 tháng mới release thì dẫn đến nhiều hệ lụy như làm không phù hợp nhu cầu khách hàng, hoặc đối thủ đã ra mắt trước đó, mất đi cái lợi thế dẫn đầu.

Do đó, việc làm ra một sản phẩm, tính năng đòi hỏi thần tốc là ưu tiên số một hiện nay.

Bên cạnh đó, để nhanh chóng ra mắt một tính năng, phiên bản mới nếu theo cách cổ điển sẽ mất nhiều thời gian bởi công việc chân tay khá nhiều và mỗi lần release cũng huy động một cơ số người không nhỏ để cập nhật một thay đổi dù là nhỏ nhất.

Bởi vậy, xu hướng CI/CD giúp cung cấp các framework, workflow giúp tiết kiệm thời gian, nguồn lực của quá trình release (delivery).

tuyển it

  Một vài câu hỏi thông dụng về Git thường gặp

Quy trình CI/CD tham khảo

Có rất nhiều quy trình, công cụ khác nhau để ứng dụng CI/CD vào dự án. Nội dung của bài viết này dựa trên kinh nghiệm cho các dự án của mình triển khai cũng như đặc thù là các hệ thống web, và viết bằng PHP (PHP hoặc Python hoặc abc…không quá quan trọng trong ngữ cảnh chia sẻ về CI/CD).

Dưới đây là các bước thông thường của quá trình release tính năng trong một dự án thuộc hệ thống Teamcrop.

– Bước 1: [Manual] Khởi tạo repository và có branch default là master và dev. Cài đặt trên Gitlab 9.
– Bước 2: [Manual] Trừ owner ra, thì các coder sẽ push code tính năng lên branch dev
– Bước 3: [Auto] Hệ thống tự động thực hiện test source code, nếu PASS thì sẽ deploy tự động (rsync) code lên server beta.
– Bước 4: [Manual] Tester/QA sẽ vào hệ thống beta để làm UAT (User Acceptance Testing) và confirm là mọi thứ OK.
– Bước 5: [Manual] Coder hoặc owner sẽ vào tạo Merge Request, và merge từ branch dev sang branch master.
– Bước 6: [Manual] Owner sẽ accept merge request.
– Bước 7: [Auto] Hệ thống sẽ tự động thực hiện test source code, nếu PASS sẽ enable tính năng cho phép deploy lên production server.
– Bước 8: [Manual] Owner review là merge request OK, test OK. Tiến hành nhấn nút để deploy các thay đổi lên môi trường production.
– Bước 9: [Manual] Tester/QA sẽ vào hệ thống production để làm UAT và confirm mọi thứ OK. Nếu không OK, Owner có thể nhấn nút Deploy phiên bản master trước đó để rollback hệ thống về trạng thái stable trước đó.
– Bước 10: [Manual] Thắp nhang và hy vọng khách hàng không chửi rủa hoặc email complain.

Áp dụng CI/CD với Gitlab 9

Trong khuôn khổ bài viết này, mình sẽ hướng dẫn mọi người cài đặt Gitlab 9 để quản lý source code, và trên công nghệ Git. Đòi hỏi của tất cả setup này là trên server đã cài Docker, nếu các bạn chưa có docker trên server thì có thể tham khảo các bài viết về docker trên bloghoctap cũng như tìm kiếm thêm trên google.

Tại sao phải là Gitlab 9?

Đây là câu hỏi hay, bởi vì trước đó bên mình sử dụng Gitlab 8, tuy nhiên, do các hạn chế về UI/UX cũng như không tích hợp ngon lành vụ CI/CD nên khi bản 9 ra mắt, mình đã thử sử dụng và thấy bản 9 phù hợp hơn cho workflow nên quyết định dọn dẹp sang Gitlab 9.

Cài đặt Gitlab 9 với docker

Bạn chạy câu lệnh sau để tạo một container chứa Gitlab 9.

docker run --detach \
--hostname code.teamcrop.com \
--publish 8080:80 --publish 2222:22 \
--name gitlab9 \
--restart=always \
--volume /gitlab9/config:/etc/gitlab \
--volume /gitlab9/logs:/var/log/gitlab \
--volume /gitlab9/data:/var/opt/gitlab \
gitlab/gitlab-ce:9.0.3-ce.0

Nếu ai từng dùng docker sẽ hiểu ý nghĩa câu lệnh trên. Đơn giản là mình sử dụng image gitlab/gitlab-ce:9.0.3-ce.0. Có mount ra 3 thư mục bên ngoài máy ở thục mục /gitlab9 để lỡ có chuyện gì chỉ cần stop, remove container, khi chạy docker run lại thì không bị mất dữ liệu, source code.

Câu lệnh trên có map 2 port là 8080 và 2222 tương ứng tới 2 port 80 và 22 trong container. Mình mapping port vậy bởi vì trên server dev này có rất nhiều service khác và đã chiếm port 80 và 22 (ssh ^^!).

Sau khi bạn start container thì có thể truy cập vào từ ip hoặc domain (mà bạn đã trỏ DNS), ví dụ: http://code.teamcrop.com:8080 là có thể vào gitlab 9, tài khoản mặc định là `root`.

Không có gì cao siêu ở cài đặt này, có thể tham khảo thêm ở trang chủ của Gitlab.com nhé.

Quản lý sourcecode bằng Gitlab

Về phần này thì mình không cần nói dài dòng, cũng như một hệ thống git thông thường (như github..), bạn có thể tìm hiểu thêm về git và Gitlab để team có thể cùng làm việc và quản lý sourcecode trên Gitlab.

CI/CD với Gitlab CI

Thông thường, các hệ thống quản lý sourcecode không kèm theo cơ chế CI/CD. Nếu bạn muốn triển khai thì buộc phải liên kết đến repository, phân quyền đủ kiểu để hệ thống đó có thể lấy source code từ respository. Trước đây bên mình sử dụng Jenkins cho việc này.

Tuy nhiên, từ khi Gitlab ra mắt tính năng Gitlab CI, kèm theo sự chậm chạp, rắc rối và rề rề của Jenkins thì mình quyết định chia tay với Jenkins và đến với Gitlab CI luôn, và quả là một bộ đôi hoàn hảo. Code để ở Gitlab, rồi trong đó có cho cài đặt CI/CD để test và deploy code tự động.

Cũng như một số bạn mới lần đầu tiếp xúc với Gitlab CI, mình đã từng thấy nó khó hiểu và cao siêu vì setup tùm lum. Rồi setup xong lại không biết nó chạy thế nào, cơ chế deploy source code ra sao.

Tuy nhiên, sau một vài “va chạm” đầy mồ hôi và nước mắt thì cũng nắm và hiểu được cách Gitlab CI vận hành, và nay chia sẻ cho mọi người để vận dụng cho workflow của mình.

Để dùng được Gitlab CI thì bạn cần có 2 thành phần sau: file `.gitlab-ci.yml` nằm ở thư mục gốc của dự án và Gitlab Runner.

File .gitlab-ci.yml là gì?

Mặc định Gitlab không có cơ chế nào về CI cho dự án của bạn, chỉ khi nào dự án của bạn có file .gitlab-ci.yml nằm ở thư mục gốc thì Gitlab mới nhận dạng được dự án của bạn muốn áp dụng Gitlab CI.

File này có định dạng và cần hợp lệ thì mới có thể hoạt động được, không thì khi bạn push code lên thì Gitlab sẽ báo lỗi file định dạng nội dung của file cấu hình không hợp lệ. Tham khảo cú pháp của cấu hình này tại https://docs.gitlab.com/ce/ci/yaml/

Trong file này có gì? File này có một số section để khai báo như trước khi chạy test thì làm gì, khi test thì thực hiện lệnh gì (vd chạy linter check cú pháp, chạy PHPUnit test…), test xong rồi thì thực hiện deploy đi đâu (beta, production..) với câu lệnh gì (vd: rsync..). Tùy đặc thù ngôn ngữ lập trình, cách đóng gói của dự án mà sẽ có các lệnh tương ứng thực hiện.

Tới đây các bạn sẽ có câu hỏi là vậy cái gì sẽ chạy, thực thi các câu lệnh, chỉ dẫn trong file config trên? Hay là Gitlab Server sẽ chạy. Nếu là Gitlab server chạy thì nếu dự án mình thực hiện những lệnh không có thì sao, vì gitlab server thì cũng chỉ chứa gitlab và các program cho nó chứ đâu thể cài sẵn các program?

Bên cạnh đó, mỗi lần chạy thì các thông tin liên quan đến file tạm có bị reset lại hay không?

Nếu bạn đi đến đây thì bạn đã đoán được là thực ra “cái thứ” thực thi các chỉ dẫn, câu lệnh trong file .gitlab-ci.yml không phải là Gitlab Server (là cái container đang chạy gitlab 9 mình start ở trên), mà đó chính là Gitlab Runner. Wow! Welcome to matrix!

Gitlab Runner là gì?

Gitlab Runner là thành phần cực kỳ quan trọng trong workflow Gitlab CI. Nếu không có Runner thì sẽ không có lệnh test, deploy nào được thực thi. Runner có nhiều loại, phân biệt dựa vào cái gọi là executor.

Khi khởi tạo runner, bạn sẽ phải chọn nó là loại executor nào, và nó sẽ quyết định môi trường thực thi các câu lệnh trong file config ở trên. Bạn có thể tham khảo link https://docs.gitlab.com/runner/executors/ để biết sự khác nhau của các executor cũng như cách cài đặt, cấu hình chúng.

Do đặc thù hệ thống đã có docker, nên bên mình chỉ sử dụng executor loại Docker mà thôi. Và bên dưới là câu lệnh docker để start một Gitlab Runner.

docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest

Ở đây bạn sẽ thấy container này mount thư mục config ra ngoài, bởi vì mình muốn các cấu hình của runner không bị mất khi stop/remove container. Chỉ cần start lại là giữ được cấu hình.

Ngoài ra, nó còn mount docker.sock vào bên trong container, đây là cách để executor loại docker có thể tận dụng lệnh docker bên ngoài host để thực hiện lệnh tạo container phụ trong quá trình runner chạy (test, deploy).

Start container lên chỉ là bước đầu, bởi vì lưu ý là tới thời điểm này, Runner này không có liên quan gì đến Gitlab server của chúng ta. Cần một bước link lại (gọi là register) runner này vào trong Gitlab server để mình có thể cho phép các dự án dùng runner trong quá trình CI/CD.

Xem link này https://docs.gitlab.com/runner/register/index.html để biết cách register runner này vào Gitlab Server.

Dưới đây là hình ảnh tham khảo bạn có thể dùng trong quá trình register 1 runner. Có 2 thông tin quan trọng là 1 cái URL và một random token. Và cái URL đặc biệt lưu ý là thường thêm /ci sau domain. Ví dụ ở trường hợp của mình setup là http://code.teamcrop.com/ci

lập trình web

Sau khi Runner đã được gán vào Gitlab Server, bạn có thể enable runner này cho một hoặc nhiều dự án trong Gitlab. Hình bên dưới minh họa việc gán Runner vào dự án trong phần cài đặt Pipeline của Gitlab 9.

tuyển it

Đến đây hầu như đã cấu hình xong. Dự án đã kích hoạt 1 runner, và dự án đã có file .gitlab-ci.yml. Từ bây giờ, mỗi lần code được đưa lên thì runner sẽ thực thi test cũng như deploy dựa trên các câu lệnh được khai báo trong file cấu hình.

Khai báo biến để dùng trong các câu lệnh

Trong một số trường hợp, bạn có thể khai báo biến để có thể dùng trong các lệnh của runner. Có 3 nơi có thể cấu hình biến:
1. Cấu hình ngay bên trong file .gitlab-ci.yml
2. Cấu hình trong dự án. Vào Settings // CI/CD Pipelines, phần Secret variables (xem hình)

CI/CD

3. Cấu hình bên trong file config của runner. Bạn có nhớ lúc mình khởi tạo runner, có chỉ định một thư mục chứa config không, đây chính là nơi cấu hình chung cho runner này. Trong thư mục này sẽ có file là config.toml.

Và bạn có thể gán biến trong cấu hình của từng runner. Cấu hình ở đây có một lợi thế là cứ runner này chạy sẽ nhận được biến đã cấu hình. Bạn không cần phải cấu hình nhiều lần ở từng dự án.

CI/CD

Ví dụ về một file .gitlab-ci.yml

Bên dưới là file cấu hình của một dự án trong hệ thống Microservices thuộc Teamcrop:

before_script:

- export "PATH=$PATH:/vendor/bin"
# Install ssh-agent if not already installed, it is required by Docker.
# (change apt-get to yum if you use a CentOS-based image)
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'

# Run ssh-agent (inside the build environment)
- eval $(ssh-agent -s)

# For Docker builds disable host key checking. Be aware that by adding that
# you are suspectible to man-in-the-middle attacks.
# WARNING: Use this only with the Docker executor, if you use it with shell
# you will overwrite your user's SSH config.
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'

variables:

# Change this base on project name
DEPLOYMENT_FOLDER_NAME: "tc-file"

test:

image: voduytuan/gitlab-php-ci
script:
- bash ./ci/phplint.sh ./src/
- phpcs --config-set ignore_errors_on_exit 1
- phpcs --config-set ignore_warnings_on_exit 1
- phpcs --standard=PSR2 --ignore=./src/index.php --error-severity=1 --warning-severity=8 -w --colors ./src/
- phpunit --configuration ci/phpunit.xml

dev:

image: voduytuan/gitlab-php-ci
stage: deploy
script:
- ssh-add <(echo "$DEPLOYER_BETA_KEY")
- echo "Deploy to $DEPLOYMENT_FOLDER_NAME"
- rsync -avuz -e "ssh -p 22" --exclude-from="ci/deploy_exclude.txt" $CI_PROJECT_DIR/src/ $DEPLOYER_BETA_USER@$DEPLOYER_BETA_IP:/teamcrop/services/$DEPLOYMENT_FOLDER_NAME/src
only:
- dev

production:

image: voduytuan/gitlab-php-ci
stage: deploy
script:
- ssh-add <(echo "$DEPLOYER_PRODUCTION_KEY")
- echo "Deploy to $DEPLOYMENT_FOLDER_NAME"
- rsync -avuz -e "ssh -p 22" --exclude-from="ci/deploy_exclude.txt" $CI_PROJECT_DIR/src/ $DEPLOYER_PRODUCTION_USER@$DEPLOYER_PRODUCTION_IP:/teamcrop/services/$DEPLOYMENT_FOLDER_NAME/src
only:
- master
when: manual

Trong ví dụ trên, phần test bên mình làm 3 việc:
– Chạy linter để đảm bảo sourcecode không bị lỗi cú pháp (phplint)
– Kiểm tra source code có theo chuẩn PSR2 hay không.
– Chạy PHPUnit

Còn về phần deploy thì có cấu hình 2 task là deploy dev và production. Ở task dev thì auto và lấy code từ branch dev. CÒn task production deploy từ branch master, tuy nhiên, có chế độ deploy manual, tức là nhấn thì mới deploy.

CI/CD

Về phần deploy source code thì sử dụng rsync để đẩy code từ repo sang server. Bạn sẽ thấy cú pháp giống nhau, chỉ khác là cấu hình đẩy đi đâu, với user nào và private key nào.

Do đặc thù của commandline nên sử dụng privatekey để đồng bộ code thông qua rsync. Do đó, trong project mình có cấu hình privatekey của user. Và bên server nhận (beta, production) mình đã đưa public key vào file authorized_keys.

Bạn có thể tìm hiểu thêm về setup và generate cặp public/private key cho user deploy để hỗ trợ quá trình này tại link https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys–2.

Hay ngắn gọn là thực hiện câu lệnh “ssh-keygen -t rsa -C “youremail@gmail.com” -b 4096″, nhập vài thông tin là bạn đã có public key (id_rsa.pub) để đem bỏ lên server (beta, production) và private key (id_rsa) đem bỏ vào setting biến môi trường.

Dựa trên những kinh nghiệm CI/CD cho hệ thống Teamcrop.com theo mô hình microservice với hơn 40 repository lớn nhỏ, hy vọng bài viết này sẽ giúp được cho quá trình setup CI/CD cho hệ thống của bạn, cũng như tăng tốc quá trình phát triển dự án. Nếu thấy bài viết hay và hữu ích, hãy chia sẻ cho các anh em khác để cùng trao đổi và giao lưu.

TopDev via Võ Duy Tuấn

Có thể bạn muốn xem thêm:

Xem thêm Top Việc làm Developer trên TopDev

CSS Framework có thật sự cần thiết như chúng ta nghĩ?

Tác giả: Sarthak Sharma

Đã có một thời gian khi ai đó hỏi “Bootstrap là gì?” Chúng ta đều sẽ trả lời rằng đó là “một điều kỳ diệu”. Thời điểm đó đã qua, giờ đây chúng ta đã quá hiểu và biết quá rõ những khả năng cũng như giới hạn của Bootstrap, cùng với việc sử dụng các CSS Framework trở nên thông dụng trong toàn ngành vì chúng tiết kiệm rất nhiều thời gian. Nhưng có một câu hỏi được đặt ra đó chính là “Liệu chúng ta có có thật sự cần CSS Framework?”. Bài viết này sẽ nếu ra những lý do bạn không cần CSS Framework.

Có thể bạn quan tâm:

  5 điều phiền toái nhất của CSS
  CSS trong JavaScript: Công cụ không thể thiếu cho component-based styling

Chưa tận dụng hết CSS

Có khoảng thời gian mà tất cả những gì chúng ta cần làm đó là thêm  bootstrap.min.css và BOOM – phiên bản production của ứng dụng đã sẵn sàng… hoặc chúng ta nghĩ rằng nó đã sẵn sàng. Vì thật ra thì nó không đơn giản như vậy.

CSS Framework có thật sự cần thiết như chúng ta nghĩ?

Cùng xem qua ví dụ từ trang web này nhé. Họ đang sử dụng Bootstrap cho landing page của mình. Có thể thấy nó đang được tối ưu hoá dung lượng nhưng điểm đặc biệt ở đây chính là có hơn 90% CSS Framework không được sử dụng tới. Chỉ cần sử dụng công cụ coverage ở Chrome là bạn có thể kiểm tra bất kỳ trang web nào bằng cách bấm cmd + shift + p và gõ “coverage”.
Đương nhiên Bootstrap có các công cụ như Customize and Download cho phép bạn lựa chọn các thành phần và giảm kích thước của tệp đã tải xuống. Tuy nhiên vẫn còn rất nhiều code không thể sử dụng được. Bạn có thể xem buổi nói chuyện tuyệt vời của Addy Osmani về chủ đề này:

Small Projects với Big Projects

Điều gì khiến cho Bootstrap trở nên phổ biến:

  • Giúp cho các thiết kế thân thiện với điện thoại di động.
  • Giảm thời gian phát triển một dự án lớn.

Vì vậy đừng lo lắng khi bạn đang làm việc trong một big project mà không có kỹ năng của lập trình viên Front-end, CSS Framework sẽ giúp bạn. Nhưng bạn có thực sự cần CSS Framework cho các project nhỏ? Tôi nghĩ là không đâu. Khi tôi tạo ra Dev10, tôi đã không sử dụng bất kỳ framework bên ngoài nào và cho thấy sự khác biệt.

CSS Framework có thật sự cần thiết như chúng ta nghĩ?

Điểm quan trọng ở đây chính là bạn phải đánh giá phạm vi của dự án một cách khôn ngoan. Nếu bạn không có quá nhiều thành phần và trang UI trong ứng dụng của mình thì bạn không cần đến framework.

Tối Ưu Front-end Để Web Của Bạn Load Dưới 5 Giây

Cách nào giúp thay thế các framework trong các project nhỏ?

Việc sử dụng CSS vanila để tạo nên các thiết kế thân thiện với các thiết bị di động không chỉ khả thi, mà nó còn dễ hơn nhiều so với việc sử dụng các framework. Đây là hai thuộc tính CSS rất mạnh và hữu ích.

1/ Flex

Kiểm tra pen này. Chỉ cần sử dụng vào dòng code bạn đã có thể tạo ra các trang responsive tuyệt vời giống như thế.

CSS Framework có thật sự cần thiết như chúng ta nghĩ?

Vì thế hãy dành thời gian để tìm hiểu về nó. Đây là một số nguồn có thể giúp bạn:

2/ Grid

Điều bạn cần học hỏi chính là hãy mang phần CSS grid đơn giản từ các framework mà bạn hay dùng và để vào các steroid. Nếu bạn là một người từng chỉ sử dụng Bootstrap từ grid system, hãy sử dụng grid  và tạo ra bố cục tùy chỉnh của chính mình.

3/ Sử dung các đoạn code cho các UI component

Bạn chỉ cần truy cập Codepen nếu như đang băn khoăn và cần thêm cảm hứng cho các yếu tố UI giống như các button và navbar. Đây là một cộng đồng tuyệt vời giúp bạn có thể tìm thấy hằng trăm pen để trợ giúp bạn. Đây là một số nguồn vô cùng hữu ích:

Nếu vẫn cảm thấy khó khăn trong việc tìm CSS cho một số thành phần UI hãy sử dụng các thành phần Inspect cũ của mình.

4/ Sử dụng đoạn code Animation

Thông tin thú vị: Tôi đã ngừng viết bài này vào ngày 21/01 vì bài viết này đã mang đến cho tôi những ý tưởng và cảm hứng để làm việc trên Animatopy. Nếu bạn vẫn còn nhớ công cụ tuyệt vời animate.css nhưng mặt hạn chế duy nhất của nó là khi muốn sử dụng một vài hình ảnh động bạn vẫn phải bao gồm CSS hoàn chỉnh.

Điều này hoàn toàn không cần thiết và khiến tôi khó chịu, vì thế tôi đã tạo nên Animatopy. Bạn chỉ cần sao chép đoạn code mà không cần thiết phải download Animate.css.

CSS Framework có thật sự cần thiết như chúng ta nghĩ?

Kết luận/ Tl; dr

Đây chính là “quy tắc vàng” nếu đó là một project nhỏ hãy giữ nó và đừng sử dụng các framework. Các tệp với kích thước lớn duy nhất là hình ảnh và bạn cần tối ưu hóa nó chứ không phải CSS

Vậy còn các Big Project thì sao?

Điều này sẽ vô cùng dễ dàng nếu bạn chỉ mới bắt đầu với một project mới. Nhưng nếu project lớn của bạn có sẵn và đang chạy, quá trình chuyển đổi này chỉ thành công khi nó được lên kế hoạch một cách hoàn hảo và thảo luận kỹ với các thành viên trong team của mình. Dưới đây là một vài mẹo để tối ưu hóa các project lớn.

1/ Loại bỏ CSS không sử dụng khỏi dự án

Nhờ vào cộng đồng Javascript tuyệt vời mà chúng ta có các công cụ vô cùng hữu ích để tối ưu hóa CSS. Purifycss là một công cụ tuyệt vời mà bạn có thể sử dụng cho project lớn của mình. Nó có sẵn trong:

2/ Sử dụng tất cả Minify/Uglify

Có vô số cách để giảm thiểu kích thước CSS, một cách rõ ràng nhất đó là minify chúng. Đã có rất nhiều bài viết nói về điều này nhưng bài viết dưới đây là một bài tuyệt vời để tiết kiệm thời gian của bạn

3/ Tạo CSS wiki hay  Documentation (nếu bỏ các framework)

Nếu bạn đã quyết tâm “chia tay” các framework hoàn toàn thì hãy tận dụng những điều tốt nhất từ framework, các documentation được viết tốt. Bằng cách này, lập trình viên có thể dễ dàng sao chép và dán các đoạn code để tiết kiệm thời gian. Đây chính là cách giúp bạn và đồng đội của mình tiết kiệm được thời gian và tránh được các lỗi từ các lập trình viên khác. Tất nhiên nơi tốt nhất để bắt đầu là các documentation từ các framework này.

Kết luận:

Việc sử dụng các framework hay không hoàn toàn phụ thuộc vào quyết định của bạn. Yếu tố quan trọng nhất chính là tận dụng tối đa những gì tốt nhất của chúng một cách thiết thực và kiểm tra các thuộc tính mới để thay thế các thuộc tính cũ.

Bài viết này chỉ mang tính chất chủ quan để giúp bạn suy nghĩ nhiều hơn về vấn đề này. Đừng ngại chia sẻ những bí quyết cũng như các mẹo hay đề nghị của bạn ở phía bên dưới nhé!

Bài viết gốc được đăng tải tại via Devto

Streaming Media với Nginx và nginx-rtmp module

Streaming Media với Nginx và nginx-rtmp module

Lộ trình khá chi tiết Streaming server Media với Nginx và nginx-rtmp module.

1. Về nginx-rtmp module

Nginx-rtmp là module mở rộng, mà kết hợp với Nginx để cho phép xây dựng máy chủ streaming media.

Một số tính năng mà nginx-rtmp hỗ trợ:

  • RTMP/HLS/MPEG-DASH live streaming
  • RTMP Video on demand FLV/MP4, phát từ local file hoặc qua HTTP
  • Stream relay support for distributed streaming: push & pull models
  • Ghi streams vào nhiều tệp FLV
  • Hỗ trợ H264/AAC
  • Transcode trực tuyến với FFmpeg
  • HTTP callbacks (publish/play/record/update etc)
  • Module điều khiển HTTP để recording audio/video and dropping clients
  • Kỹ thuật buffer tiên tiến để giữ cho bộ nhớ được cấp ở mức thấp nhất mà streaming vẫn nhanh.
  • Kết hợp được với các ứng dụng như Wirecast, FMS, Wowza, JWPlayer, FlowPlayer, StrobeMediaPlayback, ffmpeg, avconv, rtmpdump, flvstreamer, ..
  • Thống kê stream với định dạng XML/XSL
  • Linux/FreeBSD/MacOS/Windows

Có thể bạn muốn xem thêm:

  Triển khai dịch vụ High Available với Keepalived + HAproxy trên server Ubuntu
  Cách cài đặt cấu hình máy tính cá nhân thành một public server trên Internet

2. Cài đặt Nginx với module nginx-rtmp

Step1: Download & unpack latest stable nginx & nginx-rtmp version

cd /opt
sudo git clone git://github.com/arut/nginx-rtmp-module.git
sudo wget http://nginx.org/download/nginx-1.14.1.tar.gz
sudo tar xzf nginx-1.14.1.tar.gz
mv nginx-1.14.1 nginx

Step2: Build nginx với nginx-rtmp

sudo ./configure --prefix=/etc/nginx \
--pid-path=/var/run/nginx.pid \
--conf-path=/etc/nginx/nginx.conf \
--sbin-path=/usr/sbin/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \
--with-http_ssl_module \
--add-module=nginx-rtmp-module
sudo make
sudo make install

Step3: Run Nginx với systemd

  • Create tệp /lib/systemd/system/nginx.service với nội dung sau:
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID

[Install]
WantedBy=multi-user.target
  • Start Nginx service
systemctl enable nginx.service
systemctl start nginx.service

3. VOD qua RTMP

Chúng ta sẽ cấu hình để cho phép các video player xem video qua giao thức RTMP.

3.1 Cấu hình Nginx

Step1: Tạo tệp tin cấu hình nginx với nội dung sau:

user  nginx;
worker_processes  1;
pid        /run/nginx.pid;
user nginx;

events {
    worker_connections  1024;
}
rtmp {
    server {
        listen 1935;
        chunk_size 4000;
        # video on demand for mp4 files
        application vod {
            play /var/mp4s;
        }
    }
}

http {
    access_log /var/log/nginx/access-streaming.log;
    error_log /var/log/nginx/error-streaming.log;
    server {
        listen      80;
        root /var/www/html;
        # RTMP statistics in XML
        location /stat {
            # Copy stat.xsl put to root directory
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }
    }
}

Thông tin cấu hình tệp cấu như sau:

Khối rtmp { }

  • listen port với 1935 (port default)
  • application với đường dẫn ảo là vod
  • Đường dẫn thư mục chứa các tệp video để phát là “/var/mp4s”.

Khi đó muốn sử dụng chúng ta truy cập kiểu như “rtmp://192.168.10.113:1935/vod/video-name.mp4”

Step2: Tạo thư mục chứa và copy tệp tin video

mkdir /var/mp4s
cd /var/mp4s

Chúng ta download hoặc copy một tin video vào thư mục /var/mp4s

3.2. Sử dụng Video Player để chạy video

Chúng ta có thể sử dụng một trình phát video có hỗ trợ giao thức rtmp để phát.

Ở đây, chúng ta có thể sử dụng VLC player

Mở player VLC → Nhấn Media → Chọn “Open Network Stream ..”. Sau đó vào thông tin đường dẫn tệp video vod với rtmp://192.168.10.113:1935/vod/vod.mp4

Streaming Media với Nginx và nginx-rtmp module

Cuối cùng nhấn Play để phát video.

4. VOD qua HLS

Chúng ta sẽ cấu hình để cho phép video player phát video qua giao thức HLS (Apple HTTP Live Streaming).

4.1 Cài đặt Ffmpeg

Sử dụng script Installing FFmpeg on Linux

Nếu chỉ sử dụng một thư viện có sẵn thì cài đặt đơn giản như sau trên CentOS

yum install ffmpeg ffmpeg-devel ffmpeg-libpostproc

Trong phần Giới thiệu FFmpeg, cũng đã giới thiệu và cách sử dụng cơ bản FFmpeg.

4.2 Convert tệp vod.mp4 sang HLS

Trước khi convert, chúng ta thực hiện copy/download tệp tin video lên server (ví dụ tệp tin là vod.mp4)

Sử dụng lệnh ffmpeg để convert vod.mp4 sang định dạng HLS (Apache HTTP Live Stream)

ffmpeg -i video.mp4 -profile:v baseline -level 3.0 -s 720x400 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls /tmp/index.m3u8

Trong đó:

  • vod.mp4 là tệp video đầu vào cần convert
  • index.m3u8 là tệp tin master đầu ra của HLS playlist
  • và một số tham số tùy chọn cho độ phân giải, thời gian phân đoạn, …

4.3 Cấu hình nginx

Ở đây, Chúng ta sẽ cấu hình nginx làm web server, đồng thời cấu hình làm media server.

user nginx;
worker_processes  1;
error_log  logs/rtmp_error.log debug;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    #serve the player for HLS
    server {
        listen       80;
        root /var/www/html;
        server_name  localhost;
        location /hls {
            # CORS setup
            add_header 'Access-Control-Allow-Origin' '*' always;
            add_header 'Access-Control-Expose-Headers' 'Content-Length';
            # Allow CORS preflight requests
            if ($request_method = 'OPTIONS') {
                add_header 'Access-Control-Allow-Origin' '*';
                add_header 'Access-Control-Max-Age' 1728000;
                add_header 'Content-Type' 'text/plain charset=UTF-8';
                add_header 'Content-Length' 0;
                return 204;
            }
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            add_header Cache-Control no-cache;
            alias /tmp;
        }
    }
}
  • Listen với port default 80
  • URL của web server sẽ là http://192.168.10.113/; với root directory là /var/www/html
  • URL của stream server sẽ là http://192.168.10.113/hls
  • Playlist của stream là tệp tin m3u8, với các segment là tệp ts
  • Đường dẫn thư mục chứa các playlist là /tmp

4.4 Phát video trên web browser với videojs

Chúng ta có thể phát video trên web browser, mà sử dụng flash player như Flowplayer hay Jwplayer. Trong trường hợp này, tôi sẽ giới thiệu sử dụng videojs player cho phát video trên web browser.

Link về videojs: https://github.com/videojs/http-streaming

Trên Nginx web server, chúng ta sẽ tạo tệp tin index.html với nội dung sau vào root directory:

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Videojs-HLS embed</title>
  
  <!--

  Uses the latest versions of video.js and videojs-http-streaming.

  To use specific versions, please change the URLs to the form:

  <link href="https://unpkg.com/video.js@6.7.1/dist/video-js.css" rel="stylesheet">
  <script src="https://unpkg.com/video.js@6.7.1/dist/video.js"></script>
  <script src="https://unpkg.com/@videojs/http-streaming@0.9.0/dist/videojs-http-streaming.js"></script>

  -->

  <link href="https://unpkg.com/video.js/dist/video-js.css" rel="stylesheet">
<style>
.center {
    margin-left: auto;
    margin-right: auto;
    display: block
}
</style>
</head>
<body>
<!--  <h1>Video.js Example Embed</h1> -->

  <video-js id="my_video_1" class="vjs-default-skin center" controls preload="auto" width="720" height="400" poster="../images/bbb-poster.jpg">
    <source src="http://192.168.10.113/hls/index.m3u8" type="application/x-mpegURL">
  </video-js>

  <script src="https://unpkg.com/video.js/dist/video.js"></script>
  <script src="https://unpkg.com/@videojs/http-streaming/dist/videojs-http-streaming.js"></script>

  <script>
    var player = videojs('my_video_1');
  </script>

</body>
</html>

Trong tệp index.html chúng ta sẽ vào đường dẫn chứa tệp tin playlist mà đã convert ở Step2. Khi đó vào thông tin đường dẫn URL ở đây là: http://192.168.10.113/hls/index.m3u8

Cuối cùng duyệt http://192.168.10.113/index.html và xem kết quả

Streaming Media với Nginx và nginx-rtmp module

Chúng ta thấy videojs cho khung nhìn tuyệt đẹp.

5. Cấu hình Live Streaming

Live Streaming là tính năng chính của nginx-rtmp module, và quá trình thực hiện live streaming sẽ qua giao thức RTMP.

Các bước cho thực hiện quá trình Live Streaming như sau:

5.1 Cấu hình Nginx để làm live streaming server

Step1: Tạo tệp tin nginx.conf với nội dung sau

user nginx;
pid /var/run/nginx.pid;
events {
    worker_connections 1024;
}
#RTMP configuration
rtmp {
    server {
        listen 1935;
 
        application live {
            live on;
            # Push the stream to the local HLS application
            push rtmp://localhost:1935/hls;
        }
 	
        application hls {
            live on;
 
            # Only accept publishing from localhost.
            allow publish 127.0.0.1;
            deny publish all;
            
            # Streams as HLS
            hls on;
            hls_path /tmp/hls;
            hls_fragment 3s;
            hls_nested on;
            hls_fragment_naming system;
        }
    }
}

#HTTP Configuration
http {
    sendfile off;
    tcp_nopush on;
    aio on;
    directio 512;
    default_type application/octet-stream;

    server {
        listen 80;
        root /var/www/html;
        server_name localhost;
        location /hls {
            # Disable cache
            add_header 'Cache-Control' 'no-cache';

            # CORS setup
            add_header 'Access-Control-Allow-Origin' '*' always;
            add_header 'Access-Control-Expose-Headers' 'Content-Length';

            # allow CORS preflight requests
            if ($request_method = 'OPTIONS') {
                add_header 'Access-Control-Allow-Origin' '*';
                add_header 'Access-Control-Max-Age' 1728000;
                add_header 'Content-Type' 'text/plain charset=UTF-8';
                add_header 'Content-Length' 0;
                return 204;
            }
            # MIME type for HLS
            types {
                application/dash+xml mpd;
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }

            alias /tmp/hls;
        }
        # RTMP statistics in XML
        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }
    }
}

Ở đây, chúng ta sẽ cấu hình nginx làm nhiệm vụ là web server và live streaming server.

  • Block http { } : Dựng nginx làm web server với mục đích thống kê số liệu, cho phép người dùng xem live streaming. Nếu không cần dùng các chức năng này, chúng ta có thể qua bỏ block này. Quá trình tạo server cho xem live streaming có thể thực hiện ở server khác.
  • Block rtmp { } : Dựng nginx làm live streaming server, để thực hiện quá trình thu phát live streaming từ client và publish luồng

Diễn giải một số directive cho cấu hình nginx trên như sau:

  • live on: Bật tính năng live stream.
  • push rtmp://localhost:1935/hls : Thực hiện push streaming vào /hls
  • allow publish 127.0.0.1; Khai báo server từ xa được phép push stream đến hệ thống. Ở đây chúng ta sẽ khai báo localhost được phép push stream đến hệ thống localhost. Kết hợp với deny publish all, nhằm hạn chế remote server nào đó push stream vào hệ thống của mình.
  • deny publish all;
  • hls on: Bật chế độ HLS, cho phép client có thể sử dụng chế độ này
  • hls_path /tmp/hls: Thiết lập đường dẫn thư mục chứa playlist và fragments của HLS. Nếu không chỉ định thì nó tự động tạo.
  • hls_fragment 3s: Thực hiện tạo mỗi fragment với 03 second (fragment *.ts). Thường thì mỗi tệp ts được sinh ra gồm 3s + time decode)
  • hls_nested on; Bật chế độ lồng. Dùng để tạo ra một subdirectory của “hls_path” cho mỗi stream. Playlist và fragments sẽ được tạo ra cùng thư mục đó. Ví dụ /tmp/hls/ stream-name. Mặc định chế độ này là off, vì vậy stream sẽ tạo ra playlist và fragments ở thư mục của của đường dẫn hls_path, với kiểu tên là stream-name-..ts và stream-name.m3u8
  • hls_fragment_naming system: Tên của fragment, có thể định dạng với các kiểu “system, sequential, timestamp”

Step2: Tạo thư mục và copy tệp statistics dạng xml

mkdir /tmp/hls
chown -R nginx:nginx
copy /opt/nginx/nginx-rtmp-module/stat.xsl /var/www/html
systemctl restart nginx

Step3: Tạo tệp tin index.html

Chúng ta thực hiện tạo tệp tin tĩnh index.html để tạo web player cho xem live streaming qua web browser

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Videojs-HLS embed</title>
  
  <!--

  Uses the latest versions of video.js and videojs-http-streaming.

  To use specific versions, please change the URLs to the form:

  <link href="https://unpkg.com/video.js@6.7.1/dist/video-js.css" rel="stylesheet">
  <script src="https://unpkg.com/video.js@6.7.1/dist/video.js"></script>
  <script src="https://unpkg.com/@videojs/http-streaming@0.9.0/dist/videojs-http-streaming.js"></script>

  -->

  <link href="https://unpkg.com/video.js/dist/video-js.css" rel="stylesheet">
<style>
.center {
    margin-left: auto;
    margin-right: auto;
    display: block
}
</style>
</head>
<body>
<!--  <h1>Video.js Example Embed</h1> -->

  <video-js id="my_video_1" class="vjs-default-skin center" controls preload="auto" width="720" height="400" poster="../images/bbb-poster.jpg">
    <source src="http://192.168.10.113/hls/stream/index.m3u8" type="application/x-mpegURL">
  </video-js>

  <script src="https://unpkg.com/video.js/dist/video.js"></script>
  <script src="https://unpkg.com/@videojs/http-streaming/dist/videojs-http-streaming.js"></script>

  <script>
    var player = videojs('my_video_1');
  </script>

</body>
</html>

Note: Thay đường dẫn http://192.168.10.113/hls/stream/index.m3u8 với đường dẫn chứa thông tin tệp stream phù hợp.

5.2 Thực hiện live streaming từ mobile

Sử dụng một phần mềm live streaming bất kỳ, hỗ trợ giao thức RTMP. Ở đây, tôi sử dụng android nên cài đặt soft Larix Broadcaster

  • Mở Larix Broadcaster → Nhấn biểu tượng Setting → Connections → Sau đó vào các thông tin kết nối đến Live Streaming server.

rtmp://192.168.10.113:1935/live/stream

(Với tên “stream” là tên bất kỳ do mình đặt. Tên này sau khi lên live server, tương ứng với biến $name)

  • Cuối cùng nhấn vào biểu tượng quay phát để live streaming thôi

5.3 Kiểm tra quá trình Live Streaming

Step1: Xem thông tin tệp streaming trên server

Dùng lệnh để list xem quá trình sinh ra luồng stream với tệp playlist và fragments

Streaming Media với Nginx và nginx-rtmp module

Step2: Thực hiện xem live stream qua web browser

Mở web browser và truy cập http://192.168.10.113/ để xem live streaming

Streaming Media với Nginx và nginx-rtmp module

Step3: Xem thống kê số liệu streaming

Truy cập http://192.168.10.113/stat

Streaming Media với Nginx và nginx-rtmp module

TopDev via Github

Product Manager được sinh ra để làm gì?

Chỉ mới 8 giờ sáng ngày 23 tháng 2 tại Gala Center, đã có hơn 250 khán giả có mặt từ sớm để tham gia chương trình Inside The Mind Of A Product Manager Experimentation – Driven Product Development do VNGTopDev đồng tổ chức vào ngày 23/2. Đây là sự kiện thứ hai trong chuỗi sự kiện về Product được diễn ra thường xuyên trong cộng đồng tech tại Việt Nam. Chương trình không chỉ cung cấp những kiến thức về Product mà còn là một diễn đàn giúp kết nối cộng đồng công nghệ và startup lại một gần hơn, cùng nhau nhìn lại những case study để rút ra kinh nghiệm quý báu nhất cho chính doanh nghiệp của mình.

Sự kiện hôm nay có sự góp mặt của 4 chuyên gia hàng đầu trong lĩnh vực công nghệ, Anh VŨ MINH TRÍ hiện là Vice President của VNG & CEO của VINADATA, anh LÊ THIẾT BẢO của Omni Channel Senior Director của Nguyen Kim Trading JSC, Anh LÊ ANH QUANG (Quang Phowr) Head of UX/UI của Be Group, và Anh TRỊNH XUÂN TUÂN Founder & CEO của NextSmarty. Những chuyên gia đã chia sẻ rất sâu những góc nhìn cực kỳ giá trị mà chúng ta khó có thể tìm kiếm được cho khán giả trong buổi hội thảo ngày hôm nay.

Product manager được sinh ra để làm gì?

Anh VŨ MINH TRÍ hiện là Vice President của VNG & CEO của VINADATA chia sẻ, một product manager cần phải xác định rõ hai câu hỏi, Product Manager được sinh ra để làm gì? Giải pháp của bạn giải quyết được vấn đề gì? Những sản phẩm thành công là giải quyết được vấn đề cho nhiều người. Có thể thấy, đằng sau thành công của 10 công ty toàn cầu như Apple, Google, Microsoft, nằm chính ở việc giải quyết được vấn đề cho hằng tỷ người dùng. Phải xác định rõ được các Feature Function. Nếu không thấy đươc điều này Product Manager sẽ rất dễ dàng bị mất lửa.

Một ví dụ dễ thấy nhất chính là iCloud, được xem một trong những platform tăng trưởng nhanh nhất trong những năm vừa qua. Việc họ tự đưa ra problem rồi tạo ra giải pháp cũng là một cách trong việc phát triển Product. Apple tự tạo ra vấn đề người dùng không đủ dung lượng để chứa dữ liệu của mình, sau đó dùng iCloud phục vụ giải quyết nhu cầu cho người dùng bằng việc cung cấp giải pháp kết nối chiếc điện thoại với tất cả những nội dung của mình.

Hiểu DATA! Chiếc chìa khóa thành công của mọi sản phẩm

Ngoài bức tranh tổng quan về của thế giới Product Manager mà anh Vũ Minh Trí trình bày, những diễn giả khác cũng chia sẻ nhiều về các phương thức sử dụng dữ liệu cho các cuộc thử nghiệm nhằm (experimentation) cải thiện và tối ưu trải nghiệm người dùng một cách tốt nhất. Anh LÊ ANH QUANG Head of UX/UI của Be Group cũng chia sẻ nhiều về việc tìm hiểu từng người dùng một để từ đó có dữ liệu và tối ưu từ những thứ nhỏ nhất trên ứng dụng, chẳng như cải tiến font chữ chi tiết và cách thức hiện triển khai đến những người dùng cuối (end-user).

Anh TRỊNH XUÂN TUÂN Founder & CEO của NextSmarty chia sẻ vấn đề mà nhiều doanh nghiệp E-commerce đang gặp phải chính là việc conversion rate đang giảm, và bounce rate lại ngày càng tăng. Anh giải thích, lý do chính là vì nhiều bên vẫn chưa quan tâm đến hành vi người dùng, chưa đầu tư vào việc hiểu Data, thay vào đó họ lại chi tiền quá nhiều cho việc digital marketing nhưng chưa thật sự tối ưu được hiệu quả và chi phí.

Tiếp đến, anh LÊ THIẾT BẢO hiện là Omni Channel Senior Director của Nguyen Kim Trading JSC nói nhiều về những case study thực tế từ Nguyễn Kim trong việc ứng dụng Big Data dùng để trải nghiệm sản phẩm. Anh chia sẻ, ngày trước Nguyễn Kim từng có rất nhiều data nhưng không biết làm gì với nó và cũng có rất nhiều bên bán lẻ cũng gặp tình trạng tương tự. Đa phần họ chỉ đơn thuần dựa vào kinh nghiệm cá nhân rồi từ đó mua traffic vô tội vạ trong các chiến dịch đẩy doanh số, dẫn tới việc chi nhiều nhưng lại không thật sự hiệu quả. Anh cũng trình bày nhiều về việc tạo ra một hệ thống customer data input để phân biệt rõ hành vi người dùng cũng như lưu lại những lịch sử tương tác của khách hàng mà Nguyễn Kim đang ứng dụng, từ đó mới có thể tạo ra được những phương pháp tiếp cận khách hàng hiệu quả hơn, cá nhân hóa hơn.

Kết thúc chương trình, tất cả các diễn giả đã cùng ngồi lại qua một Panel Discussion cực kỳ hấp dẫn để giải đáp các câu hỏi của toàn bộ các khán giả tại sự kiện. Chương trình cũng khép lại với nhiều kiến thức và kinh nghiệm cực kỳ quý giá cho người tham dự chương trình. Chắc rằng, với sự trở lại sắp tới chuỗi sự kiện “Inside The Mind Of A Product Manager” sẽ còn làm khán giả bất ngờ với nhiều nội dung bất ngờ hơn nữa.

Tham khảo thêm các vị trí tuyển dụng product manager lương cao cho bạn.

Top 5 công cụ mã nguồn mở dành cho MySQL administrator

top-5-cong-cu-ma-nguon-mo-danh-cho-mysql-administrator

Sử dụng những công cụ tuyệt vời này để cải thiện CLI và web admin, SQL queries, schema migration, sao chép và phục hồi môi trường MySQL open source của bạn.

Đối với các database administrators (DBA), việc giữ cho cơ sở dữ liệu chạy ở tốc độ tối đa có thể giống như con quay: tốc độ, tập trung, phản ứng nhanh với cái đầu lạnh và thỉnh thoảng hãy nhờ vả từ người xem hữu ích. Database là trung tâm của sự thành công của hầu hết các ứng dụng. Bởi vì DBA chịu trách nhiệm về dữ liệu của tổ chức, việc tìm kiếm các công cụ đáng tin cậy giúp họ hợp lý hóa quá trình quản lý cơ sở dữ liệu và giảm bớt các công việc bảo trì hàng ngày là rất cần thiết. DBAs cần những công cụ đủ tốt để giữ cho hệ thống của họ hoạt động trơn tru.

Vậy các công cụ đáng tin cậy cho các MySQL administrator là gì? Ở đây tôi chia sẻ 5 công cụ mã nguồn mở hàng đầu các MySQL administrator và công dụng của chúng trong việc hỗ trợ các công việc quản trị hàng ngày MySQL. Đối với mỗi công cụ, tôi đã cung cấp liên kết tới kho GitHub và liệt kê số lượng GitHub star tại thời điểm viết.

  Tại sao không bao giờ nên sử dụng utf8 trong MySQL?
  MySQL ngoại truyện

Mycli

Dự án Mycli cung cấp MySQL tự động hoàn thành dòng lệnh và đánh dấu cú pháp. Đây là một trong những công cụ phổ biến nhất của MySQL.

Các hạn chế về an ninh chẳng hạn như jump host và xác thực hai yếu tố để lại nhiều MySQL DBA với lệnh chỉ truy cập vào hệ thống của họ. Trong những trường hợp như vậy, các công cụ GUI yêu thích giống như MySQL Workbench, Monyog, và các công cụ khác không phải là một lựa chọn.

Tại dòng lệnh, ta sẽ tốn nhiều thời gian tại vùng light-on-black terminal. Vì vậy, một trong những điều tuyệt vời về Mycli là sự phong phú của cú pháp. Điều này cho phép bạn, ví dụ, để trực quan seperate function và các nhà khai thác từ chuỗi query trong mệnh đề WHERE. Đối với một truy vấn ngắn, dòng đơn không phải là một vấn đề lớn, nhưng nó sẽ thay đổi khi bạn làm việc với các query thực hiện các JOIN operation trên nhiều hơn một vài bảng. Tôi đang dùng JOIN bằng cách sử dụng các cột index? Tôi có thể lọc bằng cách sử dụng ký tự đại diện trong mệnh đề WHERE? Mycli hỗ trợ các query với nhiều dòng và được đánh dấu cú pháp, điều này có nghĩa là bạn có thể tìm hiểu về các phần quan trọng nhất khi xem xét hoặc tối ưu hóa query. Bạn có thể chọn từ một số cú pháp làm nổi bật hay tạo ra một số của riêng bạn.

Các tính năng đáng giá khác của Mycli thực sự thông minh. Nó này cho phép bạn chọn tên bảng và cột từ danh sách bằng cách nhập chỉ vài ký tự đầu tiên. Đầu vào hiện tại của bạn không bị bỏ qua để chạy lệnh SHOW CREATE TABLE bởi vì bạn quên tên cột mà bạn muốn xuất hiện trong mệnh đề WHERE!

Cách thức hoạt động của Mycli

Với Mycli, bạn có thể ẩn danh các query ưa thích bằng việc sử dụng sử dụng \ fs, ví dụ: \ fs myAlias myQuery. Điều này rất tiện dụng, vì bạn có thể thực hiện tquery bằng cách sử dụng \ f myAlias bất cứ khi nào cần thiết.

Dự án Mycli sử dụng BSD 3 license. Với sự 44 comtributor, 1.2k cam kết, và 5k sao.

Gh-ost

Nếu như 99% người dùng của MySQL DBA phải đối mặt với việc thay đổi đối với bảng MySQL trong khi vẫn lo sợ tác động lên quá trình làm việc thì bạn nên cân nhắc sử dụng Gh-ost (GitHub Online Schema Migration). Gh-ost cung cấp các thay đổi lược đồ MySQL mà không blocking write, hay không sử dụng các trigger, với khả năng tạm dừng và tiếp tục quá trình di chuyển!

Tại sao việc này lại quan trọng đến vậy? Vì MySQL 5.6 được vận chuyển với ALTER TABLE mới … ALGORITHM = INPLACE DDL (Data Definition Language), có thể chỉnh sửa một bảng mà không blocking wite cho các hoạt động chung như thêm một index (B-tree). Tuy nhiên, vẫn còn một vài điều kiện mà ( DML statement) bị chặn, đáng chú ý nhất là việc bổ sung một index ĐẦY ĐỦ, mã hoá không gian bảng và chuyển đổi thành định dạng cột.

Một số công cụ thay đổi giản đồ trực tuyến phổ biến khác, chẳng hạn như trình thay đổi giản đồ-trực tuyến Percona, bằng cách thực hiện một bộ ba trình trigger (INSERT, UPDATE và DELETE) trên máy chủ để giữ một bảng sao chép để đồng bộ với sự thay đổi. Điều này giới thiệu một hình phạt hiệu suất nhỏ nhờ vào viết khuếch đại, nhưng đáng kể hơn yêu cầu bảy trường hợp khóa metadata. Điều này có hiệu quả ngăn chặn DML Data Manipulation Language).

Vì Gh-ost hoạt động sử dụng binary log, nó không dễ bị ảnh hưởng bởi những hạn chế  trigger-based. Cuối cùng, Gh-ost có thể kích hoạt hoạt động một cách hiệu quả đến mức không, cho phép bạn tạm dừng quá trình di chuyển lược đồ một thời gian nếu máy chủ của bạn bắt đầu xảy ra xung đột và tiếp tục khi bubble vẫn hoạt động.

Các chế độ vận hành của Gh-ost

Vậy Gh-ost hoạt động như thế nào? Mặc định, Gh-ost kết nối với một bản sao (slave), xác định chủ, và di chuyển trên máy chủ. Nó nhận các thay đổi trên một bản sao cho bảng nguồn trong binlog_format = ROW, phân tích cú pháp và chuyển đổi các câu lệnh này để được thực hiện lại trên shadow table của Master. Nó theo dõi việc đếm các hàng trên bản sao và xác định khi nào là thời gian để thực hiện một atomic cutover (bảng chuyển đổi).

Gh-ost cung cấp một chế độ thay thế nơi bạn thực hiện việc di chuyển trực tiếp trên master (cho dù nó có slave hay không), đọc lại các sự kiện binlog_format=ROW của Master, và sau đó áp dụng lại chúng vào sahdow table.

Gh-ost general flow.

Tùy chọn cuối cùng cho phép di chuyển chỉ trên bản sao mà không ảnh hưởng đến master, vì vậy bạn có thể thử nghiệm hoặc bằng cách khác xác thực việc di chuyển

Lưu ý rằng nếu lược đồ của bạn ở nước ngoài, thì Gh-ost có thể không hoạt động trơn tru, vì không được hỗ trợ.

Lưu ý rằng oak-online-alter-table là tiền thân của Gh-ost. Bạn có thể đọc một so sánh giữa Gh-ost và pt-online-schema-change performance của Peter Zaitsev, CEO của Percona, cùng với phản hồi từ Shlomi Noach, tác giả và người duy trì bộ công cụ OAK và Gh-ost.

Dự án Gh-ost sử dụng MIT license. Với 29 contributor, gần 1k cam kết, và 3k sao.

PhpMyAdmin

Một trong những dự án chạy dài hơi và trưởng thành nhất trong số các công cụ MySQL là công cụ PhpMyAdmin cho phép quản lý MySQL qua web. phpMyAdmin cho phép DBA để duyệt và chỉnh sửa các đối tượng cơ sở dữ liệu MySQL: database, bảng biểu, view, field, và các index. Có các tùy chọn để thực hiện xuất dữ liệu bằng cách sử dụng một tá định dạng, sửa đổi người dùng MySQL và đặc quyền của họ, và – yêu thích của tôi-thực hiện các ad-hoc query.

PhpMyAdmin status page showing questions, connections/processes, and traffic graphs.
Giao diệnPhpMyAdmin bắt đầu.

Bạn cũng sẽ tìm thấy tab Status với những câu hỏi, kết nối/quy trình và lưu lượng truy cập mạng cho trường hợp cơ sở dữ liệu cho phép, cùng với tab Advisor cho bạn thấy danh sách các vấn đề về hiệu năng có thể cùng với các đề xuất khắc phục.

PhpMyAdmin sử dụng GPLv2 license. Đây là một dự án khổng lồ với hơn 800 contributor, 112k cam kết tuyệt vời, và 2.7k sao. Bản giới thiệu trực tuyến hiện có tại https://demo.phpmyadmin.net/master-config/

Sqlcheck

SQL anti-pattern làm chậm các query, nhưng thường phải yêu cầu DBA có kinh nghiệm và nghiên cứu phát triển qua mã để xác định và giải quyết chúng. Sqlcheck phản ánh những nỗ lực của Joy Arulraj để soạn thảo cuốn sách “SQL Anti-patterns: Avoiding the Pitfalls of Database Programming” của Bill Karwin. Karwin phân loại thành bốn loại anti-pattern:

  1. Thiết kế cơ sở dữ liệu hợp lý
  2. Thiết kế cơ sở dữ liệu vật lý
  3. Query
  4. Phát triển ứng dụng
Sqlcheck khi làm việc.

Sqlcheck trở thành mục tiêu tại nhiều mức độ rủi ro, được phân loại là rủi ro thấp, trung bình hoặc cao. Điều này hữu ích nếu danh sách các anti-pattern của bạn lớn, vì bạn có thể ưu tiên các truy vấn có tác động hiệu quả lớn nhất. Tất cả những gì bạn cần làm để bắt đầu là thu thập một danh sách các truy vấn riêng biệt của bạn vào một tệp tin và chuyển chúng như một đối số cho công cụ.

Tôi đã dùng mẫu lấy từ môi trường PMM Demo để tạo ra kết quả sau:

[michael@fedora ~]$ sqlcheck —file_name PMMDemoQueries.txt
+————————————————————————-+
|                   SQLCHECK                      |
+————————————————————————-+
> RISK LEVEL    :: ALL ANTI-PATTERNS
> SQL FILE NAME :: output
> COLOR MODE    :: ENABLED
> VERBOSE MODE  :: DISABLED
> DELIMITER     :: ;
————————————————————————-
==================== Results ===================

————————————————————————-
SQL Statement: select table_schema, table_name, table_type, ifnull(engine, ‘none’) as engine,
ifnull(version, ‘0’) as version, ifnull(row_format, ‘none’) as row_format,
ifnull(table_rows, ‘0’) as table_rows, ifnull(data_length, ‘0’) as data_length,
ifnull(index_length, ‘0’) as index_length, ifnull(data_free, ‘0’) as data_free,
ifnull(create_options, ‘none’) as create_options from information_schema.tables
where table_schema = ‘innodb_small’;
[output]: (HINTS) NULL Usage
[Matching Expression: null]
...
==================== Summary ===================
All Anti-Patterns and Hints  :: 7
>  High Risk   :: 0
>  Medium Risk :: 0
>  Low Risk    :: 2
>  Hints       :: 5

Sqlcheck được bao gồm trong Apache 2.0 license. Dự án có năm người đóng góp, 187 thành viên, và 1,4k sao.

Orchestrator

Orchestrator là công cụ quản lý sẵn có với khả năng nhân rộng cao. Nó cung cấp khả năng để tìm ra replication topology của một môi trường MySQL bằng cách thu thập dữ liệu thay đổi của chuỗi để xác định các master và slave. Nó cũng có thể được sử dụng để tái cấu trúc lại replication topology thông qua GUI, cung cấp một giao diện drag-and-drop để thúc đẩy một slave cho một master. Quá trình vận hành này rất an toàn. Trong thực tế, Orchestrator từ chối bất kỳ hoạt động bất hợp pháp để không phá vỡ hệ thống của bạn.

Cuối cùng, Orchestrator có thể hỗ trợ khôi phục khi các nodes bị lỗi, vì nó sử dụng khái niệm về trạng thái để lựa chọn phương pháp khôi phục chính xác và quyết định quy trình quảng bá chính phù hợp để áp dụng.

Orchestrator là một công cụ khác được cung cấp bởi Shlomi Noach tại GitHub. Nó được bao gồm trong Apache 2.0 License. Orchestrator có 34 contributor, 2,780 cam kết, và 900 sao.

Orchestrator cung cấp một cửa sổ làm việc vào MySQL để  nhân rộng và phục hồi.

“Keeping the plates spinning”

Percona Monitoring and Management (PMM) đảm nhiệm công việc làm nổi bật các khu vực cần sự chú ý và giúp quản trị cơ sở dữ liệu xác định và giải quyết các vấn đề cơ sở dữ liệu.

PMM kết hợp một số công cụ mã nguồn mở tốt nhất, bao gồm Orchestrator, để cung cấp một cơ sở dữ liệu và quản lý cơ sở dữ liệu toàn diện. Đồ họa của nó giúp dễ dàng đồng hóa những visual clues với trạng thái của các máy chủ dữ liệu theo thời gian, và hỗ trợ các máy chủ MySQL, MariaDB, và MongoDB. Kiểm tra bản public demo của chúng tôi!

Giống như 5 công cụ hàng đầu của tôi và tất cả phần mềm của Percona, PMM hoàn toàn miễn phí và với mã nguồn mở có thể tải xuống từ trang website Percona hoặc từ GitHub.

Với công cụ tôi đã mô tả một khía cạnh khác vai trò của quản trị viên MySQL. Chúng góp phần vào kho vũ khí của bạn các công cụ quản lý cơ sở dữ liệu và cho phép bạn khai thác kinh nghiệm và kỹ năng của những contributor cho các dự án phổ biến. Chúng hoàn toàn miễn phí với mã nguồn mở và có thể được điều chỉnh cho phù hợp với nhu cầu của môi trường của bạn nếu cần thiết, hoặc bạn có thể sử dụng chúng mà không sửa đổi. Nếu bạn chưa khám phá chúng, tôi khuyên bạn hãy xem xét kỹ hơn về những phần mềm này nếu chúng cho bạn ưu thế hơn các phương pháp và công cụ hiện tại hay không.

Bài viết gốc tại Infoworld

Tham khảo thêm các vị trí tuyển dụng My SQL lương cao tại Topdev.

10 lí do để học Scala và FP

Một trong những câu hỏi mà độc giả của tôi thường hỏi là, “Các nhà phát triển Java có nên học Scala không? Scala có tương lai tốt hơn Java không? Tại sao các nhà phát triển Java nên học Scala?”.

Ở đây, chúng ta sẽ nói về những lý do khuyến khích các nhà phát triển Java học Scala.

Đó là ngôn ngữ JVM được lựa chọn, để lại Groovy và Kotlin phía sau, và được ưa thích như ngôn ngữ mà mọi người muốn viết nhất.

Scala có một số điểm mạnh, trong đó có thể nhắc tới là việc nó là một ngôn ngữ đa mô hình (multi-paradigm language). Nó không chỉ giải quyết được nhiều vấn đề của Java ví dụ: bất biến với các từ khóa val và case class.

Hơn nữa, dù nó có sự lưu loát và linh hoạt của các ngôn ngữ như Python, Scala vẫn là một ngôn ngữ statically typed. Điều này giúp bạn ít phạm phải sai lầm hơn.

Tôi chắc rằng các nhà phát triển Scala sẽ có thêm nhiều lý do vào danh sách này, nhưng từ góc nhìn của Java, tôi nghĩ Scala chắc chắn có những lý do sau đây để thu hút các nhà phát triển Java.

Ngôn ngữ đa mô hình – Multi-Paradigm Language

Scala có một chút khác biệt so với Java, vì nó hỗ trợ hai mô hình lập trình: lập trình hướng đối tượng (OOP) và lập trình hàm (FP). Để nâng cao kỹ năng lập trình của bạn, tôi khuyên nên học ít nhất một ngôn ngữ từ các mô hình khác nhau, ví dụ: imperative, logical, functional và OOP. Scala sẽ cung cấp cho bạn một cơ hội để khám phá cả functional và OOP với nhau.

Cuốn Pragmatic Programmer cũng khuyên bạn nên học một ngôn ngữ lập trình mới mỗi năm. Scala cho phép bạn define type với cả data attribute (với các class hoạt động như C++/Java class) và behavior attribute (với các đặc điểm tương ứng với Java interface).

Cũng giống như các ngôn ngữ lập trình chức năng khác (functional programming language), Scala function là hàm hạng nhất (có nghĩa là bạn có thể chuyển chúng thành giá trị) và Scala cũng hỗ trợ các hàm ẩn danh và currying (một phần ứng dụng của các hàm đa đối số).

Sự kết hợp các tính năng này giúp bạn có thể viết các chương trình Scala khá ngắn gọn và thanh lịch. Đây cũng chính là điểm mạnh nhất của Scala, mà Java 8 cũng đã cố gắng bắt chước theo bằng cách giới thiệu các biểu thức lambda, nhưng nó vẫn còn cách Scala một khoản khá xa.

Khả năng tương tác với Java

Theo ý kiến ​​của tôi, sự lựa chọn phát triển cho Scala với khả năng tương tác với Java là điều tốt nhất từng xảy ra với ngôn ngữ này. Scala chạy trên Java Virtual Machine (JVM) và có thể tương thích với code Java. Điều này có nghĩa là các nhà phát triển có thể sử dụng các thư viện Java trực tiếp từ code Scala.

Do đó mà đối với việc các nhà lập trình Java chuyển qua sử dụng Scala thì đây là cách hoàn hảo để tận dụng những năm kinh nghiệm của họ trong lập trình.

Nó cũng có thể gọi Scala code từ Java, và bạn sẽ vẫn dễ dàng viết một phần chương trình trong Scala và phần còn lại trong Java.

Tóm lại, khả năng tương tác với Java mang lại cho Scala tiềm năng to lớn để trở thành ngôn ngữ lập trình mạnh nhất, vì rất nhiều code của thế giới được viết bằng Java và rất nhiều nhà phát triển đang làm việc trên Java.

Các phương pháp hay nhất được đưa vào trong ngôn ngữ

Một điều mà bạn có thể không biết về Scala là nó được phát triển ban đầu tại trường đại học Thụy Sĩ EPFL nhằm với nỗ lực áp dụng các innovation ​​gần đây trong nghiên cứu ngôn ngữ lập trình.

Một số các phương pháp và cấu trúc tốt nhất được xây dựng vào trong Scala, ví dụ: val tuyên bố bất biến mức cao nhất, điều này sẽ tốt hơn nhiều so với việc từ khóa cuối cùng bị quá tải trong Java.

Nó cũng có case classes, giúp dễ dàng tạo ra các class không thay đổi (immutable) trong Scala.

Khả năng biểu cảm – Expressiveness

Khi bạn so sánh Scala với Java, Scala chắc chắn đạt điểm số tốt hơn.

Scala vốn rất biểu cảm. Ngoài ra, nó còn có hàng tấn code thực sự đẹp và hữu ích được viết bằng Scala. Điều này đang thu hút ngày càng nhiều nhà phát triển Java học Scala, những người vốn thích code đẹp.

Để cho bạn dễ hình dùng hơn, đây là chương trình đếm chữ được viết bằng cả Java và Scala, bạn có thể thấy sự khác biệt về tính biểu cảm của chúng.

Scala đã đạt được điều mà Java phải thực hiện tới hơn 10 dòng chỉ với 1 dòng code duy nhất.

Nhu cầu việc làm cao

Lập trình viên nào không muốn có việc là tốt? Một lý do để học một công nghệ hoặc framework mới luôn là để phát triển sự nghiệp.

Học Scala chắc chắn sẽ làm cho bạn dễ kiếm được công việc hơn. Ngày càng có nhiều công ty đang sử dụng hoặc chuyển sang Scala, bao gồm Twitter, LinkedIn, Foursquare và Quora.

Do Scala là ngôn ngữ có thể mở rộng, bạn có thể mong chờ một tương lai không xa khi giới tài chính và ngân hàng cũng sẽ bắt đầu bám lấy Scale làm giải pháp cho độ trễ trong app của họ.

Nếu mọi thứ đang đi đúng hướng thì Scala sẽ phát triển như là giải pháp thay thế chính cho Java.

Statically Typed

Nói chung, một ngôn ngữ statically typed như Java ngăn các lập trình viên phạm phải nhiều sai lầm, trong khi, với một ngôn ngữ động như Python, bạn chỉ biết về lỗi khi chạy chương trình.

Scala có được những điều tốt nhất của cả hai thế giới. Nó vô cùng năng động, nhưng lại rất kỉ luật. Scala compiler thực sự thông minh và sử dụng type-inference đến mức tối đa của nó.

Scala cung cấp type inference cho các variable và function, tốt hơn nhiều so với type inference bị giới hạn trong Java và C #.

Framework phát triển mạnh mẽ

Một điều bạn có thể biết về hệ sinh thái của Scala là nó đang phát triển nhanh chóng với rất nhiều thư viện và framework tốt.

Các công ty đã bắt đầu sử dụng Scala cũng góp phần vào sự phát triển gần đây của nó như một ngôn ngữ chính thống.

Có một số Scala web framework tốt trên mạng, bao gồm cả Lift và Play.

Akka, một Scala framework khác đã tự thiết lập bộ công cụ và thời gian chạy để xây dựng các ứng dụng với khả năng phân tán và chịu lỗi cao trên JVM.

Scala cũng được sử dụng trong Big Data cùng với Apache Spark, nhờ đó mà tiếp tục thúc đẩy sự chấp nhận từ nhiều nhà phát triển Java quan tâm đến Big Data.

Cộng đồng tích cực

Cùng với ngôn ngữ và các framework liên quan, cộng đồng Scala cũng đang phát triển. Rất nhiều lập trình viên, bao gồm cả các nhà phát triển Java, đang tham gia vào nhóm Scala.

Ngày càng có nhiều IDE đã bắt đầu hỗ trợ cú pháp Scala. Ngoài ra còn có hỗ trợ công cụ xây dựng tuyệt vời trong SBT, Maven và Ant.

Trong các cuộc khảo sát gần đây, Scala cũng được xem là giải pháp thay thế số một cho Java. Theo tôi, để phát triển Scala như là sự thay thế thực sự của Java, nó phải thu hút ngày càng nhiều nhà phát triển Java càng tốt. Đồng thời, việc các tổ chức lớn như Twitter áp dụng Scala chắc chắn sẽ giúp cộng đồng, vì họ có nhiều nguồn lực và ảnh hưởng hơn.

Cú pháp ngắn gọn

Java từ lâu đã bị chỉ trích vì cú pháp nặng nề và dài dòng. Mặc dù nó làm cho Java dễ đọc hơn, giống như tiếng Anh, Scala đã thiết lập một chuẩn mực mới với ngắn gọn và dễ đọc cùng một lúc. Scala compiler, được gọi là scalac làm được nhiều thứ hơn bạn mong đợi. Nó có thể tạo ra toString (), equals (), hasCode () và các thứ khác nữa. Hãy xem xét hai đoạn mã của cùng một class được viết bằng Java và Scala để giúp bạn lựa chọn:

public class Book {
    private final String name;
    private final double price;
    public Star(String name, double price) {
        this.name = name;
        this.price = price;
    }
    @Override
    public int hashCode() {
        int hash = 7;
        hash = 23 * hash + Objects.hashCode(this.name);
        return hash;
    }
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Test other = (Test) obj;
        if (!Objects.equals(this.name, other.name)) {
            return false;
        }
        if (Double.doubleToLongBits(this.price) != Double.doubleToLongBits(other.price)) {
            return false;
        }
        return true;
    }
    @Override
    public String toString() {
        return "Test{" + "name=" + name + ", price=" + price + '}';
    }
}

Bạn có thể viết cũng với yêu cầu như trên bằng Scala:

case class Book(name: String, price: double)

Nhân tiện, bạn cũng có thể sử dụng thư viện Lombok, một trong những thư viện cần thiết cho các nhà phát triển Java, để loại bỏ các code liên quan đến getters, setters, equals, hashCode và toString. Nó có thể tự động tạo ra những cái đó cho bạn.

Tương đối dễ học

Đối với một nhà phát triển Java, việc học một ngôn ngữ lập trình chức năng cổ điển như Haskell hoặc OCaml sẽ khá khó khăn hơn Scala. Nói cách khác, Scala tương đối dễ học vì chức năng OOP của nó.

Trong khi dành thời gian để học những function mới, các nhà phát triển Java vẫn có thể làm việc hiệu quả trong Scala bằng cách tận dụng kiến ​​thức hiện có của họ về OOP. Giống như Java, Scala có cú pháp rõ ràng, thư viện đẹp, tài liệu trực tuyến tốt và rất nhiều người trong ngành sử dụng nó.

Với một cộng đồng ngày càng phát triển của Scala trên các diễn đàn, không khó để tìm ra câu trả lời cho bất kỳ câu hỏi nào của Scala.

Topdev via dzone

DevOps trend – 8 dự đoán trong nhiều năm tới

DevOps đã trở thành một trọng tâm chính và đã định hình thế giới phần mềm trong vài năm qua. Các chuyên gia nói rằng DevOps sẽ là xu hướng chủ đạo và mức độ phổ biến của nó sẽ đạt đến đỉnh cao trong nhiều năm tới.

1. Trỗi dậy trong sự phát triển vượt bậc của AI, Data Science

Với sự trỗi dậy của AI, rất nhiều ứng dụng dựa trên AI ngày càng tăng từ đó khiến cho các team data science tìm kiếm những phương thức Devops để đẩy nhanh quá trình trainning, deploy, quản lý cũng như kiểm tra các model của họ. Với nhu cầu ứng dụng vào doanh nghiệp ngày càng tăng trong deployment và maintain ứng dụng AI & ML, Devops là thành phần không thể thiếu.

2. Infrastructure as a Service (IaaS)

Với các công ty chọn IaaS và dịch vụ dựa trên đám mây để tiết kiệm chi phí, tích hợp giữa các dịch vụ sẽ đóng vai trò lớn hơn vì phần lớn các nhiệm vụ quan trọng sau đó sẽ được xử lý thông qua phần mềm. Đây là nơi DevOps thực hiện các bước xử lý tích hợp giữa các dịch vụ, mang lại sự linh hoạt hơn. Sự kết hợp giữa quản lý cấu hình và công nghệ container sẽ đóng vai trò chính trong việc tự động hóa quản lý cơ sở hạ tầng.

Video thiết kế và triển khai hệ thống video 1 triệu CCU

3. Tập trung vào Functions-as-a-Service (FaaS)

Sự tập trung vào FaaS sẽ tăng lên trong năm 2019 khi nhiều chuyên gia công nghệ cảm thấy yên tâm khi sử dụng các container trong production. Và, các chuyên gia DevOps sẽ có một vai trò quan trọng ở đây trong việc xác định các trường hợp sử dụng liên quan đến FaaS và serverless trong môi trường của họ.

  Làm thế nào để tìm được những "nhân tài" DevOps phù hợp nhất?

4. Nhu cầu CI/CD ngày càng tăng

Việc tăng cường áp dụng kiến trúc đa đám mây sẽ tạo ra cách tiếp cận phân phối liên tục và sử dụng các công nghệ liên quan đến container (như Docker và Kubernetes) trên các doanh nghiệp lớn.

5. Bảo mật liền mạch trong chuỗi quy trình

Cho phép tích hợp bảo mật liền mạch (seamless security integration), thường được gọi là DevSecOps, ngay ở giai đoạn đầu phát triển ứng dụng, DevOps cho phép các nhóm phát triển tạo secure code với tốc độ nhanh hơn. Tích hợp ở các giai đoạn ban đầu cũng hỗ trợ rất tốt trong giai đoạn thử nghiệm trong quy trình làm việc của nhà phát triển trong suốt chu kỳ. Điều này sẽ tiết kiệm thời gian và sẽ hiệu quả hơn không giống như kiểm tra bảo mật ở cuối và tăng cơ hội cung cấp code không có lỗi.

6. Database Development

Các phiên bản framework hoặc ngôn ngữ lập trình luôn cập nhật đòi hỏi version của DB cũng phải tăng version để tương ứng. Vì vậy việc quản lý version DB tương tự như của bên code cũng là một việc cực kỳ quan trọng để tăng performance của phần mềm.

  DevOps – Giải pháp phát hành phần mềm nhanh chóng

7. Điều phối container

Điều phối container đang được xem là một phương tiện hiệu quả để xử lý các vấn đề phức tạp gắn liền với cơ sở hạ tầng. Do đó, các công cụ điều phối container như Docker, Hibernates, v.v … có khả năng là sự thay thế cho các công cụ quản lý cấu hình như Chef, Ansible, v.v. vào năm 2019.

8. Big data

Dữ liệu lớn luôn cần mở rộng hạ tầng để liên tục xử lý thông tin mà không bị đứt quãng. Devops có thể giúp tự động hóa các quy trình xử lý của Big Data.

Tham khảo việc làm IT lương cao trên TopDev

Vuex là gì? Ứng Dụng Của Vuex?

Vuex là gì?

Vì sao bạn lại cần Vuex trong cuộc đời của mình?

Được biết đến như một Framework tân tiến và ngày càng được đánh giá cao trong cộng đồng lập trình. Điều đặc biệt của VueJS chính là hệ thống component truyền dữ liệu trực tiếp giữa cha và con (người ta hay gọi là parent-children components. Tuy nó vẫn có những hạn chế nhất định như việc không thể đồng bộ dữ liệu các biến. Cụ thể: user, login, username.

Ngoài ra, đội ngũ kỹ thuật của team Facebook cũng đã cho ra mắt một kiến trúc mang tên Flux. Tại đây, luồng dữ liệu sẽ chỉ theo một chiều (one way data flow), khi có một dữ liệu mới, luồng này sẽ bắt đầu lại từ đầu.

Cũng chính vì vậy, Vuex được xây dựng dựa trên ý tưởng của Flux, Redux và kiến trúc Elm, tuy nhiên nó không được tích hợp trực tiếp vào trong lõi framework Vue.js mà được tách biệt thành một thư viện riêng.

Bạn đang cần tìm một biện pháp để giải quyết vấn đề xử lý và đồng bộ dữ liệu toàn cục? Redux không còn xa lạ gì đối với ai đã từng làm việc với React. VueJS cũng cần một phương pháp để quản lý dữ liệu và VueX sẽ giúp bạn điều đó.

Cùng tìm hiểu Vuex là gì nhé!

VueX được biết đến như một thư viện giúp bạn quản lý trạng thái các component trong VueJS, đây cũng là nơi lưu trữ tập trung cho tất cả các component trong một ứng dụng với nguyên tắc trạng thái chỉ có thể được thay đổi theo kiểu có thể dự đoán.

Vuex còn được xem như là một thư viện dùng để quản lý state cho các ứng dụng của Vue bằng cách sử dụng store tập trung hóa và toàn cục cho tất cả component trong một ứng dụng, mang lại những cập nhật nhanh tức thời khi tận dụng hệ thống các phản ứng.

Được xây dựng trên nền tảng không thể thay đổi trạng thái của mình từ bất kỳ component nào, Vuex store giúp đảm bảo rằng trạng thái chỉ có thể biến đổi theo cách có thể dự đoán được. Nhờ vào việc mỗi yếu tố dữ liệu chỉ được phép lưu một lần và chỉ được quyền đọc để tránh các component của ứng dụng sẽ làm hỏng các trạng thái truy xuất từ các component khác giúp cho store của bạn trở thành một nguồn đáng tin. State ở dây được hiểu là trạng thái của ứng dụng ví dụ như app sẽ có state là đã login hay chưa.

Vuex là gì?

Ứng Dụng Của Vuex?

Đầu tiên chúng ta sẽ nói về ứng dụng của Vuex, Vue mang đến rất nhiều lợi ích như dễ dùng lại code, đơn giản hóa ứng dụng, việc test cũng trở nên dễ dàng… bằng cách chia nhỏ state và quản lý trong từng component. Nhưng nếu gặp những trường hợp có 3,4… n component sử dụng cùng một state thì sẽ như thế nào?

Cách đơn giản nhất để giải quyết vấn đề này chính là mỗi component đều sử dụng event send state ra ngoài để các component khác sự dụng và tự trigger khi state này thay đổi. Bạn cũng có thể tạo ra một component cha như một nơi để trung chuyển state. Hai cách này đều khiến workflow trở nên phức tạp và khó kiểm soát hơn rất nhiều ví dụ như việc debug vô cùng khó khăn.

Cài đặt

Ta cần dùng npm để cài đặt vuex

npm install vuex --save

Import thư viện Vuex và thông báo việc sử dụng thư viện cho VueJS bằng hàm Vue.use()

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

Cấu Trúc Của Vuex

Đối với Vuex, store chính là nơi quản lý tập trung state của các ứng dụng bao gồm 5 phần chính: State, Getters, Mutation, Actions, Modules

State (trạng thái)

State chính là nơi “tình yêu bắt đầu”

Vì sao Vuex có thể giúp bạn dễ dàng hơn trong việc xác định các trạng thái và tạo ra các snapshot trạng thái một cách đơn giản? Chính là vì nó chỉ sử dụng một cây trạng thái duy nhất để chứa tất cả các trạng thái của ứng dụng.

const state = {
  numbers: [1, 2, 3, 4, 5]
}

Getters (lọc trạng thái)

Điều mang đến sự khác biệt giữa Vuex và Redux chính là việc ta có thể điều chỉnh dữ liệu trước khi trả về state. Đôi khi chúng ta cần lấy các trạng thái dựa vào việc tính toán, lọc bỏ các trạng thái được cung cấp bởi kho lưu trữ, ví dụ:

const state = {
  getEvenNumbers: state => {
    return state.numbers.filter(item => item%2 === 0)
  }
  hasNumber : state => num => {
    return state.numbers.include(num)
  }
}

Nếu muốn sử dụng trong component thì bạn có thể gọi trực tiếp this.$store.getters.getEvenNumbers hoặc sử dụng mapGetter

Mutations (thay đổi trạng thái)

Điểm mạnh của store chính là nơi compoment chỉ có thể đọc dữ liệu mà không được phép thay đổi trạng thái một cách trực tiếp. Nếu muốn thay đổi trạng thái thì Mutations là nơi duy nhất đảm nhiệm chức năng này bằng cách thay đổi thông qua commit. Dù không khuyến khích nhằm đảm bảo tính Flow chuẩn tuy nhiên tại compoment, bạn vẫn có thể thực hiện được commit đến mutations.

Điểm cần lưu ý chính là mutations là synchronous nhằm kiểm soát được action đã thay đổi state hay thứ tự thay đổi như thế nào

const mutations = {
  add(state, num){
    return state.numbers.push(num)
  }
  remove(state, num) {
    return state.numbers.include(num)
  }
}

Actions (Hành động)

Action cũng tương tự như mutation, tuy nhiên có một vài điểm khác biệt. Thay vì thay đổi trạng thái thì các action commit thay đổi, nó có thể chứa các hoạt động không đồng bộ.

Đây chính là nơi thể hiện bussiness logic, được gọi là API, save vào database, thực hiện các commit (gọi mutation) để thay đổi state…

VD: Thêm một số, nếu số đó đã tồn tại trong state thì xoá rồi thêm lại.

const actions = {
  updateNum({commit, state}, num){
    if (state.includes(num)) {
      commit('remove', num)
    }
    commit('add', num)
  }

  foo ({dispatch}, num) {
    dispatch('updateNum', num)
  }
}

Modules

Vuex chỉ sử dụng duy nhất một cây trạng thái, tất cả các trạng thái của ứng dụng sẽ được đưa vào một đối tượng. Điều này cũng có nghĩa là khi ứng dụng của bạn ngày càng phát triển thì store sẽ to lên rất nhiều. Vì thế Vuex cho phép việc chia nhỏ store thành các module nhỏ hơn, các module này cũng có state, mutation, action, getter và thậm chí còn cho phép các module lồng nhau.

Bạn cần lưu ý điều gì khi sử dụng Vuex

Điều quan trọng nhất khi bạn sử dụng Vuex đó chính là xác định cái nào là state sẽ lưu trữ trong store, cái nào chỉ là local state nằm trong component. Bạn hoàn toàn có thể đưa tất cả vào trong store, tuy nhiên đến khi quy mô của ứng dụng càng lớn kéo theo store cũng sẽ to ra dẫn đến việc khó khăn trong việc quản lý state.

Kết luận

Vậy là chúng ta đã biết Vuex là gì? tìm hiểu sơ về các khái niệm cơ bản trong Vuex, đối với những ai mới đặt chân lên vùng đất Vuex sẽ khó nắm được ngay các vấn đề của công nghệ. Có thể nói Vuex chính là một giải pháp tối ưu dành cho bạn nếu như bạn đang gặp những vấn đề trong việc đồng bộ, hiển thị và update dữ liệu, data được sử dụng bởi nhiều component, khi sử dụng vuejs. Đa số cá sản phẩm vuejs lớn đều cần sử dụng vuex cho việc quản lý và xử lý thay đổi trạng thái hiệu quả nhất.

Topdev via Minh Nhật

Những bài viết liên quan 

  Vue.js: Những điểm tốt, điểm xấu và điểm "tạm chấp nhận được"

  Vue.js vs jQuery: So sánh qua 1 số ví dụ

  3 phút làm quen với Vue.js

Một số mẹo để bắt đầu với Machine Learning

Thực sự cần thiết để bắt đầu việc học về machine learning càng sớm càng tốt nếu bạn muốn không bị tụt hậu.

AI và Machine Learning đã trở thành một trong những giải pháp có tác động mạnh mẽ đến các doanh nghiệp nhất hiện nay và chúng vẫn là một phần quan trọng trong chiến lược phát triển của các công ty công nghệ trong thời gian tới.

Cần phải hiểu rằng việc sử dụng Machine Mearning ( ML) để phát triển sản phẩm dần trở nên cần thiết – và nếu một công ty muốn đạt được mục tiêu của mình, họ sẽ tụt hậu so với các đối thủ cạnh tranh trong thập kỷ tới nếu họ không có ML. Vì vậy, cần bắt đầu tìm hiểu về ML càng sớm càng tốt. Nếu bạn sẵn sàng đạt được mục tiêu này, đây là một số mẹo để bắt đầu.

Tìm việc làm lập trình cho it machine learning

Tạo ra liên kết giữa ML Operations và Data Science

Có nhiều công ty hiểu về ML và data science, nhưng họ không biết làm thế nào để thực hiện. Việc tập trung vào cả hai và giữ chúng riêng biệt là không cần thiết. Bạn có thể đưa data science và các hoạt động ML

Sẵn sàng cho các thử nghiệm mới

Vì đây là nỗ lực đầu tiên để ứng dụng ML vào hoạt động công ty, nên thử những thử nghiệm mới trong các lĩnh vực kinh doanh khác nhau, để học hỏi thêm những điều mới. Ngay khi bắt đầu chiến dịch, nếu bạn đang mong đợi thu được lợi nhuận ngay thì có lẽ bạn sẽ từ bỏ việc tìm hiểu ML ngay từ khi bắt đầu.

Quản lý hiệu quả Data Servers 

Dữ liệu của bạn như là một mặt hàng có giá trị sẽ giúp bạn đảm bảo rằng bạn không đưa ra quyết định vội vàng. Data Servers sẽ giúp thúc đẩy hiệu quả của ML, nhưng bạn cần phải quản lý và bảo vệ dữ liệu được cung cấp. Nhiệm vụ này không dễ dàng như tìm kiếm một lựa chọn lý tưởng để chuyển đổi YouTube sang MP3 – nó phức tạp hơn rất nhiều. Bạn cần phải cẩn trọng với quá trình này.

Không vội vàng để giải quyết toàn bộ vấn đề cùng một lúc

Xây dựng một giải pháp theo thời gian là rất quan trọng, và vì thế, bạn cần có đầy đủ dữ liệu ở từng giai đoạn. Vì vậy, bạn không nên vội vàng để giải quyết toàn bộ vấn đề cùng một lúc. Bắt đầu bằng việc giải quyết phần nhỏ của vấn đề và đảm bảo rằng bạn thực hiện đầy đủ quy trình giải quyết vấn đề.

Để team của bạn biết tầm quan trọng của ML và AI

Thúc đẩy ML và trí tuệ nhân tạo là rất quan trọng, và bạn cần phải bắt đầu bằng cách chỉ cho CEO và đảm bảo rằng chiến lược của họ về ML / AI được cải thiện theo thời gian. Hãy nhớ rằng một hoạt động ML thành công sẽ là chìa khóa cho tương lai thành công và nếu CEO không quan tâm đến ML và AI thì hãy cảnh báo với họ rằng sẽ không có nhiều thay đổi tích cực lớn đến công ty trong thời gian tới.

Topdev via Dzone

Có thể bạn quan tâm:

  Top 10 thuật toán machine learning dành cho newbie
  Áp dụng Machine learning, xây dựng ứng dụng chatbot của riêng bạn
  Machine Learning góp phần cải thiện chiến lược Digital Marketing của bạn như thế nào?

Inside The Mind Of A Product Manager | Experimentation – Driven Product Development

Inside The Mind Of A Product Manager

GÓC NHÌN TỪ VỊ TRÍ CỦA MỘT PRODUCT MANAGER THỰC THỤ

Bạn có biết, hơn 70% các dự án thất bại vì không hiểu người dùng và không truyền tải đúng thông điệp đến đối tượng mục tiêu. “Get it right the first time” thật khó với một chuỗi các hoạt động chủ quan, chứng tỏ một điều rằng sự feedback của khách hàng sẽ là nguyên liệu vô cùng then chốt, ngay cả những sản phẩm được nghiên cứu kỹ lưỡng cũng có thể bị ảnh hưởng do khoảng cách giữa những gì khách hàng nghĩ họ muốn và những gì họ làm. Chính vì thế việc thử nghiệm trong phát triển sản phẩm (Experimentation in Product Development) là bước bắt buộc đối với một tổ chức lấy khách hàng làm trung tâm, một chiến lược phát triển.

Được ví như là một “nhạc trưởng” thực thụ với cái nhìn và tư duy sâu sắc giao thoa giữa 3 trường phái Tech, Business và UX/UI đồng thời cũng là một end-user trung thành, Product Manager (PM) lại là người đặt nhiều tâm tư liệu rằng sản phẩm có mang đến trải nghiệm hoàn hảo nhất cho người dùng? Vậy góc nhìn của một PM sẽ bao quát đến đâu? Bạn có tò mò?

Trong thời đại “có dữ liệu là có tất cả” thì việc sử dụng dữ liệu khách hàng một cách thông minh để nâng cao trải nghiệm người dùng là điều thiết yếu, không chỉ gói gọn trong tiêu chí tốt hoặc xấu, giờ đây sản phẩm được xem là có phù hợp với người dùng hay không mới là điều quan trọng.

Chung quy lại, một hệ thống phát triển sản phẩm phụ thuộc vào nhiều yếu tố, trong đó việc thử nghiệm để tìm ra những yếu tố quyết định sẽ là việc mà mỗi PM phải cân nhắc. Cùng tìm ra câu trả lời cùng các chuyên gia tại sự kiện “INSIDE THE MIND OF A PRODUCT MANAGER | EXPERIMENTATION – DRIVEN PRODUCT DEVELOPMENT” với nhiều case study và kinh nghiệm thực chiến nhé.

Tham khảo tuyển dụng product manager lương cao trên TopDev

THÔNG TIN DIỄN GIẢ

  • Anh VŨ MINH TRÍ hiện là Vice President của VNG & CEO của VINADATA và cũng là người từng giúp Microsoft Vietnam tăng trưởng 300% trong 5 năm. Hơn thế nữa, với 13 năm kinh nghiệm đảm nhận vị trí CEO tại các tập đoàn công nghệ hàng đầu Việt Nam, anh Minh Trí còn giúp Sony Ericsson Việt Nam, Yahoo Việt Nam, Qualcomm Đông Dương và Thái Lan tạo nên những bước ngoặt đáng kể về doanh thu và phát triển đội ngũ con người
  • Anh LÊ ANH QUANG (Quang Phowr) – diễn giả đa tài và nắm giữ nhiều vị trí trong các công ty tại Việt Nam hiện nay như Head of UX/UI của Be Group JSC, Product Director của Websosanh.vn, Design Lead tại Chainfund đồng thời là Founder của Eggcellent Design. Anh sẽ mang đến cho chúng ta Font testing at BE app. Thiêng về product design thuần tuý, dựa trên kinh nghiệm, survey & thử nghiệm để thiết kế ra ứng dụng đăt xe BE – case studies font chữ cho sản phẩm BE (moblie app)
  • Anh TRỊNH XUÂN TUÂN – Founder & CEO | NextSmarty. Anh là Thạc sĩ tốt nghiệp tại trường Uppsala University (Thụy Điển), từng giữ nhiều vị trí như: R&D Engineer tại VEGA, Technical Leader của FPT Software, Consultant của SalesBox, Deep Learning Engineer của Vufind (DBA DeepVu). Lần này anh sẽ chia sẻ cho chúng ta về apply kỹ thuật & phân tích data chuyên sâu vào việc phát triển product.
  • Anh LÊ THIẾT BẢO – Omni Channel Senior Director | Nguyen Kim Trading JSC. Anh đến Fedex Express trong vai trò Giám đốc kỹ thuật vùng Đông Dương, 9 năm làm việc tại Singapore, Lê Thiết Bảo đã gây dựng những trang thương mại điện tử đầu tiên cho Việt Nam như Siêu chợ Sendo.vn, dienmayxanh.com, Deca.vn… Sau 1 năm 8 tháng làm việc tại Nguyễn Kim, thương hiệu này đã đạt được nhiều thành tích đáng kể như Best online of Central Group Worldwide 2017 (công ty đầu tiên đạt hơn 1 triệu USD về doanh số tuần). Anh sẽ chia sẻ về những vấn đề xây dựng, tối ưu product phục vụ sản phẩm ecommerce phức tạp, bao hàm nhiều công tác vận hành, dịch vụ CSKH…
  • Đặc biệt với sự xuất hiện của anh NGUYỄN HỮU BÌNH – CEO của TopDev với vai trò là Moderator trong phần Panel Discussion cuối chương trình, tại đây các diễn giả sẽ cùng bàn luận về quá trình thử nghiệm và tìm ra những yếu tố quyết định mà PM nào cũng nên cân nhắc.

Nhanh tay đăng ký tham dự sự kiện “INSIDE THE MIND OF A PRODUCT MANAGER | EXPERIMENTATION – DRIVEN PRODUCT DEVELOPMENT” vào ngày 23/02 tại TPHCM bạn nhé!

  Bí kíp để trở thành một Product Manager giỏi
  Tui muốn làm Product Manager (PM)! Biết PM là gì chưa mà đòi?

Front end Optimization – 9 tips để cải thiện Web Performance

front-end-optimization-9-tips-de-cai-thien-web-performance

Trong thế giới kĩ thuật số hiện nay, có hàng triệu lí do để truy cập web mỗi ngày. Tuy nhiên, không phải website nào cũng dễ sử dụng và load nhanh chóng. Các website chưa được tối ưu hóa thường gặp phải các vấn đề như thời gian tải chậm, chưa có phiên bản mobile hoặc trình duyệt không tương thích, v.v…

Bài viết này sẽ hướng dẫn cải thiện front end, bạn có thể tăng đáng kể tốc độ và hiệu suất tổng thể trang web của bạn bằng cách tập trung vào mã sạch (clean code), nén hình ảnh, giảm thiểu các external request, triển khai một CDN và một vài phương pháp khác.

1. Dọn sạch HTML document

HTML hay Hyper Text Markup Language là xương sống của hầu hết mọi website. HTML cho phép định dạng trang web với heading, subheadings, danh sách và những tính năng sắp xếp chữ hữu ích khác. Bạn còn có thể tạo ra nhiều graphic thu hút với phiên bản HTML5 mới nhất.

HTML có thể dễ dàng được đọc bởi web crawlers, vì vậy các công cụ tìm kiếm có thể được update các nội dung trang web của bạn kịp thời. Khi làm việc với HTML, bạn nên cố gắng viết theo cách vừa ngắn gọn vừa hiệu quả. Thêm vào đó, khi tham khảo các nguồn khác với HTML document thì sẽ có một vài kiến thức thực tế thật sự hữu ích bạn nên làm theo.

Vị trí CSS thích hợp

Các web design thường tạo các CSS stylesheet sao khi tạo xong sườn của HTML chính. Như vậy, các nhân tố CSS thường được đặt phía cuối tài liệu. Tuy nhiên, chúng ta nên đặt CSS ở phía trên đầu của HTML document để đảm bảo tiến độ render.

<head>
<link href='https://yourwebsite.com/css/style.css' rel='stylesheet' type='text/css'>
</head>

Chiến lược này có thể sẽ không cải thiện tốc độ tải trang, nhưng nó có thể giữ người xem trang web của bạn tránh phải xem một màn hình trắng hoặc một bản text chưa được chỉnh style. Điều đó giúp người vào xem trang của bạn có thể sẽ chấp nhận đợi để load page. Do thế cải thiện front end optimization của bạn.

Ứng tuyển ngay các vị trí tuyển dụng Frontend trên TopDev

Vị trí Javascript thích hợp

Mặt khác, nếu bạn đặt các thuộc tính Javascript trên head tag hoặc gần đầu của tài liệu HTML, bạn sẽ khóa quy trình loading của các thành phần HTML và CSS. Điều này có thể sẽ khiến nhiều người truy cập vào trang của bạn phải đợi trên 1 trang trống và do vậy sẽ mất kiên nhẫn mà từ bỏ trang web của bạn. Bạn có thể tránh vấn đề này bằng cách đặt các thuộc tính Javascript ở phía dưới HTML.

Thêm vào đó, khi sử dụng Javascript, bạn nên tải async script hơn. Điều này sẽ ngăn bất kỳ <script> tag khỏi quy trình render HTML vd trong trường hợp nó vô tình lướt qua giữa văn bản (?)
Trong khi HTML là một trong những công cụ giá trị nhất với các web designer thường được sử dụng với CSS và các thuộc tính Javascript có thể làm chậm trang web của bạn. CSS và các thuộc tính Javascript có thể chuyển đổi trang web của bạn tốt hơn nhưng bạn nên sử dụng một cách hợp lí và có sự quan tâm đặc biệt. Một ví dụ thực tế với CSS và Javascript là tránh nhúng code. Khi bạn nhúng code, bạn đặt CSS vào 1 style tag, và sử dụng Javascrpit trong một script tag. Điều này gây nên gia tăng số lượng HTML code phải load mỗi lần bạn refresh page

Kết hợp các file? Đừng lo

Trong quá khứ có thể bạn sẽ phải thường xuyên kết hợp các script CSS đã sử dụng sang 1 single file (file riêng) để có thể dễ dàng tham khảo 1 file trong các HTML code thay vì nhiều file. Đây sẽ là một việc làm hợp lí khi sử dụng HTTP1.1 protocol, tuy nhiên, điều này không còn cần thiết nữa.
Nhờ vào HTTP/2, bây giờ bạn đã có thể sử dụng multiplexing để gửi và nhận các HTTP request và response không đồng bộ thông qua một kết nối TCP đơn lẻ.

Điều này nghĩa là bạn sẽ không bao giờ phải kết hợp các script vào một single file nữa.

2. Tối ưu hóa CSS Performance

CSS hay cascading style sheet được sử dụng để chuyển đổi các nội dung có nguồn gốc HTML sang 1 document sạch và chuyên nghiệp. Nhiều tùy chọn CSS yêu cầu các HTTP request (trừ khi sử dụng inline CSS), vì vậy bạn nên cố gắng giảm thiểu các CSS cồng kềnh mà không loại bỏ các tính năng quan trọng

Nếu banner, plugin, và layout của bạn được đặt trọng 1 file CSS riêng, điều này sẽ bắt người truy cập trang của bạn phải load vô số file 1 lúc. Việc này cũng khiến load trang lâu hơn nếu những files này được load từ nguồn bên ngoài, mặc dù bây giờ đã có ít vấn đề xảy ra hơn nhờ vào HTTP/2.

Thêm vào đó, bất kỳ quản trị viên trang web nào sử dụng import directive để gom các stylesheets bên ngoài trên 1 trang web là một phương pháp lỗi thời và nó cản trở việc download song song. Link tag là option tốt nhất của bạn và cũng sẽ cải thiện front end performance của trang web. Hơn thế nữa, các stylesheet bên ngoài được yêu cầu với link tag cũng không chặn các download song song.

3. Cắt giảm các yêu cầu HTTP bên ngoài

Nhiều trường hợp, một lượng lớn thời gian load website đến từ external HTTP requests. Tốc độ load các external resource phụ thuộc rất nhiều vào cơ sở hạ tầng của nhà cung cấp server, địa chỉ, v.v… Mục tiêu đầu tiên khi giảm các external HTTP requests nên là giám định website của bạn với quan điểm tối giản. Hãy nghiên cứu mọi thành phần trong trang web của bạn và loại bỏ bất cứ tính năng nào làm ảnh hưởng đến trải nghiệm người dùng. Các tính năng này có thể là:

  • Các hình ảnh không cần thiết
  • Javascript không cần thiết
  • CSS quá mức
  • Plugin không cần thiết

Sau khi loại bỏ các yếu tố gây loãng, phải tìm cách để làm lượng content còn lại trở nên ngăn nắp, gọn gàng hơn. Các công cụ nén, dịch vụ CDN và tìm nạp trước (Prefectching) sẽ được giải thích bên dưới là lựa chọn tốt nhất để quản lí các yêu cầu HTTP. Thêm vào đó, nên xem qua hướng dẫn về cách giảm tìm kiếm DNS đi cùng với việc giảm external HTTP requests.

4. Tối giản CSS, JS và HTML

Kết quả hình ảnh cho Minification

Kĩ năng tối giản có thể giúp bạn loại bỏ các đặc tính không cần thiết trong file. Khi bạn viết code, bạn thường thụt đầu dòng và viết note – điều này sẽ khiến code của bạn sạch và dễ đọc nhưng cũng vô tình add thêm dung lượng vào file code của bạn.

Ví dụ, đây là đoạn code trước khi áp dụng phương pháp tối giản.

.entry-content p {
font-size: 14px !important;
}
 
.entry-content ul li {
font-size: 14px !important;
}
 
.product_item p a {
 color: #000;
 padding: 10px 0px 0px 0;
 margin-bottom: 5px;
 border-bottom: none;
}

và đây cũng là đoạn code đó sau khi áp dụng phương pháp tối giản

.entry-content p,.entry-content ul li{font-size:14px!important}.product_item p a{col
or:#000;padding:10px 0 0;margin-bottom:5px;border-bottom:none

Bạn có thể dễ dàng giảm dung lượng trong các file CSS, JS và HTML bằng cách sử dụng các công cụ tối giản.

5. Bật tính năng tìm nạp trước (Prefetching) 

Kết quả hình ảnh cho Hệ thống phân giải tên miền

Tính năng tìm nạp trước có thể cải thiện trải nghiệm duyệt web của người truy cập bằng cách nạp trước các nguồn và dữ liệu cần thiết trước khi họ cần. Có 3 loại chính của tính năng tìm nạo trước:
  • Nạp trước Link
  • Nạp trước DNS
  • Prerendering

Với tính năng tìm nạp trước, URL, CSS, hình ảnh, và JS được tổng hợp cho mỗi link thậm chí trước khi bạn rời khỏi trang web hiện tại. Điều này sẽ đảm bảo người truy cập trang có thể sử dụng link để định vị giữa các trang với thời gian load trang nhỏ nhất.

May mắn tính năng tìm nạp trước không khó để kích hoạt. Điều này phụ thuộc vào việc bạn muốn kích hoạt loại tìm nạp trước nào, bạn có thể dễ dàng add các tag  rel="prefetch"rel="dns-prefetch", hoặc rel="prerender" tag vào các thuộc tính trong trang web của bạn.

6. Tăng tốc độ với một CDN và Caching

Bạn hoàn toàn có thể cải thiện tốc độ và hiệu suất website bằng cách sử dụng một hệ thống chuyển giao content. Khi bạn sử dụng một CDN, bạn liên kết các nội dung tĩnh đến một hệ thống mở rộng của server toàn thế gới. Điều này đặc biệt quan trọng nếu trang web của bạn hướng tới lượng khán giả ở toàn thế giới. CDN cho phép người truy cập website của bạn load data từ server gần nhất. Nếu bạn sử dụng một CDN, các file sẽ tự động nén để chuyển giao nhanh hơn trong phạm vi toàn cầu.

Kết quả hình ảnh cho content delivery network caching

CDN là một trong những phương pháp của caching có thể giúp bạn cải thiện đáng kể thời gian chuyển giao tài sản, tuy nhiên cũng có nhiều phương pháp caching khác bạn có thể thực hiện – một trong số đó là nâng cấp cache của trình duyệt

Set up cache của trình duyệt cho phép trình duyệt chứa nhiều file trong cache của nó để chuyển giao nhanh hơn. Việc thực hiện phương pháp này có thể hoàn thành trực tiếp trong file cấu hình server gốc.

7. Nén files

Kết quả hình ảnh cho gzip

Trong khi nhiều dịch vụ CDN sẽ tự động nén file cho bạn, nếu không sử dụng CDN, bạn nên xem xét đến việc nén file bằng phương pháp khác trong server nguồn để optimiaztion front end. Nén file sẽ khiến content của website gọn nhẹ và dễ dàng quản lí hơn. Một trong những phương pháp phổ biến nhất là Gzip. Đây là một trong những phương pháp xuất sắc để co tài liệu, file audio, ảnh PNG và một số file cồng kềnh khác chưa được nén

Brotli là một thuật toán nén file còn khá mới, tuy nhiên càng ngày nó càng trở nên phổ biến. Thuật toán nguồn mở này thường được update bởi các software engineer từ Google và các tổ chức khác. Nó đã tự chứng minh khả năng nén file tốt hơn nhiều so với các phương pháp hiện có. Mặc dù nó còn nhiều hạn chế nhưng chắc chắn sẽ trở thành thuật toán nén mặc định.

8. Tối ưu hóa hình ảnh

Cho những người không quen với front end optimization, hình ảnh có thể là website killer, Các album ảnh lớn và các hình ảnh có độ phân giải cao có thể gây phiền toái cho quá trình render. Những hình ảnh có độ nét cao chưa được optimize có thể nặng tới vài megabytes. Do vậy, việc optimize những file này sẽ cho phép bạn cải thiện hiệu suất front end của trang web.

Mỗi hình ảnh chứa cả tá thông tin không thật sự liên quan tới hình ảnh. Với những tấm hình JPEG, file hình chứa cả ngày tháng, địa điểm, thông số kĩ thuật và một số thông tin không liên quan khác. Bạn có thể sắp xếp độ dài quá trình load file bằng cách xóa các thông tin hình ảnh không cần thiết với các tool optimize như Optimus. Optimus sử dụng tính năng nén thông minh bằng cách sử dụng các hình ảnh PNG nén.

Kết quả hình ảnh cho jpeg before and after compression

Mặt khác, Optimus sử dụng các tính năng nén nhẹ cho các file JPEG. Mặc dù nén bảo toàn loại bỏ các thông tin thêm của hình ảnh, Optimus được cài đặt để nén ở mức độ mà người sử dụng sẽ không thấy hình ảnh bị giảm chất lượng. Điều này cho phép người sử dụng tiết kiệm lượng lớn dung lượng trong khi vẫn giữ nguyên chất lượng hình ảnh cao.

Kết quả hình ảnh cho jpeg before and after compression

9. Sử dụng một frameworks tối giản

Trừ khi bạn xây dựng trang web chỉ với kiến thức code của mình, bạn có thể tránh nhiều lỗi front end optimization bằng cách sử dụng 1 frontend framework tốt. Mặc dù có một số framework nổi tiếng hơn, lớn hơn với nhiều tính năng và lựa chọn thêm nhưng có thể web của bạn không cần thiết.

Đó là lí do tại sao cần phải xác định các tính năng mà website của bạn cần và bắt đầu với 1 framework cung cấp đầy đủ các tính năng đó trong khi vẫn nhẹ kí. Một số frameworks gần đây sử dụng các đoạn code HTML, CSS, và JS khá ngắn gọn

Đây là một trong vài framework tối giản khiến trang web load nhanh:

  • Pure
  • Skeleton
  • Miligram

Một framework không thay thế hoàn toàn việc design web, lập trình và duy trì. Nói đơn giản, hãy tưởng tượng framework là một căn nhà mới. Căn nhà này sạch sẽ và khang trang nhưng nó cũng khá trống trải, khi bạn mua thêm nội thất, vật gia dụng và trang trí, trách nhiệm của bạn là phải đảm bảo căn nhà không trở nên lộn xộn. Trong khi đó, bạn cũng phải đảm bảo framework không bị phá hoại bởi các đoạn code thừa, hình ảnh lớn và các HTTP request quá mức

Tổng Kết

Frontend optimize được coi giống như intimidating endeavor, nhưng bạn có thể cải thiện tốc độ load website bằng cách áp dụng nguyên lí của hướng dẫn này. Hãy nhớ rằng, website load càng nhanh thì trải nghiệm người dùng sẽ càng cao. Vì vậy, lợi ích của bạn và người truy cập trang là như nhau.

Có thể bạn quan tâm

  Roadmap Frontend Developer - "Con đường tắt" để trở thành cao thủ Frontend Developer
  Tương lai của JavaScript ra sao trong thế giới Front-End?
  Tất tần tật các Frontend cheatsheets tốt nhất

Topdev Via keycdn

Xem thêm các việc làm it mới nhất trong tháng