<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>hoatq.dev</title><description>Blog cá nhân của Trần Quang Hòa — Software Engineer tại Hà Nội. Viết về backend, DevOps, AI agents, Laravel, Nuxt.js.</description><link>https://hoatq.dev/</link><language>vi-VN</language><item><title>OpenTelemetry distributed tracing: tìm bottleneck trong microservices không cần đoán mò</title><link>https://hoatq.dev/blog/opentelemetry-distributed-tracing-tim-bottleneck-microservices/</link><guid isPermaLink="true">https://hoatq.dev/blog/opentelemetry-distributed-tracing-tim-bottleneck-microservices/</guid><description>Khi một request đi qua 6 service và chậm 3 giây, log thường vô dụng vì bạn không biết bottleneck nằm ở đâu. Bài này chia sẻ cách mình setup OpenTelemetry cho FastAPI + Node, propagate trace context qua HTTP và message queue, và những bài học sau khi trace giúp tìm ra hai vụ N+1 ẩn trong production.</description><pubDate>Tue, 28 Apr 2026 00:00:00 GMT</pubDate><category>observability</category><category>opentelemetry</category><category>microservices</category><category>performance</category><category>backend</category></item><item><title>Cursor pagination: vì sao OFFSET càng ngày càng chậm và cách fix</title><link>https://hoatq.dev/blog/cursor-pagination-vi-sao-offset-cham-va-cach-fix/</link><guid isPermaLink="true">https://hoatq.dev/blog/cursor-pagination-vi-sao-offset-cham-va-cach-fix/</guid><description>Trang 1 load 50ms, trang 1000 load 5 giây — cùng một query, cùng một limit. Bài này giải thích vì sao OFFSET là cái bẫy âm thầm trong mọi API phân trang, và cách chuyển sang cursor-based pagination cho Postgres với keyset index đúng chuẩn.</description><pubDate>Fri, 24 Apr 2026 00:00:00 GMT</pubDate><category>backend</category><category>postgresql</category><category>performance</category><category>api-design</category><category>database</category></item><item><title>memray — tìm memory leak Python như dân anh Bloomberg</title><link>https://hoatq.dev/blog/memray-tim-memory-leak-python-nhu-dan-anh-bloomberg/</link><guid isPermaLink="true">https://hoatq.dev/blog/memray-tim-memory-leak-python-nhu-dan-anh-bloomberg/</guid><description>Chia sẻ cách mình dùng memray (memory profiler của Bloomberg) để tìm memory leak trong Python production — flamegraph, live mode, pytest plugin và những tip thực tế từ một lần debug OOM lúc nửa đêm.</description><pubDate>Thu, 23 Apr 2026 04:30:00 GMT</pubDate><category>python</category><category>performance</category><category>debugging</category><category>observability</category></item><item><title>Cấu trúc file SKILL.md: tái sử dụng instruction cho Claude Code và AI agent</title><link>https://hoatq.dev/blog/cau-truc-file-skill-md-tai-su-dung-instruction-cho-ai-agent/</link><guid isPermaLink="true">https://hoatq.dev/blog/cau-truc-file-skill-md-tai-su-dung-instruction-cho-ai-agent/</guid><description>Mỗi lần mở chat với AI là lặp lại hướng dẫn &quot;hãy commit theo conventional commits...&quot;, &quot;review code tập trung vào security...&quot;. SKILL.md giải quyết vấn đề đó — mổ xẻ cấu trúc, frontmatter, và cách thiết kế skill tái dùng được cho Claude Code, Craft Agent.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate><category>ai</category><category>claude-code</category><category>developer-tools</category><category>productivity</category><category>workflow</category></item><item><title>Hooks trong Claude Code: bắt buộc tuân theo quy ước mà không cần nhắc agent</title><link>https://hoatq.dev/blog/hooks-claude-code-enforce-convention-khong-can-nhac-agent/</link><guid isPermaLink="true">https://hoatq.dev/blog/hooks-claude-code-enforce-convention-khong-can-nhac-agent/</guid><description>Thay vì dặn AI &quot;nhớ cập nhật CLAUDE.md sau khi sửa code&quot; mỗi session, hook chạy tự động sau mỗi Edit/Write và nhắc giùm. Bài này đi qua các sự kiện, định dạng JSON đầu vào, và các tình huống thực dụng — kèm ví dụ hook thật đang chạy production.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate><category>ai</category><category>claude-code</category><category>developer-tools</category><category>automation</category><category>workflow</category></item><item><title>Subagent trong Claude Code: thiết kế agent chuyên môn hóa cho codebase lớn</title><link>https://hoatq.dev/blog/subagent-claude-code-thiet-ke-agent-chuyen-mon-hoa/</link><guid isPermaLink="true">https://hoatq.dev/blog/subagent-claude-code-thiet-ke-agent-chuyen-mon-hoa/</guid><description>Main agent không nên tự làm tất cả. Subagent là cách chia việc cho &quot;AI chuyên khoa&quot; — mỗi cái có context riêng, tool set riêng, model riêng. Bài này mổ xẻ AGENT.md, cách delegate đúng, và những bẫy mình từng dính khi thiết kế 12 subagent cho monorepo production.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate><category>ai</category><category>claude-code</category><category>developer-tools</category><category>architecture</category><category>workflow</category></item><item><title>Tìm hiểu folder .claude: cấu trúc và cấu hình Claude Code</title><link>https://hoatq.dev/blog/tim-hieu-folder-claude-cau-truc-va-cau-hinh-claude-code/</link><guid isPermaLink="true">https://hoatq.dev/blog/tim-hieu-folder-claude-cau-truc-va-cau-hinh-claude-code/</guid><description>Mở một project có dùng Claude Code bạn sẽ thấy folder .claude với agents, skills, hooks, settings. Bài này dẫn bạn đi qua toàn bộ cấu trúc — global vs project, nên commit cái gì, gitignore cái gì, và cách tổ chức để cả team dùng chung.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate><category>ai</category><category>claude-code</category><category>developer-tools</category><category>configuration</category><category>workflow</category></item><item><title>Graceful shutdown trong container: đừng để SIGTERM làm rớt request</title><link>https://hoatq.dev/blog/graceful-shutdown-container-dung-de-sigterm-lam-rot-request/</link><guid isPermaLink="true">https://hoatq.dev/blog/graceful-shutdown-container-dung-de-sigterm-lam-rot-request/</guid><description>Mỗi lần rolling deploy là một nhóm request đang chạy bị cắt ngang, khách hàng nhận 502, payment lưng chừng. Bài này mổ xẻ vòng đời SIGTERM trong Kubernetes và cách làm graceful shutdown đúng cho FastAPI, Node.js và worker — kèm lesson học được từ production.</description><pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate><category>backend</category><category>kubernetes</category><category>docker</category><category>devops</category><category>reliability</category></item><item><title>Cache Stampede: chống sụp database khi Redis hết hạn</title><link>https://hoatq.dev/blog/cache-stampede-chong-sup-database-khi-redis-het-han/</link><guid isPermaLink="true">https://hoatq.dev/blog/cache-stampede-chong-sup-database-khi-redis-het-han/</guid><description>Cache TTL hết đúng lúc traffic peak, hàng nghìn request cùng bắn xuống DB và sập nguyên hệ thống. Bài này mổ xẻ cache stampede và ba cách xử lý đã dùng thật: single-flight lock, early refresh (XFetch), và probabilistic expiration — kèm code Python.</description><pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate><category>backend</category><category>redis</category><category>caching</category><category>performance</category><category>distributed-systems</category></item><item><title>Server-Sent Events vs WebSocket: khi nào dùng cái nào</title><link>https://hoatq.dev/blog/server-sent-events-vs-websocket-khi-nao-dung-cai-nao/</link><guid isPermaLink="true">https://hoatq.dev/blog/server-sent-events-vs-websocket-khi-nao-dung-cai-nao/</guid><description>WebSocket không phải lúc nào cũng là câu trả lời đúng cho realtime. So sánh SSE và WebSocket qua các use case thực tế — từ LLM streaming, notifications, đến chat hai chiều — kèm ví dụ FastAPI.</description><pubDate>Sun, 19 Apr 2026 00:00:00 GMT</pubDate><category>backend</category><category>realtime</category><category>fastapi</category><category>http</category><category>architecture</category></item><item><title>Idempotency Key: thiết kế API không ngại retry</title><link>https://hoatq.dev/blog/idempotency-key-thiet-ke-api-khong-ngai-retry/</link><guid isPermaLink="true">https://hoatq.dev/blog/idempotency-key-thiet-ke-api-khong-ngai-retry/</guid><description>Vì sao retry có thể làm mất tiền của khách hàng, và Idempotency Key giải quyết vấn đề trùng lặp request như thế nào — kèm triển khai thực tế với FastAPI và PostgreSQL.</description><pubDate>Sat, 18 Apr 2026 00:00:00 GMT</pubDate><category>backend</category><category>api-design</category><category>postgresql</category><category>resilience</category><category>design-pattern</category></item><item><title>Outbox Pattern: đảm bảo consistency giữa database và message broker</title><link>https://hoatq.dev/blog/outbox-pattern-dam-bao-consistency-giua-database-va-message-broker/</link><guid isPermaLink="true">https://hoatq.dev/blog/outbox-pattern-dam-bao-consistency-giua-database-va-message-broker/</guid><description>Tại sao publish event sau khi commit DB lại gây mất event, và Outbox Pattern giải quyết vấn đề này như thế nào — kèm triển khai thực tế với PostgreSQL, FastAPI và một worker đơn giản.</description><pubDate>Fri, 17 Apr 2026 00:00:00 GMT</pubDate><category>backend</category><category>microservices</category><category>postgresql</category><category>design-pattern</category><category>event-driven</category></item><item><title>Retry và Circuit Breaker: xử lý lỗi tạm thời trong hệ thống phân tán</title><link>https://hoatq.dev/blog/retry-va-circuit-breaker-xu-ly-loi-trong-he-thong-phan-tan/</link><guid isPermaLink="true">https://hoatq.dev/blog/retry-va-circuit-breaker-xu-ly-loi-trong-he-thong-phan-tan/</guid><description>Chia sẻ cách triển khai retry pattern và circuit breaker để hệ thống phân tán chịu lỗi tốt hơn — từ exponential backoff, jitter đến state machine, kèm code thực tế với Python và TypeScript.</description><pubDate>Thu, 16 Apr 2026 00:00:00 GMT</pubDate><category>backend</category><category>microservices</category><category>resilience</category><category>design-pattern</category></item><item><title>Craft Agents: giao diện agent mã nguồn mở mà developer nên thử</title><link>https://hoatq.dev/blog/craft-agents-giao-dien-agent-ma-nguon-mo-cho-developer/</link><guid isPermaLink="true">https://hoatq.dev/blog/craft-agents-giao-dien-agent-ma-nguon-mo-cho-developer/</guid><description>Giới thiệu Craft Agents — ứng dụng desktop mã nguồn mở biến AI agent thành đồng đội thực sự với session như document, kết nối mọi API, và workflow linh hoạt cho developer.</description><pubDate>Wed, 15 Apr 2026 02:00:00 GMT</pubDate><category>ai</category><category>developer-tools</category><category>open-source</category><category>productivity</category></item><item><title>CMAS: quản lý nhiều tài khoản Claude Code trên một máy — không cần login lại</title><link>https://hoatq.dev/blog/cmas-quan-ly-nhieu-tai-khoan-claude-code-tren-mot-may/</link><guid isPermaLink="true">https://hoatq.dev/blog/cmas-quan-ly-nhieu-tai-khoan-claude-code-tren-mot-may/</guid><description>Giới thiệu CMAS (Claude Multi Account Switcher) — ứng dụng desktop giúp chuyển đổi nhanh giữa nhiều tài khoản Claude Code, mở VSCode isolated sessions, và theo dõi usage real-time.</description><pubDate>Tue, 14 Apr 2026 00:00:00 GMT</pubDate><category>ai</category><category>developer-tools</category><category>open-source</category><category>productivity</category></item><item><title>Database migration không downtime: expand-contract pattern và bài học từ production</title><link>https://hoatq.dev/blog/database-migration-khong-downtime-expand-contract-pattern/</link><guid isPermaLink="true">https://hoatq.dev/blog/database-migration-khong-downtime-expand-contract-pattern/</guid><description>Chia sẻ cách chạy database migration an toàn trên production mà không cần maintenance window — từ expand-contract pattern, backward-compatible changes đến rollback strategy với Alembic và PostgreSQL.</description><pubDate>Mon, 13 Apr 2026 00:00:00 GMT</pubDate><category>database</category><category>postgresql</category><category>devops</category><category>backend</category><category>best-practices</category></item><item><title>Laravel 13: AI SDK, PHP Attributes và những thay đổi đáng chú ý</title><link>https://hoatq.dev/blog/laravel-13-tinh-nang-moi-ai-sdk-php-attributes/</link><guid isPermaLink="true">https://hoatq.dev/blog/laravel-13-tinh-nang-moi-ai-sdk-php-attributes/</guid><description>Tổng hợp những tính năng mới trong Laravel 13 — từ AI SDK first-party, PHP attributes cho Eloquent, vector search với pgvector, đến queue routing và upgrade guide thực tế.</description><pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate><category>laravel</category><category>php</category><category>ai</category><category>backend</category></item><item><title>Structured logging: debug production hiệu quả mà không cần SSH</title><link>https://hoatq.dev/blog/structured-logging-debug-production-hieu-qua/</link><guid isPermaLink="true">https://hoatq.dev/blog/structured-logging-debug-production-hieu-qua/</guid><description>Chia sẻ cách chuyển từ console.log/print sang structured logging — JSON logs, correlation ID, log levels, và cách tận dụng chúng để debug production nhanh hơn 10x mà không cần SSH vào server.</description><pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate><category>backend</category><category>devops</category><category>observability</category><category>best-practices</category></item><item><title>Rate Limiting API: bảo vệ backend khỏi bị quá tải với Redis</title><link>https://hoatq.dev/blog/rate-limiting-api-bao-ve-backend-voi-redis/</link><guid isPermaLink="true">https://hoatq.dev/blog/rate-limiting-api-bao-ve-backend-voi-redis/</guid><description>Chia sẻ cách triển khai rate limiting thực tế cho API — từ thuật toán sliding window, token bucket đến implementation với Redis và FastAPI, kèm những bài học từ production.</description><pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate><category>backend</category><category>redis</category><category>security</category><category>api</category><category>performance</category></item><item><title>Deploy Nuxt.js + FastAPI lên AWS ECS (Phần 2) — Route 53, CloudFront, SSL và WAF</title><link>https://hoatq.dev/blog/deploy-nuxtjs-fastapi-len-aws-ecs-phan-2-route53-cloudfront-waf/</link><guid isPermaLink="true">https://hoatq.dev/blog/deploy-nuxtjs-fastapi-len-aws-ecs-phan-2-route53-cloudfront-waf/</guid><description>Phần 2: Hoàn thiện hệ thống production-ready với Route 53 (DNS), ACM (SSL miễn phí), CloudFront (CDN), WAF (tường lửa), auto-scaling và monitoring. Từ ALB domain xấu xí đến website chạy HTTPS với domain riêng.</description><pubDate>Tue, 07 Apr 2026 15:30:00 GMT</pubDate><category>aws</category><category>route53</category><category>cloudfront</category><category>waf</category><category>ssl</category><category>devops</category><category>ecs</category></item><item><title>Deploy Nuxt.js + FastAPI lên AWS ECS (Phần 1) — Dockerize, ECR, ECS Fargate và CI/CD</title><link>https://hoatq.dev/blog/deploy-nuxtjs-fastapi-len-aws-ecs-voi-github-actions/</link><guid isPermaLink="true">https://hoatq.dev/blog/deploy-nuxtjs-fastapi-len-aws-ecs-voi-github-actions/</guid><description>Hướng dẫn thực tế triển khai hệ thống full-stack Nuxt.js + FastAPI lên AWS ECS Fargate. Phần 1: Dockerize services, push image lên ECR, setup ECS cluster, và CI/CD tự động bằng GitHub Actions.</description><pubDate>Tue, 07 Apr 2026 15:00:00 GMT</pubDate><category>aws</category><category>ecs</category><category>nuxtjs</category><category>fastapi</category><category>github-actions</category><category>devops</category><category>docker</category></item><item><title>Git Worktree: Làm việc nhiều branch cùng lúc mà không cần stash</title><link>https://hoatq.dev/blog/git-worktree-lam-viec-nhieu-branch-cung-luc/</link><guid isPermaLink="true">https://hoatq.dev/blog/git-worktree-lam-viec-nhieu-branch-cung-luc/</guid><description>Hướng dẫn thực tế sử dụng git worktree để checkout nhiều branch đồng thời, review PR nhanh hơn, và xử lý hotfix mà không mất context đang làm dở.</description><pubDate>Sun, 05 Apr 2026 09:00:00 GMT</pubDate><category>git</category><category>productivity</category><category>developer-tools</category></item><item><title>Bảo mật AI coding agent: tránh prompt injection, lộ secrets và cấp quyền quá tay</title><link>https://hoatq.dev/blog/bao-mat-ai-coding-agent-tranh-prompt-injection-va-lo-secrets/</link><guid isPermaLink="true">https://hoatq.dev/blog/bao-mat-ai-coding-agent-tranh-prompt-injection-va-lo-secrets/</guid><description>Chia sẻ 6 nguyên tắc thực tế để dùng AI coding agent an toàn hơn trong team dev — từ giới hạn quyền, bảo vệ secrets, đến cách giảm rủi ro prompt injection và supply-chain.</description><pubDate>Thu, 02 Apr 2026 00:00:00 GMT</pubDate><category>ai</category><category>security</category><category>developer-tools</category><category>best-practices</category></item><item><title>GitHub Actions CI/CD: Tự động hóa từ test đến deploy</title><link>https://hoatq.dev/blog/github-actions-ci-cd-tu-dong-hoa-tu-test-den-deploy/</link><guid isPermaLink="true">https://hoatq.dev/blog/github-actions-ci-cd-tu-dong-hoa-tu-test-den-deploy/</guid><description>Hướng dẫn thiết lập pipeline CI/CD hoàn chỉnh với GitHub Actions — từ chạy test, build Docker image, đến deploy tự động lên VPS. Kèm tips tối ưu thời gian build và bảo mật secrets.</description><pubDate>Wed, 01 Apr 2026 13:00:00 GMT</pubDate><category>github-actions</category><category>ci-cd</category><category>devops</category><category>automation</category></item><item><title>Tối ưu PostgreSQL: Index, Query Plan và những bài học từ production</title><link>https://hoatq.dev/blog/toi-uu-postgresql-index-va-query-plan/</link><guid isPermaLink="true">https://hoatq.dev/blog/toi-uu-postgresql-index-va-query-plan/</guid><description>Chia sẻ kinh nghiệm thực tế tối ưu PostgreSQL — từ cách đọc EXPLAIN ANALYZE, chọn đúng loại index, đến những sai lầm phổ biến mà developer hay mắc phải.</description><pubDate>Wed, 01 Apr 2026 02:00:00 GMT</pubDate><category>postgresql</category><category>database</category><category>performance</category><category>backend</category></item><item><title>AI Agent cho Developer: Từ assistant đến đồng đội thực sự</title><link>https://hoatq.dev/blog/ai-agent-cho-developer-huong-dan-thuc-te/</link><guid isPermaLink="true">https://hoatq.dev/blog/ai-agent-cho-developer-huong-dan-thuc-te/</guid><description>Hướng dẫn thực tế cách tận dụng AI agent, sub-agent, skills, hooks và MCP để xây dựng workflow tự động hóa cho developer — không phải lý thuyết suông.</description><pubDate>Tue, 31 Mar 2026 10:30:00 GMT</pubDate><category>ai</category><category>automation</category><category>developer-tools</category><category>productivity</category></item><item><title>Tối ưu Docker image: Từ 1.2GB xuống 80MB với multi-stage builds</title><link>https://hoatq.dev/blog/toi-uu-docker-image-voi-multi-stage-builds/</link><guid isPermaLink="true">https://hoatq.dev/blog/toi-uu-docker-image-voi-multi-stage-builds/</guid><description>Hướng dẫn thực tế giảm kích thước Docker image bằng multi-stage builds, kèm tips bảo mật container và tối ưu build time cho production.</description><pubDate>Tue, 31 Mar 2026 10:00:00 GMT</pubDate><category>docker</category><category>devops</category><category>performance</category></item><item><title>Axios bị tấn công supply chain: tài khoản maintainer bị chiếm, RAT được cài vào máy dev</title><link>https://hoatq.dev/blog/axios-npm-bi-tan-cong-supply-chain/</link><guid isPermaLink="true">https://hoatq.dev/blog/axios-npm-bi-tan-cong-supply-chain/</guid><description>Phân tích chi tiết vụ tấn công supply chain vào Axios — package npm 100 triệu lượt tải/tuần. Điều gì đã xảy ra, cách phát hiện và bài học rút ra.</description><pubDate>Tue, 31 Mar 2026 07:00:00 GMT</pubDate><category>security</category><category>npm</category><category>supply-chain</category></item><item><title>Tại sao tôi chọn Vue.js/Nuxt.js thay vì React hay Angular</title><link>https://hoatq.dev/blog/tai-sao-chon-vuejs-nuxtjs/</link><guid isPermaLink="true">https://hoatq.dev/blog/tai-sao-chon-vuejs-nuxtjs/</guid><description>Sau 8 năm làm việc, tôi đã thử cả 3 framework phổ biến nhất. Đây là lý do tôi gắn bó với Vue.js và Nuxt.js cho các dự án của mình.</description><pubDate>Tue, 31 Mar 2026 06:00:00 GMT</pubDate><category>vue.js</category><category>nuxt.js</category><category>frontend</category></item><item><title>Xin chào thế giới!</title><link>https://hoatq.dev/blog/xin-chao-the-gioi/</link><guid isPermaLink="true">https://hoatq.dev/blog/xin-chao-the-gioi/</guid><description>Bài viết đầu tiên trên blog cá nhân hoatq.dev — nơi mình chia sẻ về lập trình, công nghệ và cuộc sống.</description><pubDate>Tue, 31 Mar 2026 03:00:00 GMT</pubDate><category>tản mạn</category></item><item><title>Tại sao mình chọn Astro cho blog cá nhân</title><link>https://hoatq.dev/blog/tai-sao-chon-astro/</link><guid isPermaLink="true">https://hoatq.dev/blog/tai-sao-chon-astro/</guid><description>So sánh các framework phổ biến và lý do mình chọn Astro để xây dựng blog cá nhân — từ hiệu năng, DX đến hệ sinh thái.</description><pubDate>Mon, 30 Mar 2026 04:00:00 GMT</pubDate><category>astro</category><category>web development</category></item><item><title>5 thói quen giúp developer làm việc hiệu quả hơn</title><link>https://hoatq.dev/blog/5-thoi-quen-developer-hieu-qua/</link><guid isPermaLink="true">https://hoatq.dev/blog/5-thoi-quen-developer-hieu-qua/</guid><description>Những thói quen đơn giản nhưng hiệu quả mà mình đã áp dụng để cải thiện năng suất và chất lượng công việc.</description><pubDate>Sat, 28 Mar 2026 05:00:00 GMT</pubDate><category>productivity</category><category>career</category></item></channel></rss>