วันพฤหัสบดีที่ 2 กุมภาพันธ์ พ.ศ. 2555

Y2K วิกฤตแห่งกาลเวลา หรือแค่คิดไปเอง ?



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




"คู่มือพารอดจากวิกฤต Y2K"
เตรียมตัวอย่างไรสำหรับมหันตภัยจากมือมนุษย์และธรรมช าติ
ถึงขนาดต้องมีคู่มือป้องกันตัวขนาดนี้ แสดงว่า Y2K คงจะอันตรายน่าดูนะครับ อย่างแรกเลยคือผมจะอธิบายคราวๆก่อน ... Y2K ย่อมาจาก Year 2000 แล้ว K ล่ะ ถ้าเขียนอธิบายอีกนิด K ในที่นี้คือ Kilo และ Kilo = 10^3 = 1000 ดังนั้น Y2K = Year 2 x 1000 = Year 2000 ครับ (เหมือนเกมวางแผนที่ชื่อว่า Warhammer 40,000 เรียกย่อว่า Warhammer 40K) บางครั้งก็ไม่เรียก Y2K เรียก millennium bug แทนก็ได้ครับทำไมเลข 2000 จึงดูน่ากลัว ? เขาบอกว่าจุดสำคัญมันอยู่ที่เลขท้าย 2 ตัวหรือ 00 นั้นเองครับ ... ถ้าเรานึกไปว่าต้นเหตุเหล่านี้มาจากไหนนั้น ในสมัยก่อนการเก็บข้อมูลลงในคอมพิวเตอร์นั้นนิยมใช้เลขปี ค.ศ. เพียง 2 หลักหลัง 1942 ก็เหลือ 42 ถ้า 1995 ก็จะเหลือ 95 ครับ ดูแล้วมันก็ไม่น่าเป็นปัญหาอะไรมากมายนะ แต่นี่เป็นปัญหาระดับโลกเลยล่ะครับ ผมจะลองยกตัวอย่างจากที่ผมเคยเรียนเคยอ่านมาให้ท่านผ ู้อ่านเห็นกันชัดๆนะ 




ธนาคารแห่งหนึ่งให้ลูกค้าฝากเงินกินดอกไปเรื่อยๆสมมุ ติว่าให้ดอกปีล่ะ +5% ลุงคนหนึ่งกะว่าจะฝากกินดอกตอนแก่จะได้มีเงินไว้บ้าง ลุงแกเริ่มฝากมาตั้งแต่ปี ค.ศ. 1990 ในคอมพิวเตอร์บันทึกว่า "90" ทั้งหมดในบัญชีลุงแกมี 100 บาทพอฝากไปบัญชีลุงก็มีเงินเพิ่มปีล่ะ 5 บาท ปีต่อๆไปก็ 91 ก็ 105, 92 ได้ 110, 93 มี 115 มาถึงปี 99 ก็น่าจะมีอยู่ 145 บาท แต่เมื่อเข้าปี 2000 เลขจะกลายเป็น 00 สำหรับคนเรานั้นเห็น 00 ก็น่าจะรู้ว่าเขาหมายถึง 2000 แต่สำหรับคอมพิวเตอร์นั้นไม่ ! วิธีคำนวนปีโดยทั่วไปนั้นเช่น จะคิดยอดรวมในปี 1990 ถึงปี 1998 ก็เอา 98 - 90 = 8 ปี แต่ถ้าคิดยอดรวมในปี 1998 ถึง 2000 จะเป็น 00 - 98 = -98 ปี หมายความว่าลุงคนนี้ฝากเงินมา -98 ปี ดังนั้นจากที่เคมีดอกเบี้ยกลับกลายไปเป็นหนีจำนวนมห าศาลแทน ... โอ้ว พระเจ้าช่วยกล้วยไข่
ตัวอย่างนี้ผมแสดงให้เห็นถึง Y2K และการเงิน แต่นักวิชาการไม่ได้บอกแค่เรื่องการเงิน แต่ยังมีอีกเรื่องที่ดูเหมือนจะหนักกว่า คือ Y2K และการแพทย์




ลุงคนหนึ่ง (แต่คนล่ะคนกับในตัวอย่างแรก) รับการรักษาอยู่ในโรงพยาบาลใกล้บ้าน แกเกิดปี 1910 ตอนนี้ปี 1999 อายุอยู่ที่ 89 ปี เมื่อเข้าปี 2000 คอมพิวเตอร์จะคำนวนว่าเอาปี 2000 ลบกับปีเกิด 1910 จะได้อายุ ด้วย 00 - 10 = -10 ได้อายุเป็น -10 กลายเป็นว่าลุงเขายังไม่เกิดเลย คนอะไรอายุติดลบ ... ? สำหรับการแพทย์ข้อมูลคนไข้นั้นสำคัญมากขนาดไหนน่าจะร ู้ดีนะครับ คลาดเคลื่อนนิดหน่อยอาจหมายถึงชีวิตเลยก็ว่าได้

ตอนเด็กๆไอ้เราก็กลัวตามเขาไปด้วย ยังจำได้เลย กลัวว่าพอถึงปี 2000 แล้วคอมพิวเตอร์จะใช้งานไม่ได้งั้นก็คือเล่นเกมไม่ได ้ด้วย ผมก็นั่งเครียดไปหลายวันเหมือนกันนะ เครียด ไปตามภาษาเด็กกลัวอดเล่นเกม (แบบเนี่ยล่ะตอนโตเลยติดเกม) แต่จริงๆแล้ว Y2K ไม่มีผลกับเครื่อง PC มามายนัก ส่วนมากจะมีผลร้ายแรงกับพวก Database ที่ใช้โครงสร้างแบบโบราณ

Y2K กับโปรแกรมต่างๆ !!! ใน Wikipedia ยกตัวอย่างเช่น Microsoft Excel จะเกิดปัญหาการกระโดดข้ามปี แต่ Microsoft ก็ไม่รอช้าเขียน Patch มาแก้ไว้ก่อน ... ส่วนภาษา C ภาษา Perl และ Java ก็เช่นกันเมื่อวันที่ 1 มกราคม 2000 มาถึง วันที่จะกลายเป็น 1/1/19100 หรือไม่ก็ 1/1/100 ... สำหรับระบบปฎิบัติการเก่าๆอย่าง Windows 3 หรือ 3.1 3.2 3.อะไรก็ว่าไป ส่วนที่พบปัญหาคือ File Manager (ในปัจจุบันน่าจะเทียบได้กับ Windows Explorer นะ)

เมื่อเวลาแห่งความหวาดกลัวมาถึง ปฎิทินขึ้นวันที่ 1/1/2000 มีเหตุการณ์อะไรเกิดขึ้นบ้าง ?

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

ประเทศออสเตเลีย ตู้ขายตั๋วรถเมล์ใน 2 จังหวัดหยุดทำงาน

ประเทศ USA ตู้หมุน Slot ประมาณ 150 กว่าตู้ในกรุง Delaware ไม่ยอมทำงาน, นาฬิกาหลักของกองทัพเรือโดน Y2K เปลี่ยนเลขจาก 01/01/2000 เป็น 01/01/19100

ประเทศฝรั่งเศษ บริการพยากรอากาศ และรถไฟใต้ดิน โดน Y2K เปลี่ยนเลขวันที่เป็น 01/01/19100 เช่นกัน

Bug วันที่นั้นไม่ใช่มีแค่ปี 2000 เท่านั้น มีอะไรบ้างตามไปดู !

9/9/99 และ EOF 9999
 - วันที่ 9 เดือนกันยายน ปี 1999 ถ้าอยู่ในคอมพิวเตอร์วันที่ก็จะเป็น 9/9/99 เป็นความบังเอิญที่มันไปตรงกับรหัสปิดไฟล์ หรือ End-Of-File code 9999 ที่ใช้สำหรับการเขียนโปรแกรมเก่าๆ สร้างความปวดหัวให้โปรแกรมเมอร์ได้มามายเลยทีเดียว ... ถึงว่าภาษาสมัยใหม่เลยไม่มี 9999 



คืนข้ามปี - Bug นี้สำหรับการหารปี ผมเองก็ยังงงอยู่นะ แต่ก็มี Pseudo-code มาให้ดู
code:
if year % 400 == 0:

        return true
else if year % 100 == 0:
        return false
else if year % 4 == 0:
        return true
else:
        return false
code:
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
        return true
else:
        return false
ตัวอย่างจาก Wikipedia คือ ปี 1600 และ 2000 จะหายไป แต่ 1700, 1800 และ 1900 นั้นไม่มีปัญหา เช่นปี 2100, 2200, 2300, 2500, 2600, 2700, 2900 และ 3000 ที่หายไปนั้นมี 2400 กับ 2800

Y2K38 - ปกติแล้ว timestamp (time_t) ของ Unix จะเก็บวันเวลาในรูปแบบ 32-bit เขาบอกว่าเมื่อปี 2038 เลขสี่ตัวนี้มันใหญ่เกินกว่าที่ 32-bit จะเก็บไว้ วิธีแก้นั้นก็ฟังดูง่ายๆคือ ลบ Unix 32-bit ออกแล้วลง Unix 64-bit แทน



เดือนและปีมาตีกัน
 - เป็นปัญหาของการเรียงเลข วัน/เดือน/ปี เช่น ใส่วันไปว่า 30/11/05 แต่วันที่ออกมานั้นเป็น November 5, 2030 หรือ May 30, 2011 แทนที่จะเป็น November 30, 2005 แต่ดูๆแล้วปัญหานี้น่าจะมาจาก User มากกว่าจะเป็น Bug นะ

ตอนนี้ เราก็ผ่านวิกฤต Y2K มาได้หลายปีแล้วนะครับ อาณาคตก็ยังไม่รู้ว่าจะมีวิกฤตอะไรให้เราตื่นเต้นกัน ต่อ คงต้องน่ารอดูข่าวกันต่อไปครับ






ไม่มีความคิดเห็น:

แสดงความคิดเห็น