Công Nghệ
Review và giải thích sâu về framework, ngôn ngữ, AI, blockchain… ngắn gọn, dễ hiểu, cập nhật liên tục như git pull ‑‑rebase.
1826 bài viết

Selenium testing – Một vài kiểu có thể áp dụng
Bài viết được sự cho phép của tác giả Kiên Nguyễn Selenium testing gồm những kiểu test nào ?. Selenium có thể hỗ trợ được gì trong các loại test đó?. Tất cả sẽ có trong bài viết dưới đây. Mà khoan, nếu chưa có cái nhìn tổng quan về Selenium thì đọc bài viết “ Selenium là gì ?” trước đã nha. Biết sơ qua rồi hẵng quay lại đọc bài này thì sẽ tốt hơn. 1. Acceptance testing – Kiểm thử chấp nhận Gọi là kiểm thử chấp nhận vì đây là phần testing kiểm tra xem có đáp ứng được những gì khách hàng yêu cầu hay không? . Nếu release bản này thì khách hàng chấp nhận hay không?. Ra đi làm tất nhiên mới biết, việc đáp ứng nhu cầu khách hàng nữ . Ý lộn “ đáp ứng requirements” của khách hàn g là yếu tố tiên quyết. Tại sao?. Khách hàng trả tiền, khách hàng dùng sản phẩm. Acceptance testing trong Selenium testing chỉ nhằm mục đích trả lời cho câu hỏi: Are we building the right product?. Chúng ta có đang tạo ra sản phẩm như khách hàng yêu cầu hay không? Selenium Testing có thể giúp đỡ việc kiểm thử này như thế nào? Viết automation tescase test các function nhỏ trên từng page Viết automation testcase test flow của product Viết testcase cho logic (nếu có). Lưu ý là Acceptance testing cũng chỉ là một kiểu của Functional testing thôi nha. Giờ mới tới cái lớn nè. 2. Functional testing – Kiểm thử tính năng It checks the system at different levels to ensure that all scenarios are covered and that the system does what’s supposed to do . Kiểu kiểm thử này nhằm kiểm tra hệ thống ở nhiều...

KISS PRINCIPLE (Nguyên tắc KISS Trong JAVA)
Bài viết được sự cho phép của tác giả Trần Hữu Cương Nguyên tắc KISS trong Java. KISS là gì? KISS ở đây là: K eep I t S imple, S tupid! không phải “hun nhau” đâu nhé. Hiểu nôm na thì KISS cõ nghĩa là giữ cho code của bạn thật đơn giản, càng đơn giản, ngắn gọn càng tốt.Bạn viết code, người khác vừa đọc đã hiểu bạn đang viết cái gì, code của bạn thực hiện cái gì thì bạn đang áp dụng thành công rồi đấy. Tuyển lập trình Java lương cao mới ra trường Ví dụ 1: mình có 1 method: public int addTwoNumber ( int a, int b ) { return a + b; } Khi bạn đọc nó bạn có thể hiểu luôn method đó làm cái gì. Với những method có logic phức tạp hơn, dài dòng hơn thì bạn cần phải biết đặt tên biến, tên hàm, comment thế nào để cho code của bạn dễ hiểu. (Có thời gian thì bạn hãy đọc cuốn ‘clean code’ của Robert C. Martin, bạn sẽ pro ngay mấy cái này =)) ) Ví dụ 2: mình có 2 method đều thực hiện trả về true nếu số truyền vào là số chẵn: // method 1 public static boolean isEven ( int input ) { return ( input & 1 ) == 0 ; } // method 2 public static boolean isEven ( int input ) { return ( input % 2 ) == 0 ; } Rõ ràng, method 1 nhanh hơn method 2 vì nó thực hiện trực tiếp với bit. Nhưng method 2 lại dễ hiểu hơn, người đọc không cần nhớ lại toán tử ‘&’ thực hiện như nào. Ở đây mình chọn method 2 vì nó dễ hiểu, rõ...

Import lodash như thế nào mới đúng
Bài viết được sự cho phép của tác giả Lưu Bình An Mình đã từng nghe một bạn Principle FE trong công ty phát biểu là Đã 2020 rồi mà còn xài lodash là sao, lodash đã tối cổ, chả ai xài nữa đâu Khoan bàn chuyện đúng sai trong phát biểu này, nếu bạn cũng như mình, vẫn đang dùng lodash thì bạn cần biết import nó như thế nào cho đúng Tại sao cần làm đúng? Vì nếu làm sao vô tình bạn sẽ làm phình cục bundle lên gấp mấy chục lần PHPExcel - Import và Export xử lý Excel 20 trường hợp sử dụng lệnh Docker cho developer Giờ so sánh 3 cách import Cách 1 import _ from 'lodash' ; Tại sao lại chọn kiểu này? Không cần quan tâm đến user, cảm giác rất quyền lực như có găng tay vô cực, chỉ với _. chúng ta có tất cả mọi thứ. Điểm yếu, đây là cách tuyệt đối nghiêm cấm, vì gần như là load nguyên cái thư viện Tổng 190 KB, Lodash ngốn hết 72.5kb Cách 2 import { map , each , get , set } from lodash ; Kiểu này ổn, dễ đọc, rất rõ ràng để thấy được những hàm nào cần sử dụng. Tuy nhiên, nó lại không khác gì với cách 1. Tổng vẫn là 190kb Cách 3 import map from 'lodash/map' ; import each from 'lodash/each' ; import get from 'lodash/get' ; import set from 'lodash/set' ; Kết quả cho thấy đây là cách tiết kiệm nhất, mặc dù thực tế sử dụng cho thấy cách này hơi tốn công anh em dev của chúng ta và nhìn đoạn import có vẻ dài. Một số ý kiến cho là dùng lodash-es , một phiên bản theo...

Rx-MVVM(2): Cấu trúc project – quản lý thư viện sử dụng trong dự án
Bài viết được sự cho phép của tác giả Lê Xuân Quỳnh Có thể bạn đã sử dụng nhiều library trong dự án IOS của mình. Vậy thường thì bạn có tạo lớp để quản lý cho dễ không? Thực tế mình cũng ít khi làm việc này, chỉ trừ mấy thư viện lớn như request server thôi. Hôm nay chúng ta sẽ học được 1 cách quản lý thư viện mà theo mình đánh giá là ổn, khá logic, clear và đáng học hỏi. Nào cũng ta cùng bắt đầu nhé! 6 project vui dành cho dev build khi chán 9 CSS animation mới "mãn nhãn" cho các project Xem thêm Việc làm Project manager hấp dẫn trên Station D AnalyticsManager Trong file này tác giả sử dụng 2 thư viện Mixpanel và FirebaseAnalytics. Thư viện Mixpanel: https://github.com/mixpanel/mixpanel-iphone Phần Readme đã mô tả rất rõ cách cài đặt, các bạn đọc và tạo thử 1 project để cài nhé. Mình nghĩ dùng pod để cài là đơn giản nhất. Chức năng: Cung cấp event tracking model tốt hơn Dữ liệu thống kê realtime – thống kê của GA thường mất hàng giờ Với GA bạn phải tạo ra các funnel trước khi thu thập dữ liệu, còn với Mixpanel bạn có thể xây dựng funnel bất cứ lúc nào. retention analytics – Cho phép đo lường lượng người dùng mới, sử dụng lại app. Nó cũng cho phép bạn xác định tần suất người dùng sử dụng app, GA không có tính năng này. Customer support: GA không cung cấp hỗ trợ người dùng chất lượng cao nếu bạn gặp lỗi và không hiểu báo cáo. Cải thiện độ chính xác dữ liệu Mobile A/B testing: Mixpanel cung cấp mobile a/b testing, dễ dàng cho người phát triển hoặc...

Thay đổi tư duy về kiểm thử theo Nguyên lý Agile
Bài viết được sự cho phép của vntesters.com Nguyên lý Agile – QA ngày nay đã phát triển từ “Tim lỗi” đến “Ngăn ngừa lỗi”. Những kỹ sư kiểm thử cần thêm nhiều kỹ năng khác như kiểm thử tự động, TDD, BDD và kiểm thử hộp trắng (không chỉ làm duy nhất kiểm thử hộp đen). Kỹ sư kiểm thử cần hướng đến hướng-giải-pháp, cộng tác nhiều hơn với nhóm phát triển và các bên nghiệp vụ. Agile là gì? Scrum là gì? Các công cụ quản lý dự án theo Agile mà bạn nên biết Quản lý dự án theo Agile và Scrum cho người mới bắt đầu Thay đổi tư duy kỹ sư kiểm thử với Nguyên lý Agile Agile nghĩa là “Linh động”, “khả năng thay đổi nhanh chóng”. Kiểm thử trong Agile không có nghĩa là một kỹ thuật kiểm thử mới, mà đi theo Agile nghĩa là phát triển một khả năng thay đổi trong tư duy để triển khai/tiến hành những gì có thể kiểm thử. Trước khi bàn luận về kiểm thử trong Agile, hãy nhìn lại và xem xét nguồn gốc và nguyên lý bên trong Agile. Câu chuyện xưa cũ Trước khi thế giới làm việc với Agile, Thác nước ( Waterfall ) là một phương pháp có ưu thế trong công nghiệp phần mềm. Ở đây, chúng ta không giải thích mô hình Thác nước, nhưng có ghi chú vài điểm đáng chú ý trong làm việc thực tế. Những điểm này là dựa vào kinh nghiệm của cá nhân. Có thể có khác biệt đôi chút với mọi người. Kỹ sư phát triển (dev) và QA làm việc như những nhóm riêng lẻ (Đôi khi còn là đối thủ) Các tài liệu liên quan được cả kỹ sư...

Làm quen với kiến trúc Serverless
Bài viết được sự cho phép của tác giả Lưu Bình An Mười mấy năm về trước, ngày còn đang học đại học, mỗi lần đến ngày đăng ký môn học là mình được nghe điệp khúc hát mãi “server quá tải, số lượng sinh viên tranh nhau vào các lớp có nhiều gái xinh quá đông, quá nguy hiểm, mấy em vui lòng canh 12 giờ đêm, khi ko còn ai lên đăng ký môn học, chúng tôi mới đáp ứng kịp” Sập server, làm gì đây? Chuỗi chuyên đề độc quyền về Serverless từ Amazon Web Services Ngày đó Server của trường nằm ở Nguyễn Văn Tráng, phòng server nhỏ như hang thỏ, mà chỉ xài đúng mấy ngày đầu học kỳ, nên thầy trưởng khoa ko thể nào xin ngân sách được để mà nâng cấp 10 mấy con server cho các em sinh viên xài thỏa thích. Bài toán Server đó giờ được giải quyết ra sao? Serverless Trước tiên cần khẳng định Serverless không phải là bạn không cần server. Một shop thú nuôi đơn giản, vài ngàn người mua hoa một tháng, làm bằng wordpress bạn sẽ không thấy được lợi ích từ việc sử dụng kiến trúc mới này, không những vậy còn là việc ném một cục tiền cho mấy thằng bán dịch vụ như Amazon Trang bán thú nuôi, kiến trúc cũ sẽ là thế này Tất cả những logic sẽ nằm ở ứng dụng phía server : từ authentication, page navigation, searching, transaction (code backend đó) Yêu cầu cần có ngân sách, kế hoạch cụ thể, lắp đặt các hệ thống máy chủ, tìm một chỗ để máy, đảm bảo luôn có điện, luôn mát lạnh, đi dây, chọn nhà cung cấp mạng không bị cá mập cắn… Nói chung...

Security Considerations khi Designing Web Applications
Bài viết được sự cho phép của tác giả Kiên Nguyễn Nhắc tới thiết kế hệ thống (System Design), ngoài thiết kế hệ thống tốt, đáp ứng khả năng Scale, chuẩn business, ta cũng cần cân nhắc thêm về tính bảo mật của hệ thống (Security Considerations) Qua bài viết dưới đây, Kieblog mong muốn chia sẻ thêm chút ít kinh nghiệm thực tế khi thiết kế hệ thống Web. Một số vấn đề về Security cần quan tâm. Bắt đầu ngay thôi nào! 1. Access and Authentication Access và Authentication là 2 phần không thể bỏ qua khi nói về Security Considerations cho Designing Web Applications. Hầu hết các cuộc tấn công Web hiện nay, nguyên nhân chủ yếu không phải là các cuộc tấn công lớn hoặc sử dụng công nghệ cao. Nguyên nhân chính là do hệ thống bảo mật yếu kém. Trong đó nổi bật nhất là Authentication. Các vụ tấn công lớn đã được biết tới của Target Corp hay Yahoo đều xuất phát từ email. Đối tượng tấn công vào một node trong chuỗi cung ứng. Dẫn tới mật khẩu quản trị bị đánh cắp dẫn tới mất thông tin. 18 Web Developer Jobs Tùy vào từng đối tượng website và yêu cầu về bảo mật, người thiết kế hệ thống có thể cân nhắc thêm: Sử dụng OTP – SMS vertification. Sinh trắc học Email verification Confirm trusted device Việc bổ sung bước thứ hai giúp giảm thiếu rủi ro bị đánh cắp dữ liệu, giao các quyền truy cập thông tin không được phép vào tay hacker. Trước tới nay, nhắc tới API, ta có thể nghĩ tới tới ngay SOAP Web Services. Tuy nhiên với GraphQL, có nhiều cách để take care hoặc đảm bảo API Access Secutiry. 2. SSL –...

Một số tool hữu ích dành cho Web Developer có thể bạn đã biết (Phần 2)
Bài viết được sự cho phép của BQT Kinh nghiệm lập trình Chào mọi người, tiếp tục với phần chia sẻ lần trước (phần 1), hôm nay mình xin tiếp tục chia sẻ với các bạn thêm một vài tool mà mình thường dùng cho web developer. 1. Image Fillter Đối với những bạn thích selfie hay thích chụp hình đều biết đến photoshop, lightroom hay muốn nhanh gọn thì dùng instagram hoặc B612… Giờ đây bạn cũng có thể ứng dụng một vài bộ lọc này lên hình ảnh để có một bộ ảnh đẹp tuyệt vời không kém. Yên tâm nó rất nhẹ, vì chỉ với vài dòng CSS thôi. Link: https://www.cssfilters.co 2. Text style Lại nói về Photoshop… web developer mà kiểu gì không dính tới photoshop phải không các bạn. Ở photoshop muốn style cho chữ lung linh thật đơn giản với blending option thì ở css mình cũng không thua kém khi dùng biết kết hợp giữa background, color, text-shadow… à mà thôi bỏ đi. Mình có tool này rất hay đây. Link: https://ecard.enter-media.org/css-text-effects/ 3. Image hover effect Đây là một thư viện mình đã bookmark từ lâu, và thường xuyên dùng cho những layout yêu cầu độ thẩm mỹ. Về effect mình thấy lib này khá đẹp và thuần css rất nhẹ. Link: http://gudh.github.io/ihover/dist/ 4. CSS animation Với những website của Nhật ở phần first view họ yêu cầu effect phong phú làm Dev đau đầu. Mình xin giới thiệu một lib css khá xịn, đa số những bài tủ của mấy anh Nhật đều gói gọn ở đây. Link: http://cssanimation.io/ 5. Cũng CSS animation Đây là một tool tổng hợp các effect của CSS3 để ra một hiệu ứng đẹp mắt khi người dùng thao thác trên website. Link: http://animista.net/ Tổng kết Frontend...

Áp dụng mô hình Kano trong cách code
Bài viết được sự cho phép của tác giả Phạm Bình Chào các bạn, Điều đầu tiên mình phải khẳng định luôn Kano không phải là một design pattern , nó cũng không phải là tên một framework hay bất kỳ một khái niệm công nghệ nào. Mà nó là một mô hình cho kỹ thuật phân loại tính năng từ góc nhìn của khách hàng . Tại sao lại vậy? Mô hình này thì có liên quan gì tới code? Thì mời các bạn hãy theo dõi bài viết này nhé. CSS Box Model và box-sizing: border-box là gì vậy? CSS Box Model - Các cách hiển thị element với thuộc tính display I. TÌM HIỂU VỀ KANO MODEL (MÔ HÌNH KANO) 1.1 Mô hình Kano là gì? Kano là một mô hình dùng để phân loại tính năng từ góc nhìn của khách hàng. Mô hình này được giáo sư Noriaki Kano ứng dụng vào thập niên 80 để giúp đội ngũ thiết kế hiểu được yêu cầu và tầm quan trọng của sản phẩm xét từ góc độ của khách hàng. 1.2 Mô hình Kano hoạt động như thế nào? Kano phân loại thuộc tính (tính năng) của sản phẩm thành 3 nhóm chính Nhóm 1: Nhóm tính năng cơ bản Đây là nhóm tính năng sản phẩm cần phải có, nhất định phải có. Nếu không có nhóm tính năng này thì sản phẩm sẽ mất đi cái bản chất, mất đi cái giá trị cốt lõi. Ví dụ điện thoại thì dùng để nghe – gọi, đồng hồ dùng để xem giờ, đèn dùng để chiếu sáng,… Đây là nhóm tính năng cần phải đầu tư để thực hiện, nếu sản phẩm tạo ra mà không có các tính năng nằm trong nhóm này thì...

Lập trình viên nên HỌC NHIỀU HƠN một ngôn ngữ lập trình?
Bài viết được sự cho phép của blogchiasekienthuc.com Chào anh em, có lẽ việc học một ngôn ngữ lập trình nào đó là bắt buộc nếu như anh em có ý định làm về IT nói chung, hay làm về lập trình nói riêng. Thực ra nếu dùng từ “bắt buộc” là không đúng, vì thực tế có nhiều hướng đi trong ngành IT không yêu cầu anh em phải nắm rõ một ngôn ngữ lập trình nào đó. Nhưng cũng giống như việc ăn cơm, nếu như anh em biết một ngôn ngữ lập trình thì nó cũng giống như kiểu anh em có một đôi đũa trong tay vậy, và mọi việc sẽ trở nên dễ dàng hơn rất nhiều. 10 lý do cho thấy tại sao bạn nên theo học ngôn ngữ lập trình Java 4 ngôn ngữ phát triển game indie phổ biến Nhưng liệu lập trình viên có nên học nhiều hơn một ngôn ngữ lập trình hay không? Đã có rất nhiều ý kiến trái chiều xoay quanh vấn đề này, vậy nên trong bài viết ngày hôm nay mình sẽ đưa ra 5 lý do để các bạn nên học nhiều hơn một ngôn ngữ lập trình. Do là ý kiến chủ quan của mình nên có thể đúng với người này, không đúng với người khác mong anh em góp ý nha. #1. Rèn luyện khả năng tiếp cận công nghệ mới Anh em làm về IT thì biết rồi đấy, công nghệ mới thay đổi liên tục từng giây. Nhiều khi chưa kịp làm chủ công nghệ này thì đã có công nghệ khác tốt hơn và tối ưu hơn rồi. Tất nhiên, việc chạy theo công nghệ không phải lúc nào cũng tốt, nhưng ngược lại, cứ khư khư mãi...

Chạy file jar giống như một service trên Ubuntu (Linux)
Bài viết được sự cho phép của tác giả Trần Hữu Cương Chạy file jar giống như một service trên Ubuntu (Linux). Trong bài này chúng ta sẽ thực hiện chạy 1 ứng dụng java (file .jar) trên ubuntu giống như 1 service (chạy ngầm). Tức là chúng ta có thể start, stop nó giống như 1 service hay có thể thể lựa chọn khởi động cùng hệ thống, xem log … Hướng dẫn sử dụng filebeat để đọc và quản lý logs hệ thống nginx trên ubuntu Sếp nhớ trả lương em gấp 10 nha (phần 2) - HĐH Ubuntu Giả sử mình có 1 file jar là spring-boot-hello.jar nằm trong folder /home/cuongth/workspace . Bây giờ mình sẽ thực hiện chạy file jar này giống như 1 service. Bước 1: Tạo một service Ở đây mình sẽ tạo 1 service với tên là spring-boot-hello. Do đó mình cần tạo file spring-boot-hello.service trong folder /etc/systemd/system với nội dung sau: spring-boot-hello.service [Unit] Description =Demo Spring Boot Hello [Service] User =cuongth # The configuration file application.properties should be here: #change this to your workspace WorkingDirectory =/home/cuongth/workspace #path to executable. #executable is a bash script which calls jar file ExecStart =/bin/bash /home/cuongth/workspace/spring-boot-hello.sh SuccessExitStatus =143 TimeoutStopSec =10 Restart =on-failure RestartSec =5 [Install] WantedBy =multi-user.target Trong đó: Description: mô tả service User: user dùng để chạy service ExecStart: lệnh chạy script (ở đây mình chạy file bash ở vị trí: /home/cuongth/workspace/spring-boot-hello ) Để tạo file trên các bạn có thể dùng lệnh vi , rồi copy nội dung trên vào là được. (hoặc dùng text editor như nano , gedit …) sudo vi /etc/systemd/system/spring-boot-hello.service Bước 2: Tạo Script chạy file jar spring-boot-hello.sh /opt/java/jdk1 .8 .0_241/bin/java -jar spring-boot-hello.jar Ở đây mình dùng lệnh java để chạy file spring-boot-hello.jar , hiện trên máy mình đang cài java...

Hướng dẫn và mô phỏng thuật toán sắp xếp Selection Sort
Bài viết được sự cho phép của tác giả Phạm Công Sơn Chọn phần tử nhỏ nhất trong n phần tử ban đầu, đưa phần tử này về vị trí đúng là đầu tiên của dãy hiện hành. Sau đó không quan tâm đến nó nữa, xem dãy hiện hành chỉ còn n-1 phần tử của dãy ban đầu, bắt đầu từ vị trí thứ 2. Lặp lại quá trình trên cho dãy hiện hành đến khi dãy hiện hành chỉ còn một phần tử. Dãy ban đầu có n phần tử, vậy tóm tắt ý tưởng thuật toán là thực hiện n-1 lượt việc đưa phần tử nhỏ nhất trong dãy hiện hành về vị trí đúng ở đầu dãy. Một vài “trick” khi sử dụng Xpath và CSS selector trong Selenium Download, Export file tự động với Selenium Webdriver Các bước thực hiện thuật toán 1. Chọn phần tử đầu tiên i = 0 2. Tìm phần tử a[min] nhỏ nhất trong mảng từ a[i] tới a[n]. Với n là độ dài của mảng 3. Hoán đổi vị trí a[i] với a[min] 4. Tiếp tục chọn phần tử i = i + 1 và quay về bước 1 Mã nguồn được thực hiện trên javascript Tạo dãy số ngẫu nhiên để mô phỏng sắp xếp Tổng số Tạo dãy số 93 93 10 40 28 30 12 16 71 26 ? ? ? Tốc độ Thực hiện sắp xếp Mã nguồn được thực hiện trên javascript var SelectionSort = function () { $.extend(this, new SortX()); this.name = "SelectionSort"; this.onCreateScripts = function (array, scripts) { var $this = this; var addScript = function (a1, a2, action) { scripts.push($this.createScript0(a1, a2)); // Script lấy ra 2 số cần so sánh scripts.push($this.createScript1(a1, a2)); // Script để thực hiện so sánh giữa 2...