- ประสบการณ์จากการสร้างโปรแกรมอ่านการ์ตูนส่วนตัว Fiew ในช่วงฤดูร้อนปี 2006 กลายเป็นจุดเริ่มต้นที่ทำให้ผู้เขียนพัฒนาโปรแกรมแก้ไขภาพ Fedit ที่คล้าย Photoshop เป็นโปรเจกต์วิทยานิพนธ์ด้วย C++ และ Windows API
- Fedit ทำงานเป็น ไฟล์ปฏิบัติการเดี่ยว โดยไม่ต้องมีตัวติดตั้ง ไฟล์บีบอัด คีย์รีจิสทรี หรือรันไทม์เพิ่มเติม จึงสามารถเปิดใช้งานได้ทันทีบนพีซีที่มีสิทธิ์จำกัดหรือจาก USB drive
- อินเทอร์เฟซถูกออกแบบให้มีลำดับการทำงานคล้าย Photoshop แบบคลาสสิก และมีหน้าต่างเครื่องมือแบบลอย ตัวเลือกสี การจัดการเลเยอร์ ประวัติการย้อนกลับ ฟิลเตอร์ภาพ และฟิลเตอร์ย้ายพิกเซลแบบกำหนดเอง
- อุปสรรคใหญ่ที่สุดคือการ สร้างส่วนติดต่อผู้ใช้ขึ้นใหม่ โดยใช้เวลามากกับการทำงานแบบ snap/unsnap ของแผงตั้งค่าเครื่องมือ รวมถึงการสร้างตัวเลือกสีและตัวเลือกเครื่องมือ
- โปรเจกต์นี้นำไปสู่ความสำเร็จของวิทยานิพนธ์และการได้รับปริญญาวิศวกรรมศาสตรบัณฑิต และต่อมายังสร้างความประทับใจให้ CTO ของ GoldenLine จนเชื่อมไปสู่งาน C++ สำหรับสร้างแอป WinAPI อัปโหลดภาพจำนวนมาก
จากโปรแกรมอ่านการ์ตูน Fiew สู่โปรแกรมแก้ไขภาพ Fedit
- จุดเริ่มต้นในช่วงต้นฤดูร้อนปี 2006 มาจากความไม่พอใจกับแอปดูภาพที่มีอยู่ในตอนนั้น
- โดยเฉพาะการที่ไม่สามารถควบคุมการอ่านด้วยเมาส์เพียงอย่างเดียวได้ ทำให้ต้องเอื้อมมือไปใช้คีย์บอร์ดอยู่ตลอด ซึ่งรบกวนการใช้งาน
- ผู้เขียนเพิ่งเรียนวิชา C++/Windows API ในมหาวิทยาลัยจบ และใช้ช่วงปิดภาคฤดูร้อนพัฒนาโปรแกรมอ่านการ์ตูนในอุดมคติของตัวเอง
- โปรแกรมอ่านการ์ตูนนี้มีชื่อว่า Fiew
- เมื่อต้นฤดูใบไม้ร่วงปี 2006 ต้องเลือกหัวข้อวิทยานิพนธ์ และจากประสบการณ์ที่พัฒนาโปรแกรมดูภาพได้อย่างราบรื่น จึงตัดสินใจว่าน่าจะสร้างโปรแกรมแก้ไขภาพได้เช่นกัน
- ในเวลานั้นผู้เขียนใช้งาน Adobe Photoshop บ่อยมาก เป้าหมายจึงกลายเป็นการสร้างโปรแกรมแก้ไขที่คล้าย Photoshop
วิธีสร้าง Fedit และข้อจำกัดด้านการแจกจ่าย
- Fedit เป็น Advanced Image Editor ที่เขียนด้วย C++ และใช้ Windows API กับไลบรารีกราฟิก GDI+
- เพื่อให้รูปแบบการแจกจ่ายเป็นมิตรกับผู้ใช้ จึงยึดตามกฎ 5 ข้อ
- ไม่มีตัวติดตั้ง
- ไม่มีไฟล์บีบอัด
- ไม่มีคีย์รีจิสทรี
- ไม่มีรันไทม์เพิ่มเติม
- ไฟล์ปฏิบัติการเดี่ยว
- ผลลัพธ์คือเป็นโปรแกรมที่ใช้งานได้ทันทีโดยไม่ต้องติดตั้ง สามารถรันได้บนระบบที่มีสิทธิ์จำกัดหรือจาก USB drive และใช้ทรัพยากรน้อย
อินเทอร์เฟซและฟีเจอร์ที่ใกล้เคียง Photoshop
- อินเทอร์เฟซถูกสร้างอย่างพิถีพิถันให้ดูเหมือน Photoshop แบบคลาสสิก และมีฟังก์ชันที่ใช้งานบ่อยรวมอยู่ด้วย
- ฟีเจอร์หลักมีดังนี้
- หน้าต่างเครื่องมือแบบลอยที่จัดวางได้อิสระ
- ตัวเลือกสี
- การจัดการเลเยอร์ที่ใช้งานง่าย
- ประวัติการทำงานที่สามารถย้อนกลับได้ทีละขั้น
- ฟิลเตอร์ภาพหลายแบบ
- อินเทอร์เฟซแบบเมทริกซ์ ที่สามารถเข้ารหัสฟิลเตอร์ย้ายพิกเซลได้ด้วยตนเอง
- ยังมีตัวดูไลบรารีภาพขนาดใหญ่ที่นำมาจากโปรเจกต์ก่อนหน้าอย่าง Fiew รวมอยู่ด้วย
- ทำให้เลื่อนดูรูปภาพจำนวนมากได้อย่างรวดเร็วและสะดวก
กระบวนการพัฒนาที่ต้องดีบักด้วยตัวเอง
- แม้จะอ้างอิง MSDN และ Experts Exchange อย่างมาก แต่ปัญหาส่วนใหญ่มีความเฉพาะทางมากจนต้องวิเคราะห์และดีบักเองเป็นหลัก
- เนื่องจากต้องส่งงานวิทยานิพนธ์ให้ทันกำหนด ผู้เขียนจึงทำงานวันละ 14 ชั่วโมง ในช่วงสองเดือนสุดท้าย
- ส่วนที่ยากที่สุดคือส่วนติดต่อผู้ใช้
- ผู้เขียนต้องการให้ลำดับการทำงานใกล้เคียงกับ Photoshop ให้มากที่สุด
- พฤติกรรมการ snap และ unsnap ของแผงตั้งค่าเครื่องมืออย่างอิสระนั้นยากเป็นพิเศษ
- การสร้างตัวเลือกสีและตัวเลือกเครื่องมือขึ้นใหม่ก็ไม่ง่ายเช่นกัน
- เมื่อใกล้จบโปรเจกต์ ผู้เขียนค่อนข้างเหนื่อยล้า และเริ่มรู้สึกไม่ชอบ WinAPI ไปด้วย
ผลลัพธ์หลังวิทยานิพนธ์และเอกสารที่เผยแพร่
- วิทยานิพนธ์ประสบความสำเร็จ และผู้เขียนได้รับปริญญา Bachelor of Science in Engineering จาก Warsaw University of Technology
- Fedit ได้รับรีวิวเชิงบวกบางส่วนบนอินเทอร์เน็ต แต่ไม่ได้มีการโปรโมตอย่างจริงจัง
- หลังจากนั้น Fiew และ Fedit ก็สร้างความประทับใจให้ CTO ของ GoldenLine และนำไปสู่งาน C++ สำหรับสร้างแอป WinAPI ประสิทธิภาพสูงสำหรับอัปโหลดภาพจำนวนมากให้กับ Flickr clone
- เอกสารที่เปิดเผยสู่สาธารณะ
- ซอร์สโค้ดของ Fedit และ Fiew: ดูได้บน GitHub
- ไฟล์ PDF ของวิทยานิพนธ์: เอกสารวิทยานิพนธ์ของ Fedit
- Web Archive ของเว็บไซต์แอปต้นฉบับ: เว็บไซต์ในเวลานั้นที่ถูกเก็บถาวรไว้
- การสนทนาบน Hacker News: หน้าการสนทนาที่เกี่ยวข้อง
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
พออ่านข้อความว่า “กฎห้าข้อที่เป็นประโยชน์ต่อผู้ใช้: ไม่มีตัวติดตั้ง, ไม่มีไฟล์บีบอัด, ไม่มีคีย์รีจิสทรี, ไม่มีรันไทม์เพิ่มเติม, ไฟล์รันได้ไฟล์เดียว” แล้วรู้สึกอบอุ่นและมีความสุข
เข้าใจนะว่าทำไมรีจิสทรีถึงมีอยู่ และทำไมระบบนิเวศซอฟต์แวร์บน Windows ทุกวันนี้ถึงเป็นแบบนี้ แต่คิดถึงยุคก่อนจริง ๆ ที่ซอฟต์แวร์เดสก์ท็อปส่วนใหญ่ยังเรียบง่าย
เดี๋ยวนี้ถ้าเป็นไปได้ก็จะใช้ การติดตั้งแบบพกพา และอยากให้วิธีแบบนี้พบเห็นได้มากขึ้น เวลา ความยุ่งยาก และความไม่แน่นอนว่าจะกู้คืนการตั้งค่าทั้งหมดได้ไหม ทำให้หลีกเลี่ยงการติดตั้ง Windows ใหม่อย่างจริงจัง
เมื่อก่อนชอบซอฟต์แวร์แบบพกพามาก แต่เดี๋ยวนี้ถ้ามีให้ทั้งสองแบบ กลับชอบตัวติดตั้งมากกว่า ไม่อย่างนั้นถ้าอยากให้ค้นหาได้ก็ต้องเพิ่มเข้าเมนู Start เอง
แต่ไม่ชอบ คีย์รีจิสทรี เพราะพอติดตั้งระบบปฏิบัติการใหม่ก็มักหายไป อยากให้เก็บการตั้งค่าไว้ใน %appdata% เฉย ๆ
อีกทางเลือกหนึ่งคือแพ็กเป็นไฟล์รันได้ไฟล์เดียวด้วย NSIS แล้วก่อนรันค่อยแตกทุกอย่างลงไดเรกทอรีชั่วคราว
มองว่า Windows Registry เป็นเหมือนกองของจิปาถะที่ไม่สม่ำเสมอและออกแบบมาไม่ดี ถ้าเทียบกันแล้ว รีจิสทรีของ Gnome ออกแบบมาดี คำอธิบายคีย์ ตัวเลือกค่าที่มีข้อจำกัด และการแสดงค่าเริ่มต้น ล้วนเป็นการออกแบบส่วนติดต่อผู้ใช้ที่ดี
แค่ดู Group Policy ของ Windows กับการแมปไปรีจิสทรี ก็เห็นแล้วว่าโครงสร้างตรรกะเดียวกันกลับกระจัดกระจาย แถมยังมีคีย์ที่ใช้การปฏิเสธซ้อนอีก
ทุกวันนี้ยังเห็นร่องรอยนั้นได้ใน HKEY_CLASSES_ROOT
ในเชิงเทคนิคสามารถสร้างอ็อบเจ็กต์โดยไม่ต้องใช้รีจิสทรีได้ โหลด DLL แล้วเรียกฟังก์ชันที่ export ออกมาเพื่อสร้างอ็อบเจ็กต์ Factory จากนั้นใช้ Factory นั้นสร้างอินสแตนซ์ นั่นแหละคือสิ่งที่ COM ทำอยู่เอง
บทความก็เป็นบันทึกย้อนความทรงจำที่ยอดเยี่ยมจริง ๆ เพียงแต่ถ้าลงลึกกับความยากลำบากที่ผู้เขียนแย้มไว้ช่วงต้นอีกหน่อยก็คงดี ถึงอย่างนั้นก็เป็นแค่การจับผิดเล็กน้อย บทความดีมาก และดูเป็นงานที่น่าประทับใจทีเดียว
Photoshop มีฟีเจอร์เยอะมาก แค่มีฟิลเตอร์ภาพไม่กี่ตัวคงเรียกว่า การทำซ้ำ ได้ยาก
GIMP ในปี 2006 ก็มีฟีเจอร์มากมายมหาศาล แต่เมื่อเทียบกับอินเทอร์เฟซของ Photoshop แล้วถือว่าแย่มากจริง ๆ
ควรมีลิงก์ไปยังโปรเจกต์เจ๋ง ๆ นี้โดยตรงด้วย
https://github.com/f055/fedit-image-editor
ตอนที่ว่า “ไม่ได้โปรโมตอะไรเลย ไม่กี่เดือนต่อมาก็ได้งาน C++ สุดท้ายความพยายามทั้งหมดนั้นก็ได้รับผลตอบแทน” น่าสนใจดี
โดยสัญชาตญาณเรารู้ว่างานที่ทำมาอย่างหนักควรได้รับผลตอบแทน แต่น่าเสียดายที่ นักพัฒนาโอเพนซอร์ส มักทุ่มเทอย่างมากกับโค้ด โดยเฉพาะโค้ดที่ถูกใช้แพร่หลายในโปรดักชัน แต่กลับแทบไม่ได้รับผลตอบแทนจริง ๆ บ่อยเกินไป
เลยดูเหมือนว่าจึงมีการมองหาผลตอบแทนด้านชื่อเสียง หรือ NPM ใส่ฟีเจอร์ทำนอง “ลองบริจาคให้ผู้เขียนไลบรารีนี้ไหม” และ GitHub ทำการเชื่อมกับ Patreon
เราต้องการโมเดลที่ดีกว่าปัจจุบัน ซึ่งไม่เอาเปรียบครีเอเตอร์หนุ่มสาวที่ไร้เดียงสาแต่ตั้งใจจริง
ช่วงต้นยุค 2000 มีโปรเจกต์ชื่อ pixel32 และภายหลังคือ Pixel Studio Pro ดูดีมากจริง ๆ และขายแบบ early access
แต่สุดท้ายก็กลายเป็น vaporware คนที่จ่ายเงินไปโกรธกันมาก และผู้สร้างก็เปลี่ยนจากฮีโร่เป็นตัวร้ายอย่างรวดเร็ว
https://discuss.haiku-os.org/t/pixel-studio-pro-in-past-call...
ผู้เขียนบอกว่าจบจาก Warsaw University of Technology ซึ่งแถวนี้มักถูกมองว่าเป็นหนึ่งในมหาวิทยาลัยที่ค่อนข้างดีเสมอ
อีกอย่างที่สะดุดตาคือวิทยานิพนธ์สมัยนั้นต่างจากสมัยนี้มากแค่ไหน ผมเพิ่งเขียนวิทยานิพนธ์ที่มหาวิทยาลัยเทคโนโลยีในเมืองใหญ่อีกแห่งเมื่อไม่นานมานี้ และ 90% ของวิทยานิพนธ์ระดับวิศวกรรมศาสตรบัณฑิตของพวกเรามีคุณภาพค่อนข้างต่ำ รวมถึงของผมด้วย
อาจมีวิทยานิพนธ์ที่โดดเด่นบ้าง แต่ส่วนใหญ่น่าจะค่อนข้างน่าเบื่อ
นั่นแหละเหตุผลที่ชอบ Windows มีซอฟต์แวร์ซอร์สเปิดขนาดเล็กที่เติมเต็มช่องเฉพาะบางอย่างได้ดีอยู่ เยอะมหาศาล
เมื่อก่อนเคยเข้าไปเดินดูในที่อย่าง sourceforge.net กับ freshmeat ถ้าจำชื่อไม่ผิด เพื่อค้นหาอะไรพวกนั้น
เพื่อนที่ทำงานอยู่ที่ Phonegap หลังจากถูก Adobe ซื้อไปราว 10 ปีก่อน ก็ลองสนุก ๆ ด้วยการ พอร์ต Photoshop ไปเป็น JavaScript ทันที
ผมนึกว่าเรื่องโปรเจกต์แฮ็กภายในของวิศวกรซอฟต์แวร์จะน่าสนใจเสียอีก แต่ก็นั่นแหละ ช่วยไม่ได้
มีหลายสิ่งที่ผู้คนสร้างขึ้นมาแล้วไม่บอกให้โลกรู้ โชคดีที่มันอยู่บน GitHub และน่าประทับใจจริง ๆ