Công nghệ & Lập trình
Cron là gì? Hướng dẫn viết Cron Expression cho người mới bắt đầu
Cron là công cụ lập lịch chạy tác vụ tự động có sẵn trên Linux/macOS. Bài viết giải thích cấu trúc 5 trường của cron expression, các ký tự đặc biệt *, , - /, …
Chocolatey là gì? Hướng dẫn cài đặt và sử dụng trình quản lý gói cho Windows
Chocolatey là trình quản lý gói giúp cài đặt, cập nhật và gỡ phần mềm trên Windows chỉ bằng một dòng lệnh PowerShell, thay vì tải file .exe rồi bấm Next liên …
Mise là gì? Hướng dẫn cài đặt và sử dụng cho người mới bắt đầu
Mise (mise-en-place, trước đây là rtx) là công cụ quản lý phiên bản ngôn ngữ lập trình và công cụ dòng lệnh, thay thế asdf/nvm/pyenv/rbenv bằng một file cấu …
Homebrew là gì? Hướng dẫn cài đặt và sử dụng cho người mới bắt đầu
Homebrew là trình quản lý gói giúp cài đặt, cập nhật và gỡ phần mềm trên macOS/Linux chỉ bằng một dòng lệnh, thay vì tải file cài đặt thủ công. Bài viết hướng …

Bài 18 — Case study tổng hợp: hệ thống automation xử lý đơn hàng
Case study tổng hợp toàn series: xây hệ thống automation hoàn chỉnh xử lý đơn hàng cho ShopViet, kết hợp webhook, database, error handling, queue mode và alert.

Bài 17 — AI workflow với n8n: AI Agent, LLM, RAG với vector store
Xây AI workflow trong n8n: AI Agent node, tích hợp LLM (OpenAI/Anthropic), RAG cơ bản với vector store và khi nào nên dùng n8n cho AI pipeline.

Bài 16 — n8n API và quản lý workflow bằng code: export/import, Git, CI/CD
Quản lý workflow như code: n8n API, export/import workflow JSON, versioning bằng Git, CI/CD cho workflow và tách môi trường dev/staging/prod.

Bài 15 — Xây custom node bằng TypeScript: declarative vs programmatic, publish npm
Viết n8n community node bằng TypeScript: cấu trúc project, so sánh declarative vs programmatic style và publish node lên npm.

Bài 14 — Kiến trúc n8n bên trong: main vs worker, execution mode, binary data
Bên trong n8n: main process vs worker, execution mode (regular/queue), cách lưu binary data — hiểu để tối ưu hiệu năng và tài nguyên.

Bài 13 — Self-host production: Postgres + Redis, queue mode, worker, reverse proxy
Triển khai n8n production: Docker Compose với Postgres + Redis, queue mode và worker, scaling, reverse proxy (Nginx/Traefik) và HTTPS.

Bài 12 — Tích hợp database: Postgres/MySQL/MongoDB, query tham số, transaction
Tích hợp database với n8n: Postgres/MySQL/MongoDB node, viết query có tham số, xử lý transaction và tránh SQL injection trong expression.

Bài 11 — Webhook nâng cao: response mode, HMAC signature, payload lớn, idempotency
Webhook ở mức production: các response mode, xác thực webhook bằng HMAC signature, xử lý payload lớn và đảm bảo idempotency khi bị gọi trùng.

Bài 10 — Credentials và bảo mật: mã hóa, quản lý secrets, phân quyền
Cách n8n mã hóa và lưu credentials, quản lý secrets, phân quyền, và best practice khi export/chia sẻ workflow mà không lộ bí mật.

Bài 9 — Error handling chuẩn production: Error Trigger, retry, dead-letter, alert
Xử lý lỗi ở mức production: Error Trigger workflow, retry strategy, dead-letter pattern và gửi alert qua Slack/Telegram khi workflow fail.

Bài 8 — Điều khiển luồng: IF, Switch, Loop Over Items, Wait và sub-workflow
Điều khiển luồng thực thi: IF, Switch, Loop Over Items, Wait, xử lý batch và tách logic bằng Execute Workflow (sub-workflow).

Bài 7 — Code node chuyên sâu: JavaScript/Python, \$input/\$json, sandbox
Viết JavaScript/Python trong Code node: mô hình items, các biến $input, $json, cách tham chiếu node khác, task runners, giới hạn sandbox, và khi nào nên dùng …

Bài 6 — Xử lý dữ liệu: Set, Filter, Merge, Split Out, Aggregate và expression
Các node biến đổi dữ liệu cốt lõi (Edit Fields, Filter, Merge, Split Out, Aggregate) và cú pháp expression {{ }} cùng các hàm built-in hay dùng.

Bài 5 — Làm chủ HTTP Request node: auth, pagination, retry, xử lý lỗi
HTTP Request node ở mức production: authentication (Bearer, API key, OAuth2), pagination tự động, retry/backoff và xử lý lỗi HTTP đúng cách.

Bài 4 — Xây workflow đầu tiên: Webhook → xử lý → REST API → response
Dựng workflow hoàn chỉnh đầu tiên: nhận request qua Webhook trigger, xử lý dữ liệu, gọi REST API bên ngoài và trả response; debug bằng execution log.

Bài 3 — Khái niệm cốt lõi: Workflow, Node, Trigger, Execution và mô hình items
Mô hình dữ liệu của n8n: workflow, node, connection, trigger, execution, và cách các items (mảng JSON) chảy giữa các node — nền tảng để hiểu mọi thứ về sau.

Bài 2 — Cài đặt n8n: npm, Docker, Docker Compose và biến môi trường
Ba cách chạy n8n (npm, Docker, Docker Compose) cho dev và production, các biến môi trường quan trọng (N8N_ENCRYPTION_KEY, WEBHOOK_URL, DB), và cấu trúc thư mục …

Bài 1 — Giới thiệu về n8n, kiến trúc của n8n
Hiểu n8n như một workflow automation engine: kiến trúc tổng thể, mô hình node-based, so sánh thẳng với Zapier, Make, Airflow và Temporal, và tiêu chí kỹ thuật …

Playwright MCP là gì? Hướng dẫn cài đặt và sử dụng cho automation test
Playwright MCP biến trình duyệt thành một công cụ mà AI agent (Claude, Copilot, Cursor…) điều khiển trực tiếp qua accessibility tree — nhanh, xác định, …

Docker trong CI/CD và production
Đưa Docker vào pipeline CI/CD: build và push image lên registry, tự động hóa với GitHub Actions, deploy lên server, cùng các lưu ý vận hành production.

Tối ưu Docker image & best practices
Giảm kích thước image với multi-stage build và image alpine, tận dụng layer cache, bảo mật image và những thực hành tốt giúp image gọn, nhanh, an toàn.

Docker Compose: quản lý ứng dụng multi-container
Dùng Docker Compose để định nghĩa và chạy ứng dụng nhiều container bằng một file YAML duy nhất: cú pháp, services, volumes, networks và các lệnh thường dùng.

Docker Volume & Network: lưu trữ và kết nối container
Hiểu cách lưu trữ dữ liệu bền vững với volume, phân biệt volume và bind mount, cùng cách các container giao tiếp với nhau qua Docker network.

Dockerfile: tự đóng gói ứng dụng thành image
Học cách viết Dockerfile để đóng gói chính ứng dụng của bạn thành image: các chỉ thị quan trọng, cơ chế layer, .dockerignore và build image đầu tiên.

Docker cơ bản: image, container và các lệnh thiết yếu
Hiểu rõ mối quan hệ giữa image và container, vòng đời của container, cùng bộ lệnh thiết yếu bạn sẽ dùng hằng ngày khi làm việc với Docker.

Cài đặt Docker trên Windows, macOS, Linux
Hướng dẫn cài đặt Docker trên Windows, macOS và Linux, kiểm tra hoạt động, cấu hình cơ bản và chạy thử container đầu tiên.

Docker là gì? Tại sao mọi developer cần biết Docker?
Tìm hiểu Docker là gì, vấn đề mà nó giải quyết, sự khác nhau giữa container và máy ảo, cùng những khái niệm nền tảng cần nắm trước khi bắt đầu.

Git Hooks và tự động hóa workflow: Hooks, Aliases, Husky
Tự động hóa Git workflow với hooks: chạy lint trước commit, test trước push, enforce commit message. Kèm Git aliases hữu ích và Husky cho dự án Node.js.

Git Nâng cao: Stash, Cherry-pick, Reset, Revert, Reflog
Các lệnh Git nâng cao giúp bạn xử lý mọi tình huống phức tạp: lưu tạm công việc, chọn commit cụ thể, quay về quá khứ an toàn, và phục hồi lịch sử.

Git Rebase và quy trình làm việc nhóm: Git Flow, GitHub Flow
Hiểu sự khác biệt giữa merge và rebase, khi nào dùng cái nào, interactive rebase để làm sạch lịch sử, và các quy trình làm việc nhóm phổ biến.

Git Branch và Merge: Làm việc song song, resolve conflict
Hiểu sâu về Git branch: tạo nhánh, chuyển nhánh, merge các loại (fast-forward, no-ff, squash) và xử lý conflict như một developer chuyên nghiệp.

Làm việc với Remote Repository: clone, push, pull, fetch
Hướng dẫn kết nối repo local với GitHub/GitLab, clone dự án có sẵn, push code lên remote và đồng bộ thay đổi từ đồng nghiệp về máy.

Git cơ bản: init, add, commit, status, log, diff
Học các lệnh Git cơ bản nhất: khởi tạo repo, theo dõi thay đổi, tạo commit, xem lịch sử và so sánh code. Kèm bài tập thực hành từ đầu.

Cài đặt và cấu hình Git trên Windows, macOS, Linux
Hướng dẫn cài đặt Git trên Windows, macOS và Linux, cấu hình user, editor, SSH key và các thiết lập cần thiết trước khi bắt đầu làm việc.

Git là gì? Tại sao mọi developer cần biết Git?
Tìm hiểu Git là gì, lịch sử ra đời, tại sao nó quan trọng với mọi developer, và những khái niệm nền tảng cần nắm trước khi bắt đầu.

Best practices và chiến lược test thực chiến
Bài tổng kết series: nguyên tắc viết test ổn định và dễ bảo trì, chiến lược test pyramid/trophy, chống flaky test, quản lý dữ liệu, và checklist trưởng thành …

Playwright trong CI/CD với GitHub Actions và Docker
Đưa Playwright lên CI: workflow GitHub Actions hoàn chỉnh, chạy với Docker image chính thức, sharding song song nhiều máy, gộp report với blob, lưu artifact …

Parallel, sharding và cấu hình nâng cao
Tăng tốc test suite lớn: cơ chế worker và fullyParallel, chạy tuần tự khi cần, sharding chia test cho nhiều máy CI, projects với dependencies, global …

Debugging: Trace Viewer, Codegen và UI Mode
Bộ công cụ debug mạnh nhất của Playwright: Trace Viewer để “time-travel” qua từng action, UI Mode để phát triển test tương tác, Codegen để sinh …

Visual Testing và Screenshot Comparison
Phát hiện thay đổi giao diện ngoài ý muốn bằng toHaveScreenshot: tạo baseline, so sánh pixel, cấu hình ngưỡng sai khác, che vùng động, cập nhật snapshot và giữ …

API Testing với Playwright
Playwright không chỉ test UI. Dùng APIRequestContext để test REST API thuần, kết hợp UI + API trong một test, seed/cleanup dữ liệu qua API, và chia sẻ trạng …

Xử lý nâng cao: iframe, tab, upload/download, dialog
Những tình huống thực tế hay gặp: thao tác trong iframe, mở tab/popup mới, upload và download file, xử lý dialog (alert/confirm/prompt), drag & drop và giả …

Authentication và quản lý storage state
Đăng nhập một lần, tái sử dụng cho mọi test bằng storageState. Setup project để chuẩn bị phiên, xử lý nhiều vai trò người dùng, và đăng nhập nhanh qua API thay …

Network: intercept, mock API và route
Chặn và can thiệp request mạng với page.route: mock response API, giả lập lỗi/timeout, sửa request, ghi đè dữ liệu — để test ổn định, nhanh và phủ được cả các …

Page Object Model và tổ chức test ở quy mô lớn
Áp dụng Page Object Model đúng cách trong Playwright: tách locator và hành động, kết hợp POM với fixtures, component object, và những sai lầm POM thường gặp …

Fixtures — kiến trúc test mạnh mẽ của Playwright
Fixtures là hệ thống dependency injection của Playwright. Học cách tạo custom fixture, quản lý scope (test/worker), tự động setup/teardown, override fixture …

Actions, Auto-waiting và Web-first Assertions
Cách Playwright thực hiện hành động (click, fill, select…), cơ chế actionability và auto-waiting đứng sau, khi nào cần waitFor, và vì sao bạn gần như …

Locators — chiến lược định vị phần tử hiện đại
Locator là khái niệm trung tâm của Playwright. Học cách dùng getByRole, getByLabel, getByTestId, chuỗi/lọc locator, xử lý nhiều phần tử và vì sao locator lại …

Playwright Test Runner: test, expect, hooks và annotations
Nắm chắc test runner của Playwright: cấu trúc test/describe, các hook, web-first assertions với expect, soft assertions, annotations (skip/fixme/fail) và cách …

Cài đặt, cấu hình và cấu trúc dự án Playwright
Khởi tạo dự án Playwright với TypeScript, hiểu từng phần trong playwright.config.ts, cấu trúc thư mục chuẩn, và cách quản lý nhiều môi trường …

Playwright là gì? Kiến trúc và so sánh với Selenium, Cypress
Tổng quan về Playwright: kiến trúc dựa trên CDP/WebSocket, mô hình auto-waiting, hỗ trợ đa trình duyệt, và so sánh thẳng thắn với Selenium và Cypress để bạn …

Bài 34 — Tổng kết lộ trình và hướng đi tiếp theo
Nhìn lại toàn bộ hành trình từ số 0 tới bộ test hoàn chỉnh, hệ thống hóa kiến thức đã học, và vạch các hướng phát triển nghề tiếp theo: chuyên sâu testing, …

Bài 33 — Hoàn thiện CI pipeline và đưa project lên GitHub làm portfolio
Hoàn thiện project: cấu hình CI chạy tự động, viết README chuyên nghiệp, công bố HTML report, và trình bày repo sao cho nhà tuyển dụng thấy được năng lực …

Bài 32 — Project thực chiến: xây dựng test suite hoàn chỉnh cho website thương mại điện tử
Áp dụng toàn bộ series vào một project thật: chọn website demo, thiết kế cấu trúc dự án và POM, viết test cho các luồng cốt lõi (tìm kiếm, giỏ hàng, thanh toán) …

Bài 31 — Giới thiệu Visual Regression Testing
Phát hiện thay đổi giao diện ngoài ý muốn bằng so sánh ảnh chụp: toHaveScreenshot, baseline và diff, xử lý phần động, và khi nào visual testing thực sự đáng …

Bài 30 — Tích hợp CI/CD cơ bản với GitHub Actions
Chạy Playwright test tự động trên GitHub Actions mỗi khi push hoặc mở pull request: hiểu CI/CD, viết workflow YAML, và lưu HTML report làm artifact để xem kết …

Bài 29 — Xử lý API Testing
Test API trực tiếp bằng request fixture của Playwright: gửi GET/POST, kiểm tra status và response body, và kết hợp API với UI test để setup dữ liệu nhanh.

Bài 28 — Chạy test song song, đọc report và debug với Trace Viewer
Tăng tốc bằng chạy song song và sharding, cấu hình retries, đọc HTML report, và điều tra test fail bằng Trace Viewer, screenshot, video — bộ công cụ debug mạnh …

Bài 27 — API mocking và intercept network request trong Playwright
Chặn và can thiệp network request với page.route: mock response API để kiểm soát dữ liệu, giả lập lỗi/trạng thái rỗng, và làm test nhanh, ổn định, độc lập với …

Bài 26 — Lưu trạng thái đăng nhập (authentication state)
Đăng nhập một lần rồi tái sử dụng cho mọi test bằng storageState và setup project. Tăng tốc bộ test đáng kể và giữ các test vẫn độc lập.

Bài 25 — Xử lý multiple tabs, popup, iframe và dialog
Thao tác với các tình huống giao diện phức tạp: tab/popup mới mở, iframe lồng trong trang, và hộp thoại dialog (alert/confirm). Các kỹ thuật cần khi test ứng …

Bài 24 — Quản lý test data và biến môi trường với .env
Tách dữ liệu test khỏi code, dùng biến môi trường với file .env cho thông tin nhạy cảm và cấu hình theo môi trường, và kỹ thuật data-driven test chạy cùng logic …

Bài 23 — Fixtures trong Playwright: tái sử dụng setup giữa các test
Fixtures cung cấp môi trường cô lập và tái sử dụng setup/teardown giữa các test. Hiểu fixtures built-in (page, context), beforeEach/afterEach vs …

Bài 22 — Page Object Model: tổ chức test dễ bảo trì
Page Object Model (POM) tách locator và thao tác của mỗi trang vào một class riêng, giúp test sạch, dễ đọc, dễ bảo trì. Cách xây dựng POM và các nguyên tắc …

Bài 21 — Codegen: sinh code test nhanh và giới hạn của công cụ
Dùng Codegen để tự sinh code test bằng cách thao tác trên trình duyệt: cách chạy, đọc code sinh ra, và quan trọng nhất — vì sao không nên phụ thuộc hoàn toàn …

Bài 20 — Assertion với expect: kiểm tra nội dung và trạng thái phần tử
Viết assertion bằng expect: web-first assertions tự chờ, kiểm tra hiển thị/text/giá trị/trạng thái, phủ định với not, và vì sao web-first assertion loại bỏ test …

Bài 19 — Các hành động cơ bản trong Playwright: click, fill, check, select, upload
Thực hiện thao tác trên phần tử: click, điền text (fill), tick checkbox, chọn dropdown, upload file, nhấn phím. Hiểu cơ chế auto-wait giúp thao tác ổn định.

Bài 18 — Locator trong Playwright: getByRole, getByText, getByLabel
Locator là cách Playwright định vị phần tử. Vì sao ưu tiên các locator theo vai trò/ngữ nghĩa (getByRole, getByText, getByLabel) hơn CSS selector, và cách xử lý …

Bài 17 — Đọc lỗi và tư duy debug cho người mới
Cách đọc thông báo lỗi Playwright không hoảng, phân loại các lỗi thường gặp, và quy trình debug có hệ thống. Đặt sớm để bạn không nản khi gặp màn hình đỏ.

Bài 16 — Cấu trúc project Playwright: file config, thư mục tests và HTML report
Hiểu playwright.config.js (baseURL, projects/trình duyệt, retries, timeout, reporter), tổ chức thư mục tests, và cách đọc HTML report. Nắm môi trường trước khi …

Bài 15 — Cài đặt Playwright và viết test đầu tiên
Khởi tạo Playwright bằng npm init playwright, hiểu các file được sinh ra, viết và chạy test tự động đầu tiên, rồi xem báo cáo HTML. Bước đầu tiên vào automation …

Bài 14 — Thiết kế test case tốt: pattern AAA và nguyên tắc test độc lập
Cách viết test case chất lượng: cấu trúc Arrange–Act–Assert, đặt tên test rõ ràng, giữ test độc lập, và xác định test cái gì / không test cái gì. Phần phân biệt …

Bài 13 — Testing là gì? Manual vs automation, các loại test và khi nào tự động hóa
Nền tảng tư duy kiểm thử: phân biệt manual và automation test, hiểu test pyramid (unit/integration/E2E), và tiêu chí quyết định khi nào nên — và không nên — tự …

Bài 12 — Làm quen DevTools: inspect phần tử và đọc cấu trúc trang
Dùng Chrome DevTools để inspect phần tử, đọc HTML/DOM trực tiếp trên trang, thử CSS selector trong Console, và quan sát network request. Công cụ điều tra không …

Bài 11 — HTML và CSS selector cơ bản cho automation test
Đọc hiểu cấu trúc HTML (thẻ, thuộc tính, id, class) và viết CSS selector để định vị phần tử. Kiến thức nền để hiểu locator của Playwright ở Bài 18.

Bài 10 — Bất đồng bộ trong JavaScript: Promise và async/await
Bài quan trọng nhất của giai đoạn JavaScript: hiểu bất đồng bộ (asynchronous), Promise, và cú pháp async/await cùng await. Đây là nền tảng để hiểu vì sao mọi …

Bài 9 — Làm việc với Object trong JavaScript
Biểu diễn dữ liệu có cấu trúc bằng object: truy cập, thêm/sửa thuộc tính, object lồng nhau, mảng object và destructuring cơ bản. Nền tảng để hiểu config và dữ …

Bài 8 — Làm việc với Array và String trong JavaScript
Array và các phương thức hay dùng trong automation test (map, filter, find, includes), cùng các thao tác chuỗi thiết yếu (includes, trim, split, template …

Bài 7 — Hàm (function) và arrow function
Đóng gói code thành hàm tái sử dụng: khai báo, tham số, giá trị trả về, và cú pháp arrow function. Hiểu vì sao hàm là đơn vị tổ chức nền tảng của mọi test.

Bài 6 — Vòng lặp: for, for...of và khi nào dùng loại nào
Lặp lại một khối lệnh nhiều lần với vòng lặp for cổ điển và for…of. Phân biệt khi nào dùng loại nào, kèm break/continue và liên hệ với thao tác lặp trong …

Bài 5 — Câu lệnh điều kiện if/else và toán tử so sánh
Cho chương trình ra quyết định với if/else/else if, nắm các toán tử so sánh và logic, và hiểu vì sao luôn dùng === thay vì ==. Nền tảng logic cho mọi assertion …

Bài 4 — Biến và kiểu dữ liệu trong JavaScript
Khai báo biến với let và const, phân biệt các kiểu dữ liệu cơ bản (string, number, boolean, null, undefined) và cách kiểm tra kiểu bằng typeof. Nền tảng cho mọi …

Bài 3 — Git & GitHub cơ bản: commit, push, pull request và .gitignore
Thiết lập Git, nắm vòng đời thay đổi (working directory → staging → commit), đẩy code lên GitHub, dùng .gitignore và pull request. Nền tảng quản lý phiên bản …

Bài 2 — Cài đặt môi trường: VS Code, Node.js và chạy file JavaScript đầu tiên
Cài đặt Node.js và VS Code, nắm các thao tác terminal cơ bản, và chạy file JavaScript đầu tiên bằng Node. Kèm cách xác minh cài đặt và xử lý các lỗi thường gặp.

Bài 1 — Lập trình là gì? Tư duy giải quyết vấn đề bằng code
Dành cho người chưa từng viết một dòng code: hiểu lập trình thực ra là gì bằng ví dụ đời thường, và làm quen với “tư duy lập trình” — cách chẻ nhỏ …

Bài 0 — Automation Test là gì? Vì sao chọn Playwright và lộ trình của series
Bài mở đầu: hiểu automation test là gì bằng ngôn ngữ đời thường, vì sao mình chọn Playwright cho người mới, và toàn cảnh 35 bài bạn sẽ đi qua để từ số 0 thành …
Không tìm thấy bài viết phù hợp