Quiver - โปรแกรมแก้ไขไดอะแกรมเชิงสลับที่ทันสมัย
(github.com/varkor)- Quiver เป็นโปรแกรมแก้ไขที่ใช้สร้างไดอะแกรมเชิงสลับและไดอะแกรมการวางต่อแบบกราฟิก พร้อมรองรับการเรนเดอร์คุณภาพสูงสำหรับการแสดงผลบนหน้าจอ และการส่งออกเป็น LaTeX·Typst
- การสร้างและแก้ไขไดอะแกรมทำได้เร็วกว่าการเขียน LaTeX หรือ Typst ด้วยมือมาก และเมื่อคุ้นเคยแล้วก็สามารถทำงานได้เร็วใกล้เคียงกับการใช้ ปากกาและกระดาษ
- รองรับไดอะแกรมที่ซับซ้อน เช่น pullback, pushout, adjunction และ higher cell พร้อม กริดยืดหยุ่น ที่ปรับตามขนาดของป้ายกำกับ และสไตล์ลูกศรที่นำมาผสมกันได้
- สามารถทำงานได้ทั้งด้วยการลากเมาส์และคีย์ลัด รองรับการเลือกหลายรายการ, เลิกทำ·ทำซ้ำ, แมโครของผู้ใช้, การส่งออกไดอะแกรมแบบฝังใน HTML, การแพนและซูม
- เมื่อส่งออกเป็น LaTeX หรือ Typst สามารถแทรกลิงก์ของไดอะแกรมไปด้วย เพื่อกลับมาเปิดแก้ไขภายหลังหรือแชร์ให้ผู้อื่นได้
Quiver ทำอะไรได้บ้าง
- Quiver เป็นโปรแกรมแก้ไขกราฟิกสมัยใหม่สำหรับสร้าง ไดอะแกรมเชิงสลับ และ ไดอะแกรมการวางต่อ
- สามารถเรนเดอร์ไดอะแกรมคุณภาพสูงที่ดูดีบนหน้าจอ และส่งออกเป็น LaTeX ผ่าน tikz-cd หรือเป็น Typst ผ่าน fletcher
- สามารถทดลองใช้งานได้ทันทีบนเว็บที่ q.uiver.app
- วิธีใช้งานอย่างมีประสิทธิภาพและการสร้างหรือแก้ไขไดอะแกรมด้วยคีย์บอร์ดล้วนสรุปไว้ใน บทสอน Quiver
ความสามารถในการสร้างไดอะแกรม
- มีอินเทอร์เฟซที่มีประสิทธิภาพและใช้งานเข้าใจง่ายสำหรับการสร้าง ไดอะแกรมเชิงสลับ ที่ซับซ้อนและไดอะแกรมการวางต่อ
- ตัวอย่างที่รองรับ ได้แก่
- ไดอะแกรมที่มี pullback และ pushout
- adjunction
- higher cell
- การจัดวางอ็อบเจ็กต์อิงตาม กริดยืดหยุ่น ที่ปรับตามขนาดของป้ายกำกับ
- ลูกศรสามารถผสมผสานสไตล์ได้หลากหลาย
- สามารถใช้สีกับป้ายกำกับและลูกศรได้
- ออกแบบมาให้ดูดีทั้งในภาพหน้าจอ และให้ผลลัพธ์ที่ส่งออกเป็น LaTeX·Typst มีหน้าตาใกล้เคียงกับไดอะแกรมต้นฉบับมากที่สุด
วิธีป้อนข้อมูลและเวิร์กโฟลว์การแก้ไข
- สามารถสร้างและแก้ไขไดอะแกรมได้ด้วยการคลิกและลากเมาส์
- มีชุด คีย์ลัด สำหรับทำทุกการทำงาน จึงสามารถแก้ไขแบบใช้คีย์บอร์ดเป็นหลักได้
- เลือกหลายองค์ประกอบพร้อมกันได้ เพื่อให้การแก้ไขจำนวนมากทำได้ง่ายและรวดเร็ว
- มีระบบประวัติการทำงานสำหรับ เลิกทำ·ทำซ้ำ
- รองรับการแพนและซูมเพื่อให้จัดการไดอะแกรมขนาดใหญ่ได้
- มีการจัดแนวป้ายกำกับอัจฉริยะและ edge offset
การส่งออกและการนำกลับมาใช้ใหม่
- สามารถส่งออกไดอะแกรมเป็น LaTeX หรือ Typst ได้
- ผลลัพธ์ที่ส่งออกจะมี ลิงก์ สำหรับกลับมายังไดอะแกรมนั้น
- สามารถเปิดกลับมาแก้ไขภายหลังได้
- สามารถแชร์ให้ผู้อื่นได้
- รองรับการส่งออกไดอะแกรมที่ฝังใน HTML ได้ด้วย
- แมโครที่ผู้ใช้กำหนดเองสามารถใช้งานได้โดยวาง URL ของไฟล์ที่มี
\newcommand - การเชื่อมต่อกับเอดิเตอร์ดูได้จากเอกสาร Editor integration และ Quiver wiki
เงื่อนไขการบิลด์และการรัน
- สามารถรัน
makeบนบรรทัดคำสั่ง แล้วเปิดsrc/index.htmlในเบราว์เซอร์เพื่อตรวจสอบผลลัพธ์ของการบิลด์ได้ - หากเวอร์ชันของ Make หรือ Bash ไม่ตรงกัน สามารถดาวน์โหลด KaTeX รุ่นล่าสุดด้วยตนเองแล้ววางไว้ใต้
src/KaTeX/ - หากพาธของ KaTeX ไม่ถูกต้อง จะเกิดข้อผิดพลาดในการโหลด KaTeX
- Quiver ต้องรันผ่าน localhost
- หากติดตั้ง Python ไว้แล้ว สามารถรัน
make serveในไดเรกทอรี Quiver แล้วเปิดlocalhost:8000ในเบราว์เซอร์ได้ - หากมีปัญหาในการบิลด์ สามารถเปิด GitHub issue พร้อมรายละเอียดของปัญหาได้
1 ความคิดเห็น
ความเห็นจาก Hacker News
เครื่องมือนี้ยอดเยี่ยมจริง ๆ ผมสร้าง Fourier-Poisson cube [0] ได้ในราว 10 นาที และ UI ก็ใช้งานง่ายมาก
ผมคิดว่าการออกแบบที่โฟกัสไปที่ commutative diagram แทนที่จะเป็นแคนวาสอิสระนั้นเป็นตัวเลือกที่ยอดเยี่ยม เพราะทำให้ดูเรียบร้อยและใช้งานง่าย ถ้ามีเครื่องมือนี้ตอนเขียน论文 คงประหยัดเวลาไปได้มหาศาล
[0] https://q.uiver.app/#q=WzAsOCxbMCwxLCJnIFxcdGV4dHsgb24gfVxcb...
ในบริบทใกล้เคียงกัน ช่วงหลังมานี้ Petri net editor ตัวนี้น่าประทับใจทีเดียว: https://pes.vsb.cz/petrineteditor/#/model
Petri net นั้นเจ๋งดี ถ้าทำ finite state machine ให้เป็นแบบมัลติเธรด ก็จะให้ความรู้สึกใกล้เคียงแบบนี้
ผมรู้จัก Petri net ครั้งแรกตอนอ่านบทความขององค์กรชื่อ “statebox” Statebox สนใจ Petri net, commutative diagram และแนวคิดหลายอย่างในทฤษฎีหมวดหมู่ พออ่าน论文สองสามฉบับแล้วก็หลงใหล จนการได้ไปทำงานที่นั่นกลายเป็นความฝัน น่าเสียดายที่ตอนนี้หน้าเว็บมีแค่ข้อความ “imagine being a category theorist” กับอีโมจิหัวเราะจนน้ำตาไหล เลยไม่รู้ว่าเกิดอะไรขึ้น
เมื่อไม่กี่วันก่อน ผมใช้ตัวนี้วาดไดอะแกรมง่าย ๆ [0] เพื่อใส่ในหนังสือของผม [1]
น่าเสียดายที่มันทำมาเฉพาะสำหรับทฤษฎีหมวดหมู่ จึงไม่ค่อยมีการรองรับการตกแต่งโหนดให้สวยงามมากนัก แต่แน่นอนว่าสามารถจัดการด้วย LaTeX ได้
[0] https://q.uiver.app/#q=WzAsNSxbMSw2LCJcXHRleHR7TmF0dXJhbCBEZ...
[1] http://abstractionlogic.com
เมื่อคืนผมกำลังใช้ https://tikzcd.yichuanshen.de/ อยู่ ซึ่งคล้ายกับเครื่องมือนี้แต่ฟีเจอร์น้อยกว่า ถึงอย่างนั้นก็ยังค่อนข้างดีสำหรับการทำ ไดอะแกรมง่าย ๆ
ช่วยอธิบายให้คนเป็นนักพัฒนาซอฟต์แวร์ที่ถ่อมตัวและฝีมือก็ไม่ได้เก่งมากฟังได้ไหมว่าแผนภาพสับเปลี่ยนได้กับแผนภาพปะติดคืออะไร?
บทความ Wikipedia นามธรรมเกินไปกว่าจะเข้าใจในระดับพื้นฐาน [0]
[0]: https://en.wikipedia.org/wiki/Commutative_diagram
ถ้ามี
fอยู่บนA → Bก็หมายถึงฟังก์ชัน f ที่รับอินพุตจาก A แล้วสร้างเอาต์พุตใน Bแผนภาพที่
A → Bเป็นfแล้วจากนั้นB → Cเป็นgและA → Cเป็นhหมายถึงg ∘ f = hหรือก็คือทำ f แล้วทำ g ให้ผลเหมือนกับทำ h การเขียนโดเมนและโคโดเมนของแต่ละฟังก์ชันไว้ด้วยทำให้ดูได้ง่ายว่าฟังก์ชันเหล่านั้นประกอบกันได้หรือไม่ กล่าวคือผ่านการตรวจชนิดหรือเปล่าเนื่องจากเส้นทางในแผนภาพเองก็ประกอบกันได้เหมือนฟังก์ชัน สัญกรณ์นี้จึงเข้ากันได้อย่างเป็นธรรมชาติมาก ตัวอย่างเช่น กฎการเปลี่ยนหมู่ถูกฝังอยู่ในสัญกรณ์เอง ดังนั้น
A→B→C→Dจึงเป็นการแสดงออกเพียงแบบเดียวของการประกอบฟังก์ชันสามตัว และไม่สามารถเขียนความแตกต่างระหว่าง(f∘g)∘hกับf∘(g∘h)ได้เลยโดยทั่วไป หากมีกราฟหลายเส้นเชื่อมแบบมีทิศทาง พร้อมคำอธิบายว่าเส้นทางใดบ้างในนั้นเทียบเท่ากันหรือไม่เทียบเท่ากัน และความสัมพันธ์เทียบเท่านี้มีสมบัติพื้นฐานบางอย่าง ก็จะเรียกสิ่งนั้นว่า หมวดหมู่ แนวคิดนี้พบได้บ่อยมากในคณิตศาสตร์ ตรรกะเชิงนามธรรม ฯลฯ แผนภาพสับเปลี่ยนได้มีประโยชน์ในบริบทนี้สำหรับอนุมานความเทียบเท่าของเส้นทางได้อย่างรวดเร็วด้วยภาพ
n(g(f(a)))นี่คือแผนภาพ และการบอกว่าแผนภาพสับเปลี่ยนได้หมายถึง ถ้าตามเส้นทางสองเส้นทางใด ๆ ที่มีจุดเริ่มต้นและจุดสิ้นสุดเดียวกัน ผลจะเท่ากันดังนั้น
n(g(f(•))),s(r(l(•))),s(m(f(•)))ล้วนเป็นทั้งเส้นทางและการเรียกฟังก์ชันจาก A ไปยัง C' และเมื่อบอกว่าแผนภาพสับเปลี่ยนได้ เส้นทางเหล่านี้จึงเท่ากันทั้งหมดมอร์ฟิซึมเชิงฉีด, มอร์ฟิซึมเชิงทั่วถึง, มอร์ฟิซึมสมสัณฐาน ล้วนเป็นสมบัติสำคัญของฟังก์ชัน ซึ่งทำให้สามารถ “ตัดทอน” พจน์บางตัวจากทั้งสองข้างของสมการได้ เช่น โดยทั่วไปจาก
f(g(x))=f(h(x))ไม่อาจสรุปได้ว่าg(x)=h(x)ถ้าสามารถตัดทอน f ได้ในลักษณะนี้ ก็เรียกว่าเป็นมอร์ฟิซึมเชิงฉีด ในทำนองเดียวกัน ถ้าจากg(f(x))=h(f(x))สามารถตัดทอน f แล้วได้g(x)=h(x)ก็แปลว่า f เป็นมอร์ฟิซึมเชิงทั่วถึง มอร์ฟิซึมสมสัณฐานมีสมบัติทั้งสองอย่าง ด้วยสมบัติเหล่านี้ ในบางสถานการณ์จึงสามารถ “เดินย้อนกลับ” บางเส้นทางในแผนภาพได้รูปแบบหนึ่งของทฤษฎีบทที่พบได้ในทฤษฎีหมวดหมู่คือ ตัวอย่างอย่าง five lemma[0] ที่ว่า “ดูแผนภาพนี้ ถ้า g เป็นมอร์ฟิซึมเชิงทั่วถึง และ h เป็นมอร์ฟิซึมเชิงฉีด แล้ว f เป็นมอร์ฟิซึมสมสัณฐาน” กล่าวคือ เมื่อรู้ว่าสามารถตัดทอนได้จากฝั่งนี้และฝั่งนั้น ก็จะรู้ได้ว่าสามารถตัดทอนได้จากอีกฝั่งหนึ่งด้วย
[0] https://en.wikipedia.org/wiki/Five_lemma
ถ้าคิดแบบง่าย ๆ ให้มองว่าวัตถุคือชนิด และลูกศรคือฟังก์ชันระหว่างชนิด
เริ่มจากมุมซ้ายบนแล้วเดินไปตามสองเส้นทางพร้อมตรวจชนิด ถ้าแผนภาพตรวจชนิดได้ถูกต้อง ก็เรียกว่าสับเปลี่ยนได้ และสองเส้นทางนั้นเทียบเท่ากันในความหมายบางอย่าง ความหมายที่เป็นรูปธรรมนั้นขึ้นอยู่กับรายละเอียดหลายอย่างที่ละไว้ที่นี่
ตัวอย่างของหมวดหมู่มีหมวดหมู่ “เซตและฟังก์ชัน” ในหมวดหมู่นั้น เซตทุกเซตที่คิดได้เป็นวัตถุ หรือก็คือโหนด และฟังก์ชันทุกฟังก์ชันที่คิดได้ระหว่างเซตสองเซตใด ๆ เป็นลูกศรระหว่างทั้งสอง
ดังนั้นถ้านำลูกศรหนึ่งเส้นจาก A ไป B และอีกเส้นจาก B ไป C มาประกอบกันเหมือนฟังก์ชัน ก็จะได้ฟังก์ชันจาก A ไป C
แผนภาพสับเปลี่ยนได้มองได้ว่าเป็นสับเซตของหมวดหมู่ทั้งหมด และเป็นกรณีที่เมื่อตามทุกเส้นทางที่วาดไว้ระหว่างเซตสองเซต X และ Y แล้วประกอบลูกศรของแต่ละเส้นทาง จะได้ฟังก์ชันเดียวกัน
ผมไม่เคยอ่านเรื่องหมวดหมู่ระดับสูง จึงไม่แน่ใจเรื่องแผนภาพปะติด แต่ก็น่าจะเป็นการทำให้แนวคิดลักษณะนี้เป็นทั่วไปในรูปแบบใดรูปแบบหนึ่ง
ส่งออกเป็นรูปแบบที่เป็นมิตรกับเว็บได้ไหม? น่าจะเป็น SVG แหละ ถ้ารัน quiver บน localhost การแชร์เป็นลิงก์ก็ไม่ใช่ตัวเลือก
ตอนเรียนวิชาทฤษฎีหมวดหมู่เมื่อหลายปีก่อน Quiver เป็นสิ่งที่ขาดไม่ได้จริง ๆ UI สะอาด ใช้ง่ายตามสัญชาตญาณ และฟีเจอร์ก็เพียงพอ เทียบกับการต้องปล้ำกับ TikZ แล้วสู้กันไม่ได้เลย
เป็นผลิตภัณฑ์ที่ดีมาก เมื่อก่อนปกติผมเขียน โค้ด TikZ ด้วยมือ และก็ทำได้ค่อนข้างเร็ว แต่ตอนนี้ลืมไปเยอะแล้ว จึงคิดว่าสิ่งนี้จะมีประโยชน์มากสำหรับแผนภาพสับเปลี่ยนได้
ในนี้มี เครื่องมือสร้างโค้ด ที่น่าทำซ่อนอยู่
เคยใช้ Quiver หลายครั้ง และทุกครั้งก็เป็นประสบการณ์ที่ดี คนทำยอดเยี่ยมมาก