cbirds: Đàn chim bay lượn ngay trong terminal của bạn

Công nghệ10 tháng 10, 2026·5 phút đọc

cbirds là một chương trình C99 không phụ thuộc thư viện, mô phỏng thuật toán boids của Craig Reynolds để tạo ra đàn chim bay lượn ngay trong terminal. Nó hỗ trợ vẽ bằng ký tự braille, sextants, blocks hoặc sprite thật qua giao thức đồ họa Kitty, cùng nhiều tính năng thú vị như viết chữ, hiển thị đồng hồ và ghi hình GIF.

cbirds: Đàn chim bay lượn ngay trong terminal của bạn

cbirds: Đàn chim bay lượn ngay trong terminal của bạn

Nếu bạn từng nghĩ terminal chỉ toàn những dòng lệnh khô khan, thì cbirds sẽ khiến bạn đổi ý. Đây là một chương trình mã nguồn mở viết bằng C99, không phụ thuộc bất kỳ thư viện nào, mô phỏng thuật toán boids huyền thoại của Craig Reynolds để tạo ra một đàn chim bay lượn sống động ngay trong cửa sổ dòng lệnh. Điểm đặc biệt là nó có thể vẽ bằng ký tự braille, sextants, blocks hoặc thậm chí là sprite thật nhờ giao thức đồ họa Kitty.

Huy hiệu trạng thái kiểm thửHuy hiệu trạng thái kiểm thử

Một chương trình, nhiều cách hiển thị

cbirds được thiết kế để chạy trên mọi terminal mà không cần đoán loại terminal bạn đang dùng. Mặc định, nó vẽ bằng ký tự braille — cách này hoạt động ở khắp mọi nơi. Nếu muốn nét vẽ đậm hơn, bạn có thể chọn --render sextants hoặc --render blocks. Còn nếu đang dùng Kitty hoặc Ghostty, bạn có thể bật --render kitty để hiển thị sprite thật qua giao thức đồ họa Kitty, cho hình ảnh sắc nét và mượt mà hơn hẳn.

Điều đáng nói là cbirds không dùng zlib, libpng hay ncurses. Toàn bộ mã giải mã PNG, GIF và DEFLATE đều được viết tay và nằm gọn trong kho mã nguồn. Con chim được vẽ sẵn dưới dạng một file PNG được nhúng thẳng vào binary. Khi khởi động, chương trình sẽ xoay nó thành 60 hướng, ép thành 3 tư thế cánh và tô màu theo từng sắc độ của bảng màu — khoảng 1.500 hình ảnh nhỏ được tạo ra chỉ trong 1/5 giây.

Hiệu năng ấn tượng

Nhờ sử dụng lưới (grid) để tìm hàng xóm, 800 con chim chỉ tốn khoảng 0,5 mili giây CPU mỗi khung hình, còn 4.000 con chim tốn khoảng 4 mili giây. Với chế độ --unlock-fps, chương trình sẽ vẽ nhanh nhất có thể mà terminal cho phép — hữu ích cho việc đo hiệu năng, dù tốc độ bay của đàn chim vẫn tuân theo thời gian thực.

Bạn có thể tự kiểm chứng bằng lệnh cbirds --bench 300 để in ra các số đo trên máy của mình.

Cài đặt cực kỳ đơn giản

cbirds hỗ trợ cài đặt qua Homebrew trên macOS và Linux:

brew install clainstone/tap/cbirds

Hoặc qua apt trên Debian 12, Ubuntu 22.04 trở lên (cả amd64 lẫn arm64):

sudo apt install curl
curl -fsSL https://clainstone.com/apt/cbirds.gpg | sudo tee /etc/apt/keyrings/cbirds.gpg >/dev/null
echo "deb [signed-by=/etc/apt/keyrings/cbirds.gpg] https://clainstone.com/apt stable main" | sudo tee /etc/apt/sources.list.d/cbirds.list
sudo apt update
sudo apt install cbirds

Nếu muốn tự biên dịch từ mã nguồn, bạn chỉ cần trình biên dịch C và make, không cần gì thêm:

git clone https://github.com/clainstone/cbirds
cd cbirds
make
sudo make install

Huy hiệu giấy phép MITHuy hiệu giấy phép MIT

Những tính năng "gây nghiện"

Ngoài việc chỉ bay lượn, cbirds còn có vô số tùy chọn thú vị:

  • --say "back in five": Đàn chim sẽ xếp thành chữ và giữ nguyên như một tấm biển. Phần đàn còn lại sẽ bay vòng quanh dòng chữ theo hình ellipse, tạo cảm giác như một dòng sông chim đang chảy.
  • --clock: Đàn chim viết giờ hiện tại theo định dạng HH:MM. Mỗi phút, những con chim tạo nên chữ số thay đổi sẽ bay đi và những con khác bay đến viết số mới — bạn luôn đọc được đồng hồ bất cứ lúc nào.
  • --matrix: Trời mưa chim.
  • --picture logo.png: Đàn chim sẽ vẽ một file PNG theo màu sắc của bức ảnh.
  • Kết hợp với lệnh khác: Đây có lẽ là tính năng độc đáo nhất. Bạn có thể pipe đầu ra của bất kỳ lệnh nào vào cbirds và các ký tự sẽ bay lên:
fastfetch | cbirds
ls --color=always -la | cbirds
git log --oneline --graph --color=always | cbirds

cbirds đọc cả các chuỗi escape nên logo đi kèm thông tin vẫn hiển thị đúng bố cục. Sau vài giây, từng ký tự sẽ bay đi theo làn sóng, rồi sau khoảng 20 giây chúng lại được gọi về đúng vị trí cũ.

Ghi hình và chế độ screensaver

Bạn có thể ghi lại màn trình diễn thành GIF hoặc file asciinema (.cast) mà không cần terminal:

cbirds --record flock.gif --hawks 2 --seed 5
cbirds --record flock.cast --record-fps 30

Ngoài ra, chế độ --screensaver sẽ thoát ngay khi có phím bấm, click chuột hoặc di chuyển con trỏ. Nó rất hợp để làm màn hình khóa cho tmux hoặc zsh:

set -g lock-after-time 300
set -g lock-command "cbirds --screensaver --clock"

Thuật toán đằng sau

Mô hình được lấy từ bài báo nổi tiếng "Flocks, Herds, and Schools: A Distributed Behavioral Model" của Craig Reynolds (SIGGRAPH 1987). Mỗi con chim chỉ nhìn thấy hàng xóm của mình và tuân theo ba quy tắc đơn giản:

  • Giữ khoảng cách với những con xung quanh
  • Bay theo hướng mà đàn đang bay
  • Tiến về phía trung tâm của nhóm

Cộng thêm một lực đẩy nhẹ để tránh mép màn hình, tổng hợp bốn lực này lại rồi quay đầu theo kết quả — nhưng chỉ quay được một góc giới hạn trong mỗi khung hình. Chính giới hạn quay đó tạo nên những mặt trước cong đặc trưng của đàn chim thay vì một đám mây co cụm lại. Lặp lại 60 lần mỗi giây và bạn có một màn murmuration (đàn chim sáo bay lượn) hoàn chỉnh — trong khi không một dòng code nào biết đàn chim trông như thế nào.

cbirds được phát hành dưới giấy phép MIT, mã nguồn mở hoàn toàn trên GitHub. Đây là một ví dụ tuyệt vời cho thấy sức mạnh của lập trình C thuần túy và sự sáng tạo không giới hạn trong thế giới dòng lệnh.

Huy hiệu không phụ thuộc thư việnHuy hiệu không phụ thuộc thư viện

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗