wut.xkcz.cz
29Led 2014

Vysvětlení 1321 - Chlad

Tentokrát tu máme comics na téma globálního oteplování.

V zásadě upozorňuje na skutečnost, že svým smyslům a potažmo vlastně ani paměti nemůžeme tak docela věřit, protože se tu projevuje klasický efekt vařené žáby - pokud se situace kolem nás mění dostatečně zvolna, přizpůsobujeme se jí více, než si uvědomujeme, takže ačkoliv nepochybně dochází k jistým klimatickým změnám, jakmile se objeví nějaký náhlý extrém v opačném směru, než je nám tvrzeno, považujeme to často zcela automaticky za důkaz o tom, že zmíněné změny neprobíhají. A to dokonce i tehdy, kdy je onen náhlý extrém něčím, co bylo ještě před několika málo lety zcela běžným jevem.

Současně nám v něm Randall předkládá jistou vizi možné budoucnosti, kdy tento trend dále pokračuje.

Je asi potřeba ještě zmínit, že -17°C je na Saint Louis, tedy město na zeměpisné šířce přibližně Lisabonu, skutečně poměrně drastická zima. Jedním z důvodů, proč v Saint Louis teploty občas klesají takhle nízko, zatímco v Lisabonu ne, je ale samozřejmě teplý Golfský proud, který nezanedbatelným způsobem otepluje celou Evropu, zatímco Severní Amerika ho postrádá.

Probíhající klimatické změny jsou poměrně snadno doložitelné statistikami. Skutečná kontroverze se odvíjí od diskusí o tom, zda za tyto klimatické změny může člověk, nebo zda by probíhaly i bez jeho vlivu.

V mouseover textu se pak muž v černém kulichu snaží nepříliš úspěšně vylhat z poměrně logické otázky, a snaží se vytvářet dojem, že se ve volném čase věnuje něčemu docela jinému, než se evidentně věnuje.

7Led 2014

Vysvětlení 1313 - Regex golf

Dnes tu máme další programátorský comics.

Regex neboli regulární výrazy jsou výrazy, používané k filtrování textů za účelem zjištění, zda daný text obsahuje řetězec, vyhovující zadaným kritériím. Regulární výrazy jsou velice užitečné, ale současně ne vždy zcela snadno uchopitelné a formulovatelné. Mezi programátory se občas říká, že pokud má někdo nějaký problém a rozhodne se ho vyřešit regulárními výrazy, má najednou místo původního jednoho problému problémy dva (na což ostatně odkazuje i výrok v posledním panelu comicsu).

Protagonistka dnešního comicsu v prvním panelu oznamuje, že vytvořila hru, které říká Regex golf, spočívající v tom, že před sebou máte dva různé textové seznamy a vašim úkolem je vytvořit regulární výraz, kterému vyhoví všechny položky prvního seznamu, ale ani jedna ze seznamu druhého. Ilustruje to na příkladu regulárního výrazu, kterému vyhoví všechny podtituly filmů ze série Star Wars, ale žádný z podtitulů filmů ze série Star Trek - tedy "/m | [tn]|b/" (uvozovky nejsou součástí výrazu).

Pokud si tento regulární výraz rozebereme, dojdeme k tomuto: lomítko na začátku a na konci označuje pouze začátek a konec regulárního výrazu a jinak nemá žádný význam. Znak svislé čáry představuje v regulárních výrazech logický operátor OR (NEBO), což znamená, že k tomu, aby řetězec výrazu vyhověl stačí, aby splnil kteroukoliv z podmínek výrazu. První z nich je výskyt znaku M, následovaného mezerou. Této podmínce vyhovuje podtitul "The Phantom Menace" (snad pochopíte, že v překladu neoperujeme s českými distribučními názvy). V podtitulech Star Trek filmů se M nachází buď na začátku slova nebo uprostřed něj - čili ani v jednom z těchto případů za ním nenásleduje požadovaná mezera a tyto podtituly proto této podmínce nevyhoví.

Hranaté závorky, do kterých jsou uzavřeny znaky T a N ve druhé podmínce znamenají, že pro její splnění se může v řetězci vyskytovat kterýkoliv z těchto dvou znaků, ovšem protože je před hranatými závorkami ještě mezera, musí se i tento znak nacházet až za mezerou. Tuto podmínku splní podtituly "Attack of the Clones", "Revenge of the Sith", "A New Hope" i "Return of the Jedi" - v každém z těchto podtitulů se nachází buď T nebo N, kterému předchází mezera. Podtituly všech Star Trek filmů konče "The Undiscovered Country" sice obsahují na začátku určitý člen, který začíná písmenem T, ale protože jde o první znak celého podtitulu, chybí před ním požadovaná mezera a proto tyto podtituly druhé podmínce našeho regulárního výrazu nevyhoví.

A konečně třetí podmínka uvedeného regulárního výrazu požaduje, aby se kdekoliv v řetězci vyskytoval znak B. To splňuje pouze podtitul "The Empire Strikes Back" - žádný jiný z podtitulů Star Wars ani Star Trek filmů písmeno B neobsahuje.

Je třeba ještě dodat, že aby uvedený regulární výraz fungoval, nesmí být case sensitivní, tedy musí ignorovat, zda je dané písmeno velké či malé.

Ve druhém panelu hrdinka comicsu pokračuje ve svých experimentech s regulárními výrazy a oznamuje, že vytvořila program, který dokáže její Regex golf hrát sám a tedy vytvářet regulární výrazy na základě dvou náhodně zvolených textových seznamů tak, aby první seznam výrazu vyhověl a druhý ne. Její přítel či kolega začíná tušit, že se schyluje k problémům...

Ve třetím panelu se hrdinka přiznává k tomu, že ztratila zdrojový kód zmíněného řešícího programu, takže nyní "grepuje" (používá linuxový příkaz "grep", který slouží právě k vyhledávání a výpisu řetězců na základě regulárních výrazů) ve snaze najít cokoliv, co by připomínalo kód programu, sloužícího k řešení regulárních výrazů, respektive jejího Regex golfu.

V posledním panelu pak konstatuje, že by se celé její hledání dalo charakterizovat regulárním výrazem "/(meta-)*regex golf/" a naráží tedy na skutečnost, že (předpokládáme, že za bouřlivého povzbuzování od Xzibita) řeší problémy s regulárními výrazy pomocí regulárních výrazů, které hledá pomocí regulárních výrazů...

Její přítel na to poznamenává, že v takovém případě má nekonečně problémů (protože uvedenému regulárnímu výrazu vyhoví nekonečně metaúrovní regex golfu), čímž odkazuje na výrok, zmíněný v úvodu tohoto textu.

Mouseover text pak obsahuje řešení jednoho z možných zadání pro Regex golf - tedy regulární výraz, kterému vyhoví jména všech dosud zvolených amerických prezidentů, ale nevyhoví mu jména jejich volebních oponentů.

Doplněno 22:00 - Pokud byste si Regex golf chtěli zahrát, vězte, že skutečně existuje! Upozornil Josef Štěpánek.

3Led 2014

Vysvětlení 1312 - Haskell

Opět jeden programátorský comics.

Haskell je takzvaný funkcionální programovací jazyk, tedy jazyk, postavený na konceptu matematické funkce. Vedlejší účinky volání funkce jsou změny stavu programu či jeho interakce se světem, které přesahují rámec navrácení hodnoty volané funkce. Pokud například nějaká funkce po zavolání mění nějakou globální proměnnou nebo vypíše výsledek na obrazovku předtím, než ho předá k dalšímu zpracování, pak se jedná o vedlejší účinek. V ostatních programovacích jazycích jsou vedlejší účinky poměrně běžnou věcí. Funkcionální programovací jazyky se jim naopak snaží co možná nejvíce vyhýbat a v případě, že jsou zapotřebí, k jejich implementaci používají speciální postupy.

Comics naráží na skutečnost, že pokud se nenajde nikdo, kdo by daný program používal, pak lze absenci vedlejších účinků garantovat ve zcela libovolném programovacím jazyce - protože se vedlejší účinky projevují až při běhu programu samotného.

Mouseover text je pak dvojsmyslem, narážejícím na "líné vyhodnocování", na kterém je Haskell postaven. Podstata líného vyhodnocování spočívá v tom, že hodnota prvku je spočítána až v okamžiku, kdy byla tato hodnota nějakým jiným prvkem vyžádána. V tomto případě chce tedy Randall říci, že Haskell možná má jistou hodnotu, ale nikdo si ji zatím nevyžádal, tudíž ji nelze posoudit - a současně také to, že o samotný Haskell vlastně nikdo nestál (nevyžádal si ho).