นักพัฒนา Immich แบ่งปัน "ความรู้อาถรรพ์" จากการสร้างซอฟต์แวร์จัดการรูปภาพ

ทีมชุมชน BigGo
นักพัฒนา Immich แบ่งปัน "ความรู้อาถรรพ์" จากการสร้างซอฟต์แวร์จัดการรูปภาพ

นักพัฒนาเบื้องหลัง Immich แพลตฟอร์มจัดการรูปภาพแบบโอเพนซอร์ส ได้สร้างสิ่งที่ไม่เหมือนใครในโลกซอฟต์แวร์ขึ้นมา นั่นคือบันทึกสาธารณะของความรู้อาถรรพ์ - การค้นพบทางเทคนิคที่เจ็บปวดซึ่งทำให้นักพัฒนาตั้งคำถามกับทางเลือกชีวิตของตนเอง คอลเลกชันของบั๊กที่น่าหงุดหงิด พฤติกรรมแปลกๆ และข้อจำกัดทางเทคนิคที่แปลกประหลาดอย่างแท้จริงนี้ได้กระตุ้นใจชุมชนโปรแกรมเมอร์ ซึ่งมองว่าเป็นทั้งการบำบัดและการศึกษา

แนวคิดนี้เกินกว่าการติดตามบั๊กธรรมดา แต่ละรายการในฐานข้อมูลความรู้อาถรรพ์ของพวกเขาถูกคอมมิตพร้อมกับการแก้ไขจริง สร้างบันทึกถาวรของทั้งปัญหาและวิธีแก้ไข แนวทางนี้เปลี่ยนอุปสรรคทางเทคนิคที่น่าหงุดหงิดให้กลายเป็นประสบการณ์การเรียนรู้ที่มีค่าซึ่งนักพัฒนาคนอื่นๆ สามารถได้ประโยชน์

ความวุ่นวายของระบบนิเวศ JavaScript

โลกของ JavaScript มีบทบาทสำคัญในคอลเลกชันความรู้อาถรรพ์ของ Immich และนั่นก็มีเหตุผลที่ดี ปัญหาที่น่าสนใจเป็นพิเศษปัญหาหนึ่งเกี่ยวข้องกับสมาชิกชุมชนที่เพิ่ม backwards compatibility ให้กับโปรเจกต์ JavaScript ยอดนิยมอย่างเป็นระบบโดยการเพิ่ม package dependencies เพิ่มเติมหลายสิบตัว แนวปฏิบัตินี้ได้สร้างความขัดแย้งอย่างมาก โดยมีนักพัฒนาบางคนใช้เวลาทั้งคืนพยายามลบ dependencies ที่ไม่จำเป็นเหล่านี้ออกจากโปรเจกต์ของตน

การอภิปรายของชุมชนเผยให้เห็นความกังวลที่ลึกซึ้งยิ่งขึ้นเกี่ยวกับรูปแบบนี้ บางคนสงสัยว่าแรงจูงใจอาจเกี่ยวข้องกับการสร้างชื่อเสียงหรือแม้กระทั่งความเสี่ยงด้านความปลอดภัยของ supply chain packages ที่เป็นปัญหาประกอบด้วยยูทิลิตี้ที่เรียบง่ายอย่างน่าขัน ซึ่งเน้นย้ำว่าระบบนิเวศ JavaScript สามารถบวมโตด้วย dependencies ที่ไม่สำคัญซึ่งมีจุดประสงค์ในทางปฏิบัติเพียงเล็กน้อย

ปัญหาของ JavaScript/Node.js:

  • bcrypt ใช้เพียง 72 ไบต์แรกของสตริงรหัสผ่านเท่านั้น
  • JavaScript Date objects: ใช้ดัชนีเริ่มต้นที่ 1 สำหรับปี/วัน แต่ใช้ดัชนีเริ่มต้นที่ 0 สำหรับเดือน
  • npm scripts ทำการเรียก HTTP ไปยัง registry ในทุกครั้งที่รันคำสั่ง
  • Node.js เวอร์ชันก่อน v20.8: การผสม ESM/CommonJS อาจทำให้เกิด segfaults เมื่อใช้ --experimental-vm-modules

ปัญหาแปลกๆ ของฐานข้อมูลและระบบ

PostgreSQL นำเสนอชุดของความท้าทายที่ทำให้ทีม Immich ต้องตกใจ ข้อจำกัดของฐานข้อมูลที่ 65,535 parameters หมายความว่าการดำเนินการ bulk insert อาจล้มเหลวอย่างน่าตกใจกับชุดข้อมูลขนาดใหญ่ แม้ว่าสิ่งนี้อาจดูเหมือนข้อจำกัดที่ชัดเจนสำหรับผู้เชี่ยวชาญฐานข้อมูล แต่มันเป็นรายละเอียดประเภทที่จะปรากฏขึ้นเมื่อคุณพยายามแทรกบันทึกหลายพันรายการในครั้งเดียว

ความประหลาดใจอีกอย่างของ PostgreSQL เกี่ยวข้องกับฟีเจอร์ NOTIFY ซึ่งทำงานภายในธุรกรรมและอาจทำให้เกิดกิจกรรม write-ahead log ที่ไม่คาดคิด การค้นพบเหล่านี้เน้นย้ำว่าแม้กระทั่งระบบฐานข้อมูลที่มีชื่อเสียงก็มีพฤติกรรมที่สามารถทำให้นักพัฒนาที่ทำงานในระดับใหญ่ประหลาดใจได้

ข้อจำกัดของ PostgreSQL :

  • พารามิเตอร์สูงสุดต่อการสืบค้นหนึ่งครั้ง: 65,535 ตัว
  • การดำเนินการ NOTIFY จะเขียนข้อมูลลง WAL ทุก 5 วินาทีเมื่อใช้งานร่วมกับ socket.io postgres-adapter
  • การดำเนินการทั้งหมดรวมถึง NOTIFY จะทำงานภายในธุรกรรม

ฝันร้ายของระบบไฟล์ข้ามแพลตฟอร์ม

ระบบไฟล์ในระบบปฏิบัติการที่แตกต่างกันให้แหล่งข้อมูลความรู้อาถรรพ์ที่อุดมสมบูรณ์ ไฟล์ซ่อนของ Windows ไม่สามารถเปิดด้วยสิทธิ์เขียนได้ ซึ่งเป็นข้อจำกัดที่กลายเป็นปัญหาเป็นพิเศษเมื่อรวมกับตัวเลือก hide dot files ของ SMB ในขณะเดียวกัน macOS เพิ่มไฟล์ metadata และ indexing ลงในโวลุ่มที่ถอดออกได้อย่างเงียบๆ ทำให้การถ่ายโอนไฟล์ที่ควรจะสะอาดกลายเป็นรกรุงรัง

โลกมือถือเพิ่มความซับซ้อนอีกชั้นหนึ่ง โดยมีโทรศัพท์บางเครื่องที่ลบข้อมูล GPS ออกจากรูปภาพอย่างเงียบๆ เมื่อแอปไม่มีสิทธิ์เข้าถึงตำแหน่ง แม้ว่าพฤติกรรมนี้จริงๆ แล้วเป็นฟีเจอร์ความเป็นส่วนตัวที่ทำงานตามที่ตั้งใจไว้ แต่มันอาจทำให้นักพัฒนาที่ไม่เข้าใจว่าทำไมการประมวลผลรูปภาพของพวกเขาจึงสูญเสียข้อมูลตำแหน่งอย่างกะทันหันรู้สึกงุนงง

ความแปลกประหลาดของระบบไฟล์:

  • Windows : ไฟล์ที่ซ่อนอยู่ไม่สามารถเปิดด้วยแฟล็ก "w" ได้
  • macOS : ชื่อไฟล์ไม่แยกตัวพิมพ์เล็กใหญ่ตามค่าเริ่มต้น, การแปลง NFC→NFD
  • Mobile : ข้อมูล GPS ถูกลบออกจากรูปภาพสำหรับแอปที่ไม่มีสิทธิ์เข้าถึงตำแหน่ง
  • ขนาดของ EXIF อาจแตกต่างจากขนาดรูปภาพจริง

ผลกระทบที่กว้างขึ้น

รายการความรู้อาถรรพ์ถูกคอมมิตพร้อมกับการแก้ไขที่จำเป็นเพื่อจัดการกับมัน บันทึกนี้ไม่เพียงแต่เป็นการระบาย แต่ยังเปลี่ยนอุปสรรคที่น่าหงุดหงิดแต่ละอย่างให้กลายเป็นประสบการณ์การเรียนรู้เชิงบวก

แนวทางในการจัดทำเอกสารจุดเจ็บปวดทางเทคนิคนี้ได้สร้างแรงบันดาลใจให้นักพัฒนาคนอื่นๆ พิจารณาแนวปฏิบัติที่คล้ายกันในโปรเจกต์ของตนเอง ความโปร่งใสช่วยสร้างความรู้ของชุมชนในขณะที่ให้การบำบัดทางเทคนิคแก่นักพัฒนาที่พบปัญหาเหล่านี้

คอลเลกชันความรู้อาถรรพ์ของทีม Immich ทำหน้าที่เป็นเครื่องเตือนใจว่าการพัฒนาซอฟต์แวร์เต็มไปด้วยปัญหาที่ไม่คาดคิด โดยไม่คำนึงถึงระดับประสบการณ์ ด้วยการแบ่งปันการค้นพบเหล่านี้ต่อสาธารณะ พวกเขาได้สร้างทรัพยากรที่มีค่าซึ่งช่วยให้นักพัฒนาคนอื่นๆ หลีกเลี่ยงหลุมพรางเดียวกันในขณะที่สร้างความเห็นอกเห็นใจสำหรับความท้าทายที่ซับซ้อนที่มีอยู่ในการพัฒนาซอฟต์แวร์สมัยใหม่

อ้างอิง: Cursed Knowledge