Human-Computer Interface เป็นอีกสายงานที่ผมสนใจมากๆ ขนาดคิดจะไปเรียนต่อด้านนี้ เผอิญช่วงนี้ไอเดียกระฉูด นั่งออกแบบ UI ของโปรแกรมหลายตัว เลยมาบล็อกเก็บไว้
โปรแกรมทุกตัวเป็น mockup ซึ่งใช้วิธีทำแตกต่างกันไป ทุกตัวยังไม่มีโครงการจะเขียนให้มันทำงานได้จริงๆ (ถ้าสนใจก็ติดต่อมาได้)
เริ่มจากตัวแรกก่อน Organization Chart Visualizer ที่ยังไม่มีชื่อ
ที่มาโครงการ
ช่วงนี้ผมต้องเกี่ยวข้องกับโครงสร้างของหน่วยราชการค่อนข้างบ่อย จะเจอคำถามอย่างเช่น หน่วยงานนี้เป็นอะไรกับหน่วยงานนั้น หน่วยงานนี้มีหน่วยงานย่อยกี่แห่ง หน่วยงานย่อยมีกี่แบบ เหมือนกันมั้ย จนไปถึงหัวหน้าหน่วยงานนี้ชื่ออะไร ซึ่งจริงๆ แล้วข้อมูลพวกนี้เป็นข้อมูลที่เปิดเผย เพียงแต่รู้กันเฉพาะบุคคลภายในเท่านั้น ตัว Organization Chart ขององค์กรอยู่ในรูปแบบ tree หรือจริงๆ คือเป็นกราฟ (ซึ่งเป็นกราฟคนละแบบกับกราฟราคาหุ้น ถ้าไม่เคยเรียนอ่านที่ Wikipedia)
ถ้าเราเอากราฟ Organization Chart ของแต่ละหน่วยงานย่อยๆ มาต่อกัน มันก็ควรจะได้จิ๊กซอว์ชิ้นใหญ่ ที่แสดงโครงสร้างทั้งหมดของหน่วยราชการไทยได้ (โดยที่มีนายกรัฐมนตรีเป็น root node เป็นต้น)
และถ้าเรามีระบบ Visualization เจ้ากราฟใหญ่อันนี้ที่ดี มันก็น่าจะอำนวยความสะดวกได้มาก ในการค้นหาและเปรียบเทียบข้อมูลของหน่วยงานราชการไทย นอกจากนี้ถ้าดีไซน์ให้มัน generalize หน่อย ก็จะเป็น Visualizer ของกราฟอะไรก็ได้เช่นกัน
Mockup Screenshot
ผมนั่งคิดมาสองสามชั่วโมง เลยตัดสินใจสร้าง mockup ขึ้นมาให้ไอเดียในหัวมันชัดเจน ตัวหน้าต่างโปรแกรมใช้ Interface Builder เพื่อความรวดเร็วและสวยงาม ตัวกราฟห่วยๆ ข้างในใช้ GIMPShop (เผอิญฝีมือวาดรูปห่วย) และข้อมูลเป็นข้อมูลจริงของกระทรวง ICT นึกตัวอย่างไม่ออก ก็เอาสังกัดตัวเองนี่ล่ะ

เนื่องจากว่าไม่เคยใช้ Graph Visualization มาก่อนเลย แต่ตั้งใจจะไม่ดูเพราะอยากรู้ว่าลำพังตัวเองจะออกแบบได้ขนาดไหน คิดว่าคงมี flaw อีกเยอะ ที่ต้องเก็บมาแก้ไขใหม่วันหลัง
Required Features
จริงๆ หัวข้อนี้ควรจะอยู่ก่อน screenshot เพราะว่ารูปข้างบนนั้นออกแบบตาม requirement เหล่านี้ เพียงแต่อยากให้คนอ่านเห็นภาพว่าโปรแกรมเป็นยังไง เลยเอารูปขึ้นก่อนแทน
รายการนี้ก็ผสมๆ กันระหว่าง requirement/use case/scenario นะครับ
Design Approach
ผมคิดว่าสิ่งสำคัญที่สุดของโปรแกรมตระกูล Visualization คือพื้นที่ในการแสดงเนื้อหา ดังนั้นจึงพยายามลดขนาดของสิ่งไม่จำเป็นอื่นๆ ออกไปให้หมด โดยใช้ทูลบาร์แบบข้อความเท่านั้น และใช้ sidebar ที่สามารถ toggle (เปิด/ปิด) ได้
ดูที่ทูลบาร์อันบนก่อน ให้ความสำคัญกับการซูมเป็นพิเศษ ปุ่ม normal view มีไว้แสดงกราฟแบบพอดีจอ ตามมาด้วย slider สำหรับซูมเข้าออก และตัวเลขบอกอัตราขยาย ขวามือสุดเป็นปุ่ม toggle sidebar
สำหรับ sidebar มีประโยชน์สองอย่าง คือไว้เก็บช่อง Search และเป็นรายการที่เราจะ filter
infobox ยังคิดไม่ออกว่าควรมีพฤติกรรมเหมือน tooltip ดี หรือจะเป็นกล่องค้างไว้แบบนั้นดี
ส่วน statusbar ก็แสดงข้อมูลสำคัญ 3 อย่าง คือ Total node, Selected node (Node Count) และ Link Count
Data Structure
ข้อมูลในรูปแบบ tree นี้เหมาะอย่างยิ่งที่จะเก็บด้วย XML เพราะว่าเมื่อ parser จัดการให้เรา มันก็จะมาในรูปของ tree ให้เรียบร้อย
ปัญหาถัดมาคือไฟล์ XML ควรเก็บที่ไหน local หรือ remote คำตอบก็ควรจะเป็น remote เนื่องจากข้อมูลอาจต้องอัพเดตอยู่เสมอ (เช่น ชื่อผู้อำนวยการ) แต่ก็ควรจะเก็บแคชไว้สำหรับดูออฟไลน์ด้วย
Implementation Options
สมมติว่าจะเขียนเจ้านี่ขึ้นมาจริงๆ ผมคงไม่เขียนด้วย C หรือ C++ แน่นอน (Java ด้วย ผมเกลียด Swing) ทางเลือกที่เป็นไปได้
Concerned Issues
ปัญหาอื่นๆ ที่ยังไม่ได้วิธีแก้
Naming
สุดท้ายคือชื่อ ยังคิดไม่ออกแต่อยากได้ชื่อไทยๆ เหมือน Lopburi Flat คิดว่าตัวนี้คงเป็น "Something VS" หรือ "Something Visualizer" น่าจะเป็นชื่อสถานที่ แต่ก็ต้องเอาอันที่มันสะกดภาษาอังกฤษแล้วอ่านง่ายๆ แล้วก็ต้องไม่โหลแบบเชียงใหม่ ภูเก็ต พัทยา ด้วย ถ้ามีไอเดียก็ช่วยคิดหน่อยละกันนะครับ :D
เสนอชื่อ Piry VS ครับ :D มาจากคำว่า ไพรี = ป่า เพราะว่ามี ต้นไม้หลายต้นไง
ใช้ firefox โพสไม่ติดเลยครับ บอกว่า validation error
ไม่รู้มันเป็นไรเหมือนกันแฮะ เลย bypass form validation ไปล่ะ
test qqqq
too lazy to type again, just check these
- Graphviz
- Omnigraffe