1 คะแนน โดย GN⁺ 2024-06-02 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • รองรับ การประมวลผลข้อมูลปริมาณมหาศาลและการวิเคราะห์ทางวิทยาศาสตร์ ที่จำเป็นในงานวิจัยขนาดใหญ่ เช่น ฟิสิกส์พลังงานสูง และปัจจุบันมีข้อมูลมากกว่า 2 เอกซะไบต์ถูกเก็บอยู่ในไฟล์ ROOT
  • ROOT ถูกใช้ในการค้นพบ Higgs ด้วย จึงเป็นเครื่องมือที่มีกรณีใช้งานจริงซึ่งผ่านการพิสูจน์แล้วในการวิเคราะห์ข้อมูลการทดลอง
  • เป็นโอเพนซอร์สที่ใช้งานและแก้ไขได้อย่างอิสระ และเปิดรับการมีส่วนร่วมจากผู้ใช้ผ่านกระบวนการพัฒนาแบบเปิด
  • C++ interpreter ที่มีมาให้เหมาะกับการทำต้นแบบอย่างรวดเร็ว และสามารถเข้าถึงองค์ประกอบทั้งหมดได้ผ่าน Python dynamic binding
  • รองรับ Jupyter Notebook ด้วย จึงขยายการวิเคราะห์ที่อิง C++·Python ไปสู่สภาพแวดล้อมแบบโน้ตบุ๊กได้ และยังมีการเผยแพร่ข่าวสารเกี่ยวกับรีลีส การอบรม และแฮกกาธอนอย่างต่อเนื่อง

บทบาทของ ROOT ในการวิเคราะห์ข้อมูล

  • ROOT เป็นเครื่องมือที่ทำให้สามารถ ประมวลผล ข้อมูลปริมาณมากและวิเคราะห์เชิงวิทยาศาสตร์ได้

การพัฒนาแบบโอเพนซอร์สและการมีส่วนร่วม

วิธีใช้งานบนพื้นฐาน C++·Python·โน้ตบุ๊ก

  • อินเทอร์เฟซสำหรับพัฒนารองรับทั้ง C++ และ Python
    • มี C++ interpreter ที่เหมาะกับการทำต้นแบบอย่างรวดเร็ว
    • สามารถเข้าถึงองค์ประกอบทั้งหมดของ ROOT ได้ผ่าน Python dynamic binding
    • รองรับ Jupyter Notebook ด้วย

บล็อกและข่าวสารรีลีส

  • รายการบล็อกล่าสุดมีบทความเกี่ยวกับคำเชิญให้รับชมสารคดี C++ บน YouTube, ตัวอย่างสารคดี ROOT และ C++, ROOT Advanced Course 2026, และ 3rd ROOT Hackathon
  • รายการรีลีสล่าสุดประกอบด้วยเวอร์ชันต่อไปนี้

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

 
GN⁺ 2024-06-02
ความเห็นใน Hacker News
  • ทำให้นึกถึงวันเก่า ๆ ตอนทำงานสายฟิสิกส์อนุภาค ผมใช้ ROOT เยอะมาก และมีความสัมพันธ์แบบทั้งรักทั้งเกลียดกับมัน
    ด้านหนึ่งมันมีหนี้เทคนิคและความแปลกเฉพาะตัวอยู่มาก แต่อีกด้านก็มีหลายอย่างที่ทำใน ROOT ได้ง่ายกว่าตัวเลือกที่ “ทันสมัย” กว่าอย่าง matplotlib เช่น histogram, ข้อมูลที่มีโครงสร้างสูงซึ่งเก็บอ็อบเจ็กต์ที่มีฟิลด์ไว้ใน “คอลัมน์”, หรือการพล็อตฟังก์ชันทันทีโดยไม่ต้องจัดสรรอาร์เรย์ x/y แยกต่างหาก
    ผมยังชอบ API เชิงวัตถุ ที่ค่อนข้างเข้าใจง่ายด้วย มันให้ความรู้สึกใกล้กับ C++ หรือ Java แบบเก่ามากกว่าการ chain method ของ pandas/matplotlib, การใช้ไวยากรณ์ [] เกินพอดี, หรือพฤติกรรมมหัศจรรย์สารพัด แม้จะไม่สวยงามและค่อนข้าง verbose แต่สำหรับงานวิเคราะห์เชิงวิทยาศาสตร์ นั่นอาจเป็นข้อดีก็ได้
    ตอนที่เลิกใช้ไปเมื่อราว 5 ปีก่อน ROOT กำลังอยู่ในช่วงเปลี่ยนผ่าน เอาอินเทอร์พรีเตอร์ CINT รุ่นเก่าออกแล้วและย้ายไปใช้โค้ดเบสที่อิงกับ clang เท่าที่ทราบ ตอนนี้สามารถรันวิเคราะห์ใน Jupyter ได้ทั้งด้วย C++ และ Python และได้ยินมาว่าคุณภาพโค้ดก็ดีขึ้นมาก

    • สิ่งที่ดีที่สุดของ ROOT คือ วิธีโหลดข้อมูล TTree ที่อ่านข้อมูลจากดิสก์แบบตัดเป็นคอลัมน์เป็นไอเดียที่ดีมาก และแม้หลังเรียนจบแล้วจะย้ายไปทำงานอุตสาหกรรม ผมก็ยังคอยมองหาสิ่งที่ทำงานแบบเดียวกันอยู่เสมอ
    • matplotlib อาจเพราะไม่ได้เน้น histogram หรืออาจเพราะทุกวันนี้ RAM มีเหลือเฟือ เลยทำให้เราเห็น scatter plot ที่จุดทับกันจนไม่มีประโยชน์บ่อยมาก ดูแล้วทรมาน
    • ทุกคนมีความสัมพันธ์แบบรัก ๆ เกลียด ๆ กับ ROOT มันเหมือน Stockholm syndrome นิด ๆ ด้วยซ้ำ
    • สงสัยว่า Haskell จะเหมาะกับการสร้างของแบบนี้ไหม
    • ทุกวันนี้ด้วย ChatGPT ทำให้ API อันน่ากลัวของ matplotlib ไม่ใช่ปัญหาใหญ่เท่าเมื่อก่อนแล้ว
  • ไม่ค่อยมีเหตุผลนักที่งานวิเคราะห์ใหม่ ๆ จะต้องใช้ ROOT เป็นค่าเริ่มต้น ใช้ตัวเลือกอย่าง uproot ที่เป็นมิตรกับผู้ใช้และมีเหตุผลกว่าดีกว่า
    ก็อาจมีกรณีที่มี workflow แบบ legacy หรือมีแพตช์เฉพาะของแต่ละการทดลองที่พอกอยู่บน ROOT เยอะ แต่ถ้ามองเฉพาะงานวิเคราะห์ฟิสิกส์ มันอาจเป็นการเลือกที่จะทรมานตัวเอง
    ผมยังชอบหน้า 404 ด้วย และไม่ได้หมายถึงเรื่องห้อง 404 นะ
    https://github.com/scikit-hep/uproot5
    https://root.cern/404/

    • คำวิจารณ์ที่พบบ่อยต่อ uproot คือมันไม่ยืดหยุ่นนักเมื่อการคำนวณรายแถวเริ่มซับซ้อน เพราะ for loop ของ Python ช้าเกินไป
      ในกรณีแบบนี้ก็ใช้ Numba ได้ หรือถ้ามันเข้าท่ากับงานนั้น ๆ ไม่ก็ขอโปรโมตแบบน่าอายนิดหนึ่งว่าใช้ Julia ก็ได้: https://github.com/JuliaHEP/UnROOT.jl
      กระทู้ HN เก่าเกี่ยวกับการใช้ Julia ในฟิสิกส์อนุภาค: https://news.ycombinator.com/item?id=38512793
  • การได้เห็น โครงการซอฟต์แวร์ขนาดใหญ่ ที่ใช้เพื่อการค้นพบทางวิทยาศาสตร์เป็นเรื่องเจ๋งมาก
    อีกตัวอย่างหนึ่งคือที่ LIGO ใช้ GStreamer เพื่อค้นหาคลื่นความโน้มถ่วง: https://lscsoft.docs.ligo.org/gstlal/

    • กรณีนี้จริง ๆ เกือบจะตรงกันข้าม CERN ต้องการเฟรมเวิร์กสำหรับวิเคราะห์ข้อมูล จึงเป็นฝ่ายพัฒนา ดูแล และเผยแพร่มันเอง
      แต่จะเป็นความคิดที่ดีไหมถ้าคนนอกเอาไปใช้จริง อันนี้ผมไม่แน่ใจ ประสบการณ์ของผมอาจเก่าไปหน่อย แต่มันค่อนข้างหยาบและล้าสมัย ข้อดีใหญ่ของมันใน CERN หรือในงานฟิสิกส์อนุภาคคือมันเป็นมาตรฐานโดยพฤตินัย จึงทำงานร่วมกันภายในได้ง่าย
    • สองกรณีนี้ต่างกันพอสมควร ROOT เป็นเฟรมเวิร์กวิเคราะห์ข้อมูลที่ทรงพลัง แต่ถึงจะทรงพลัง มันก็ไม่สามารถทำตัวให้เป็นเครื่องมือใช้งานทั่วไปและใช้ง่ายได้มากพอ จึงแทบไม่ออกไปนอกวงการฟิสิกส์พลังงานสูงเลย
      ส่วน GStreamer เป็นแพลตฟอร์มที่ออกแบบได้สวยงามและมีสถาปัตยกรรมที่ดี จึงสามารถยกนามธรรมไปใช้ซ้ำกับสถานการณ์ที่ต่างออกไปโดยสิ้นเชิง ซึ่งคนสร้างดั้งเดิมอาจไม่เคยนึกถึงได้อย่างง่ายดาย
    • สิ่งที่ไม่เจ๋งคือ ROOT ถูก “ออกแบบ” และสร้างโดยคนที่ไม่รู้เลยว่าควรดูแล โครงการซอฟต์แวร์ขนาดใหญ่ อย่างไร
      ร่องรอยของเรื่องนั้นมีให้เห็นทั่วทุกแห่ง มันเป็น monolith ขนาดใหญ่ ดังนั้นแค่จะทำอะไรที่ผิดจากทางปกตินิดหน่อยก็ต้องสู้กับมันตลอด โชคดีที่ผมไม่ต้องใช้มันบ่อย แต่ก็ยังต้องเจออยู่บ้าง
    • “ค้นหาคลื่นความโน้มถ่วงที่ LIGO ด้วย GStreamer” เหรอ อะไรนะ?!
  • สำหรับผม ROOT พยายามทำมากเกินไป ออกแบบ API ได้ไม่ดี และที่สำคัญที่สุดคือ ROOT ในฐานะไลบรารี กับ ROOT ในฐานะโปรแกรม ไม่ได้แยกออกจากกัน
    มันมี global state เยอะ และตั้งสมมติฐานไว้ว่าคนจะใช้มันในแบบโปรแกรม ROOT ROOT 6 เริ่มแก้บางส่วนแล้ว แต่ต้องใช้เวลา และส่วนตัวผมมองว่าการพึ่ง llvm และ clang ลึกเกินไปทำให้เวลาคอมไพล์นานขึ้นและทำให้โปรเจกต์แก้ไขยากขึ้น
    เอกสารของฟอร์แมตอินพุต/เอาต์พุตก็เคยย่ำแย่มานาน และมี implementation อยู่ตัวเดียว
    ตอนนี้มี groot, uproot, freehep, openscientist ฯลฯ ทำให้อ่านเขียนข้อมูล ROOT ได้โดยไม่ต้องลาก ROOT ทั้งก้อนมาด้วย ผมคิดว่า interoperability ของข้อมูลสำคัญมาก มันจำเป็นถ้าเราอยากมีความหวังว่าอีก 20 หรือ 30 ปีข้างหน้าจะยังกลับมาอ่านข้อมูลชุดเดียวที่มีอยู่นั้นได้
    https://go-hep.org/x/hep/groot
    ผมเป็นผู้พัฒนาหลักของ go-hep

    • เท่าที่ผมรู้ uproot ยังอ่าน TEfficiency ได้ไม่สมบูรณ์อยู่เลย ซึ่งพูดตรง ๆ ว่าน่าเสียดาย
  • อา root… แค่คิดว่าทุกวันนี้ไม่ต้องใช้ เวอร์ชันก่อน 6 ทุกวันก็รู้สึกขอบคุณแล้ว

    • Root เป็นหนึ่งในเหตุผลที่ทำให้ผมตัดสินใจไม่เรียนฟิสิกส์อนุภาค
    • ผมยังรอ เวอร์ชัน 7 ที่จะยอมทำลายความเข้ากันได้ของอินเทอร์เฟซเพื่อทำ root ให้ดีเสียที จำได้ว่าได้ยินเรื่องนี้ครั้งแรกประมาณปี 2016 แต่ตอนนี้เหมือนเป็นสัญญาที่หายวับไปแล้ว
  • ทำให้นึกถึงคืนดึก ๆ ที่ต้องดีบักโค้ดซึ่งเขียนโดยนักฟิสิกส์ที่เก่งมากแต่ไม่มีพื้นฐานด้านวิทยาการคอมพิวเตอร์

    • ราวปี 2013 ผมทำงานที่เว็บปล่อยกู้ออนไลน์แห่งหนึ่ง และเราจ้างนักฟิสิกส์อนุภาคมาทำโมเดลพยากรณ์ความเสี่ยง
      พวกเขาใช้ ROOT ทำโมเดล แล้วทำอินเทอร์เฟซด้วย Ruby ซึ่งในมุมมองวิศวกรรมซอฟต์แวร์แล้วมันเป็น สัตว์ประหลาด มาก แต่ในมุมสถิติก็ค่อนข้างดีทีเดียว
      ตอนนั้นยังเป็นช่วงก่อนที่ ecosystem ของ Python จะบูมมาก และแพ็กเกจ machine learning ของ R ก็เพิ่งเริ่มต้น
    • นึกภาพ main() ยาว 2000 บรรทัดออกเลย
  • Root เป็น แกนหลัก ของงานมหาศาลในฟิสิกส์อนุภาคเชิงทดลองก็จริง แต่สำหรับนักศึกษาบัณฑิตใหม่มันก็เป็นฝันร้ายด้วย
    มันฝังลึกอยู่ในวงการฟิสิกส์อนุภาคมากจนไม่น่าจะเปลี่ยนได้ในเร็ว ๆ นี้

    • ตอนนี้มี pyroot กับ uproot แล้ว จึงมีตัวเลือกที่เรียนรู้ง่ายกว่าสำหรับนักศึกษาบัณฑิตใหม่ และมันก็ไม่ได้แย่ขนาดนั้น
      ปัญหามักอยู่ที่โค้ด legacy ซึ่งต้องบำรุงรักษาเป็นส่วนหนึ่งของงานบริการในแต่ละการทดลอง
  • ส่วนของ Root ที่ผมใช้อยู่คือ Cling ซึ่งเป็นอินเทอร์พรีเตอร์ C++ และ Xeus ของ Jupyter notebook
    คืนหนึ่งผมลองเทียบ n-body ที่เร็วที่สุดจาก benchmarkgames ระหว่าง Xeus กับ Python 3 บน Binder instance เดียวกัน Xeus ใช้เวลา 15.58 วินาที ส่วนรันโค้ด Python ที่เร็วที่สุดบนเคอร์เนล Python3 ใช้เวลา 5 นาที ผลลัพธ์ของทั้งสองรันตรงกันทุกประการ
    แม้จะคิด overhead ของการรัน C++ แบบไดนามิกในโปรแกรมนี้ไว้ราว 300% แต่ Cling ก็ยังเร็วมาก ผมไม่ได้ใช้ SIMD หรือ vectorization แค่ใช้โค้ดจาก benchmarkgames เท่านั้น ผมใช้ Cling เป็น ตัวแทน JIT ที่รวดเร็วสำหรับภาษาที่คอมไพล์เป็น C++ เป็นหลัก

    • ผมใช้ Cling กับการคอมไพล์ JIT ของภาษาถิ่น Clojure แบบ native ของผม: https://github.com/jank-lang/jank
      เป็นความพยายามจะพา C++ เข้ามาในโลกของ Clojure และพาการเขียนโปรแกรมเชิงโต้ตอบแบบ Clojure ไปสู่โลกของ C++
  • ซอร์สโค้ด: https://github.com/root-project

  • “ดีบักสคริปต์ CERN ROOT และโปรแกรมที่อิง ROOT ใน Eclipse IDE”
    โอ้พระเจ้า ทำให้นึกถึงฝันร้าย มันแสดงให้เห็นชัดว่าคุณยังสามารถสร้าง สิ่งที่ไม่ธรรมดา ได้แม้อยู่ในสภาพแวดล้อมที่เลวร้าย

    • ไม่แน่ใจว่ากำลังพูดถึง Eclipse หรือเปล่า