ฟีเจอร์ ‘Format Dialog’ ของ Windows NT
(twitter.com/davepl1968)- ช่วงปลายปี 1994 ที่ Microsoft กำลังย้ายโค้ด UI ของ Windows95 มายัง Windows NT นั้น ความแตกต่างระหว่าง NT กับ Windows95 ทำให้จำเป็นต้องมี UI แยกสำหรับการฟอร์แมตดิสก์
- มีการจดตัวเลือกการฟอร์แมต เช่น ระบบไฟล์, ป้ายชื่อ, ขนาดคลัสเตอร์, การบีบอัด, การเข้ารหัส ลงบนกระดาษก่อน แล้วจึงใช้ VC++ 2.0 Resource Editor จัดเป็นรายการเลือกแนวตั้ง
- กล่องโต้ตอบชั่วคราว ที่ตั้งใจจะใช้ไปก่อนจนกว่าจะมี UI ที่ดีกว่า กลับยังคงอยู่ในรูปแบบเดิมแม้เวลาจะผ่านไปราว 30 ปี
- ในกระบวนการทำงานเดียวกัน การตัดสินใจกำหนดขอบเขตที่ยอมรับได้ของ cluster slack แบบตามสะดวก ได้นำไปสู่ข้อจำกัด 32GB ของขนาดการฟอร์แมตโวลุ่ม FAT
- แม้อิมพลีเมนเทชันที่เช็กอินไว้แบบชั่วคราว ก็อาจกลายเป็นพฤติกรรมและข้อจำกัดระยะยาวของผลิตภัณฑ์ได้ จึงควรระวังเมื่อใส่วิธีแก้แบบ “temporary”
Windows NT Format Dialog ที่ทำเสร็จในเช้าวันพฤหัสบดี
- ช่วงปลายปี 1994 ที่ Microsoft กำลังพอร์ตโค้ดส่วนติดต่อผู้ใช้ของ Windows95 จำนวนมากมายัง Windows NT
- ฟังก์ชัน Format เป็นส่วนที่ต้องมี UI แบบกำหนดเอง แยกต่างหาก เพราะ NT กับ Windows95 ต่างกันมาก
- รายการที่ต้องเลือกในการฟอร์แมตดิสก์ถูกสรุปลงบนกระดาษก่อน
- ระบบไฟล์
- ป้ายชื่อ
- ขนาดคลัสเตอร์
- การบีบอัด
- การเข้ารหัส
- หลังจากนั้นจึงใช้ VC++ 2.0 และ Resource Editor จัดวางตัวเลือกเป็นสแต็กแนวตั้งในลำดับที่ใกล้เคียงกับที่ต้องการ
- UI นี้ไม่ได้เป็นงานออกแบบที่เสร็จสมบูรณ์ แต่เป็น อิมพลีเมนเทชันชั่วคราว ที่ตั้งใจใช้ไปก่อนจนกว่าจะมี UI ที่ดีกว่า
ผลกระทบระยะยาวที่อิมพลีเมนเทชันชั่วคราวทิ้งไว้
- แม้เวลาจะผ่านไปราว 30 ปี กล่องโต้ตอบนี้ก็ยังคงอยู่ในรูปแบบเดียวกับที่ทำขึ้นในเช้าวันพฤหัสบดีนั้น
- การที่ขนาดการฟอร์แมตของโวลุ่ม FAT ถูกจำกัดไว้ที่ 32GB ก็มีที่มาจากการตัดสินใจแบบตามสะดวกในช่วงเวลาเดียวกัน
- ตอนนั้นต้องตัดสินใจว่าจะยอมรับ cluster slack ได้มากแค่ไหน
- การตัดสินใจนั้นนำไปสู่ข้อจำกัดขนาดการฟอร์แมตของโวลุ่ม FAT
- การเช็กอินโค้ดแบบ “temporary” อาจแข็งตัวกลายเป็นพฤติกรรมและข้อจำกัดระยะยาวของผลิตภัณฑ์ได้ โดยไม่เป็นไปตามเจตนาเดิม
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
จากซอร์สโค้ดของ Windows NT4 ยืนยันได้ว่าเขาเขียนโค้ดบางส่วนของ กล่องโต้ตอบฟอร์แมต ครั้งแรกเมื่อวันที่ 13 กุมภาพันธ์ 1995 ดังนั้นที่บอกว่าช่วงปลายปี 1994 ถึงต้นปี 1995 ก็ถือว่าโดยรวมถูกต้อง
แต่ NT4 ไม่ได้รองรับ FAT32 และ FAT volume เองก็อนุญาตให้ใช้คลัสเตอร์ขนาด 64K ได้ จึงรองรับได้ถึง 4GB ซึ่งใหญ่กว่าระบบจำนวนมากในเวลานั้น การฟอร์แมต FAT ของ NT4 ไม่มีการตรวจสอบหรือออปชันเกี่ยวกับคลัสเตอร์ และขนาดคลัสเตอร์ถูกกำหนดตามขนาดของ volume
นอกจากนี้ ข้อจำกัด 32GB ของ FAT32 volume ไม่ได้อยู่ที่กล่องโต้ตอบ แต่อยู่ในฟังก์ชันฟอร์แมตภายใน ใน Windows 2000 คุณสามารถพยายามฟอร์แมตไดรฟ์ที่ใหญ่กว่า 32GB เป็น FAT32 ได้ แต่จะล้มเหลวตอนท้ายของการฟอร์แมตเพราะข้อจำกัดที่ hardcode ไว้ คำสั่งบรรทัดคำสั่ง format.com ที่ใช้ฟังก์ชันเดียวกันก็เป็นแบบเดียวกัน
ไม่รู้ว่าทำไมเขาถึงชอบพูดเกินจริงเรื่องบทบาทของตัวเองอยู่เสมอ โค้ด Zip folder ที่ Microsoft ได้ไลเซนส์มาจาก Info-Zip ก็มีคนเชื่อว่าเขาเป็นคนเขียน เพราะเขาไปแตะต้องมันระหว่างกระบวนการผสานรวม ตอนนี้ดูเหมือนเขากำลังพยายามเป็นอินฟลูเอนเซอร์ และการพูดเกินจริงก็ดูจะเป็นสิ่งที่คนกลุ่มนั้นทำกัน
ไม่รู้ว่า FAT32 อยู่ระหว่างพัฒนาในช่วงปลายปี 1994 หรือไม่ แต่มันไม่ได้รวมอยู่ใน Windows NT 4 หรือ Windows 95 รุ่นแรก ๆ เมื่อมันเข้ามาใน Windows 95 OSR2 คำสั่ง format ก็ยังรับพาร์ทิชันได้ถึง 128GiB ได้ปกติ แม้ Windows 95 จะไม่ใช่ NT ก็ตาม
สาเหตุจริงดูเหมือนจะเป็นฟังก์ชันฟอร์แมตภายในของ Windows 2000 ทั้ง GUI, คำสั่ง format และ diskpart ต่างก็สร้าง file system ที่เกิน 32GiB ไม่ได้ ไม่รู้ว่าทำไมถึงเป็นแบบนั้น ทั้งที่ตอนนั้นมีไดรฟ์ขนาดใหญ่กว่านั้นแล้ว หากใช้เครื่องมืออย่าง mkdosfs ของ Linux ไดรเวอร์ VFAT ของ Windows 2000+ ก็ยอมรับ volume ขนาด 2TiB ได้ และยังสามารถติดตั้ง Windows 2000 ลงบน volume ใหญ่ขนาดนั้นได้ด้วย
พูดตามตรง มันดูเหมือนผ่านเครื่องมือ obfuscation มา และผมคิดว่าผู้เขียนเดิมตั้งใจทำแบบนั้นเพื่อให้ Microsoft แก้ไขหรือปรับปรุงได้ยาก ทุกวันนี้ยังฝันร้ายถึงโค้ดนั้นอยู่เลย
ถ้าอย่างนั้น Corvette มาจากไหน: https://www.tomshardware.com/software/windows/dev-shows-off-...
โค้ดนั้นน่าจะยังเหลืออยู่ใน XP บางเวอร์ชันด้วย: https://github.com/tongzx/nt5src/blob/daad8a087a4e75422ec96b...
ส่วนการรองรับ ZIP หา source code ของ Zip folder เองได้ยาก แต่มีโค้ดที่ตัดตอนมาจากบริษัทอื่นคือ Schlumberger Technology Corp.: https://github.com/tongzx/nt5src/blob/daad8a087a4e75422ec96b... ถ้าเชื่อตามคอมเมนต์ ก็เป็นโค้ดที่เพิ่มเข้ามาในปี 1996
Dave Plummer เป็นคนที่ยอดเยี่ยมจริง ๆ ผมชอบที่เขาเล่าเรื่องการสร้างหนึ่งในเคอร์เนลที่ถูกใช้แพร่หลายที่สุดในประวัติศาสตร์ได้อย่างเรียบง่ายมาก
เขาสร้างซอฟต์แวร์หลายอย่าง เช่น Task Manager สำหรับ Windows, การพอร์ต Space Cadet Pinball ไปยัง Windows NT, การรองรับไฟล์ Zip สำหรับ Windows, HyperCache[4] สำหรับ Amiga และยังว่ากันว่าได้รับสิทธิบัตรด้านวิศวกรรมซอฟต์แวร์อีก 6 ฉบับ
https://en.wikipedia.org/wiki/Dave_Plummer
แสดงให้เห็นกับดักที่พบบ่อยได้ดี ถ้า “แก้” ปัญหาด้วย วิธีแก้ขัด ลำดับความสำคัญของวิธีแก้ที่ดีกว่าจะตกไปอยู่ต่ำกว่าปัญหาทั้งหมดที่ยังไม่ได้แก้
และปัญหาที่ยังไม่ได้แก้แบบนั้นก็มีมากพอเสมอ จนไม่มีใครกลับมาดูวิธีแก้ขัดอีก
จำไม่ได้ว่าได้ยินมาจากไหน แต่ผมใช้บ่อยเวลาพยายามโน้มน้าวบริษัทว่าอย่าปล่อยวิธีแก้ขัดออกไป แล้วทำให้ถูกต้องตั้งแต่แรกเลย
จากลำดับความว่า “เขียนตัวเลือกทั้งหมดที่เลือกได้เกี่ยวกับการฟอร์แมตดิสก์ลงบนกระดาษ เช่น ระบบไฟล์ เลเบล ขนาดคลัสเตอร์ การบีบอัด การเข้ารหัส ฯลฯ” แล้วสรุปว่า “มันเป็น UI ชั่วคราวเพื่อใช้ไปก่อนจนกว่า UI ที่สง่างามจะมา” ดูไม่ค่อยต่อเนื่องกันนัก
ในเมื่อแสดงตัวเลือกที่จำเป็นทั้งหมดไว้ใน อินเทอร์เฟซเรียบง่าย แล้ว อินเทอร์เฟซที่ “สง่างาม” กว่านั้นควรใส่อะไรเพิ่มกันแน่
กล่องโต้ตอบนั้นไม่เพียงยังคงอยู่ แต่ยังส่งอิทธิพลถึงเครื่องมืออย่าง HP USB Disk Storage Format Tool ด้วย เป็นเครื่องมือที่ผมใช้เสมอเวลาเลี่ยงข้อจำกัด FAT32 ที่ 32GB: https://www.majorgeeks.com/files/details/hp_usb_disk_storage...
ตอนนี้มันสมบูรณ์แบบอยู่แล้ว หวังว่าจะไม่เปลี่ยนเป็น “UI ที่สง่างาม”
ในฐานะตัวแทนกล่องโต้ตอบฟอร์แมต ผมค่อนข้างชอบ UI ใหม่ แต่ส่วนที่มาแทนฟังก์ชันของ Disk Manager ยังขาดไปนิด เพราะไม่มีการแสดงเลย์เอาต์ดิสก์แบบกราฟิก
มุมมองพื้นฐาน: https://i.imgur.com/56yZ8gZ.png
ส่วนมุมมองขั้นสูง: https://i.imgur.com/fKb3R8c.png
ฟอร์แมตพาร์ทิชันที่มีอยู่: https://i.imgur.com/DmbX3FQ.png
มันไม่สมบูรณ์แบบ แต่โดยมากยังคงเลย์เอาต์เดิมไว้พร้อมปรับให้เข้ากับธีมของ OS และยังเพิ่มตัวเลือกบางอย่างที่ใน Disk Manager เก่าเคยเป็นวิซาร์ดหลายหน้าเข้ามาด้วย มีการปรับเล็ก ๆ ที่ดีขึ้น เช่น “format” ตรงความหมายกว่า “start” และ “cancel” เหมาะกว่า “close” แน่นอนว่าอาจมีคนมองว่าการกว้างขึ้น 33% เป็นวันสิ้นโลกก็ได้
แต่การที่ยังให้ป้อนขนาดพาร์ทิชันใหม่เป็นหน่วย MB นั้นก้ำกึ่งอยู่ แม้จะใส่ตัวคั่นตัวเลขตามโลแคลให้ แต่ในอนาคตตัวเลขจะยิ่งใหญ่ขึ้น การต้องสนใจหน่วยเป็นหลักล้าน MB ก็ดูแปลกไปหน่อย
ผมคิดว่าไม่ได้มีวิธีแก้ขัดกับวิธีแก้ถาวรแยกกันเท่าไร แต่มี วิธีแก้ที่แย่ กับวิธีแก้ที่ดีมากกว่า วิธีแก้ที่ดี แม้จะทำขึ้นอย่างรวดเร็ว ก็ยังอยู่ต่อเพราะมันดีพอ
วิธีแก้ที่แย่ก็อาจอยู่ต่อได้ถ้ามันเป็นทางเลือกเดียวหรือทางเลือกที่เป็นไปได้จริงอยู่ช่วงหนึ่ง และทุกอย่างหลังจากนั้นก็ต้องรักษาความเข้ากันได้ย้อนหลังกับมัน
เคยทำงานที่ธนาคารที่ใหญ่และเก่าแก่ที่สุดแห่งหนึ่งในยุโรป สภาพแวดล้อมโปรดักชันมักเต็มไปด้วย วิธีแก้ขัด แบบนี้
โดยปกติคือสิ่งที่ทำขึ้นชั่วคราวอีกที เพื่อแก้ปัญหาใหญ่ที่เกิดจากการแก้ชั่วคราวก่อนหน้าอย่างรวดเร็ว
ต้องระวังวิธีแก้ขัดที่ “ดีพอ” คอมโพเนนต์ล็อกหลักของบริษัทเขียนโดยนักศึกษาฝึกงาน และมีคำว่า POC อยู่ในชื่อ
รูปแบบข้อมูลก็เหมือนสิ่งที่นักศึกษาฝึกงานน่าจะสร้างขึ้น แต่พอทุกคนรู้ตัวจริง ๆ ก็เขียนข้อมูลไปมากเกินไปแล้ว จนงบประมาณและแรงที่ต้องใช้แก้มันใหญ่กว่าตัวปัญหาเอง
ผมมักปลอบใจตัวเองว่าเราไม่สามารถทำทุกอย่างให้สมบูรณ์แบบได้เสมอ ต้องจัดลำดับความสำคัญให้กับสิ่งที่สำคัญที่สุด และปล่อยผ่านสิ่งที่สำคัญน้อยกว่าไปบ้าง
เหมือนสุภาษิตเก่า ๆ ว่า ไม่มีอะไรถาวรเท่า วิธีแก้ขัด