1 คะแนน โดย GN⁺ 2025-03-17 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ประสบการณ์จากการสร้างโปรแกรมอ่านการ์ตูนส่วนตัว 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
  • เอกสารที่เปิดเผยสู่สาธารณะ

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

 
GN⁺ 2025-03-17
ความคิดเห็นบน Hacker News
  • พออ่านข้อความว่า “กฎห้าข้อที่เป็นประโยชน์ต่อผู้ใช้: ไม่มีตัวติดตั้ง, ไม่มีไฟล์บีบอัด, ไม่มีคีย์รีจิสทรี, ไม่มีรันไทม์เพิ่มเติม, ไฟล์รันได้ไฟล์เดียว” แล้วรู้สึกอบอุ่นและมีความสุข
    เข้าใจนะว่าทำไมรีจิสทรีถึงมีอยู่ และทำไมระบบนิเวศซอฟต์แวร์บน Windows ทุกวันนี้ถึงเป็นแบบนี้ แต่คิดถึงยุคก่อนจริง ๆ ที่ซอฟต์แวร์เดสก์ท็อปส่วนใหญ่ยังเรียบง่าย
    เดี๋ยวนี้ถ้าเป็นไปได้ก็จะใช้ การติดตั้งแบบพกพา และอยากให้วิธีแบบนี้พบเห็นได้มากขึ้น เวลา ความยุ่งยาก และความไม่แน่นอนว่าจะกู้คืนการตั้งค่าทั้งหมดได้ไหม ทำให้หลีกเลี่ยงการติดตั้ง Windows ใหม่อย่างจริงจัง

    • ตัวติดตั้งก็ทำสิ่งที่มีประโยชน์หลายอย่าง และผู้ใช้ปลายทางจำนวนไม่น้อยก็ต้องการจริง ๆ เช่น เพิ่มทางลัดในเมนู Start เพื่อให้หาและค้นหาได้, ผูกชนิดไฟล์, และลงทะเบียนในรายการโปรแกรมของ Windows
      เมื่อก่อนชอบซอฟต์แวร์แบบพกพามาก แต่เดี๋ยวนี้ถ้ามีให้ทั้งสองแบบ กลับชอบตัวติดตั้งมากกว่า ไม่อย่างนั้นถ้าอยากให้ค้นหาได้ก็ต้องเพิ่มเข้าเมนู Start เอง
      แต่ไม่ชอบ คีย์รีจิสทรี เพราะพอติดตั้งระบบปฏิบัติการใหม่ก็มักหายไป อยากให้เก็บการตั้งค่าไว้ใน %appdata% เฉย ๆ
    • นั่นแหละเหตุผลที่ชอบ Go เพราะเป็นไฟล์รันได้ไฟล์เดียว ทำให้คนอื่นใช้เครื่องมือได้ง่ายขึ้น
      อีกทางเลือกหนึ่งคือแพ็กเป็นไฟล์รันได้ไฟล์เดียวด้วย NSIS แล้วก่อนรันค่อยแตกทุกอย่างลงไดเรกทอรีชั่วคราว
      มองว่า Windows Registry เป็นเหมือนกองของจิปาถะที่ไม่สม่ำเสมอและออกแบบมาไม่ดี ถ้าเทียบกันแล้ว รีจิสทรีของ Gnome ออกแบบมาดี คำอธิบายคีย์ ตัวเลือกค่าที่มีข้อจำกัด และการแสดงค่าเริ่มต้น ล้วนเป็นการออกแบบส่วนติดต่อผู้ใช้ที่ดี
      แค่ดู Group Policy ของ Windows กับการแมปไปรีจิสทรี ก็เห็นแล้วว่าโครงสร้างตรรกะเดียวกันกลับกระจัดกระจาย แถมยังมีคีย์ที่ใช้การปฏิเสธซ้อนอีก
    • จุดประสงค์ดั้งเดิมของรีจิสทรีคือให้ COM ดู GUID แล้วหาตำแหน่งไฟล์ DLL ได้ จากนั้น COM ก็จะสร้างอินสแตนซ์ของอ็อบเจ็กต์ได้
      ทุกวันนี้ยังเห็นร่องรอยนั้นได้ใน HKEY_CLASSES_ROOT
      ในเชิงเทคนิคสามารถสร้างอ็อบเจ็กต์โดยไม่ต้องใช้รีจิสทรีได้ โหลด DLL แล้วเรียกฟังก์ชันที่ export ออกมาเพื่อสร้างอ็อบเจ็กต์ Factory จากนั้นใช้ Factory นั้นสร้างอินสแตนซ์ นั่นแหละคือสิ่งที่ COM ทำอยู่เอง
    • การออกแบบที่เรียบง่ายและเบา แบบนั้นโดนใจผมเหมือนกัน
      บทความก็เป็นบันทึกย้อนความทรงจำที่ยอดเยี่ยมจริง ๆ เพียงแต่ถ้าลงลึกกับความยากลำบากที่ผู้เขียนแย้มไว้ช่วงต้นอีกหน่อยก็คงดี ถึงอย่างนั้นก็เป็นแค่การจับผิดเล็กน้อย บทความดีมาก และดูเป็นงานที่น่าประทับใจทีเดียว
    • ยังไม่ค่อยแน่ใจว่าเส้นทางที่ดีที่สุดในการทำ แอปไบนารีไฟล์เดียว โดยไม่รวมไลบรารีผ่านการคอมไพล์แบบ static คืออะไร เพราะเรื่องไลเซนส์มักทำให้รับมือได้ยาก
  • Photoshop มีฟีเจอร์เยอะมาก แค่มีฟิลเตอร์ภาพไม่กี่ตัวคงเรียกว่า การทำซ้ำ ได้ยาก

    • แต่การทำ ส่วนติดต่อผู้ใช้ ให้ตรงนั้นยากมากและสำคัญมาก
      GIMP ในปี 2006 ก็มีฟีเจอร์มากมายมหาศาล แต่เมื่อเทียบกับอินเทอร์เฟซของ Photoshop แล้วถือว่าแย่มากจริง ๆ
    • ถึงอย่างนั้น สำหรับงานระดับปริญญาตรีก็น่าประทับใจมาก ๆ
    • ตรงนี้คงไม่ได้หมายความว่าให้ตีคำว่า “ทำซ้ำ” ตามตัวอักษร
    • ใช่ มองว่า Photopea เป็นความพยายามโคลนที่ใกล้เคียงที่สุด แต่ก็ยังขาดฟีเจอร์ไปหลายอย่าง
    • ถ้าบอกว่า “สร้างโปรแกรมแก้ไขภาพพื้นฐาน” แน่นอนว่าคงฟังดูไม่น่าประทับใจเท่าไร เห็นบทความเริ่มแบบนี้ก็ไม่น่าแปลกใจ

      As I’m getting older I look back on all the things I’ve done as a creative developer, and I see so many cool projects!
      ช่างถ่อมตัวเสียจริง…

  • ควรมีลิงก์ไปยังโปรเจกต์เจ๋ง ๆ นี้โดยตรงด้วย
    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 ทันที

    • ไม่ได้จะบ่นเรื่องโดนโหวตลบนะ แต่ค่อนข้างแปลกที่เรื่องนี้ดูเหมือนจะเป็นสิ่งที่ Hacker News ไม่ชอบ
      ผมนึกว่าเรื่องโปรเจกต์แฮ็กภายในของวิศวกรซอฟต์แวร์จะน่าสนใจเสียอีก แต่ก็นั่นแหละ ช่วยไม่ได้
  • มีหลายสิ่งที่ผู้คนสร้างขึ้นมาแล้วไม่บอกให้โลกรู้ โชคดีที่มันอยู่บน GitHub และน่าประทับใจจริง ๆ