Launch HN: Haystack (YC S24) – เทคโนโลยีสำหรับแสดงภาพและแก้ไขโค้ดบนแคนวาสไร้ขอบเขต
(github.com/haystackeditor)- Haystack Editor เป็นผลิตภัณฑ์ที่ผสานความเรียบง่ายของ code editor เข้ากับ canvas UI เพื่อให้เข้าใจโค้ดได้ง่ายในภาพรวม และพัฒนาร่วมกับชุมชนใน repository นี้
- repository นี้เปิดเผยไม่เพียงโค้ดและ issue แต่ยังรวมถึง roadmap ด้วย และ source code เผยแพร่ภายใต้ PolyForm Strict License 1.0.0
- distribution ของผลิตภัณฑ์เป็นรูปแบบที่ต่อยอดจาก repository นี้พร้อมการปรับแต่งเฉพาะบางอย่าง และเผยแพร่ภายใต้ terms of service แยกต่างหาก
- ตัวอย่างฟีเจอร์ ได้แก่ Canvas Workspaces, Explorer View, Keyboard Navigation, Generate Function และครอบคลุมการช่วยแก้ไข·สำรวจ·ทำความเข้าใจโค้ดแบบครบถ้วน รวมถึงการ debug แบบเบา ๆ, โมเดลส่วนขยาย และการเชื่อมรวมกับเครื่องมือเดิมแบบเบา ๆ
- Haystack อัปเดตทุกสัปดาห์ด้วยฟีเจอร์ใหม่และการแก้บั๊ก และดาวน์โหลดได้สำหรับ Windows, macOS, Linux
บทบาทของ repository Haystack Editor
- repository นี้เป็นพื้นที่ที่ Haystack Software ใช้พัฒนาผลิตภัณฑ์ Haystack Editor ร่วมกับชุมชน
- นอกจากงานด้านโค้ดและ issue แล้ว ยังเปิดเผย roadmap ด้วย
- source code เผยแพร่ภายใต้ PolyForm Strict License 1.0.0
ผลิตภัณฑ์ Haystack Editor
- Haystack Editor เป็น distribution ของ repository
Haystack Editorและมีการปรับแต่งเฉพาะบางอย่างรวมอยู่ด้วย - distribution นี้เผยแพร่ภายใต้ terms of service แยกต่างหาก
- ผลิตภัณฑ์ผสานความเรียบง่ายของ code editor เข้ากับ canvas UI เพื่อให้เข้าใจโค้ดได้ง่ายในภาพรวม
- ขอบเขตการรองรับรวมถึงสิ่งต่อไปนี้
- การแก้ไขโค้ด แบบครบถ้วน
- การสำรวจโค้ด
- การช่วยทำความเข้าใจโค้ด
- การ debug แบบเบา ๆ
- โมเดลส่วนขยายที่สมบูรณ์
- การเชื่อมรวมกับเครื่องมือเดิมแบบเบา ๆ
- Haystack อัปเดตทุกสัปดาห์ด้วยฟีเจอร์ใหม่และการแก้บั๊ก
- สามารถดาวน์โหลดเวอร์ชันสำหรับ Windows, macOS, Linux ได้จาก เว็บไซต์ Haystack
ตัวอย่างฟีเจอร์
- มีฟีเจอร์ Canvas Workspaces
- มีฟีเจอร์ Explorer View
- มีฟีเจอร์ Keyboard Navigation
- มีฟีเจอร์ Generate Function
ช่องทางการมีส่วนร่วมและให้ข้อเสนอแนะ
- มีหลายวิธีในการเข้าร่วมโปรเจกต์
- ส่งบั๊กและคำขอฟีเจอร์
- ช่วยตรวจสอบการเปลี่ยนแปลงที่เช็กอินแล้ว
- รีวิว การเปลี่ยนแปลง source code
- รีวิว เอกสาร และแก้คำผิด หรือเปิด PR เพื่อเพิ่มเนื้อหาใหม่
- หากต้องการมีส่วนร่วมโดยตรงกับ codebase ให้ดูเอกสาร How to Contribute
- วิธี build และรันจาก source
- workflow การพัฒนา รวมถึงการ debug และการรัน test
- การส่ง PR
- การหา issue ที่จะทำ
- ช่องทาง feedback มีดังนี้
- ถามคำถามใน Discord
- ลงทะเบียน issue
- ติดตาม @AkshaySubr42403 และส่งความคิดเห็น
โปรเจกต์ที่เกี่ยวข้องและส่วนขยายที่ bundle มาให้
- คอมโพเนนต์หลักและส่วนขยายหลายรายการของ Haystack อยู่ใน repository แยกบน GitHub
- ตัวอย่างเช่น node debug adapter และ mono debug adapter เป็น repository แยกจากกัน
- อีกตัวอย่างหนึ่งคือ Pixi repository
- Haystack มี ส่วนขยายในตัว หลายรายการอยู่ในโฟลเดอร์
extensions- มี grammar และ snippet สำหรับหลายภาษา
- ส่วนขยายที่ให้การรองรับภาษาขั้นสูง เช่น code completion หรือ Go to Definition ใช้ suffix
language-features - ตัวอย่างเช่น ส่วนขยาย
jsonให้การลงสีJSONและส่วนขยายjson-language-featuresให้การรองรับภาษาขั้นสูงสำหรับJSON
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ไอเดียนี้ยอดเยี่ยมมา หลายสิบปีแล้ว หวังว่า Haystack จะประสบความสำเร็จเหมือนกับความพยายามก่อนหน้านี้หลาย ๆ ครั้ง และการลงมือทำช่วงแรกก็ดูมีแวว
แต่ก็น่าจะมีอุปสรรคมากมาย เช่น การทำความเข้าใจ caller/callee ที่ยาก หรือความชอบด้าน UX ที่ต่างกันไปตามนักพัฒนาแต่ละคน ผมคิดมาตลอดว่ามันอาจทรงพลังกว่านี้ในสภาพแวดล้อมที่มีพื้นที่กว้างกว่าหน้าจอ 2D มาก เช่น เฮดเซ็ต VR
เจ๋งมาก ลองจินตนาการว่า codebase ทั้งหมดขององค์กรถูกแมปแบบนี้ และมองเห็นข้าม เฟรมเวิร์กและภาษา หลายแบบ
ไม่แน่ใจว่าผมพลาดในวิดีโอไปหรือว่ายังทำไม่ได้ แต่การเชื่อมโหนดเองคงเป็นงานมือเยอะเกินไป ถ้ามีบ็อตง่าย ๆ ที่รันในโฟลเดอร์ repository แล้วทำ visualization ให้อัตโนมัติได้ก็คงดี เพิ่มไว้ในรายการที่สนใจแล้ว
ถ้าเป็นผมจะเล็ง องค์กรขนาดใหญ่หรือกลุ่ม IT ของเทศบาล/หน่วยงานท้องถิ่น ที่กำลังทำหรือวางแผน digital transformation เพราะพวกเขาต้องการการนำทางและการทำความเข้าใจความหมายระหว่างงาน legacy กับงานใหม่
ถ้าไปได้สวย ภายในหนึ่งปี Salesforce อาจเข้ามาหาได้ ดูเหมือนจะเข้ากับวิสัยทัศน์และชุดผลิตภัณฑ์ของพวกเขาไม่น้อย
ไม่รู้ว่าถึงตอนนั้นจะใช้งานจริงได้แค่ไหน แต่คงน่าสนุกถ้าได้ลอง เหมือน UML diagram ของทั้ง codebase ที่มีลูกศรเป็นพัน ๆ เส้น
แบบนั้นก็จะบอกเพื่อนร่วมงานได้ว่าไฟล์ที่ต้องแก้อยู่ตรงมุมขวาบนสักที่ และ diff ของ Git ก็เห็นเป็นภาพ ทำให้ซูมดูส่วนที่เปลี่ยนไปตรงโน้นตรงนี้ได้
เช่น จัดการคำถามอย่าง “ตั้งแต่ตอนคลิกปุ่ม subscribe ด้วยเมาส์ไปจนถึง backend เกิดอะไรขึ้นบ้าง”
สงสัยว่าโปรเจกต์นี้ได้รับแรงบันดาลใจจาก Light Table หรือไม่
ในแง่ feature request อยากให้ขยาย visualization ให้ไกลกว่า 2D ระบบที่ซับซ้อนจริง ๆ มักเป็นกราฟที่ประณีต หรือพูดให้ดีคือเหมือนก้อนด้ายพันกัน จากประสบการณ์ที่ผ่านมา การทำ visualization บนระนาบ 2D อย่างเดียวไม่พอ
ถ้ามีอะไรอย่าง การแสดงผลทรงกลมซ้อนศูนย์กลาง โดยชั้นนอกเป็น boundary service และชั้นในเป็น core/domain service ก็คงดี
น่าสนใจที่พูดถึงมุมมองที่ ใกล้เคียง 3D มากขึ้น เราเคยคิดไอเดียนี้ไว้ แต่การทำให้ดีในแบบที่ผู้ใช้เข้าใจได้ยากจริง ๆ ถึงอย่างนั้นมันก็อยู่ในวิสัยทัศน์อนาคตแน่นอน
แก้ไข: ลบการคาดเดาเกี่ยวกับ Light Table เพราะไม่เป็นความจริง
ขอถามนอกเรื่องใหญ่หน่อย มี open-source infinite canvas ที่พอใช้เป็นตัวหลักได้ไหม? กำลังทำเกมการ์ดอยู่และต้องการ infinite canvas แบบ multiplayer ถ้ามีคำแนะนำก็ดีมาก
ถ้าเป็น VSCode extension ผมน่าจะลองใช้ อยากลองนะ แต่ช่วงนี้ใช้ชีวิตอยู่ใน Cursor
สงสัยว่าทำไมถึงทำเป็น extension ไม่ได้ ไอเดียดีมาก และผมนึกภาพมันอยู่ในแท็บของพื้นที่ editor ได้อย่างสมบูรณ์แบบ
แบบนั้นจะมีแท็บ Haystack ได้หลายแท็บด้วย ทำให้การสลับบริบทง่ายขึ้นมาก ถึงจะอิงกับ VSCode แต่การต้องติดตั้ง IDE อีกตัวก็รู้สึกเสียดายนิดหน่อย ยังไงก็ขอให้ทำต่อไปให้ดี
นึกถึง สภาพแวดล้อม Kansas ของภาษาโปรแกรม Self มีวิดีโอที่ Sun ทำไว้ในปี 1995
https://www.youtube.com/watch?v=Ox5P7QyL774
หลังจากวิดีโอนี้ มีฟีเจอร์ค้นหาที่น่าสนใจยิ่งขึ้นถูกเพิ่มเข้ามา
ดีมาก แทบจะเหมือนกระบวนการที่ผมทำเวลาอ่าน codebase ใหญ่ ๆ แต่สะอาดและเป็นระเบียบกว่ามาก
ปกติจะเปิด terminal ห้าหกหน้าต่างที่ชี้ไปยัง source file หลายไฟล์ แล้วพยายามสร้างแผนที่ในหัว สุดท้ายก็พอจับทางได้ แต่มันเป็นกระบวนการที่เหนื่อย เครื่องมือแบบนี้น่าจะช่วยได้มหาศาล ที่เหลือก็แค่จับคู่กับ จอ ultrawide เท่านั้น
น่าจะช่วยได้เพราะลดสิ่งที่ต้องเก็บไว้ในหัว แต่ UI ตอนนี้ พึ่งพาเมาส์ มากเกินไป อยากให้ทำ shortcut และทำให้หน้าต่าง “tiling” เหมือน window manager อย่าง dwm จะได้ไม่ต้องปรับขนาดหน้าต่างเอง
ส่วนเรื่องการปรับขนาดเอง เรากำลังลองทำ tiling ภายใน viewport อยู่ ถ้าบอกได้ว่าอะไรทำให้ต้องปรับขนาด เราน่าจะปรับแก้ได้
ดูเหมือนเป็นแนวทางที่สะดวกให้ developer กางและแมปโค้ดบนพื้นที่สองมิติ ซึ่งคล้ายกับ method of loci[1] โดย developer เข้ารหัสชิ้นส่วนโค้ดและการเชื่อมโยงในเชิงพื้นที่อย่างละเอียด เพื่อเสริมความจำและเพิ่มความเข้าใจ
ดังนั้นขอเสนออย่างกล้าว่าให้เพิ่มตัวเลือก pattern พื้นหลังที่ไม่รบกวนแต่ให้ข้อมูลเล็กน้อย ผมไม่มี pattern เฉพาะเจาะจง แต่ถ้าพื้นหลังเป็นแผนที่โลก ผู้ใช้อาจจำตำแหน่งที่ต้องการหาได้เร็วขึ้นและรู้ตำแหน่งตัวเองได้เร็วขึ้นด้วย
ในแนวคิดเดียวกัน ก็น่าพิจารณาให้ผู้ใช้กำหนดสีขอบแท็บเอง หรือเพิ่ม noise ที่แตกต่างกันในแต่ละแท็บได้ โดยให้ noise จางลงตามระดับการซูมและระยะห่างจากศูนย์กลาง viewport
https://en.wikipedia.org/wiki/Method_of_loci
ไอเดียการใช้ความต่างของสีแบบบาง ๆ หรือเสียงก็น่าสนใจ จะลองคิดดู