Công cụ 22/09/2026 5 phút

Pipe và file descriptor: ba luồng của Unix, và bẫy thứ tự 2>&1

Pipe và chuyển hướng là nền của dòng lệnh Unix, nhưng nhiều người dùng mà không hiểu ba luồng stdin/stdout/stderr tách nhau thế nào — dẫn tới bẫy kinh điển: cmd 2>&1 > file lại KHÔNG gộp được lỗi vào file. Bài mở đầu sê-ri Unix đo thật bằng bash: tách stdout/stderr, và vì sao thứ tự của > và 2>&1 quyết định kết quả.

Công cụ 22/09/2026 5 phút

git submodule: repo lồng trong repo — vì sao nó ghim commit và hay gây rối

Submodule nhúng một kho Git vào kho khác nhưng không chép file — nó chỉ ghi một con trỏ tới đúng một commit của kho con. Điều này khiến build tái lập được nhưng cũng gây rối nếu không hiểu. Bài này đo thật: submodule là gitlink mode 160000, lib lên v2 mà app vẫn ghim v1, và cách cập nhật đúng — cùng ba cái bẫy kinh điển.

Công cụ 22/09/2026 5 phút

git gc, fsck và bảo trì kho: dọn rác, nén, và vì sao reflog cứu object khỏi bị xóa

Thư mục .git tự phình rồi tự dọn. Bài cuối sê-ri Git đo thật: gc gom loose object thành packfile nén (9 object 36 KiB xuống 1.86 KiB), fsck báo object mồ côi, và điểm nhiều người hiểu sai — gc --prune=now KHÔNG xóa object mà reflog còn giữ; phải hết hạn reflog rồi gc mới xóa thật. Đây chính là lưới an toàn cứu commit tưởng đã mất.

Lập trình 22/09/2026 7 phút

Histogram và percentile: vì sao latency trung bình 45ms là lời nói dối, và p99 mới là sự thật

Sếp hỏi 'API nhanh không?', bạn trả lời 'trung bình 45ms'. Cả hai đều sai lầm — vì không ai trải nghiệm cái trung bình đó. Bài này đo thật trên 100.000 mẫu latency lệch: mean 44.9ms nhưng p50 chỉ 15.3ms và p99 tới 725ms — trung bình rơi vào khoảng trống không ai gặp. Kèm cách dựng histogram kiểu Prometheus để ước lượng percentile với O(1) bộ nhớ, và đo thẳng sai số của nó (p95 lệch tới -34%).