3 điểm bởi GN⁺ 2024-07-25 | 2 bình luận | Chia sẻ qua WhatsApp
  • Đây là trò chơi giúp trẻ em học cách kết hợp pipe bằng cách nối các lệnh UNIX cơ bản như cat, grep, tail, head, wc, sort, uniq bằng thẻ bài
  • Trò chơi giả định phụ huynh biết các lệnh cơ bản và trình diễn cách chạy thực tế; nếu không có môi trường UNIX, có thể dùng jslinux trên trình duyệt
  • Người chơi tạo chuỗi lệnh phù hợp với mục tiêu trên thẻ nhiệm vụ, chẳng hạn dùng pipeline như cat 03.txt | sort | uniq -c | sort -n | tail -1
  • Mỗi vòng, người chơi nhỏ tuổi nhất chọn cách thắng là chuỗi ngắn nhất hoặc chuỗi dài nhất, và người hoàn thành nhiệm vụ trước sẽ ghi điểm
  • PDF thẻ bài và mã nguồn được công khai để có thể tự in và sử dụng; cũng có gói mở rộng khó hơn về Process Substitution

Mục tiêu và vật dụng chuẩn bị của trò chơi thẻ bài

  • UNIX Pipe Card Game là trò chơi thẻ bài dạy trẻ em cách kết hợp các lệnh UNIX bằng pipe
  • Các lệnh được đề cập trong trò chơi cơ bản là cat, grep, tail, head, wc, sort, uniq
  • Phụ huynh cần chạy lệnh trên máy tính thật để trình diễn; nếu không có hệ thống UNIX, có thể dùng jslinux trên trình duyệt
  • Tài liệu để tự in và mã nguồn được công khai
  • Gói mở rộng khó hơn, UNIX Pipe Game - Process Substitution, đề cập đến process substitution và paste, tr, cut, bc

Diễn tiến vòng chơi và ví dụ chuỗi lệnh

  • Mục tiêu của vòng ví dụ là in ra dòng xuất hiện nhiều nhất trong tệp
    • Đọc tệp bằng cat
    • Sắp xếp các dòng bằng sort
    • Đếm số dòng trùng lặp bằng uniq -c
    • Áp dụng sắp xếp theo số bằng sort -n
    • In dòng cuối cùng bằng tail -1
  • Chuỗi lệnh ví dụ để giải mục tiêu này như sau
    • cat 03.txt | sort | uniq -c | sort -n | tail -1
  • Cách chơi cơ bản diễn ra theo thứ tự sau
    • Người chơi nhỏ tuổi nhất chọn thể thức vòng chơi
      • Người tạo được chuỗi pipe nhỏ nhất hoàn thành nhiệm vụ sẽ thắng
      • Người tạo được chuỗi pipe lớn nhất hoàn thành nhiệm vụ sẽ thắng
    • Người chơi nhỏ tuổi nhất chọn một nhiệm vụ từ thẻ nhiệm vụ, và cùng một nhiệm vụ không được chọn hai lần
    • Xáo thẻ và đặt úp trên bàn
    • Mỗi người chơi rút lá trên cùng của bộ bài theo chiều kim đồng hồ và cố gắng hoàn thành nhiệm vụ
    • Người chơi đầu tiên hoàn thành nhiệm vụ sẽ ghi điểm
    • Khi không còn nhiệm vụ nào nữa, trò chơi kết thúc

Các bài toán mà thẻ nhiệm vụ yêu cầu

  • Ví dụ nhiệm vụ gồm các mục tiêu có thể giải bằng cách kết hợp lệnh UNIX, như chọn dòng, tìm kiếm chuỗi, đếm số lượng và điều khiển đầu ra
    • In dòng thứ hai
    • In dòng áp chót
    • In dòng thứ 7
    • In dòng xuất hiện nhiều nhất
    • In dòng xuất hiện hiếm nhất
    • Đếm số dòng có "rises"
    • In dòng đầu tiên có chứa W
    • Đếm số dòng có "in"
    • Hiển thị hai dòng ngẫu nhiên
    • Đếm số từ trong hai dòng cuối
    • In dòng thứ 7 và thứ 8
    • Đếm số dòng có !
    • Đếm số dòng không có !
    • Tạo chuỗi lệnh không in ra gì

2 bình luận

 
GN⁺ 2024-07-25
Ý kiến trên Hacker News
  • Tôi đã làm các bộ bài này (https://punkx.org/) để dạy con gái, và cho đến nay chúng khá hiệu quả
    Đặc biệt Unix pipe, mã máy 4917 (https://punkx.org/4917/), bộ bài con trỏ (https://punkx.org/c-pointer-game/) rất tốt, còn bộ Python thì chỉ dùng khoảng 10 lá
    Bạn cũng có thể thích board game về buffer overflow bằng hợp ngữ RISC-V https://punkx.org/overflow/, và tùy trình độ của trẻ, cũng có thể chơi trò Rắn và Thang bằng goto https://punkx.org/overflow/build/snakes-and-ladders.pdf
    Nếu có con, tôi cũng khuyên nên in thử https://punkx.org/panic/. Nó có những trò nghịch nằm gọn trên một lá bài poker, chẳng hạn cứ mỗi 30 giây lại ngẫu nhiên nhấn backspace hoặc space, hoặc nếu Minecraft đang mở thì ngẫu nhiên nhấn W
    Tôi đang tặng nhiều bộ bài cho giáo viên và trường học, nên nếu quan tâm thì cứ gửi email
    Tái bút: Tôi sẽ còn ở London thêm 1 tuần nữa nên nếu đặt hàng bây giờ thì giao sẽ chậm, nhưng bù lại tôi sẽ bỏ thêm 1~2 bộ bài vào gói hàng
    Nhân tiện, bộ mở rộng Unix pipe toàn là process substitution; tôi không nghĩ nó hữu ích cho trẻ em, nhưng các câu đố thì ổn

    • Nếu bạn thích đọc các bình luận cũ, cũng có một thread Show HN từ vài năm trước: https://news.ycombinator.com/item?id=33222687
    • Thật sự rất tuyệt
      Một điều tôi để ý là trong trò chơi có các nhiệm vụ như “in dòng thứ hai”, “in dòng thứ bảy”, nhưng cả hai dòng đó đều trống. Vì vậy, nói chặt chẽ thì grep không khớp gì cũng có thể là đáp án đúng
    • Với tư cách là người mua trước đây, tôi muốn đề nghị làm thêm bộ bài thiên kiến nhận thức dựa trên https://www.designhacks.co/products/cognitive-bias-codex-pos...
    • Tối nay sau khi xong việc chỉnh sửa lại, tôi định đặt vài bộ
      Tôi tò mò muốn biết phần in ấn được xử lý thế nào. Bạn tự làm, in theo yêu cầu, hay đặt số lượng lớn rồi tự gửi hàng? Tôi luôn thấy thú vị cách vận hành việc bán sản phẩm vật lý quy mô nhỏ
    • Vài tháng trước tôi đã đặt mỗi bộ đang bán một bộ
      Các con gái tôi vẫn còn quá nhỏ để dùng, nhưng tôi nghĩ các bộ bài rất tuyệt và mong đến ngày khoảng 8 năm nữa sẽ lôi ra sử dụng
  • Tôi tự hỏi liệu trẻ em ngày nay có thực sự hiểu được những thứ như thế này không
    Tôi không có con và cũng không có dịp ở gần trẻ em, nên mong mọi người xem đây là một câu hỏi chân thành

    • Tôi nghĩ điều này phụ thuộc rất nhiều vào trẻ và phụ huynh. Tôi dạy con gái từ khi bé 10 tuổi, và cố gắng làm gì đó cùng nhau mỗi ngày. Có thể xem quá trình ở đây: https://github.com/jackdoe/programming-for-kids/blob/master/...
      Khó khăn là phải cạnh tranh với Snapchat và Google/Meta để giành sự chú ý của con bé. Trường học cũng khiến bé khá mệt, còn streak của Snapchat thì thật sự phiền phức. Càng nhiều bạn thì càng nhiều streak phải duy trì, thành ra mỗi ngày phải gửi khoảng 400 tin nhắn và không có hồi kết
      Tôi dạy con rằng mỗi ngày có 100.000 lập trình viên, nhà tâm lý học, phụ trách sản phẩm, v.v. đi làm và suy nghĩ cách khai thác tối đa giá trị từ sự chú ý của con. Vì vậy tôi bảo con phải luôn ý thức được “thuật toán” đang khiến mình làm gì
      Con bé hiểu Unix pipe khá nhanh nhưng không dùng thường xuyên. Dù vậy, bé đã nắm được khái niệm một chương trình đọc đầu ra của chương trình khác, và việc hiểu dòng lệnh cũng không quá khó
      Tuy nhiên tôi đã dùng nhiều mẹo. Ví dụ, trên PC Windows của con, tôi đổi shell từ explorer sang cmd.exe để khi khởi động lên là vào ngay command prompt, rồi để con tự khám phá và tự sửa. Tôi cũng tạo trò săn kho báu trong filesystem, dùng dir, cd, v.v. để tìm tệp, và với trò Bandit của https://overthewire.org/wargames/bandit/, mỗi lần qua một level tôi thưởng Robux
      Tôi muốn dạy con máy tính hoạt động như thế nào, và cách khiến máy tính làm điều mình muốn. Thanh ghi là gì, lệnh là gì, chương trình và tiến trình là gì — có thể nói là những điều cơ bản nhất
      Trong quá trình đó, tôi cũng dạy cách chia nhỏ vấn đề, cách suy nghĩ, và quan trọng nhất là cách học. Tôi cố dạy phần cốt lõi của sự vật, để không còn điều gì bí ẩn giữa việc nhấn bàn phím thì chữ hiện trên màn hình hay cách ChatGPT dự đoán từ tiếp theo. Hiện tôi đang làm một board game mạng nơ-ron hồi quy với 3 nơ-ron, trò dạy nó biết đếm: https://punkx.org/move-37/rnn.pdf
      Rốt cuộc thì tôi cũng không chắc việc dạy trẻ điều gì có quan trọng đến thế hay không
    • Tôi không rõ về trẻ em, nhưng tôi đã thấy sinh viên đại học theo đúng nghĩa đen không biết dùng thiết bị điện toán nào ngoài iOS
      Trong lớp, đồng nghiệp của tôi phải giải thích từ các khái niệm như tệp, thư mục
      Thành thật mà nói tôi không nghĩ điều đó quá tệ. Tôi nghĩ máy tính cũng sẽ đi theo con đường giống ô tô. Đa số chỉ biết những thứ rất cơ bản cần để vận hành món đồ, còn kiến thức sâu hơn sẽ dành cho người đam mê và chuyên gia
      Vì vậy, dù bên trong máy tính có trở nên phức tạp hơn, cách sử dụng thông thường có lẽ sẽ ngày càng thu hẹp
  • Muốn chơi game thì chắc chắn phải sửa xử lý pipe trên https://exaequos.com

  • Nếu chơi trò dùng số pipe tối thiểu với những người lớn lên cùng awk, perl... thì độ khó sẽ tăng ngay

    • Đó là vì cách tính điểm đếm số pipe. Có lẽ đếm số ký tự sẽ tốt hơn
      Hoặc cứ chơi đúng với tinh thần của trò chơi: học từng công cụ theo đúng mục đích ban đầu của nó
      Với các tác vụ xử lý nhanh dùng một lần, người ta hay dùng awk/sed, và thường xử lý theo một mô hình tư duy tương tự. Kiểu như tạo luồng đầu vào, dùng sed để biến dữ liệu thành dạng record, dùng awk xử lý record, rồi tinh chỉnh đầu ra bằng sort/uniq
      Trong nhiều trường hợp sedawk có thể thay thế cho nhau, nhưng làm vậy thì sẽ mất nhiều thời gian hơn để hình dung trong đầu và cũng khó tái sử dụng hơn
  • Luật nói rằng người chơi hoàn thành nhiệm vụ trước sẽ thắng vòng đó, nhưng tôi tò mò không biết dạng chuỗi pipe dài nhất hoạt động thế nào

    • Chúng tôi đã chơi cho đến khi hết bài
  • Chắc sắp có người đến trao giải uuoc rồi
    Đặt cat ở đầu giúp việc thêm thứ gì đó vào phần đầu pipeline đơn giản hơn

  • Việc có thể tự in ra thật sự rất hay
    Tôi đang phân vân có nên in ngay bằng máy in ở văn phòng không

  • Điểm hay của trò này là người biết UUoC sẽ thắng
    cat file.txt | tr a-z A-Z | sort là kẻ thua, còn tr < file.txt a-z A-Z | sort là người thắng

  • Phí giao hàng đến Canada là $19 thì có vẻ hơi quá
    Không biết có ai ở Greater Vancouver muốn gom đơn cùng không

    • Xin lỗi :( Chúng tôi dùng PostNL, thực tế còn đắt hơn, và hầu hết các đơn giao ngoài EU đều lỗ
      Dù vậy, mỗi bộ bài đều có PDF nên bạn có thể tự in ở tiệm in địa phương. Nếu không in hộp thì sẽ rẻ hơn
      Chỉ in lên giấy A4 rồi cắt bằng kéo cũng không vấn đề gì lớn. Thậm chí điều đó đôi khi còn hữu ích khi giải thích cho ai đó bằng bút và giấy
      Trong trường hợp này, hộp là https://punkx.org/unix-pipe-game/unix-pipe-box.pdf, còn các lá bài là https://punkx.org/unix-pipe-game/unix-pipe-cards.pdf
    • Việc lấy một tài sản hoàn toàn số, in lên giấy ở Europe, rồi chất lên tàu gửi chậm sang tận Canada nghe khá kỳ lạ
    • 12 euro cho thư liên lục địa có theo dõi là mức giá khá chuẩn
    • Rõ ràng là nếu muốn thì có thể tự in, và với mức giá này mà còn giao từ Europe thì gần như chẳng còn lời lãi gì
 
unsure4000 2024-07-25

8.000₩ nhỉ, nếu ai có bản sao thì xin hãy chia sẻ cảm nhận nhé