Case thực chiến · Đời Đạo Song Tu với AI

Con bug khó nhất,
tôi đã xóa nó đi.

Và đó là quyết định đúng nhất của cả dự án.
Buông — không phải bỏ cuộc.

FC-FastCapture · App chụp màn hình + GIF · macOS

Tôi đo được con bug đó chạy. Log không nói dối. Vậy mà tôi vẫn xóa sạch.

Vì cố thêm lúc đó là phục vụ cái tôi — không phải người dùng. Nhưng để hiểu vì sao một người lại xóa thứ mình vừa làm cho chạy được, phải quay lại từ đầu.

Sáu tháng trước, ý tưởng rất rõ: một app nhỏ trên macOS — chụp màn hình, quay GIF, sửa ảnh ngay tại chỗ. Nghe đơn giản. Thực tế là một bãi mìn. Build xong → crash. Sửa xong → mất quyền. Có đêm tôi gõ đúng một câu cho AI: "Kiểm tra lại 3 lần trước khi ship." Rồi đóng máy. Gần như bỏ.

Bài này không phải về app của tôi. Mà về cách bạn làm việc với AI — và biết khi nào dừng — để không bao giờ bế tắc (hay bỏ cuộc) như cũ. App chỉ là bằng chứng: giờ nó rút mỗi lần chụp-sửa-gửi từ 4 thao tác xuống 2, không một lần crash.

FC
Chụp nhanh⌘1
Chụp + Edit⌘2
Khoá kích thước⌘3
Chụp cửa sổ⌘4
Quay GIF⌘5
Thanh nổi FC-FastCapture — 5 chế độ, một phím tắt mỗi cái
CopyLưu
1
Trình sửa ngay trên ảnh — mũi tên · khung · bút dạ · làm mờ · đánh số · màu · undo
Phần 1 · Những cú vấp

Mỗi lỗi dạy lại một điều

Đừng sửa theo cảm giác. Sửa theo cảm giác → sửa nhầm chỗ.

Cú vấp đầu: "ấn phím lưu thì app thoát." Triệu chứng gọn vậy. Nếu đoán, tôi đi sửa nút Lưu. Đo kỹ thì sự thật lộ ra: thư viện phím tắt gọi một API hệ thống ngoài luồng chính trên macOS 26 → crash tầng C, không try/except nào bắt được.

"App thoát khi lưu" không phải lỗi nút Lưu.
Mà là thư viện gọi sai luồng.

Lời giải không phải vá. Mà là thay máu — dựng phím tắt bằng một event tap chạy đúng luồng chính. Không TIS. Không crash.

Cú vấp hai: "chỉ viết được mũi tên, không gõ được chữ." Lại một triệu chứng đánh lừa. Gốc rễ: chọn sai loại cửa sổ — loại "Tool" trên macOS không thể nhận bàn phím.

"Không gõ được chữ" không phải lỗi ô text.
Mà là chọn sai loại cửa sổ.
Phần 2 · Nút thắt

Cái giá ẩn của mỗi lần build

Build lần thứ chín. Lại crash. Tôi sửa một dòng — người dùng phải vào cài đặt cấp quyền lại, lần thứ năm trong một tối. Đây là chỗ tôi suýt buông.

Mỗi lần build lại, chữ ký đổi. macOS coi đó là app khác → âm thầm xoá quyền cũ. Cứ sửa một dòng là phải cấp quyền lại. Mỗi. Lần.

Một app tốt mà bắt cấp quyền 5 lần,
vẫn là một app tệ.

Đo ra gốc rễ rồi, lời giải mới đúng tầm: ký bằng một chứng chỉ cố định. Bằng chứng nằm ở "designated requirement" của bản build:

designated => identifier "...fcfastcapture" and certificate root = H"e0152e99…" # khoá theo CHỨNG CHỈ — không theo nội dung build # → mọi bản sau giữ nguyên quyền. Làm 1 lần. Dùng mãi.
Ad-hoc
build · de9425… build · 4ee5ea… build · cf1b54…
✗ cấp quyền lại mỗi lần
Cố định
buildbuildbuild certificate root · e0152e99…
✓ giữ nguyên quyền
Chữ ký đổi mỗi build = macOS xoá quyền. Một chứng chỉ cố định = nhớ mãi.

Cụ thể với bạn: ngày build 15 lần × 2 phút cấp lại 5 quyền = 30 phút bốc hơi mỗi ngày. Sau khi ký cố định: 0. Làm 1 lần cho đàng hoàng → để lại một tài sản → dùng mãi.

Đó là khoảnh khắc con app ngừng chống lại tôi.

Phần 3 · Mài giũa

Những chi tiết làm nên "10 điểm"

Bấm phím tắt
⌘2
Kéo chọn vùng
drag
Sửa ngay trên ảnh
in-place
Copy hoặc Lưu
⌘C / .png
Bốn nhịp — không một bước thừa. Trước đây là: chọn → chụp → rồi mới sửa.
Phần 4 · Bug khó nhất

Khi câu trả lời đúng là "dừng lại"

Một người dùng báo: bấm phím chụp khi app đang toàn màn hình thì không chạy.

Tôi lao vào. Thử cách một: đặt thuộc tính cho cửa sổ hiện trên mọi không gian. Không đủ. Cách hai: nâng cửa sổ lên mức cao nhất — như công cụ chụp của chính macOS. Hiện được, nhưng ESC chết. Cách ba: cho chuột và phím đi vòng qua event tap, không kích hoạt app.

Và tôi đo được nó chạy — overlay nhận chuột, vẽ ra đúng vùng chọn, không nhảy không gian:

▶ mode2 vào ov.press btn=1 pos=(350,300) ← chuột qua tap ov._finish rect=301x121 ← chọn vùng OK

Nhưng cái editor mở ra sau đó vẫn cần kích hoạt app để gõ được. Và tôi không tự dựng được cảnh "toàn màn hình thật" để test cho trọn — máy người dùng tiếng Việt, mọi cách script đều trượt.

Người dùng nhắn lại, gọn: "Bỏ qua đi. Tôi thu nhỏ cửa sổ lại là xong."

Tôi gỡ sạch toàn bộ phần đó. Trả app về trạng thái ổn định.

Không phải mọi bug đều đáng sửa.
Có bug đáng… bỏ.

Đây là chỗ Đời chạm Đạo. Suốt sáu tháng tôi dạy huynh đệ 10X đúng một câu: cái tôi muốn hoàn hảo, phụng sự chỉ cần đủ dùng.

Con bug này không phải bài toán code. Nó là bài kiểm tra: tôi đang sửa cho người dùng — hay đang sửa cho cái tôi của mình? Người dùng đã có lối đi: thu nhỏ cửa sổ. Cố thêm, là tôi leo một ngọn núi không ai cần tôi leo. Buông nó xuống không phải một lần thua. Mà là một lần tu điềm tĩnh — biết tách cái mình muốn ra khỏi cái người khác cần.

Phần 5 · Trước khi chốt

Đánh giá 3 lần, không tin suông

Bản chốt không dựa vào "tôi nghĩ là chạy". Tôi cho nhiều con AI soi song song, rồi bắt mỗi phát hiện tự chứng minh:

Lần 1 · Audit 6 chiều12 vấn đề thật (verify đối kháng) Lần 2 · Sửa → 12/12 đã vá Lần 3 · Verify lại28/28 PASS · 0 hồi quy

Kẹt-busy khi lỗi chụp · re-entry qua hộp thoại · cửa sổ GIF bị thu hồi · đa-màn-hình chọn nhầm vùng · và bảy điểm nữa. Tất cả: đo, vá, đo lại.

← tự tin · chất lượng các vòng đo · vá · đo lại → giấc mơ app crash "muốn bỏ" ký cố định bỏ fullscreen 10 điểm
Điểm thấp nhất không phải dấu chấm hết — nó là chỗ giá trị bắt đầu
Từ một app suýt bị bỏ rơi
đến "10đ ưng ý."
Cả chặng nằm gọn giữa hai câu nói.
Đúc kết

Bốn điều mang theo

01 · Nền tảng
Debug nền tảng, không chỉ debug code
macOS mới phá vỡ cả thư viện "chuẩn". Phải hiểu hệ điều hành, không chỉ ngôn ngữ.
02 · Bằng chứng
Đo, đừng đoán
Ghi log ra file. Bắt máy tự chứng minh nó chạy — test, số thật, ảnh. Không tin suông.
03 · Tài sản
Làm 1 lần cho đàng hoàng
Chứng chỉ ký cố định, một nguồn thiết kế, sổ "gotcha". Mỗi cú vấp thành một tài sản dùng lại.
04 · Điểm dừng
Biết khi nào dừng
Con app chỉ thực sự tốt sau chỗ khó nhất. Và đôi khi, sau chỗ khó nhất là một lời "bỏ qua đi" sáng suốt.
Bài học then chốt

Cách nói chuyện với AI

Đây là tài sản đắt nhất. Code rồi sẽ cũ. Cách làm việc với AI thì dùng lại cho mọi việc sau. Tôi gọi nó là khung này — năm nguyên tắc để làm việc với AI mà không mất quyền kiểm soát:

Khung CẦM LÁI5 nguyên tắc làm việc với AI
  • Mô tả triệu chứng, đừng kê đơn. Bạn báo "ấn lưu thì app thoát" — không bảo "sửa thư viện X". Bạn giữ "cái gì sai", để AI lo "vì sao sai".
  • Đo, đừng đoán — và bắt AI cũng thế. Đừng nhận "tôi nghĩ là chạy". Đòi test, log, ảnh, output thật.
  • Cho AI quyền làm cho tới. Audit, gỡ sạch, ký cố định — AI làm trọn khi được trao đủ quyền và bối cảnh.
  • Biết khi nào để AI hỏi. Một câu hỏi 30 giây rẻ hơn một vòng làm sai.
  • Đóng vòng lặp — mỗi vòng để lại một tài sản. Báo → điều tra → bằng chứng → vá → đo lại.
↑ Chụp lại khung này — dùng cho mọi dự án AI sau
Bạn cầm lái hướng đi và tiêu chuẩn.
AI cày tầng sâu và tự chứng minh.
Giờ tới lượt bạn

Con app dang dở nào bạn đang định bỏ?

Lấy Khung CẦM LÁI, chạy đúng một vòng với AI: báo triệu chứng → bắt nó đo → đóng vòng. Rồi nhắn tôi nghe nó đi tới đâu.

Còn FC-FastCapture — tôi đóng gói thành bản tải miễn phí cho anh em build app cùng AI.
Tải FC-FastCapture — miễn phí →
macOS Apple Silicon & Mac Intel · Windows · không quảng cáo, không thu phí
Đủ bộ ba: Apple Silicon · Mac Intel · Windows — cùng một lõi, chỉ thay lớp nền tảng.