3 คะแนน โดย GN⁺ 2024-07-25 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • เป็นเกมที่ให้เด็กๆ เรียนรู้การ ต่อคำสั่งผ่าน pipe โดยนำคำสั่ง UNIX พื้นฐานอย่าง cat, grep, tail, head, wc, sort, uniq มาเรียงต่อกันเป็นการ์ด
  • แนวทางนี้ตั้งอยู่บนสมมติฐานว่าผู้ปกครองรู้จักคำสั่งพื้นฐานและสาธิตการรันจริงให้ดูได้ และหากไม่มีสภาพแวดล้อม UNIX ก็สามารถใช้ jslinux บนเบราว์เซอร์ได้
  • ผู้เล่นจะสร้างสายคำสั่งให้ตรงกับเป้าหมายของการ์ดงาน โดยมีตัวอย่างไปป์ไลน์อย่าง cat 03.txt | sort | uniq -c | sort -n | tail -1
  • ในแต่ละรอบ ผู้เล่นที่อายุน้อยที่สุดจะเลือกกติกาว่าแบบ สายคำสั่งสั้นที่สุด หรือ สายคำสั่งยาวที่สุด เป็นผู้ชนะ และผู้เล่นที่ทำงานสำเร็จก่อนจะได้คะแนน
  • มีการเผยแพร่ทั้งไฟล์ PDF ของการ์ดและโค้ดเพื่อพิมพ์ใช้งานเองได้ และยังมีภาคเสริมที่ยากขึ้นคือ Process Substitution ให้ด้วย

จุดประสงค์ของเกมไพ่และสิ่งที่ต้องเตรียม

  • UNIX Pipe Card Game เป็น เกมไพ่ ที่สอนเด็กๆ ให้รู้จักวิธีเชื่อมคำสั่ง UNIX ด้วย pipe
  • คำสั่งที่ใช้ในเกมพื้นฐานคือ cat, grep, tail, head, wc, sort, uniq
  • ผู้ปกครองควรสาธิตการรันคำสั่งบนคอมพิวเตอร์จริง และถ้าไม่มีระบบ UNIX ก็สามารถใช้ jslinux บนเบราว์เซอร์ได้
  • มีการเปิดเผยสื่อสำหรับพิมพ์ใช้เองและโค้ดไว้แล้ว
  • ภาคเสริมเวอร์ชันที่ยากขึ้น UNIX Pipe Game - Process Substitution ครอบคลุม process substitution และ paste, tr, cut, bc

ตัวอย่างลำดับรอบและสายคำสั่ง

  • เป้าหมายของรอบตัวอย่างคือการแสดง บรรทัดที่พบบ่อยที่สุดในไฟล์
    • ใช้ cat เพื่ออ่านไฟล์
    • ใช้ sort เพื่อเรียงบรรทัด
    • ใช้ uniq -c เพื่อนับจำนวนบรรทัดที่ซ้ำกัน
    • ใช้ sort -n เพื่อเรียงตามค่าตัวเลข
    • ใช้ tail -1 เพื่อแสดงบรรทัดสุดท้าย
  • ตัวอย่างสายคำสั่งสำหรับแก้โจทย์นี้มีดังนี้
    • cat 03.txt | sort | uniq -c | sort -n | tail -1
  • ลำดับการเล่นพื้นฐานเป็นดังนี้
    • ผู้เล่นที่อายุน้อยที่สุดจะเลือกรูปแบบของรอบ
      • คนที่สร้าง สาย pipe ที่สั้นที่สุด และทำงานสำเร็จเป็นผู้ชนะ
      • คนที่สร้าง สาย pipe ที่ยาวที่สุด และทำงานสำเร็จเป็นผู้ชนะ
    • ผู้เล่นที่อายุน้อยที่สุดเลือกงานหนึ่งอย่างจากการ์ดงาน และงานเดิมห้ามเลือกซ้ำ
    • สับไพ่แล้ววางคว่ำไว้บนโต๊ะ
    • ผู้เล่นแต่ละคนจั่วไพ่ใบบนสุดตามเข็มนาฬิกา แล้วพยายามทำงานให้สำเร็จ
    • ผู้เล่นคนแรกที่ทำงานสำเร็จจะได้คะแนน
    • เมื่อไม่มีงานเหลือแล้ว เกมจะจบลง

โจทย์ที่การ์ดงานต้องการ

  • ตัวอย่างงานประกอบด้วยเป้าหมายที่แก้ได้ด้วยการผสมคำสั่ง UNIX เช่น การเลือกบรรทัด การค้นหาสตริง การนับจำนวน และการควบคุมผลลัพธ์
    • แสดงบรรทัดที่สอง
    • แสดงบรรทัดรองสุดท้าย
    • แสดงบรรทัดที่ 7
    • แสดงบรรทัดที่พบบ่อยที่สุด
    • แสดงบรรทัดที่พบน้อยที่สุด
    • นับจำนวนบรรทัดที่มี "rises"
    • แสดงบรรทัดแรกที่มี W
    • นับจำนวนบรรทัดที่มี "in"
    • แสดงสองบรรทัดแบบสุ่ม
    • นับจำนวนคำในสองบรรทัดสุดท้าย
    • แสดงบรรทัดที่ 7 และ 8
    • นับจำนวนบรรทัดที่มี !
    • นับจำนวนบรรทัดที่ไม่มี !
    • สร้างสายคำสั่งที่ไม่แสดงผลอะไรเลย

2 ความคิดเห็น

 
GN⁺ 2024-07-25
ความคิดเห็นจาก Hacker News
  • ผมทำสำรับการ์ดเหล่านี้ (https://punkx.org/) เพื่อสอนลูกสาว และจนถึงตอนนี้ก็ได้ผลค่อนข้างดี
    โดยเฉพาะ Unix pipes, 4917 machine code (https://punkx.org/4917/), สำรับ pointers (https://punkx.org/c-pointer-game/) ดีมาก ส่วนสำรับ Python ใช้อยู่ราว ๆ 10 ใบ
    น่าจะชอบบอร์ดเกมจัดการ buffer overflow ด้วย RISC-V assembly https://punkx.org/overflow/ ด้วย และถ้าระดับของเด็กเหมาะ ก็ยังมีเกมงูกับบันไดแบบ goto https://punkx.org/overflow/build/snakes-and-ladders.pdf ได้เหมือนกัน
    ถ้ามีลูก แนะนำให้ลองพิมพ์ https://punkx.org/panic/ ด้วย ในนั้นมีลูกเล่นที่ยัดลงไปในการ์ดโป๊กเกอร์หนึ่งใบได้ เช่น กด backspace หรือ space แบบสุ่มทุก 30 วินาที หรือถ้าเปิด Minecraft อยู่ก็จะสุ่มกด W
    ผมกำลังบริจาคหลายสำรับให้ครูและโรงเรียนอยู่ ถ้าสนใจก็ส่งอีเมลมาได้
    ป.ล. ผมจะอยู่ London อีก 1 สัปดาห์ ดังนั้นถ้าสั่งตอนนี้การจัดส่งจะช้าหน่อย แต่ผมจะใส่สำรับเพิ่มให้ในแพ็กเกจอีก 1-2 ชุดแทน
    เพิ่มเติมคือสำรับขยาย Unix pipes เป็นเรื่อง process substitution ล้วน ๆ ซึ่งผมไม่คิดว่าจะมีประโยชน์กับเด็กนัก แต่ปริศนาก็ถือว่าโอเค

    • ถ้าใครชอบอ่านคอมเมนต์เก่า ๆ ก็มี Show HN thread เมื่อหลายปีก่อนด้วย: https://news.ycombinator.com/item?id=33222687
    • เจ๋งมากจริง ๆ
      มีอย่างหนึ่งที่สังเกตเห็นคือ ในเกมมีโจทย์อย่าง “พิมพ์บรรทัดที่สอง”, “พิมพ์บรรทัดที่เจ็ด” แต่ทั้งสองบรรทัดว่างอยู่ ดังนั้นพูดอย่างเคร่งครัดแล้ว grep ที่ไม่แมตช์อะไรเลยก็อาจถือเป็นคำตอบที่ถูกต้องได้
    • ในฐานะคนที่เคยซื้อไปก่อนหน้านี้ อยากขอให้ทำ สำรับอคติทางความคิด โดยอิงจาก https://www.designhacks.co/products/cognitive-bias-codex-pos... ด้วย
    • คืนนี้พอรีเวิร์กเสร็จแล้วน่าจะสั่งสักหลายชุด
      แต่อยากรู้ว่าเรื่อง การพิมพ์ จัดการยังไง ทำเอง, พิมพ์ตามสั่ง, หรือสั่งล็อตใหญ่แล้วจัดส่งเอง ผมสนใจเสมอว่าการขายสินค้าที่จับต้องได้ขนาดเล็กเขาดำเนินงานกันยังไง
    • เมื่อหลายเดือนก่อนผมสั่งสำรับที่ขายอยู่มาครบอย่างละหนึ่งชุด
      ตอนนี้ลูกสาวยังเล็กเกินกว่าจะใช้ แต่ผมว่าสำรับพวกนี้ยอดเยี่ยมมาก และรอวันที่จะหยิบออกมาใช้ในอีกราว 8 ปีข้างหน้าอย่างตื่นเต้น
  • สงสัยว่าเดี๋ยวนี้เด็ก ๆ จะเข้าใจอะไรแบบนี้ได้จริงไหม
    ผมไม่มีลูกและก็ไม่ค่อยได้อยู่ใกล้เด็ก ๆ เลย อยากให้รับคำถามนี้ว่าเป็นคำถามจริงใจ

    • ผมว่ามันต่างกันมากตามตัวเด็กและพ่อแม่ ผมสอนลูกสาวมาตั้งแต่อายุ 10 ขวบ และพยายามทำอะไรด้วยกันทุกวัน ดูความคืบหน้าได้ที่นี่: https://github.com/jackdoe/programming-for-kids/blob/master/...
      ความยากคือเราต้องแข่งขันแย่งความสนใจของลูกสาวกับ Snapchat และ Google/Meta ทุกวัน โรงเรียนก็ทำให้เหนื่อยพอสมควร และ streaks ของ Snapchat น่ารำคาญจริง ๆ ยิ่งมีเพื่อนมากก็ยิ่งต้องรักษา streak มากขึ้น จนต้องส่งข้อความวันละประมาณ 400 ข้อความแบบไม่รู้จบ
      ผมสอนลูกสาวว่ามีนักพัฒนา นักจิตวิทยา เจ้าของผลิตภัณฑ์ ฯลฯ กว่า 100,000 คนที่ตื่นมาทำงานทุกวันเพื่อคิดว่าจะดึงคุณค่าจากความสนใจของเธอให้ได้มากที่สุดยังไง ดังนั้นเธอต้องคอยตระหนักว่า “อัลกอริทึม” กำลังทำให้เธอทำอะไรอยู่
      เธอเข้าใจ Unix pipes ได้ค่อนข้างเร็ว แม้จะไม่ได้ใช้บ่อย แต่ก็จับแนวคิดได้ว่าโปรแกรมหนึ่งอ่านผลลัพธ์ของอีกโปรแกรมหนึ่ง และการทำความเข้าใจ command line ก็ไม่ได้ยากขนาดนั้น
      แต่ผมก็ใช้กลเม็ดหลายอย่าง เช่น บนพีซี Windows ของลูกสาว ผมเปลี่ยน shell ให้บูตเข้า cmd.exe แทน explorer เพื่อให้ขึ้น command prompt มาเลย แล้วให้เธอสำรวจและแก้กลับเอง ผมยังทำเกมล่าสมบัติในไฟล์ซิสเต็มให้เธอหาไฟล์ด้วย dir, cd ฯลฯ และให้รางวัลเป็น Robux สำหรับเกม Bandit ของ https://overthewire.org/wargames/bandit/ ทุกครั้งที่ผ่านด่าน
      ผมอยากสอนว่าคอมพิวเตอร์ทำงานยังไง และจะทำให้คอมพิวเตอร์ทำสิ่งที่เราต้องการได้ยังไง ตั้งแต่รีจิสเตอร์คืออะไร คำสั่งคืออะไร โปรแกรมและโปรเซสคืออะไร เรียกได้ว่าเป็นพื้นฐานที่สุดของพื้นฐาน
      ระหว่างทางก็สอนเรื่องการแบ่งปัญหา วิธีคิด และที่สำคัญที่สุดคือวิธีเรียนรู้ไปด้วย ผมอยากสอนแก่นของสิ่งต่าง ๆ ให้ไม่มีอะไรเป็นเรื่องลึกลับ ไม่ว่าจะเป็นกระบวนการที่กดคีย์บอร์ดแล้วตัวอักษรขึ้นบนจอ หรือวิธีที่ ChatGPT ทำนายคำถัดไป ตอนนี้ผมกำลังทำบอร์ดเกม recurrent neural network ที่มีนิวรอน 3 ตัว เพื่อสอนให้นับเลข: https://punkx.org/move-37/rnn.pdf
      สุดท้ายแล้ว ผมก็ไม่แน่ใจนักว่าการสอนอะไรให้เด็กนั้นสำคัญมากขนาดไหน
    • ไม่รู้ว่าเด็ก ๆ เป็นยังไง แต่ผมเคยเจอนักศึกษามหาวิทยาลัยที่ใช้เครื่องคอมพิวต์ซึ่งไม่ใช่ iOS แบบตรงตัวไม่เป็น
      ในห้องเรียน เพื่อนร่วมชั้นต้องอธิบายกันตั้งแต่แนวคิดอย่าง ไฟล์ และโฟลเดอร์
      พูดตรง ๆ ผมไม่คิดว่ามันแย่ขนาดนั้น คอมพิวเตอร์ก็น่าจะเดินไปในทางเดียวกับรถยนต์ คนส่วนใหญ่จะรู้แค่พื้นฐานที่สุดที่จำเป็นต่อการใช้งาน ส่วนความรู้ลึกกว่านั้นจะเหลือไว้ให้พวกผู้หลงใหลและผู้เชี่ยวชาญ
      เพราะฉะนั้น ต่อให้ภายในคอมพิวเตอร์จะซับซ้อนขึ้นเรื่อย ๆ รูปแบบการใช้งานทั่วไปก็ดูจะยิ่งลดลง
  • ถ้าจะเล่นเกม ต้องไปแก้ pipe handling ที่ https://exaequos.com ให้เรียบร้อยก่อน

  • ถ้าเล่นเกมนับจำนวน pipe ให้น้อยที่สุดกับคนที่โตมากับการใช้ awk, perl และอื่น ๆ ความยากจะพุ่งขึ้นทันที

    • นั่นเป็นเพราะว่า วิธีคิดคะแนน นับจำนวน pipe การนับจำนวนตัวอักษรอาจจะดีกว่า
      หรือถ้าจะให้ตรงกับเจตนาของเกม ก็เล่นไปพร้อมกับเรียนรู้แต่ละเครื่องมือตามวัตถุประสงค์ดั้งเดิมของมัน
      สำหรับงานแบบครั้งเดียวจบที่ต้องทำเร็ว มักจะใช้ awk/sed กันเยอะ และโดยทั่วไปก็ใช้โมเดลความคิดคล้าย ๆ กัน คือสร้าง input stream ขึ้นมา ใช้ sed จัดข้อมูลให้อยู่ในรูป record ใช้ awk ประมวลผล record แล้วค่อยเกลาผลลัพธ์ด้วย sort/uniq อะไรทำนองนั้น
      ในหลายกรณี sed กับ awk ใช้แทนกันได้ แต่ถ้าทำแบบนั้นจะใช้เวลาวาดภาพในหัวนานขึ้น และนำกลับมาใช้ซ้ำได้ยากขึ้น
  • ในกติกาบอกว่าผู้เล่นที่ทำโจทย์เสร็จก่อนเป็นผู้ชนะของรอบ แต่ก็สงสัยว่าโหมด สาย pipe ที่ยาวที่สุด ทำงานอย่างไร

    • พวกเราเล่นกันจนไพ่หมด
  • คนที่จะมาตำหนิเรื่อง uuoc คงใกล้มาถึงแล้ว
    การใส่ cat ไว้ข้างหน้าทำให้เพิ่มอะไรบางอย่างเข้าไปที่ต้น pipeline ได้ง่ายขึ้น

  • ชอบมากที่สามารถพิมพ์ออกมาเองได้
    ตอนนี้กำลังคิดอยู่ว่าจะพิมพ์ด้วยเครื่องพิมพ์ที่ออฟฟิศเลยดีไหม

  • ข้อดีของเกมนี้คือคนที่รู้จัก UUoC จะเป็นฝ่ายชนะ
    cat file.txt | tr a-z A-Z | sort คือฝ่ายแพ้ ส่วน tr < file.txt a-z A-Z | sort คือฝ่ายชนะ

  • ค่าจัดส่งไป Canada $19 ดูแรงไปหน่อย
    ไม่แน่ใจว่ามีใครใน Greater Vancouver อยากสั่งรวมกันไหม

    • ขอโทษด้วย :( ใช้ PostNL ซึ่งจริง ๆ แล้วแพงกว่านี้ และการส่งออกนอก EU ส่วนใหญ่ขาดทุน
      แต่ทุกสำรับมี PDF ให้ ดังนั้นสามารถพิมพ์เองที่ร้านพิมพ์แถวบ้านได้ ถ้าไม่พิมพ์กล่องก็น่าจะถูกลงอีก
      พิมพ์ลงกระดาษ A4 ธรรมดาแล้วใช้กรรไกรตัดก็ไม่ได้มีปัญหาใหญ่ อันที่จริงยังช่วยได้เวลาจะอธิบายให้ใครสักคนด้วยปากกาและกระดาษ
      ในกรณีนั้น กล่องคือ https://punkx.org/unix-pipe-game/unix-pipe-box.pdf และไพ่คือ https://punkx.org/unix-pipe-game/unix-pipe-cards.pdf
    • มันเป็นแนวคิดที่แปลกดี ที่เอาทรัพย์สินดิจิทัลล้วน ๆ ไป พิมพ์ลงกระดาษใน Europe แล้วค่อยส่งทางเรือช้า ๆ ไปถึง Canada
    • 12 ยูโร สำหรับไปรษณีย์ข้ามทวีปแบบติดตามได้ก็ถือว่าเป็นราคาค่อนข้างมาตรฐาน
    • ถ้าต้องการก็พิมพ์เองได้อยู่แล้ว และก็ดูชัดเจนว่าถ้าขายในราคานี้พร้อมส่งจาก Europe แทบไม่เหลือกำไร
 
unsure4000 2024-07-25

ราคา 8,000₩ นะครับ/ค่ะ ถ้าใครมีฉบับสำเนา รบกวนช่วยรีวิวหน่อยครับ/ค่ะ