Tuesday, February 14, 2012

The Y2K♥

The Y2K คืออะไร

ปี ค.ศ. ๑๙๙๙-๒๐๐๐ (พ.ศ. ๒๕๔๒-๒๕๔๓) เป็นช่วงวิกฤติสำหรับทุกๆ คน เพราะหลายสิ่งหลายอย่าง ได้มาเจาะจงเกิดขึ้นในช่วงเวลานี้ เช่น ปัญหาคอมพิวเตอร์ปี ๒๐๐๐ (Y2K), คำทำนายของนอสตราดามุส และพุทธทำนาย ก็ล้วนแต่จ้องจะเกิดในช่วงนี้ทั้งสิ้น
คำทำนายส่วนใหญ่ทำนายไว้ว่า จะเกิดสงครามนิวเคลียร์ขึ้น ในช่วงเวลาระหว่างกลางปี ๒๕๔๒ ไปจนถึงปี ๒๕๔๓ ซึ่งผลลัพธ์ที่ได้จะทำลายโลก และส่งผลให้ช่วงดังกล่าวกลายเป็น "กลียุค"

Y2K ที่จริงเป็นคำย่อของคำว่า ปี 2000 หรืออีกนัยหนึ่งคือ ปี ค.ศ. 2000 โดยที่ตัวอักษร Y มาจากคำว่า Year และ K มาจากคำว่า Kilo ที่แปลว่า 1000 เมื่อนำมาเขียนย่อ ๆอย่างนี้ก็ดูดี


Click the image to open in full size.
ธนาคารแห่งหนึ่งให้ลูกค้าฝากเงินกินดอกไปเรื่อยๆสมมุติว่าให้ดอกปีล่ะ +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 และการแพทย์

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



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


เมื่อเวลาแห่งความหวาดกลัวมาถึง ปฎิทินขึ้นวันที่ 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 แทน

Click the image to open in full size.


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

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

ขอบคุณครับ
http://www.thaigaming.com/articles/75955.htm

No comments :

Post a Comment