Problém s časovými pásmyComputerphile

Thumbnail play icon
Přidat do sledovaných sérií 10
95 %
Tvoje hodnocení
Počet hodnocení:819
Počet zobrazení:15 021

Myslíte si, že vytvořit program pracující s časem, je snadné? Na kanálu Computerphile vás vyvedou z omylu a přesvědčí vás, že větší děs neexistuje. Informace ve videu jsou zajímavé, i když vám programování vůbec nic neříká.

Přepis titulků

Dříve nebo později se každý programátor setká s časovými pásmy. Nemůžu nabídnout žádné větší rady, ale řeknu vám odstrašující příklad. Řeknu vám, proč byste se za každou cenu měli práci s časovými pásmy vyhnout. Čas a časová pásma Řekněme, že někdo vytvoří aplikaci, která vypočítá, kolik vteřin uběhlo od zadaného data. Zadáte datum a čas a ukáže vám to počet vteřin. Podíváte se na to a řeknete si, že to pro vaše potřeby funguje, ale zkusíte to trochu rozpracovat a změníte časovou zónu.

Takže když chcete porovnat současnost v New Yorku a dobu před 5 dny v Londýně, pořád to lze udělat. To je v pohodě, stačí malý seznam toho, jaká časová pásma porovnáváte. Super! Dříve nebo později, až se to rozšíří, vám zavolají z Austrálie. Austrálie vám řekne: "Víš..." Ne, nebudu se snažit napodobit přízvuk. Neměl bych se o to snažit.

Austrálie vám řekne: "Zdravím, mimochodem, my jsme 9 a půl hodiny před Greenwich." - "Opravdu?" - "Ano, 9 a půl hodiny." "Dobře, udělám pro vás zvláštní případ." Později zavolá někdo z Nepálu. "Zdravím, my jsme 5 a čtvrt hodiny před Greenwich." "Opravdu?" "Ano, už staletí je to 5 a čtvrt hodiny."

Uděláte pro ně zvláštní případ a pak se podíváte na seznam časových pásem. Seznam, ve kterém se ujistíte, že počítáte s každým časovým pásmem." A pak přijde podzim. A zavolají vám z Anglie. Řeknou vám: "Jsme o hodinu mimo. Co se děje?" "Moment, měnil se čas." "V pořádku, s tím jsme počítali. Vytvořili jsme poznámku, kdy přecházíme na zimní čas a zabudovali to do programu."

A Anglie řekne: "Ne, my na zimní čas přecházíme o týden dřív." "To záleží na tom, kde žijete. My přecházíme týden před vámi." A v tom okamžiku se programátor začne chytat za hlavu a začne mu docházet, do čeho se to navezl. Ale dobrá, do programu zabudujete to, že v každé zemi se čas mění jindy. Najdete návod, jak se to dělá, a překopírujete ho tam. Pak zavolá někdo z jižní polokoule, kdo řekne: "My se na podzim neposouváme o hodinu zpět, ale vpřed."

"Naše jaro je v listopadu." A v ten okamžik si najdete nějakou láhev s alkoholem a budete přemýšlet, že byste měli přestat pít a dodělat to. A pak to tam zabudujete. A potom vám zavolají ze Samoi, která leží na datové hranici. Samoa vám řekne: "Zdravím, my jsme přeskočili den." "Cože?" "Ano, přeskočili den."

"Přeskočili jsme z 29. 12. 2011 rovnou na 31. 12." "Z jedné strany datové hranice, kde jsme byli 12 hodin za Greenwich, na 12 hodin před Greenwich." "Pomáhá nám to při obchodu s Austrálií." "Můžete to v propočtu předchozích dní a vteřin zohlednit?" Dobře, existuje soubor, ve kterém je zanesen každý přechod států mezi časovými pásmy. Ukáže se, že se to stává celkem často.

Ale ohlašují to dopředu, takže dokud je ten seznam aktuální a zakomponujete ho do programu, bude to v pohodě. Pak se ohlédnete do minulosti a zjistíte, že během 2. světové války měla Anglie dvojitý letní čas. Přešli na letní čas a pak přidali další hodinu, tedy celkem dvě hodiny před Greenwich, ačkoliv by měli mít greenwichský čas. Ok, zakomponujete to tam.

Bavíme se o tomhle, jako byste na tom dělali vy nebo já, protože já jsem to dělal a je to velmi frustrující. Ujistíte se, že odebíráte seznam přechodů států mezi časovými pásmy, což se očividně stává velmi často. Někdy i několikrát za rok, protože se změní vláda. A pak tomuto programátorovi zavolají z Libye. Tam v roce 2013 jen pár dní předem oznámili, že se nevrátí o hodinu zpět.

Protože to neoznámili dopředu, nebyl nikdo schopný udělat včasnou aktualizaci. Takže každý libyjský počítač, bez ohledu na operační systém, byl o hodinu mimo. Ale dobře, čtete noviny a spěšně to tam zahrnete. A pak vám zavolají ze Západního břehu Jordánu, kde Izraelci jsou v jiném časovém pásmu než palestinští obyvatelé.

Jedni ho přebírají od Izraele a druzí ne. A pak máte dvě skupiny lidí na stejném místě, kteří se řídí různými časovými pásmy. Takže pak si musí rozmyslet, v jakém časovém pásmu tedy jsou, podle toho kdo jsou a kde jsou. A tohle prostě nedokážete naprogramovat.

Pak vám zavolá historik, který řekne: "Snažím se vypočítat nějakou dobu v 18. století." "A tam jsme přešli z Juliánského kalendáře na Gregoriánský kalendář." "Přišli jsme tam asi o 3 týdny." "Přeskočili jsme z tohohle dne na tento, o ty mezitím jsme přišli." "Mohl byste to naprogramovat tak, aby se s tím počítalo?" Dobře, někdo jiný vám už řekl, co za data to je, takže to můžete bez problému naprogramovat.

Ale už to vypadá dlouze a komplikovaně. Je to komplikovaný nepřehledný kód. Ale pak vám zavolá ruský historik, který řekne: "My jsme přešli na Gregoriánský kalendář až ve 20. století." Pak zjistíte, že datum přechodu závisí na tom, odkud jste. Vyřešíte to, ale pak vám zavolá britský historik. Ten vám řekne, že asi do 16.

století začínal nový rok až 25. března. To vás odrovná. Je 24. březen 924 a pak nastane 25. březen 925. To je následující den. Ale z 31. prosince 924 přejdete na 1. ledna 924. Jde to v tomto pořadí. Je to komplikované. A pak vám zavolá astrofyzik! A ten řekne: "Mimochodem, právě jsme prožili přestupnou sekundu."

A v ten moment si prostě řeknete: "Cože?" Přestupná sekunda. Země nerotuje stejnou rychlostí. Zpomaluje se nebo zrychluje, jak se pohybují zemské desky a jak se přesouvá magnetické pole nebo tak něco. A tak výjimečně Mezinárodní astronomická unie zjistí, že musíme přidat přestupnou sekundu. Pokud má nastat, hodiny půjdou z 23:59:58 na 23:59:59, a pak místo aby přeskočily tak, jak by v každé časovém pásmu měly, skočí na 23:59:60.

A tím se všechno zhroutí, protože najednou máte v minutě 61 vteřin! Takže podle toho, jak to implementujete, buď budou vaše hodiny o sekundu vpřed před zbytkem světa, nebo se jedna sekunda zopakuje. Ale máme tu něco s názvem Unixová časová známka. Myslím, že na Numberphile o tom už mluvili.

Máte tu číslo, které se začalo počítat v přesnou sekundu roku 1970, a ke kterému se přičítá sekunda za sekundou. Neustále. Tik, tik, tik... A to je skvělé, protože vezmete jakékoliv zadané datum, porovnáte ho s Unixovou časovou známkou a uložíte ho do databáze. A to už přestupné sekundy obsahuje. Ale neobsahuje! Samozřejmě, že ne! Protože tu máte koordinovaný světový čas, ve kterém jsou přestupné sekundy započítané.

Občas se tam vteřina zopakuje, zahrnuje 23:59:60. A pak tu máte astronomický čas, který přestupné sekundy nezahrnuje. Ten není se zbytkem světa synchronní, protože podle něj sledujeme hvězdy a stavíme teleskopy. Jaké si z toho vezmete ponaučení? Po práci s časovými pásmy uděláte to, že svůj program někam odložíte, a nebudete s ním chtít mít nic společného.

Podíváte se po lidech, kteří už na tom před vámi dělali. Podíváte se po prvních lidech, kteří se s tím už vypořádali. Lidech, který ten nepřehledný kód už vytvořili. A budete jim velmi děkovat, že ho vypustili jako open source. Připíšete jim zásluhy, do programu si vložíte to, co vytvořili, a už se na to nikdy nepodíváte. Protože byste z toho zešíleli. Překlad: Mithril www.videacesky.cz Google má dobrý přístup k přestupné sekundě, který sami vymysleli.

Mají o tom článek na svém blogu, kde to vysvětlují. Říkají tomu přestupný rozklad. Protože mít 61 vteřin v minutě nebo posunout hodiny o vteřinu zpět může být pro velké systémy opravdový problém, musíte vše přesně synchronizovat.

Musíte vědět, že jedna část dat je ukládána před jinou. Oni tu sekundu rozloží na části během celého dne. Posouvají své hodiny postupně o mikrosekundy. Během celého dne. Někdy tedy jsou třeba o půl vteřiny mimo skutečný čas, ale dokud je každá jejich služba o půl vteřiny mimo... Je to vytvořeno, aby byl čas odlišný od zbytku světa, ale nevadí to, dokud ví, že se jedna věc stala před jinou věcí.

Znát posloupnost je mnohem důležitější, než mít přesný čas.

Komentáře (34)

Zrušit a napsat nový komentář

Odpovědět

import datetime

00

Odpovědět

Pěkné. Ještě tam do toho mohl vložit problém synchronizace s družicemi na geostacionární dráze. Díky zákonům relativity tam totiž plyne čas o něco rychleji než tady na Zemi, protože zakřivení časoprostoru gravitačním polem Země tam není tak silné.

80

Odpovědět

každé povolání má své, tohle by mě hodně štvalo, pořád program překopávat, když zavolá po sobě astrofyzik, historik atd :D

80

Odpovědět

S tím jako to prožívá, úplně vidím sám sebe :D, když se potýkám s podobnou situací. Prostě, tak kvalitně jsem se dlouho nezasmál!

624

Odpovědět

Plně ho chápu a soucítím s ním.

361

Odpovědět


Odpovědět

10 minut trvá někomu říct, že je lepší použít open source.

3744

Odpovědět

Prosim pomozte mi, uz som zufaly :D prisiel som z dovolenky a z nicoho nic mi nechce prehravat videa. Pouzivam google chrome a doteraz som s tym nemal ziadny problem. Ked kliknem na play tak mi hodi ikonku ze sa nacitava ale potom nic..ked dam pauzu a znova to chcem pustit tak absolutne nereaguje. dik a sorry ze otravujem :D

22

Odpovědět

https://sledovanitv.cz/upload/chrome-flash2.png

To
v tom červeným rámečku nech deaktivovaný a v tom zeleným aktivovaný. Pomohlo mi to s mnoha videi na různých webech.

21

Odpovědět

+Ras al Ghulnepomohlo ale dik za cas

11

Odpovědět

já měla zrovna včera stejnej problém, nešly mi přehrávat ani videa na YT a pořád mi padal flashplayer... tak jsem ho zkoušela přeinstalovávat atd. a nakonec mi to fachčí od tý doby, co jsem si ho úplně odinstalovala z PC... používám Chrome a ten už má flash plug-in zabudovanej, takže když jsem ho měla i v programech, asi se přebíjely... Sice tomu moc nerozumim, ale jak říkám, dneska už mi všechno jede jak má... Snad ti to pomůže, a pokud ne, omlouvám se za tenhle off topic příspěvek :)

10

Odpovědět

Úžasný. Díky za tohle video. Sám jsem před nějakou dobou psal jednoduchou malou utilitku pro převod z občanského data do juliánského a ačkoli je na to velice obšírný vzoreček musí se brát v úvahu tolik časových nesrovnalostí, že jsem rád, že je to použitelné alespoň v tomhle století. :-D

170

Odpovědět

Možná to vidím příliš jednoduše, ale jaký je problém v tom sekundu zopakovat?
Stejně jako zbytek videa, zdá se mi, že s takovou byste odložili naprosto všechno. Vezměte si třeba tvorbu videoher. Uděláte jednu věc, který funguje naprosto dokonale, ale když k ní přidáte druhou věc, tak nefunguje. A až přijdete na to proč a vyřešíte to a budou obě věci fungovat, dáte k nim třetí věc a nebude zase fungovat vůbec nic. Mluvil o tom i ten pán z Warhorse na svém blogu, z kterého jste tu překládali video. Prostě každé programování má něco ,každý kod je složitý a je třeba se o něj neustále starat.

214

Odpovědět

co me napada, predstav si ze mas nejaky buffer/zasobnik na data, ktere neustale pribyvaji, a mas nastavene ze se kazdou sekundu vycisti. je staveny tak, aby vydrzel tu 1 sekundu s rezervou, ale kdyz najednou sekunda trva 2krat tolik tak se muze naplnit, a pokud s tim program nepocita tak treba spadne. jasne, byl by to asi debilni navrh (zavislost na relativnim case) ale neco podobneho se muze stat.

50

Odpovědět

+nomeeshPodle mě jde naprogramovat úplně všechno, takže bych tomu serveru řekl, at normálně započítá všechno jak má, další vteřinu at se spustí podprogram, který ze všech tabulek vymaže jednu sekundu, podprogram se ukončí a server může dál počítat. Je to tak těžké? Já nevím, ptám se, nevyznám se v tom, ale jako lajk vidím toto řešení. A tím těžké nemyslím složité, to uričitě je, jde mi o to, jestli je to možné.

016

Odpovědět

+nomeeshOpravdu nejde naprogramovat úplně všechno.

A ono jak říkal na konci. Důležitější jak přesný čas je časová posloupnost... a sekunda je v počítačovém světě docela obrovská doba, za kterou se může stát spousta věcí.

110

Odpovědět

Ono nejde o to, že to nejde naprogramovat. Problém je v tom, že čas je man-made chaos a ta přestupná vteřina se stává jen sem tam, není to pravidelné. A krom toho může jít i do mínusu. Ne každý program je na to připraven a jak říkal, obrovské korporace musí mít systémy sladěné na setiny (superpřesné GPS kotvy musí pracovat v pásmu miliontin sekund.)

100

Odpovědět

Video je zajímavé a určitě je dost zručný ve své práci ale spíš mi to přišlo, jako by se tím chtěl jen vychloubat. Ale jinak velice poučné video :-)

756

Odpovědět

2:44 Karlštejn :)

400

Odpovědět

Zrovna jsem to chtěl napsat, ale pozdě...
Stejný pivní korbel máme doma :)

80

Odpovědět

Pošlete mu někdo mail, ať zakomponuje čínský kalendář.

900

Odpovědět

Možná zajímavé, ale měl by šetřit tím afektem. Je to fakt otravný.

1476

Odpovědět

Myslím, že z něj mluví čistá frustrace. A už jen na to vzpomínat je pro něj peklo :D
Mě se to moc líbilo :)

681

Odpovědět

Kdo něco podobného nezažil, tak to asi nepochopí.

340

Odpovědět

Takže to, co jsem si z toho vzal je, že Čas je prostě p******a :D
a důkazem je šedý odstín na mladíkových vlasech ve videu :D

984

Další