Pocit měsíce

Lidé jsou sami, protože staví zdi místo mostů.
(Joseph F. Newton)

středa 7. července 2010

(Y2k) Před 11 lety jsme s tím bojovali. (Nebo "bojovali"?)

Zrovinka nedávno jsem našel soubůrky, které jsem v roce 1999 psal na intranet jisté organizace. Je docela zajímavé počíst si o problému, který prakticky (na našem pracovišti) nenastal.

Problém se týkal problému s přetočením "počítadla" století. Co se mohlo stát 31. prosince 1999 ve 23:59:59 pokud bylo počítání roku dvojciferné, mohlo se stát, že se přetočí z 99 na 00. Pokud se pak k tomuto číslu natvrdo přiřadila číslice 19 , hnedky vznikal problém že se měnil rok z 1999 na 1900. Jiná kouzla vznikala obdobně když se počítadlo roků z 99 přetočilo na 100 a díky přiřazení 19 zleva pak docházelo přeskoku z roku 1999 na rok 19100.

Jindy mi zkušební počítač krásně přeběhl do roku 2000, ale reboot počítače či jeho vypnutí tento rok nějak poškodil...

Byla to vůbec zajímavá doba, kdy i štětka na záchod měla na sobě cedulku "Y2k Ready" [Připravena na rok 2000] (teď mírně přeháním, ale takovéhle cedulky se opravdu objevovaly, byl to i dobrý marketingový tah - jak by třeba klávesnice nezvládala komunikaci v roce, kdy se přetočí počitadlo století?).

Do konce roku sem chci pár zajímavých článečků vkopírovat. Následuje jeden z nich - je to nějaký překlad z anglického originálu, zdroj bohužel už neznám ...








Další problémy k zamyšlení podobné problému roku 2000
Tento text je velmi přibližným překladem textu, downloadovaného ze serveru Bad Karma:(server už neexistuje).
Originál lze nalézt v sekci NEWS měsíce Ledna 99 pod názvem "The Clock's Ticking" (zhruba ve třetině stránky).
Vždy je uvedeno datum, kdy může daný problém nastat, a popis problému.
1. leden 1999: Problém Pohledu o rok vpřed - Ne každý počítač počítá čas směrem vpřed, jako to děláme my lidé. Některé počítače, když mají přejít přes 31. prosinec nějakého roku, to řeší tak, že nejprve přičtou jeden celý rok a pak odečtou jeden celý rok zkrácený o jeden den (matematicky: zítřek=dnešek+365-(365-1)) - Prosím, nechtějte vědět proč. Při přechodu na 1.1.99 některé počítače pohlédnou o rok dopředu a zjistí, že rok má číslo 00. Stejně jako lidem, i počítačům může dělat problémy odečítat něco od nuly.
21. srpen 1999: Problém přetečení počítadel systémů GPS - 24 světových satelitů systému GPS (Global Positioning System - systém určování globálních souřadnic) zaznamenává čas počítáním počtu týdnů, které uplynuly od jejich vypuštění v roce 1980. Týdny zaplňují počítadla velmi podobně jako kilometroměr v automobilu. Ale stejně jako km-měr, počítadla satelitů GPS přetečou zpět na 000, kdy se zaplní. O půlnoci 21. srpna 1999 budou počítadla plná a přetečou. Zařízení, která používají signály GPS mohou fungovat s chybami. Připomínám, že GPS se používají v některých pohotovostních vozidlech, dále v armádě, ale i v turistice (samozřejmě ne u nás...)
9. září 1999: Problém zvaný Konec Souboru - Poprvé - Mnoho počítačů a počítačových systémů bylo naprogramováno tak, aby hodnotu 9999 chápaly jako konec souboru, tedy hodnotu, na které se má zastavit čtení dat. Takže ve chvíli, kdy takový počítačový systém narazí na datum 9-9-99 (počítač tam ty pomlčky samozřejmě nemá), tak může celkem logicky usoudit, že nastal konec času (konec světa!).
Další problém (z jiného zdroje): Některé starší typy zbraní hromadného ničení (možná i nukleární hlavice, které jsou zakopány hluboko v zemi a není k nim přístup), byly vytvořeny s jistou pojistkou proti ukořistění nepřítelem - načte-li vnitřní čip takové zbraně hodnotu 9999, pozná, že nepřítel zkouší, jak ji ovládnout, a má se vypálit na svůj primární cíl - takže z USA by to letělo do Ruska a naopak, jenže protože USA jsou šikovné, tak chybu odstraní, takže rakety poletí jenom jedním směrem... ;-)))
1. října 1999: Problém federálního fiskálního roku 2000 - USA mají trochu posunuté hodinky, přesněji o dva měsíce dopředu. Tímto datem federální vláda USA oficiálně zahajuje rok 2000. Na tomto místě bych rád stručně ukázal podstatu problému roku 2000, protože je to nutné pro pochopení:
Řekněme, že počítače počítají v desítkové soustavě. Řekněme, že vaše banka má pro kolonku Hodnota na kontě vyhrazeno osm cifer (a žádné znaménko). Představme si jednotlivé cifry jako známá kolečka s čísílky z kilometroměru v automobilu, a na to, že tam hodnota stoupá, zatímco při vybírání peněz z banky by se kolečka točila obráceně a byla by naučena, že změní-li se NULA na DEVÍTKU, tak v o jedno vyšším řádu se musí cifra rovněž snížit o JEDNIČKU, a to platí tak dlouho, dokud se mění nějaké nuly na devítky. Pro jistotu příklad:
Mám 35000 korun na účtu (jsem totiž bohatý) a vyberu 3 koruny.
Kolečka se začnou točit:
35000 - 35007 - 35097 - 35997 - 34997 (postupně se točí od nejnižšího řádu až po řád tisíců.) Ověřte si, e tam skutečně je správná hodnota, protože 35000-3=34997.
Nicméně, vaše banka si též zaznamenává přesné datum uložení vašich peněz. A protože používá staré programy, které museli kvůli finančním nákladům šetřit místem, tak na letopočet má vyhrazeno jenom 2 cifry. To normálně není problém, protože 73 je větší než 72 a je jedno, kolik čísel před to napíšete. A teď názorný příklad:
1.1.1999 uložím do banky na 8% úrok 1000 korun (jsem totiž chudý).
1.1.2000 řeknu po internetu bankovnímu počítačovému systému, že chci vybrat své konto. Tak program - bez kontroly nějaké osoby - nejprve ověří, zda by se mi to nemělo zúročit. Zjistí, že je skutečně stejné datum, jako datum vkladu, takže musí zjistit, kolik let uplynulo od vkladu: Počítá 00 - 99. Protože ovšem tuto hodnotu bude počítat v paměti počítače, kde na to má více cifer, ne jenom ty dvě, tak se bude postupně dít toto:
Nové datum = 000000 (paměťová buňka) + 00 (hodnota současného letopočtu)
Staré datum = 000000 (paměťová buňka) + 99 (hodnota letopočtu, kdy byl vklad)
Výpočet: 000000 - 000099 = (postupně po cifrách odzadu): 000001 - 000001 - 000901 - 009901 - 099901 - 999901 (s přenosem do dalšího řádu, ale tuto informaci nemá program jak zpracovat, takže ji ignoruje). Takže program usoudí, že váš vklad se úročil po dobu téměř milionu let, a aniž by mu to bylo divné, spočítá obrovské číslo (uvážíme-li, že každých deset let se váš vklad zdvojnásobí, tak výsledná hodnota je skutečně astronomicky nepředstavitelná a je srovnatelná s počtem atomů v celém vesmíru...) Taková hodnota se sice programu nikam nevejde, ale on minimálně jejich dolních 8 cifer uloží do položky Hodnota na kontě . A protože vy jste chtěli vybrat veškeré vklady, obdržíte řádově desítky miliónů korun, ačkoliv jste měli nárok na 1080,- ... Tento příklad je hypotetický a nemusí odpovídat skutečnosti, nicméně vždy je zde problém s výpočtem hodnoty rozdílu dvou čísel, z nich menšenec je menší než menšitel.
Vraťme se k 1. říjnu 1999 - tohoto dne tedy mohou mnohé systémy v USA (pokud nebyly opraveny) usoudit, že na další rok jim zbyla záporná suma peněz, elektřiny, ropy, vozidel ambulance atd.
4. leden 2000: Problém prvního pracovního dne roku 2000 - Rok 2000 začíná sobotou. Až do pondělí je (zřejmě) v USA volno. Ti američané, kteří pracují s počítači, zapnou 4.1.2000 naprostou většinu svých počítačů poprvé v tomto roce. Autor originálu proto radí všem američanům: Nabootujte své počítače a věnujte se svým ranním mocca kávám...
29. únor 2000: Problém přestupného roku 2000, část 1. - Většina programátorů zná pravidla pro zjištění, zda je nějaký rok přestupný či ne. Rok dělitelný 4 je přestupný, ale rok, který je té dělitelný 100 přestupný není, že? Tak že 1996 byl přestupný, ale rok 2000 není, ano? No, je tu ještě třetí, ne-až-tak-dobře známé pravidlo, které ruší platnost předchozích dvou: Rok dělitelný 400 je přestupný, tedy i-ano, Jiříčku, má pravdu-i rok 2000. Otázka zní: Kolik programátorů zná toto pravidlo?
31. prosinec 2000: Problém přestupného roku 2000, část 2. - Některé počítače pracují tak, že počítají počet dní od začátku roku. Pokud nejsou naprogramovány tak, aby rok 2000 rozeznávali jako přestupný, tak se tyto stroje mohou rozdivočet (česky: zblbnout), když narazí na 31.prosinec 2000, na první pohled nemožný den č. 366.
8. září 2001: Problém zvaný Konec souboru podruhé - UNIX je další významný operační systém, tedy soubor instrukcí které, podobně jako Windows, DOS a MacOS, spouštějí základní funkce počítače. UNIX pohání mnoho komerčních a internetových počítačů.
Unix určuje čas jinak vzhledem k tomu, že byl dokončen pár let po roce 1970, rozhodli se autoři vztahovat vnitřní časovač UNIXu právě k 1.1.1970.
Výše uvedené znamená, že UNIX nemá problém ROK 2000. Naneštěstí, má problém 8. září 2001. V UNIXové řeči, toto datum má hodnotu 999 999 999 (tedy téměř miliarda) vteřin, pro informaci: 1 Gs (giga sekunda) je 31,7 roku (přibližně).
A bohužel, některé UNIXové aplikace používají hodnotu 999 999 999 jako označení konce souboru. 8.9.2001 tedy mohou některé UNIXové stroje velmi ošklivě zazlobit.
Kolem roku 2025: Problém amerických telefonních čísel - Kolem roku 2025 vyčerpají USA všechny možné kombinace sedmi místných telefonních čísel. Telefonní společnosti budou muset přidat cifry nebo úplně přeházet číslovací systém. To si, obratem, vyžádá překopání každého kousíčku každého programu, který používají telefonní ústředny (asi jako kdyby najednou měli povolit v ČR hovory na linky 0609 z telefonních automatů, případně povolit čísla, začínající 1 a mající více než 3 cifry...), a dále překopání všech databází uživatelů a jejich telefonních čísel, a to vše ve všech archívech a záložních kopiích.
3 hodiny 14 minut 7 sekund ráno, 19. ledna 2038: Znovuzrození UNIXu - Jak již bylo řečeno, UNIX počítá počet vteřin od 1.1.1970. Ale má na to jenom určité množství cifer (přesněji řečeno, vejde se mu tam hodnota 2 147 483 647, pro uživatele počítačů - O jedna méně, ne je bajtů ve 2 Gigabajtech). Ve 3:14:07, 19. ledna 2038, počítadla času na každém UNIXovém počítači na světě budou plná a přetečou na hodnotu 0. Některé počítače usoudí, že je 1.1.1970 (kdo obdivuje atmosféru sedmdesátých let - tady máte příležitost!), jiné dospějí k závěru, že nastal konec světa (co by ostatně mohlo být lepší alternativou než to předchozí).
Někdy mezi roky 2050 a 2075: Problém amerického číslování ID-karet - Někdy v uvedeném období USA vyčerpají miliardu unikátních čísel ID-karet (mají devíti místné počítání). Expert na rok 2000 Capers Jones tvrdí, že kolem roku 2050 už musí být USA připraveny na výměnu programových aplikací které na těchto číslech závisí.
Nikdo netvrdí, že se vše výše uvedené stane. Ale pokud by nikdo nehnul ani prstem, tak dobrá polovina výše uvedeného by se skutečně stala.
Pro ČR je nutno uvažovat trochu jinak - vzhledem k novějšímu programovému vybavení nehrozí problémy typu 00-99, vše ostatní, včetně UNIXu, ovšem hrozit může. Jenom se to zřejmě stane jindy (např. čísla občanských průkazů (včetně označení série) poskytují 676 miliónů kombinací. Pokud každý z nás za život vystřídá v průměru 4 OP, máme hned jenom 169 miliónů kombinací, takže uvážíme-li, že ČR má konstantní počet obyvatel 10 mil., jedna generace má 20 let, tak by za 320 let nastal stejný problém jako mají USA s ID-kartami. Jsme na tom lépe.