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

 
GN⁺ 2024-05-27
ความคิดเห็นจาก Hacker News
  • ผมฝันถึงคอนเทนต์แบบนี้มาตั้งแต่วัยรุ่น และดีใจที่ได้เห็นโปรแกรมเมอร์ที่ทำโปรเจกต์ค่อนข้างระดับสูงสตรีมขั้นตอนการทำงานกันมากขึ้นเรื่อยๆ
    การได้ แอบดูเบื้องหลัง แบบนี้ทำให้สิ่งที่เคยดูเหมือนเวทมนตร์และความซับซ้อนหายไปมาก

    • อิจฉาเด็กสมัยนี้ที่แทบจะค้นหาอะไรก็ได้ที่อยากเรียนรู้ เมื่อก่อนมันไม่ได้เป็นแบบนั้นเลย
    • ผมก็ฝันถึงแบบเดียวกัน แต่ยังคิดว่า คอนเทนต์เชิงลึกและยอดเยี่ยมทางเทคนิค ยังหาได้ยาก
      อยากให้เราแชร์ช่องแบบนี้กัน และอยากรู้จักช่องอื่นๆ เพิ่มด้วย
      อีกช่องที่ผมรู้จักคือ https://www.youtube.com/@LowLevelLearning
      พูดให้เคร่งครัดแล้วอาจไม่ใช่ช่องโปรแกรมมิง แต่ผมก็ชอบ https://www.youtube.com/@StuffMadeHere มาก เป็นช่องวิศวกรรมที่ยอดเยี่ยม
    • ช่องของ Marcan ก็น่าดูเหมือนกัน กระบวนการเอา Linux ขึ้นไปรันบน Apple ARM silicon ยาวเกือบ 12 ชั่วโมงและยอดเยี่ยมมาก แถมทำให้เห็นว่า Apple ใช้ฮาร์ดแวร์แบบคัสตอมค่อนข้างเยอะ
      https://www.youtube.com/live/GxnWuXgj3JI?si=lUJ_7KdkylzXLryj
  • เมื่อไม่กี่เดือนก่อนผมเขียน USB host driver สำหรับ STM32F4 สิ่งที่ยากที่สุดคือการขาดเอกสารที่ดี
    ใน peripheral มีรีจิสเตอร์แบบอ่าน/เขียนที่ถูกแมปใน SVD เป็นอ่านอย่างเดียว ต้องตั้งค่าบิตที่ไม่มีในเอกสาร และ USB bulk-only transport ก็อ้างถึงสเปก SCSI ที่ไม่มีอยู่จริง
    สุดท้ายไปเจอบล็อกโพสต์ที่บอกว่า ถ้าจะทำให้ USB drive ทำงานได้ ก็แทบต้องคัดลอกสิ่งที่ Windows ทำมาเหมือนเดิม
    โชคดีที่มี ออสซิลโลสโคปที่ถอดรหัสเฟรม USB ได้ เลยช่วยประหยัดเวลาไปมากในการทำความเข้าใจว่าทำไมมันถึงไม่ทำงาน
    USB ดูเหมือนพึ่งพาความรู้ที่ส่งต่อกันมาค่อนข้างมาก แต่ถึงอย่างนั้นก็น่าทึ่งที่มันแพร่หลายขนาดนี้และส่วนใหญ่เสียบแล้วใช้ได้ทันที

    • อยากรู้ว่าใช้ออสซิลโลสโคปตัวไหนสำหรับถอดรหัส USB
    • เคยคิดจะสตรีมงานแบบนี้บ้างไหม
    • Intel USB controller ให้อภัยบั๊กในซอฟต์แวร์ควบคุมอย่างสุดๆ ใจกว้างมากจริงๆ
  • ผมเริ่มมีส่วนร่วมในโปรเจกต์ decompilation และถึงจะไม่ได้เป็น decompiler ที่เก่งที่สุดเลย แต่เคยคิดเหมือนกันว่าจะสตรีมตอนทำงาน
    สงสัยว่าจะมีคนสนใจคอนเทนต์แบบนี้ไหม ไม่รู้ว่าคนจะอยากรู้เรื่องร่องรอยใน assembly ที่ได้รับผลจาก signedness ของตัวแปร, ความต่างระหว่างการเข้าถึง struct กับ array, เรื่องแปลกๆ ที่แม้แต่คอมไพเลอร์อายุ 30 ปีก็ยังทำกับ control structure, การนำ register กลับมาใช้ซ้ำ, หรือวิธีชี้นำโค้ดให้ได้ assembly ที่เหมือนกันระดับ byte ต่อ byte บนคอนโซลยุคเก่าไหม

    • ผมสร้างบัญชีขึ้นมาเพราะคิดว่าถ้าได้ดูอะไรแบบนี้คงเจ๋งมาก เคยพยายามรวบรวม ความรู้ reverse engineering ที่ลึกลับเฉพาะทาง แบบนี้ แต่ยากแม้กระทั่งจะรู้ว่าควรไปหาที่ไหน
    • สนใจครับ สมัยมหาวิทยาลัยเคยเรียน 8086 assembly พื้นฐานและอ่านหนังสือ reverse engineering อยู่บ้าง แต่ไม่ได้ไปไกลกว่านั้น
      อยากรู้ว่าคุณกำลังทำงานในโปรเจกต์ open source อยู่หรือเปล่า
  • ผมกำลังสร้างระบบปฏิบัติการอยู่ และเคยคิดว่าจะสตรีมเซสชันทำงานสักสองสามครั้ง ถ้าคนสนใจกันจริงๆ ก็อาจเริ่มทำได้

    • เสน่ห์ของการดูคนทำงานยากๆ อยู่ที่การได้เห็น กระบวนการคิด ของเขา การเขียนระบบปฏิบัติการจัดว่าเป็นงานยากแน่นอน
      ถ้ามีเวลาจริงๆ ก็อยากให้ทำมาก และผมยินดีสนับสนุนด้วย
  • ฟอนต์ ที่ใช้ในเทอร์มินัล/เขียนโค้ดน่าสนใจที่สุด

    • ไม่มี syntax highlighting ด้วย
    • ฟอนต์คือ Comic Code
      https://tosche.net/fonts/comic-code
    • ไม่มีเลขบรรทัดด้วย
  • มีส่วนที่ชื่อเรื่องตกหล่นไป นี่คือ USB device driver สำหรับอุปกรณ์ที่ค่อนข้างเรียบง่าย และมีโค้ดเดิมอยู่แล้ว โดยพื้นฐานจึงใกล้เคียงกับงาน “แปล” จากโค้ดไปเป็นโค้ด
    มันอาจดูน่าประทับใจมาก แต่ส่วนตัวผมมองว่าคล้ายกับการดูคนที่เก่งงานของตัวเองกำลังทำงาน

    • ใช่ ชื่อเรื่องออกนอกเป้าไปหน่อย ผมไม่ได้รู้เรื่อง kernel ดีมากนัก และแม้จะได้เรียนรู้จากวิดีโอ แต่หลายส่วนก็ดูแทบเหมือนเวทมนตร์
      ถ้า moderator ช่วยเอา “from scratch” ออกจากชื่อเรื่องและใส่ว่าเป็น device driver ได้ก็ดี แต่ถ้าไม่ก็ไม่เป็นไร
    • ดูเหมือนเป็น driver ที่แทบไม่มีเหตุผลให้มีตั้งแต่แรก ถ้าเป็น front panel น่าจะจัดการใน user space ด้วย แอปพลิเคชัน libusb ได้เหมาะกว่าด้วยซ้ำ
  • ผมชอบวิดีโอและ tutorial เชิงลึกประเภทนี้มากจริงๆ แต่คำว่า “from scratch” ไม่ค่อยตรงนัก
    ถ้าบอกว่า “เริ่มจากประสบการณ์ทำงานแบบนี้มา 10 ปีพอดี” ก็คงให้ความรู้สึกไม่เหมือนกัน

  • สเปก USB น่าจะประมาณ 500 หน้าไม่ใช่เหรอ น่าประทับใจมาก

    • ไม่จำเป็นต้องอ่านรายละเอียดทั้งหมดของสเปก USB แค่เข้าใจฟังก์ชันการทำงานคร่าวๆ ก็พอ
      kernel มีฟังก์ชันให้ใช้งานเยอะมากอยู่แล้ว อ่านโค้ด driver ที่ง่ายที่สุดในซอร์สของ kernel ก็เรียนรู้ได้ แล้วค่อยไต่ไปหา driver ที่ยากขึ้น
    • 500 หน้านี่คงลอกให้เสร็จในสามชั่วโมงยังทำไม่ได้เลย
    • ถ้าเป็น driver API ที่ดี ก็ควรซ่อนส่วนพวกนั้นทั้งหมดไว้ เพื่อให้ USB driver แต่ละตัวไม่ต้องสนใจสเปก USB เรื่องนั้นควรเป็นหน้าที่ของโค้ด USB core ส่วนกลาง
    • และในกรณีนี้ ส่วนใหญ่ก็แทบไม่เกี่ยวข้องด้วย