tag:blogger.com,1999:blog-72475480230659237072024-03-13T11:25:32.851-07:00com.v6ak.blog._Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.comBlogger29125tag:blogger.com,1999:blog-7247548023065923707.post-92203539205017944942021-08-17T19:00:00.002-07:002021-08-17T19:00:00.227-07:00To nelze přepočítávat na peníze…<p>Článek <a href="https://stoky.urza.cz/texty/to-nelze-prepocitavat-na-penize-1863">vyšel též ve Stokách Svobodného přístavu</a>.</p>
<p>Občas o něčem slyším, že to nelze přepočítávat na peníze. Na první pohled to může dávat smysl – nejsme zvyklí porovnávat hodnotu těchto statků s penězi. A může to znít hezky, než nás realita přinutí něco rozhodnout. Jsem ochoten si připlatit za zdravější jídlo nebo bezpečnější auto? Ve výsledku tak prakticky všechno v některých situacích potřebujeme prioritizovat, a tedy i do jisté míry přepočítat na peníze. Pokud se budeme chtít přepočtu vyhnout tím, že tu oblast necháme na starost státu, přepočet stejně bude potřeba provést – jen jej provede politik. Jeho úkol je přepočítat něco na peníze pro mnoho lidí, které nezná, a kteří si ani nemusejí přát mu to rozhodnutí svěřit. Přepočítání na peníze se tím ale nevyhneme.</p>Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com0tag:blogger.com,1999:blog-7247548023065923707.post-46396211538382092182021-08-16T04:58:00.004-07:002021-08-16T15:37:38.419-07:00Proč je málokdo spokojen s výsledky voleb?<p>Článek <a href="https://stoky.urza.cz/texty/proc-ty-volby-dopadly-zase-spatne-1843">vyšel též ve Stokách Svobodného přístavu</a>.</p>
<p>Když se budete ptát lidí, proč socialismus nefunguje, nejčastější odpovědí asi bude absence motivace – když se budu více snažit, já sám z toho budu mít minimální užitek. Není to sice jediný důvod, ale je podstatný. Když ale někdo není spokojen s výsledkem demokratického procesu, málokdy slyším podobný argument. Přitom problém tu je stejný – na samotného voliče má jeho volba sama o sobě minimální vliv, proto nemá takovou motivaci se snažit. Zatímco pojem „problém racionální ignorance“ spoustě lidí nic neříká, vysvětlení nedostatkem motivace možná znát budou.</p>
<p>A co s tím? Nehlasujme demokraticky o tom, co si může rozhodnout každý sám za sebe.</p>Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com0tag:blogger.com,1999:blog-7247548023065923707.post-73611757659268340442021-07-26T16:29:00.000-07:002021-07-26T16:29:28.418-07:00Proč jsem se nechal očkovat? S čím jsem váhal?<p>Nechal jsem se očkovat. Kvůli zdraví, ne kvůli očkovacímu pasu. Než k tomu došlo, pečlivě jsem zvažoval pro a proti. Zároveň jsem se o tom bavil s různými lidmi a vyslechl si jejich obavy.
<h2>Malý disclaimer</h2>
<p>V této oblasti jsem zvídavý laik, ne lékař. Myslím, že tento zápisek může být pro některé námětem k zamyšlení, ale <strong>nenahradí to případnou individuální konzultaci s lékařem, zvlášť pokud je vaše situace něčím specifická</strong>. Nenesu zodpovědnost za vaše rozhodnutí.</p>
<p>Dále upozorňuju, že se soustředím zejména na vakcíny dostupné v ČR v době psaní, tedy Comirnaty (Pfizer/BioNTech), Spikevax (Moderna), Vaxzevria (AstraZeneca) a Janssen (Johnson & Johnson). Pokud zvažujete očkování jinou vakcínou (třeba v zahraničí), nemusí vše platit, byť mnohé principy jsou univerzální.</p>
<h2>Je covid opravdu tak nebezpečný, že potřebuju očkování?</h2>
<p>I pro mladého člověka může očkování dávat smysl, pokud:</p>
<ul>
<li>Řeší nejen holé přežití, ale i následnou kvalitu života, kterou mohou ovlivnit <a href="https://www.mayoclinic.org/diseases-conditions/coronavirus/in-depth/coronavirus-long-term-effects/art-20490351">dlouhodobé a trvalé následky</a>. Ty sice ještě nejsou úplně zmapované, ale už teď to vypadá jako mnohem častější problém než úmrtí.</li>
<li>Spadá do některé z rizikových skupin. Sem vás může zařadit i onemocnění, o kterém zatím nevíte.</li>
<li>Má v okolí lidi, které nechce nakazit.
</ul>
<p>To nemusí být vyčerpávající seznam, ale staví to riziko covidu do poněkud jiného světla než jen pohled do tabulky s věkem a smrtností. Covid by mě nejspíš nezabil, ale i tak mám dost důvodů se mu v rámci možností radši vyhnout.
<h2>Tři možnosti</h2>
<p>V zásadě vidím tři možnosti, jak se k covidu postavit:
<ol type="a">
<li>Izolace – Důsledně se izolovat od potenciálně nakažených.
<li>Očkování – Nechat se naočkovat a přijmout s tím spojená rizika.
<li>Nemoc – Smířit se s tím, že nemoc dříve či později pravděpodobně prodělám, a přijmout s tím spojená rizika.
</ol>
<p>Důsledná izolace není cesta, kterou bych se chtěl vydat dlouhodobě. <strong>Pokud se chcete důsledně izolovat od potenciálně nakažených a věříte, že se vám to úspěšně podaří, možná očkování opravdu tolik nepotřebujete. Dále se budu věnovat pouze variantám Očkování a Nemoc.</strong>
<p>Dále předpokládám, že mi zbývá spousta (desítek) let života. Kdyby mi lékaři odhadovali poslední třeba rok života, asi bych nad tím přemýšlel jinak, byť verdikt by mohl zůstat stejný.
<h2>S čím srovnávat riziko?</h2>
<p>Nic není naprosto bez rizika – žádný lék, žádná potravina, žádná nemoc, žádné očkování. Někteří srovnávají rizika očkování s riziky, která bežně někteří z nás podstupují. Bylo by sice zajímavé vědět, jak si stojí riziko očkování ve srovnání třeba s rizikem přecházení silnice, ale mnohem více vypovídající mi přijde jiná věc: <b>Jak si stojí riziko očkování ve srovnání s rizikem neočkování?</b> To jsou ve výsledku ty dvě možnosti, ze kterých vybíráme.
<h2>V čem se liší očkování a imunizace promořením?</h2>
<p>Všechny čtyři vakcíny nechají tělo vyrobit spike protein, na kterém se imunitní systém naučí reagovat na virus. Tělo prostě vyrobí část viru.
<p>Na první pohled mi to znělo děsivě, ale když to srovnám s činností viru, vypadá to vlastně jako jen dost slabý „odvar“:</p>
<ul>
<li>Virus i vakcína dopraví do buňky genetickou informaci, která slouží k výrobě něčeho dalšího. Virus nechává vyrábět své kopie, vakcína jen spike protein z viru. Činnost vakcíny se po vyčerpání zastaví, ať už imunitní systém reaguje jakkoliv.</li>
<li>Virus se dále v těle množí. V případě pomalé počáteční reakce tedy může být tělo vystaveno velké dávce viru, která může způsobovat různé problémy. Vakcína se v těle nemnoží.</li>
<li>Více bych věřil řízení kvality v případě vakcíny. U viru asi nikdo nebude kontrolovat, jak kvalitně byl vyroben.</li>
<li>Vakcíny dostanete celkem přesně odměřené množství. Viru dostanete náhodnou dávku.</li>
<li>Virus se dostává do různých částí těla, kde může působit různé škody. Vakcína (aspoň Comirnaty, ale asi i ostatní) se aplikuje do svalu a neměla by se dostat mimo něj. Případné škody spike proteinem tak jsou do jisté míry omezené.</li>
</ul>
<p><strong>Případné obavy z vakcíny jde tedy často aplikovat i na samotný virus.</strong> Vzhledem k tomu, že se viru asi úplně nevyhnu, dává mi smysl se nechat očkovat. Až se potkám s ostrým virem, budu mít poněkud lepší šance. U setkání s ostrým nejspíš není otázka zda se s ním setkám, ale kdy.
<h2>Je dobrý nápad si do sebe nechat vpustit genetický materiál?</h2>
<p>Genetický materiál do mě dostane nejen vakcína, ale v případě úspěchu i libovolný virus. Děje se tak pravidelně u virů způsobujících rýmu. Děje se tak u koronaviru SARS-CoV-2. Na první pohled to tedy může vypadat děsivě, ale ve výsledku nevidím jediný důvod, proč vakcínu brát jako větši riziko než virus. Spíše naopak – vizte výše srovnání vakcíny s virem.
<h2>Co když vakcína zmutuje?</h2>
<p>Případné chyby při výrobě vakcíny mohou být sice poněkud nepříjemné, ale beru to spíše jako teoretické riziko a opět se toho nebojím o nic více než u virů. Teoreticky se u každé rýmy může podobným mechanismem stát něco hodně nepěkného, v praxi to nevypadá jako reálná hrozba. To už i úmrtí na covid vypadá reálněji (ačkoli to není můj hlavní důvod pro očkování).
<h2>Covid je přece na ústupu, ne?</h2>
<p>Začátkem léta vypadají čísla celkem optimisticky. To ale loni taky. Letos tu navíc <a href="https://www.novinky.cz/domaci/clanek/v-cesku-je-potvrzeno-99-pripadu-nakazlive-indicke-mutace-delta-40364263">máme variantu delta</a>, která má šanci se rozjet, zejména mezi neočkovanými. Rád se budu mýlit.
<p>Očkování nevytvoří imunitu ze dne na den. I pokud bych se dostal na řadu s první dávkou hned (třeba v očkovacím centru, kde očkují bez registrace), druhá dávka by byla za tři týdny a plnou imunitu bych počítal dva týdny po druhé dávce, jsme celkem na pěti týdnech. Pokud se ale se zhoršenou epidemickou situací zvedne zájem, mohou ty časy být ještě delší, protože očkovací centra nemusejí v takové situaci stíhat očkovat všechny zájemce hned. Případně se může opět prodloužit interval mezi první a druhou dávkou.
<h2>Nejsou ty teploty po očkování nějaké moc časté?</h2>
<p>Z jiných očkování si nepamatuju vedlejší účinky. Buď nebyly, nebo nebyly dostatečně výrazné, abych si je zapamatoval. Nebo šlo o vakcíny, které jsem dostal ještě jako malé dítě. Na první pohled to vzbuzuje otázky. Při bližším prozkoumání mi to ale nepřijde jako velký problém – prostě jde o reakci imunitního systému. V nějaké míře se to objevuje i u jiných vakcín. Možná je z nějakého důvodu zde potřeba více protilátek, a tedy i o něco silnější imunitní reakce. Může to být nepříjemnost, ale stojí mi to za to. Proti viru slabý odvar. Navíc virus bych dostal někdy náhodně, ať se mi to v té chvíli hodí, nebo ne. U vakcíny si vyberu, kdy ji chci dostat, a mohu tomu přizpůsobit plány.
<h2>Co to udělá za deset let?</h2>
<p>Samozřejmě se 100% jistotou vědět nemůžeme, můžeme to ale odhadovat díky omezenému poli působnosti vakcíny a rychlosti rozpadu. Nechce se mi dohledávat data pro každou vakcínu, nejdelší dobu rozpadu jsem někde viděl dva měsíce. To mi nepřijde až tolik, aby vakcína nešla rozumně otestovat.
<p>Navíc podobnou obavu lze vyslovit i o viru, kde ta situace vypadá poněkud hůře než u vakcín – dopad na více částí těla, potenciálně vyšší dávka, reálné dlouhodobé účinky apod.
<h2>Jak dlouho bude trvat imunita?</h2>
<p>Ano, to je dnes trochu věštění z křišťálové koule. Prý <a href="https://www.gavi.org/vaccineswork/how-long-does-immunity-last-after-covid-19-vaccination">aspoň půl roku</a>, ale <a href="https://www.nytimes.com/2021/05/26/health/coronavirus-immunity-vaccines.html">možná i roky</a>. Bylo by fajn vědět více, ale neodrazuje mě to od očkování. Ostatně třeba proti klíšťové encefalitidě, tetanu a chřipce se spousta z náš také pravidelně přeočkovává.
<h2>Není lepší si počkat?</h2>
<p>Někdo chce čekat, až bude vakcína více ozkoušená. Někdo na další generaci vakcín. Já jsem to zvážil, ale touto cestou nejdu. Kdybych kvůli tomu měl odložit očkování o týden, dávalo by to smysl. Nové vakcíny se sice nějaké postupně vyvíjejí, ale k dokončení, schválení, výrobě, distribuci a dostupnosti pro mě je nejspíš ještě dlouhá cesta plná nejistot. Nečekám v brzké době ani nějakou zásadní novou informaci, která by ovlivnila moji ochotu se nechat očkovat. Musel bych nejspíš čekat celkem dlouho, aby to čekání mělo smysl. Jenže to zároveň znamená být celou tu dobu neočkovaný, tedy na ne úplně malou chvíli podstoupit riziko neočkování. Nemám pocit, že by to čekání stálo za to.
<h2>Jak to bude účinné proti mutacím?</h2>
<p>Účinnosti proti novým mutacím jsem se původně dost obával. Naštěstí to (aspoň zatím) nevypadá, že by se ty obavy naplnily. Nové mutace často o něco snižují účinnost vakcíny, ale zatím to nevypadá jako zásadní problém.
<h2>Ale přece to i přes očkování mohu chytnout (příp. někoho nakazit)</h2>
<p>Pokud z úvah vynecháme pravděpodobnost, bude se očkování jevit jako zbytečné. Stejně jako bezpečnostní pásy, helmy, rozhlížení se na přechodu a spousta dalšího. Takže ano, i jako očkovaný se může člověk infikovat, roznášet nákazu, onemocnět, mít těžký průběh a zemřít. Liší se ale pravděpodobnosti, a to často dost zásadně.
<h2>Neproběhl ten vývoj přecejen trošku narychlo?</h2>
<p>Vývoj proběhl možná ještě rychleji, než si myslíte. V případě Moderny <a href="https://nymag.com/intelligencer/2020/12/moderna-covid-19-vaccine-design.html">byla očkovací látka vyvinuta již v lednu 2020</a>, byť poté nejspíš ladili nějaké detaily jako optimální velikost dávky a časové rozestupy. Se <a href="https://berthub.eu/articles/posts/reverse-engineering-source-code-of-the-biontech-pfizer-vaccine/">základní představou, jak funguje mRNA vakcína</a>, na tom ale nevidím nic podivného. Ve chvíli, kdy je samotná technologie mRNA vakcín připravená a je k dispozici kód viru, je asi fakt hlavní část zbývajícího vývoje věcí testování. Nemá smysl to srovnávat s délkou vývoje třeba živých vakcín a divit se, proč je to rychlejší.
<h2>Bude to stačit na kolektivní imunitu?</h2>
<p>Těžko říct. Bylo by fajn, pokud ano, ale pokud ne, neznamená to, že jsou vakcíny k ničemu. Jednak stále poskytují individuální ochranu a jednak v částečně proočkované populaci půjde držet reprodukční číslo R ≤ 1 i s méně drastickými opatřeními.
<h2>Ale tady polovina pozitivních je očkovaná!</h2>
<p><a href="https://den1.cz/2021/07/04/brambory.html">Práce s procenty je občas kontraintuitivní.</a> Já se taky občas nechám nachytat prvním dojmem. Jediné, co s tím umím udělat, je nedat na první dojem a zamyslet se nad tím. Pár ilustračních příkladů (nemusí odpovídat realitě, jde spíše o principy):
<ul>
<li>Dočtete se, že v nějaké skupině lidí je polovina pozitivních očkovaná. Na první pohled to nevypadá jako zrovna skvělý výsledek. Ve skutečnosti ale záleží mj. na tom, jaká část této skupiny je očkovaná. Pokud by 99 % lidí z této skupiny bylo očkovaných, a tito lidé tvořili stejně pozitivních jako 1 % neočkovaných, byl by to nejspíš velký úspěch očkování. Pokud by očkováno bylo jen 50 %, už by to nevypadalo jako až tak dobrý výsledek.
<li>Dočtete se, že procento nakažených očkovaných je stejné jako procento očkovaných v populaci. Dejme tomu, že podobné statistiky budou i u hospitalizací, úmrtí a dalších dopadů. Na první pohled to může vypadat, že očkování má nulový vliv. Pokud jsou ale očkováni statisticky rizikovější lidé, znamená to, že očkování jejich rizikovost statisticky snížilo na úroveň těch méně rizikových. To může znamenat i několikanásobný pokles smrtnosti.
</ul>
<h2>Ale výrobce nenese odpovědnost…</h2>
<p>Zaprvé, ona odpovědnost by byla nejspíš čistě finančního rázu. Myslím, že by výrobci vakcín takovouto odpovědnost klidně nesli, jen by se lišila cena za dávku. Pokud vakcíny nakupují politici, mají na to monopol a chtějí se blýsknout na první pohled co nejnižší cenou, dává pro ně smysl takovýto nákup bez záruky. I pokud část těch nákladů bude skrytá.
<p>Tak jako tak, odpovědnost nikdo nenese ani za covid. Ani tady tedy nevychází ze srovnání vakcína hůř než ta nemoc.
<h2>Není lepší imunita z prodělaného onemocnění?</h2>
<p>Četl jsem k tomu různé názory, ale pokud se chci vyhnout onemocnění, nevidím to jako cestu pro mě, i kdyby to mělo poskytovat lepší imunitu…
<h2>Vakcína je ale přece experimentální!</h2>
<p>Virus je mnohem experimentálnější, v populaci se objevil bez jakýchkoliv testů. Tím možná virus porušuje zákony, ale nepodařilo se jej za to nijak účinně potrestat.
<h2>Vakcínu si ale nemohu vybrat</h2>
<p>Jde to, byť to v ČR není úplně přívětivé. Já jsem si vybral podle <a href="https://ockovani.opendatalab.cz/">https://ockovani.opendatalab.cz/</a>, kde je mj. vidět, které vakcíny mají nespotřebované, a tedy lze odhadovat, které vakcíny budou aplikovat. Některá očkovací centra to přímo uvádějí i na svých webových stránkách, případně se můžete zkusit zeptat. Dále je možné se ujistit před očkováním, ale to bych bral jako poslední možnost. V neposlední řadě to vypadá, že u očkování bez registrace je možnost výběru, ale nezkoušel jsem. A nakonec v zahraničí to někde taky jde (například v Srbsku to lze zvolit v registračním formuláři), ale nejspíš to bude pro většinu lidí zbytečná komplikace (zahraniční SIM a její aktivace mimo roaming, pas, ubytování, …).
<h2>Nepodpoří očkování vznik dalších variant?</h2>
<p>Je to spíše přesně naopak. Více nakažených a větší virová nálož znamenají více příležitostí pro mutace. Pravda, očkování může mít vliv na to, která varianta uspěje. Ve výsledku tak může uspět méně infekční varianta, pokud zvládne lépe obejít očkování. Není to sice za mě úplně ideální scénář, ale není to ani taková hrůza.
<h2>Do očkování se nenechám nutit!</h2>
<p>Ani já nepovažuju covid pasy tak, jak teď fungují (nebo aspoň teoreticky mají fungovat), jako úplně šťastné řešení. Mohl bych se o tom rozepsat více, ale tento článek je dost dlouhý i bez toho. Na druhou stranu, očkovat bych se nechal i bez covid pasů, takže nebudu odmítat očkování jen kvůli protestu.
<h2>Očkovaní se nemusejí testovat, takže mohou někoho nakazit!</h2>
<p>Lze debatovat o tom, jak dobře či špatně jsou nastavená pravidla stanovená vládou. Můžeme debatovat, jestli dává větší jistotu očkování, nebo až sedm dní starý PCR test, nebo ještě něco jiného. Pokud jde ale o to, jestli já se nechám očkovat, je to částečně jedno. Očkování mi nezakazuje se nechat testovat. Už jsem se testoval, i když jsem podle nařízení vlády nemusel. Už jsem se nechal ostříhat v respirátoru, ačkoli mi to žádné nařízení vlády nepřikazovalo. Stejně tak je dobré se nespoléhat jen na očkování třeba v případě návštěvy někoho, kdo se ani ze zdravotních důvodů nechat očkovat nemůže.Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com0tag:blogger.com,1999:blog-7247548023065923707.post-29322400812644844292021-06-08T16:00:00.004-07:002021-08-16T10:07:03.859-07:00Může být Česká televize opravdu nezávislá?<p>Článek <a href="https://stoky.urza.cz/texty/o-nezavislosti-ceske-televize-1802">vyšel též ve Stokách Svobodného přístavu</a>.</p>
<p>Občas slýchám, že potřebujeme veřejnoprávní Českou televizi jakožto nezávislé médium financované z koncesionářských poplatků. Na první pohled to může dávat smysl – vliv má přece ten, kdo platí. Médium placené z reklam může být pod vlivem inzerentů.</p>
<p>Toto by dávalo smysl pro obhajobu nějakého soukromého placeného (popř. freemium) média. V případě veřejnoprávních médií ale platí někdo jiný, než kdo rozhoduje o platbě. Platí každý majitel a uživatel televizního přijímače, nehledě na to, jestli má o Českou televizi zájem. Co když bude chtít vedení zvýšit poplatky? Nestačí přesvědčit zákazníky, že služby za to stojí. Je potřeba přesvědčit politiky, že mají upravit zákon. Může být Česká televize nezávislá na poslancích?</p>Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com0tag:blogger.com,1999:blog-7247548023065923707.post-12967246153599579542020-12-17T15:16:00.003-08:002020-12-17T15:16:38.453-08:00Drahá úspora na elektronických dálničních známkách<p>Článek vyšel <a href="https://www.mises.cz/clanky/komentar-k-uspore-na-dalnicnich-znamkach-2437.aspx">také na webu Mises.cz</a>.
<p>Občas slýcháme, jak transparentnost pomůže kontrolám veřejných zakázek. Pojďme se podívat na jeden celkem nedávný případ, kde jsme se prý dočkali ušetřené půl miliardy. To na první pohled může vypadat jako velký úspěch. Na druhý pohled to až tak velký úspěch není – i kdybychom předpokládali, že se ušetřené peníze využijí efektivně a na dobré účely.</p>
<h2>Kauza elektronických dálničních známek</h2>
<p>Možná jste v lednu 2020 zaznamenali <a href="https://domaci.ihned.cz/c1-66705750-e-shop-k-elektronickym-znamkam-zajisti-spolecnost-asseco-central-europe-bude-stat-401-milionu-korun-bez-dph">státní zakázku na e-shop k elektronickým dálničním známkám za 401 milionů korun</a>. Tato zakázka vzbudila pochyby, co je tak drahé na e-shopu o několika produktech. Chytil se toho Tomáš Vondráček ACTUM Digital, který uspořádal <a href="https://www.znamkamarada.cz/">hackathon</a>, jehož cílem mělo být vytvořit tento eshop za víkend a nabídnout ho státu zadarmo. To vyvolalo velký mediální ohlas, ale nakonec <a href="https://domaci.ihned.cz/c1-66751360-prace-dobrovolniku-na-hackathonu-prijde-vnivec-stat-it-system-pro-elektronicke-dalnicni-znamky-nevyuzije">z toho stát nic nevyužije</a>.</p>
<h2>Oslava ušetřené půlmiliardy</h2>
<p>Nedávno Tomáš Vondráček publikoval na LinkedIn oslavný příspěvek – ačkoli se výsledek hackathonu nevyužije, je to prý obrovský přínos, protože i tak se díky tomu povedlo ušetřit spoustu peněz:</p>
<iframe src="https://www.linkedin.com/embed/feed/update/urn:li:share:6739217331030921216" allowfullscreen="" title="Embedded post" width="504" height="515" frameborder="0"><a href="https://www.linkedin.com/posts/tomas-vondracek-801737b_z%C3%ADtra-st%C3%A1t-spou%C5%A1t%C3%AD-e-shop-na-d%C3%A1lni%C4%8Dn%C3%AD-zn%C3%A1mky-activity-6739217331651665920-QvBE">Tomáš Vondráček napsal:</a><bq>Zítra stát spouští e-shop na dálniční známky! Zjišťoval jsem stav věci a vše nasvědčuje tomu, že se oproti původní zakázce ušetří 273 mil Kč (a zřejmě ještě o trochu víc). Na související zakázce na fyzickou distribuci, na karetních transakcích a dalších činnostech se ušetří dalších více než 200 mil Kč. Celková úspora přes půl miliardy. A to celou zakázku nakonec vyvíjel státní podnik, agilním způsobem btw. Lidé, kteří to dílo nakonec odpracovali mají můj respekt. Přemýšlím, zda by to u ostatních IT zakázek nešlo také a bez toho, abychom museli na stát vytvářet tlak pomocí hackathonu, sociálních sítí a médií? Jak se dostat k podstatě, aby stát byl více služba a ne okrádání a ovládání veřejnosti?</bq></iframe>
<h2>Možná to zdaleka není půl miliarda</h2>
<p>Objevil se i <a href="https://www.linkedin.com/feed/update/urn:li:activity:6739217331651665920?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A6739217331651665920%2C6739260982457114624%29">skeptičtější komentář Pavla Sundy (viditelný jen přihlášeným)</a>, že prý úspora není zdaleka tak vysoká:</p>
<bq>Můžete prosím zveřejnit zdroj? Dle Registru zakázek je cena nižší o 100m bez DPH, ovšem nejsou v ní zahrnuty vouchery na doplňkové mandaye, čili v reálu je úspora nějakých 60mio. Viz <a href="https://www.hlidacstatu.cz/Detail/11860184?qs=CENDIS+">https://www.hlidacstatu.cz/Detail/11860184?qs=CENDIS+</a></bq>
<p>Na odkazu lze rychle ověřit, že se cena zakázky snížila jen o cca 100 milionů. Pro další tvrzení nemám v rychlosti k dispozici zdroje, a pravděpodobně by si to vyžádalo složitější analýzu, která by vydala na samostatný článek. Vyjděme tedy z předpokladu, že úspora se pohybuje v rozsahu cca 60–500 milionů korun. Je to sice poměrně velký rozsah, ale jádro článku nenarušuje.</p>
<h2>Nechci úsporu zadarmo</h2>
<p>Aby se tato úspora mohla uskutečnit, bylo potřeba vynaložit určité úsilí. To je přirozené, ale i toto úsilí má smysl započítat. Sice to nešlo ze státního rozpočtu a lidé toto úsilí vynaložili dobrovolně, i tak má ale smysl uvažovat o efektivitě tohoto snažení.</p>
<p>Jistě někdo si toho musel všimnout a publikovat. Tomáš Vondráček zorganizoval hackathon, který stál dobrovolníky nějaký čas. To by ale samo o sobě nestačilo, celé by to politici mohli snadno odignorovat, nebýt pozornosti veřejnosti. Lidé si o tom průběžně četli, slyšeli o tom ve zprávách, diskutovali s přáteli a sdíleli na sociálních sítích.</p>
<p>Možná si řeknete, že tyto náklady na veřejnou diskuzi nestojí za řeč – i kdybychom to přepočítali na peníze, bude to v řádu desetikorun na obyvatele ČR. Možná ano, ale potom zkusme stejnou optikou vidět i úsporu. Když úsporu cca 60–500 milionů podělíme cca deseti miliony obyvatel, jsme na 6–50 korun na obyvatele. Možná tak náklady na obyvatele byly větší než přínos. A i pokud ne, režie byla obrovská.</p>
<h2>Kolika zakázkám jsme schopni se věnovat?</h2>
<p>Pokud vám nesedí přepočítávání lidské pozornsti na peníze, nabídnu ještě jiný pohled: Lidská pozornost je vzácný zdroj. Zvládli jsme se věnovat jedné státní zakázce, probírat to s rodinou, přáteli a kolegy. Dovedete si ale představit, jak by to škálovalo? Že bychom takto probírali třeba jen malý zlomek všech zakázek? Kdybychom takto vyřešili třeba jednu zakázku za týden (což mi přijde dost optimistické), jsme na cca 52 zakázkách za rok, kterým jsme schopni se věnovat. Podle <a href="http://www.isvz.cz/ISVZ/Podpora/ISVZ_open_data_vz.aspx">otevřených dat ISVZ</a> jsem se dopočítal 55 673 zadání veřejných zakázek za loňský rok. Jedna zakázka za týden by tak znamenala méně než 1 ‰ všech zakázek. Tedy přes 99,9 % zakázek se nejsme schopni věnovat.</p>
<h2>Radši přispět ve sbírce…</h2>
<p>Kdybychom místo tohoto sledování státních zakázek ten čas věnovali nějaké práci a výtěžek poslali nějaké dobročinné organizaci vlastní volby, nejspíš by to přineslo větší dopad. (Pokud za dobročinnou organizaci považujete stát a považujete jeho hospodaření za efektivní, můžete klidně poskytnout dar státu. Já to pravděpodobně neudělám…)</p>
<h2>Co si z toho vzít?</h2>
<ul>
<li>Stát neškáluje.</li>
<li>Současný stát je řádově větší, než co zvládneme uhlídat. (Nejde o počet obyvatel ani rozlohu, ale o to, co všechno se snaží stát poskytovat.)</li>
<li>V minimálním státě by možná transparentnost pomohla, ale v současném stavu očekávám zanedbatelný přínos. Rozhodně na ni nespoléhejme jako na jediné řešení státní neefektivity.</li>
<li>Nechtějme po státu další služby. Naopak revidujme, co všechno stát dnes dělá, a všímejme si věcí, které by dělat nemusel. Ostatně zaměstnance stojí stát cca ⅔ příjmu na odvodech, DPH, spotřebních daních apod. Prostoru ke zmenšení je spousta.</li>
<li>Vážím si práce lidí, kteří poukazují na neefektivity státu, díky nim je problém viditelný i jako praktický problém. Nemusíme se tak opírat jen o teoretické odůvodnění nemožnosti ekonomické kalkulace od Ludwiga von Misese. Jen si nemyslím, že dotlačit politiky ke zlepšení jedné konkrétní zakázky stojí za to úsilí.</li>
</ul>
Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com2tag:blogger.com,1999:blog-7247548023065923707.post-4022279483496616972019-12-23T14:51:00.003-08:002019-12-23T15:01:12.985-08:00Život na vedlejších efektech<p>Znáte tu situaci, když nějaký produkt používáte způsobem, jak nebyl zamýšlen? Někdy se jeho nedostatky dokonce stanou žádoucí vlastností? Asi jako v komisku XKCD workflow:</p>
<p><img src="https://imgs.xkcd.com/comics/workflow.png" alt="XKCD workflow" width="278" height="386"></p>
<p>Já to tak mám často, uvedu pár příkladů.</p>
<p>Kdysi dávno jsme v počítači měli disk, který nejen vydával hluk, když se točil, ale ještě k tomu vydával specifický výrazný hluk, když disk zrovna něco četl nebo zapisoval. Nový disk pak sice měl větší kapacitu, ale bohužel postrádal tuto užitečnou zvukovou signalizaci, na kterou jsem si zvykl.</p>
<p>Na telefonu Nokia 3120 snad nebylo možné bez odemčení kláves rozsvítit displej. Teda bylo. Stačilo napsat některé z vybraných nouzových čísel, jako například 112 nebo 911. Asi není moudré pro tyto účely používat místní nouzové číslo 112 (kdybych to omylem vytočil), ale naštěstí telefon takto z nějakého důvodu reagoval i na číslo 08. Stiskem další číslice jsem pak zrušil psaní nouzového čísla. Takže jsem používal sekcenci 080, abych zkontroloval stav telefonu. Bylo to praktické, protože 0 a 8 jsou poblíž.</p>
<p>Na touchpadu jsem si kdysi aktivoval emulaci multitouch. Potom systém například plochu palce bral jako dva prsty, což mi přišlo velice praktické. Bohužel jsem byl v tomto vnímání asi osamocen a novým notebookem jsem o tuto praktickou vlastnost přišel.</p>
<p>V autoškole jsem se naučil řídit starou Fabii 1.9 SDI skoro bez dívání na budíky. Rychlost odhadnu podle převodu a otáček. A na otáčky je tu „zvukový otáčkoměr“. Jenže, pokud budu mít relativně moderní auto, bude mít nejspíš příliš tichý motor…</p>
<p>Naštěstí tento problém až tak řešit nemusím. Asi vás nepřekvapí, že cílem autoškoly nebylo stát se řidičem…</p>
Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com0tag:blogger.com,1999:blog-7247548023065923707.post-22530813201830246272019-10-04T12:08:00.002-07:002019-10-04T12:10:02.254-07:00A non-technical aspect of security – how could I have prevented the 2014 Jabbim password leak?<p><a href="http://pinky.jabb.im/2014/12/jabbim-bezpecnostni-problem-security.html?m=1">The 2014 Jabbim breach</a> has happened almost five years ago, but there is still one interesting information to reveal. It is something I am not much proud of, but we can learn from both my mistake and Jabbim's mistake.</p>
<h2>My experience with a past vulnerability report</h2>
<p>Some time before the breach (2013-11-21), I had reported some seemingly unrelated vulnerability. Well, it was also an SQL injection, but on a different place. Moreover, just a script crash there had some unexpected consequences:</p>
<ol>
<li>Some part of the DB remained locked.
<li>This has caused many script waiting for releasing the lock.
<li>As many web scripts were waiting, the server has reached the fork limit. As far as I remember, it was unable to serve even static files.
</ol>
<p>Maybe you can imagine what happened. Without having an idea that the status icon script is backed by a SQL database and without any bad intentions, just putting an apostrophe in the url accidentally caused an SQL injection and subsequent webserver crash.</p>
<p>I had good intentions, so I promptly reported the issue to admins. The reaction was like “Thank you for crashing our server. I could have been at home right now.”. Well, they fixed the issue, but my feeling from the communication was not much good.</p>
<h2>My report of the vulnerability abused in the breach</h2>
<p>The same day, I had also discovered another SQL injection vulnerability – in user search. That is, the same vulnerability that was abused in the 2014 breach. I also reported it, but I decided to contact another (hopefully more friendly) admin. However, I was just told about not having enough time for handling it.</p>
<p>So, I was about to report it to the unpleasant admin. He was offline that time, so I had to wait. When waiting, I started thinking about giving a report that demonstrates the danger but stands in limits of white-hat hacking.</p>
<p>However, this takes some time. As I was doing this in my free time for my fun and someone's else profit, I did not have enough time for making the report perfect. I needed to do some other duties, maybe something school-related. So, I postponed it for indefinite amount of time and you know the result… I am really sorry for that.</p>
<h2>What could have been done better from the reporter side?</h2>
<p>Although I would not describe me as a <a href="https://en.m.wikipedia.org/wiki/Perfectionism_(psychology)">perfectionist</a>, I admit I sometimes have some perfectionistic traits in a limited way. That said, I am not perfect at avoiding perfectionism. But “perfect” is an enemy of “done”. I could have opted for a trade-off – to try to make the report perfect until some deadline. Once the deadline passes, I would report it in however imperfect form.</p>
<h2>What could have been done better from the admin side?</h2>
<p>This is much related to the first vulnerability report.</p>
<ul>
<li>Do not discourage white hats: While I understand that a vulnerability report might be something unpleasant to handle in general, they could have responded in a more kind way. I believe it was obvious I had no bad intentions and tried to behave as responsibly as possible.
<li>Encourage white hats: There are some companies that even reward vulnerability reports and/or put your name to a hall of fame. If vulnerability rewards are expensive, you still can have a hall of fame, like some companies (even Google) have.
<li>Have a contact for reporting of security issues. It is also a good idea to have <a href="https://securitytxt.org">security.txt</a> file, but it should not be the only way to contact responsible persons. (I know, security.txt has started in 2017, so they could not have it. But today, it is a good idea to have one.)
<li>When you receive a vulnerability report but you are not the right person to handle it, forward it to someone responsible as soon as possible.
</ul>Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com0tag:blogger.com,1999:blog-7247548023065923707.post-46608181348646802622018-08-08T13:32:00.000-07:002018-08-08T13:32:45.051-07:00Cache-friendly secure connection for websites
<p>While commenting Eric Meyer's <a href="https://meyerweb.com/eric/thoughts/2018/08/07/securing-sites-made-them-less-accessible/">article about issues that HTTPS bring to Africans</a>, I found that this should be probably also posted as an article. I am discussing how to allow better caching while keeping a reasonable level of security brought by HTTPS.</p>
<h2>We still need secure connection, even for public static sites</h2>
<p>I still believe we should have a secure communication everywhere; I am not 100% sure if this should be the current HTTPS.</p>
<p>We need secure connection even for public static sites. The reason #1 is not encryption, it is authentication. We do not want infected routers / people with Wi-Fi Pineapple / malicious to ISPs / etc. to modify webpages we see. Without some kind of secure connection, they could for example inject some <a href="https://searchsecurity.techtarget.com/news/252446369/Coinhive-malware-infects-tens-of-thousands-of-MikroTik-routers">cryptominers</a> or advertisments or malware. They could also modify the content of static pages to instruct people to do something dangerous, e.g., modify recommended amount of some chemicals.</p>
<h2>Do we always want TLS?</h2>
<p>The way we secure our communication does not have to be today's HTTPS, though. Encryption is needed just sometimes. On public static sites, it can kind of obscure what are you looking at (e.g., attacker sees you are looking at Wikipedia, but it is not clear what page), but traffic volume analysis can often distinguish between specific pages.</p>
<h2>How to make it better?</h2>
<p>Let's look at some options to make it better. There will be some tradeoffs to privacy, but we will not let attackers to affect traffic in an arbitrary way, as plain HTTP would allow. Thus, we would not make the user more prone to downgrade attacks than with today's HTTPS. Our main point is allowing the caches doing their jobs, maybe a better one than with the current state of the art HTTP caches can do.</p>
<h3>Mixed content secured by SRI</h3>
<p>First, we could sometimes achieve a reasonable level of security even with a plain HTTP. We could have loaded some images, stylesheets and even scripts over a plain HTTP, provided they are protected by subresource integrity (SRI). I have wondered why browsers consider even SRI-protected resources as a mixed content. They are protected against modification and they do not necessarily contain anything sensitive. I don't much need to hide the fact I am downloading jQuery 1.8.1… (Today, such change in browsers can be a bit more complex if it has to be compatible with older browsers with a more strict mixed content policy. It would ideally bring something like allowplain atributte, allowing usage of plain HTTP instead of HTTPS.)</p>
<h3>Shared cache based on hashes</h3>
<p>With SRI, we could go a bit further. Where explicitly approved by some extra header, the browser could just match the hash for caching purposes, even if it has not ever downloaded the specific URL. As a result, we would not needlessly download dozens of exactly same copies of jQuery or Bootstrap. We could download it just once and then use the cache. While this could serve as some minor side channel that reveals information what files are already in your cache, explicit approval through some header can make it a non-issue.</p>
<h3>Serving signed responses from caching proxy</h3>
<p>We could also have some caches of some signed (but probably unencrypted) data. This however goes with some privacy tradeoff and new protocol to implement, but it does not give up data authentication. A cache server could return some data with expiration time and signature, even without contacting the upstream server. This is quite more complex, but still technically feasible. We cannot use TLS at this point, because TLS serves for transport layer, which we would like to intercept. The handshake could however start as a standard TLS handshake and continue with a different protocol:</p>
<blockquote>
<strong>Client:</strong> ClientHello, I am trying to connect through TLS to host example.com, there are my capabilities (ciphersuites). I am able to use caching proxy instead of standard TLS.<br>
<strong>Caching proxy:</strong> Hey, I have some content for this server cached. See my non-expired approval from the server, signed by the private key of certificate holder. I am allowed to serve you some of the requests. Plus there is the OCSP response, so you know the server's certificate is not revoked. You see, the private key holder indicates there is nothing sensitive in the URL, you can send it to me.<br>
<strong>Client:</strong> OK, there is the full URL: htttps://example.com/contact<br>
<strong>Caching proxy:</strong> OK, there are the data authenticated by the server.</p>
</blockquote>
<p>If client or server does not support such a feature, either just because it is not implemented or because they don't want this for a reason, no other party can force the communication to go this way instead of standard TLS.</p>
<ul>
<li>Website owner agreement is needed: If the proxy does not have a signed and non-expired approval, it cannot force the client to reveal the full URL.</li>
<li>If the browser chooses not to use this way (e.g., because of user's decision), it can insist on a standard TLS handshake.</li>
<li>Standard TLS handshake can ne required for some blacklisted URLs (e.g., /api/*), POST requests or if some specific cookie is present. Those exceptions could be described in the initial approval.</li></ul>
<h2>Cache-friendly version?</h2>
<p>I am, however, generally against making special cache-friendly sites, similar to past “wap” or “mobile” versions. If they have a different URL, it gets tricky to handle links. When I click a link from elsewhere, it does not necessarily point to the version I want. Also, force website owner not to use HSTS, which is probably not what we want.</p>
<h2>Challenges</h2>
<ul>
<li>UX issues: Maybe just some users will want such tradeoff, while some others will not. How to allow both of them making an informed decision?</li>
<li>None of those suggestions is enough reviewed by others. Furthermore, description of signed caches is quite vague to properly review, because I have prefered to be concise. While I have some security and crypto background, I don't think this should be implemented without any review.</li>
<li>This would require multiple parties to implement it. All the ideas require some change in browser and the website. The last one also requires important modification of the webserver and proxy. But incentives to implement this can be quite low for most people with fast Internet connection. On the other hand, the SRI enhancements are not so hard (i.e., they are much easier than extending HTTPS to some TLS alternative) and can be useful even in Europe / America on mobile connections, despite there is no proxy that can speed up loading.</li>
<li>Any change in browsers is likely irelevant for people with Windows XP or something similar. On the other hand, they could be welcome anyway if their usage don't break anything.</li>
</ul>
Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com0tag:blogger.com,1999:blog-7247548023065923707.post-41731202292364581842016-12-19T12:05:00.001-08:002016-12-19T12:06:07.257-08:00Pebble patří FitBitu. Co to přinese?<p dir="ltr">Je už oficiálně potvrzeno, že FitBit koupil Pebble, údajně za 40 milionů dolarů. Co to bude znamenat pro fanoušky hodinek Pebble?<br></p>
<p dir="ltr">Článek <a href="https://www.mypebble.cz/pebble-patri-fitbitu-co-to-prinese/">vyšel</a><a href="https://www.mypebble.cz/pebble-patri-fitbitu-co-to-prinese/"> </a><a href="https://www.mypebble.cz/pebble-patri-fitbitu-co-to-prinese/">na</a><a href="https://www.mypebble.cz/pebble-patri-fitbitu-co-to-prinese/"> </a><a href="https://www.mypebble.cz/pebble-patri-fitbitu-co-to-prinese/">MyPebble.cz</a>.</p>
Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com0tag:blogger.com,1999:blog-7247548023065923707.post-45785650482410003992015-10-11T15:28:00.002-07:002015-10-16T11:42:33.851-07:00Můj první Spartan Race – Kouty Super 2015<p>Rád běhám. Mám za sebou už pár půlmaratonů (pod 1:45) a překážky taky znějí zajímavě. Přihlásil jsem se tedy na Spartan Race v Koutech nad Desnou, konkrétně na variantu Super (tj. min. 13 km a min. 20 překážek). A opravdu – Spartan Race bylo něco, co jsem do té doby nezažil. Byl to snad první závod, kde jsem předem neměl moc tušení, jestli ho úspěšně dokončím.
<p>Před závodem jsme si zvědavě prohlíželi předpověď počasí. Ano, když jsem se hlásil, tak jsem byl určitě rád, že v říjnu asi nebude horko. Předpověď ukazovala cca 3°C – 5°C. No, horko to není. Zimy bych se nebál, kdyby nebylo zvykem mít na trase nějakou vodu – cestu potokem, podplavání překážky apod. Ale na druhou stranu, o den později, kdy na stejném místě měl být další závod (tzv. Beast, tedy delší varianta závodu), mělo být podle předpovědi dokonce pod nulou. To jsem musel okomentovat:
<bq>A po nás námraza!</bq>
<p>Nikoho z nás ale počasí naštěstí neodradilo a v sobotu jsme dopoledne šli závodit. Před závodem jsem do sebe dostal ještě nějaký teplý čaj (měl jsem trochu rýmu), což byla ten den hned první chyba – nevlezlo se do mě tolik jídla, kolik bych si představoval. Ale co se dá dělat. Před startem se nás z pódia snažili rozproudit a navodit tu správnou atmosféru. Řekl bych, že se to celkem povedlo. Před startem jsme si tam trošku zaskákali. A pak – startujeme! Vybíháme…
<p>Prvních pár překážek bylo tak na rozehřátí. Nic těžkého, musel to dát snad každý. Hned za začátku nás poslali do sjezdovky nahoru. To byl celkem typický terén na celém tomto závodě, ale občas to samozřejmě šlo i dolů. Snažil jsem se mít tempo tak akorát a nepřepálit to, což asi byla druhá chyba, ale k tomu se ještě dostanu. Sepíšu tu pár vzpomínek z překážek. Pokusím se to psát zhruba podle pořadí.
<p>První trošku vážná překážka byla přeručkování jakýchsi tyček. Moje ruce snesou o poznání méně než nohy, ale překážku jsem zvládl celkem bez problémů. Jen jsem se mírně zadýchal, a když mi dohlížející slečna řekla nějaké povzbudivé slovo ihned po dokončení překážky, musel jsem asi vypadat jako profesionální hráč pokeru.
<p>Hod oštěpem. Nic zvláštního, jen mých prvních třicet angličáků. To bývá za nezdařenou disciplínu, v tomto případě jsem se oštěpem netrefil na první (jediný) pokus. Ale žádný problém, jsem svěží a běžím dál.
<p>Pytel s pískem. Každý jsme vyfasovali velký pytel s mokrým pískem a šli s ním po sjezdovce – nejdřív nahoru a pak zpátky dolů. Na začátku jsem řekl, že nechci slyšet, kolik ten pytel váží (sám jsem hádal aspoň 10kg), vzal ho na záda a šel. Nevím, jak to bylo vysoko, řekl bych, že nekonečně. Několikrát jsem do kopce zastavoval a odpočíval. Zastavil jsem i asi tři metry před vrchem. Sice to byly <i>jenom</i> tři metry, ale zároveň to byly <i>ještě</i> tři metry. Pak následovala malá rovinka – nejjednodušší část. Člověk by řekl, že dolů to půjde snadno, ale ne tak docela. Nahoru a po rovince jsem se aspoň s pytlem mohl předklonit a být tak nějak stabilní. Dolů mi ten pytel dost bral stabilitu. Vidím to jako asi pro mě nejtěžší překážku, co tam byla. Na konci překážky jsem se zeptal, kolik ty pytle váží. Pro muže prý 20kg-25kg. Takže s pytlem jsem byl tak o třetinu těžší, možná i o víc.
<p>Zajímavý byl memory test. Člověk si podle svého startovního čísla našel v tabulce kód a musel si ho zapamatovat. O hodně později si na to musel vzpomenout – jinak ho to stálo třicet angličáků. Já jsem s tím neměl problém. Jméno Belinda jsem si zapamatoval. V číslicích jsem našel nějaké údaje jako třeba můj ročník narození (tj. „91“). Ještě teď si vybavím „64Belinda9117“.
<p>Brzy přišel šplh po laně. Nic až tak zvláštního, jen druhých třicet angličáků pro mě, ale stále celkem pohoda. Moment, vlastně něco ano: Na lano se začíná lézt z vody. Když pak člověk dělá angličáky, pěkně se na něj nalepí všechno to bláto. Zhruba od tohoto místa jsem taky měl občas nějaké křeče v nohách, možná kvůli té studené vodě. Zima ale nebyla, na Spartanu se člověk zahřeje.
<p>Asi dvakrát nebo třikrát jsme měli cestu (plazení nebo válení sudů) pod ostnatým drátem. Jednou jsem dokonce pod ostnatým drátem vleže někoho „předbíhal“ (jestli se tomu tak dá říct).
<p>Pár překážek bylo na rovnováhu. Měli jsme přechod po lávce a přechod po kůlech. S ani jedním nebyl problém. Akorát tu lávku někdo přeběhl rychle a rozechvěl celou konstrukci, tak jsem uprostřed lávky chvilku stál a čekal, než se to uklidní.
<p>Horostěna – moje třetí sada angličáků. Trošku zbytečně, ale stále jsem měl sílu a nebyl to problém. A jen tak mimochodem, přišel jsem tady na to, že mokrý papírový kapesník si moc snadno nerozložím.
<p>Na desátém kilometru to přišlo. Překážka nebyla nic extra náročného, měli jsme přeručkovat po madlech. Něco podobného jsem už zvládl dříve, jen tam byly železné tyče, které byly příjemnější. Ale hlavně to tehdy bylo v místě, kde jsem měl dost síly. Tady jsem to zkusil, ale cítil jsem, že mě to dost výrazně vysiluje. Angličáky se začaly zdát jako přívětivá alternativa. Kdybych se hodně snažil, možná bych tu překážku dal až do půlky, ale angličákům bych se stejně nevyhnul.
<p>Tak začala moje čtvrtá sada angličáků. Udělal jsem jeden angličák a zjistil jsem, že té síly už moc není ani na ty angličáky. Nohy mě asi nebolely, ani nic dalšího, jen jsem prostě měl dost hlad a neměl jsem energii. Asi po dalších šesti angličácích vážně zvažuju, jestli pokračovat. Hlad byl výrazný a bylo naprosto jasné, že do cíle to lepší nebude. S sebou jsem si žádné jídlo nebral. (Hmm, příště…) Přede mnou kromě angličáků a překážek bylo ještě asi sedm kilometrů nejistým terénem. Celkem otevřeně se tu ptám: Kdybych teď skončil, za jak dlouho se dostanu k jídlu? Místo odpovědi na svůj dotaz jsem byl ale ujištěn, že už to půjde jen z kopce a překážky už „budou neangličákové“. (Přeloženo do češtiny, překážky nebudou tak náročné, aby se na nich ve velkém dělaly angličáky.) Váhám, ale nakonec se nechávám přesvědčit. Dodělám angličáky a pokračuju dál. Kamarádovi, se kterým jsem do té doby zhruba držel tempo, jsem řekl, že nemá smysl, aby na mě čekal. Bylo mi jasné, že dřív než v cíli se asi nepotkáme, a nechtěl jsem ho brzdit.
<p>Skutečně to už jde jen z kopce. (Všímáte si té ironické dvojznačnosti?) No dobře, zas tak zlé to nebylo, z kopce se dalo i celkem ještě běžet. K čemuž při vidině jídla byla i celkem motivace. Skoro každá překážka tu byla těžká. Ani přelezení dřevěné stěny (cca něco přes 2 metry) už nebylo zdaleka tak samozřejmé jako na začátku závodu, i když to bylo pořád z těch lehčích překážek.
<p>Jedna z posledních překážek bylo podplavání desky. Žádný hluboký ponor, ale člověk se musel celý ponořit do vody. Po vynoření jsem ze sebe okamžitě sundal funkční mikinu, která poněkud nasákla vodou a <i>pekelně studila</i>. Ale pak dobrý, pohybem jsem se zahřál.
<p>Prakticky poslední překážka byla pavučina z lan, kterou měl člověk přelézt. Nahoru to šlo snadno a dolů… Dolů by to mohlo jít ještě <i>mnohem rychleji</i>. Na pavučině bylo mnoho lidí současně, dost se to hýbalo. Sil moc nezbývalo a riskovat, že to dolů půjde <i>ještě mnohem rychleji</i> se mi opravdu nechtělo, i kdybych náhodou spadl na tu správnou stranu. Asi sto metrů před cílem tedy dělám pátou sadu angličáků. Sice jsem v tom nebyl úplně sám, ale šlo o jedinou vyloženě <i>neangličákovou</i> disciplínu, kde jsem dělal angličáky. Šlo to pomalu, ale nějak to šlo. Uff, a hurá do cíle! Už jen kousek potokem, přeskočit malý oheň a jsem v cíli. Čas nic moc, ale cokoli lepšího než DNF beru.
<p>V cíli teprve začala zima. A tedy taky menší dilema – mám se prvně převléct, nebo najíst?
<p>Můj první Spartan Race byla určitě zajímavá zkušenost a i nejedno ponaučení. Dost jsem podcenil dobu trvání, takže jsem neřešil jídlo na cestě. Taky kdybych to na začátku trošku víc „osolil“ (nohy by to patrně zvládly), mohl mě hlad dostihnout až o něco později. Což by se mi vyplatilo hned dvojnásobně – hlad zde vytváří jakousi pozitivní zpětnou vazbu: hladovému všechno trvá déle, ale o to je pak člověk hladovější. Určitě by pomohlo taky pití (hádám, že by to stálo za tu trochu zátěže), ale nepřišlo mi to jako až tak krizové. Na Super jsem byl vlastně vybaven spíš jako na Sprint (kratší varianta závodu). Hodilo by se taky posílit ruce, ale to vím už delší dobu. Příště můžu dopadnout lépe. Určitě toto nebyl můj poslední Spartan Race. Chtěl bych jít na Super nebo Sprint. Varianta Beast má zatím ještě čas.
<p>Za dva týdny jdu na něco vyloženě odpočinkového – na půlmaraton.Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com0tag:blogger.com,1999:blog-7247548023065923707.post-11716303818250500412015-06-02T02:18:00.000-07:002015-06-02T02:18:14.400-07:00Review of Crypto library in Play! framework<p>I'd like to discuss the crypto library security and purposes, namely encryptAES and decryptAES methods. I find it easy to misuse the library. Moreover, recent 2.4 update <b>changed</b> some security properties. That is, some previously insecure usages are secure now, <b>but also some previously secure usages are insecure since 2.4</b>. This means <b>users of Crypto library should consider the security impact before migrating to 2.4.</b>
<h2>What has been changed?</h2>
<p>The ECB mode has been replaced by CTR mode. I'll quote a <i>misleading claim</i> from the <a href="https://www.playframework.com/documentation/2.4.x/Migration24#Crypto-APIs">official documentation</a>:
<bq>The <a href="http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Counter_.28CespTR.29"><code>CTR</code></a> mode is much more secure than the <code>ECB</code> mode.</bq>
<p>The ECB mode is <a href="https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29">non-recommended in general</a>, so this might look like a good decision at first sight. While the CTR mode can be more secure <b>if properly used</b>, it has some different pitfalls. Because some of these CTR mode pitfalls are not present in ECB, some previously secure code might become insecure.
<p>There are some more changes, e.g. better entropy of key (higher effective key size). The old Crypto library <a href="https://github.com/playframework/playframework/issues/2879">uses first 16 characters of a string key</a> (i.e. <code>application.secret</code> by default) as a key, which is wrong, especially when the string (<code>application.secret</code>) is hexadecimal (⟹ 64b effective key size) or so.
<p>The new Crypto uses a hash function for deriving the key, which is much better. A PKDF would be even better for some purposes, but even now I don't see any significant issue with the new key derivation approach. (But it depends on usage! I'll discuss it later.)
<h2>What might be wrong for some usages?</h2>
<p>Unlike ECB, the CTR mode is a stream cipher mode. Stream ciphers have usually two issues that are not present in ECB mode:
<ol>
<li>Malleability. This one is not specific for stream ciphers, but stream ciphers are ultimately malleable. An adversary without the secret key can modify the cryptotext to mean something different. For more details on malleability, see <a href="https://en.wikipedia.org/wiki/Malleability_%28cryptography%29#Example_malleable_cryptosystems">the related Wikipedia article</a>.
<li>Insecure when a key+IV is reused. If you, use one key with the same IV twice, some details about both plaintexts are leaked, potentially revealing both of them. See <a href="https://en.wikipedia.org/wiki/Stream_cipher_attack#Reused_key_attack">Reused key attack</a> for more details.
</ol>
<p>The malleability can be mitigated by authenticated encryption, but Play! does not it implicitly. This would be correct for a completely new API if this was mentioned in the documentation. In Play!, the Crypto API is not completely new (so one might consider it as a BC break with some bad security implications) and the documentation even don't mention it.
<p>The key+IV resuse attack (“keystream reuse attack”) can be mitigated by using random unpredictable IVs. The documentation is unclear about usage of IVs. It just states that both using an IV and not using an IV is supported, but it is not clear what is the default.
<h2>What else is wrong with the documentation?</h2>
<p>I've found also some relict in documentation, ECB doc relicts. It is a minor issue: The documentation just states that some usage is insecure, although the issue is not true for CTR mode. See <a href="https://github.com/playframework/playframework/issues/4407#issuecomment-106936942">my comment on the related GitHub issue</a>
<h2>What/who is the Play! Crypto library intended for?</h2>
A proper mode of operation must be selected for ensuring desired level of security for desired type of usage. There are various properties that can be considered neither good nor bad without defining the correct usage. I am also not sure if the library is intended for crypto-newbies
(it is easy to use it wrong for them) or crypto-experts (they would want to choose the mode of operation themselves).
<p>In addition to two CTR-related issues mentioned above, it is questionable if PKDF should be used. It is unneeded in some cases (e.g. if the key is <code>application.secret</code>), but it is welcome if you are using a potentially weak password (e.g. user password), because they slow bruteforce attacks down by some factor.
<p>Well, I admit one can configure the mode. But I don't think that global config (i.e. <code>play.crypto.aes.transformation</code> config option) is a good idea. It is generally unclear what code is affected by changing this property. Is some library code affected? I don't know until I analyze all the libraries I use.
<p>I'd like to hear answer to the question from the developers. It should be also noted in the documentation. Without it, one might assume that almost any behavior is OK.
<h2>Why do I disclose it publicly?</h2>
<p>I respect responsible disclosure objective, but I don't think that keeping this issue private makes any sense now, especially when 2.4 is fresh. I feel it is better to warn programmers that they should think twice between 2.3 ⟶ 2.4 migration if they are suing Play! Crypto library.
<h2>Discussion</h2>
<p>If you wish to discuss it, you should do so in <a href="https://groups.google.com/forum/#!topic/play-framework/Pao8MnADAqw">the discussion thread on play-framework user group</a>. Comments under this article are closed in order to prevent two separate discussions.Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.comtag:blogger.com,1999:blog-7247548023065923707.post-65811730408967938802015-02-23T07:31:00.000-08:002015-02-23T07:31:56.419-08:00Password protection for purchases in Google Play can be bypassed. (And some other issues.) How to defend yourself?<p>Google Play allows you to buy apps, books and music. Once you enter a payment method, (e.g. payment card or carrier invoice), it is saved, so you can use the same payment method in the next purchase. Google offers password protection for that. It sounds great, but it can be bypassed. We actually don't have an additional security, but an unkept promise, which may have the opposite effect – the user might rely on the security enhancement, which does not work correctly.</p>
<p>There is an extra issue for users with multiple Android devices. The thief of one device can install apps on the other devices of that user. I'll also mention another related issue, but the last one is fixed.</p>
<p><strong>This is just a warning about security issues, not a manual for the abuse.</strong></p>
<p>This article is a translation (with minor modifications) of my recent article. I am sorry for the delay, I hoped to release this article sooner.</p>
<h2>Google will not fix it.</h2>
<p>Well, there were also some related issues in two-factor authentication, but Google fixed them quickly after they were reported. Google however refused to fix two Google Play related issues I will talk about.</p>
<p>By the way, Google has paid a bug bounty and listed me in the <a href="https://www.google.com/about/appsecurity/hall-of-fame/reward/">Hall of Fame</a>, but they said they were happy with the current situation.</p>
<h2>Where is the merit of the issue?</h2>
<p>Google Play allow us to purchase some content using the Google Play application for Android, which is usually password protected. I haven't looked in the details of password verification, but I hope this is designed correctly. However, this is not the only way I can buy an item in Google Play. I can also use the web interface on <a href="https://play.google.com/">https://play.google.com/</a>. The web interface does not require the password for buying an item.</p>
<p>Moreover, the attacker does not need the victim to be logged in a Google account in a browser on the stolen device. Once the Google account is present in the device (which very likely due to the connections to the Android ecosystem), we can use the account also in a web browser. We just need a tool, which is often pre-installed in Android devices. I am talking about <a href="https://play.google.com/store/apps/details?id=com.android.chrome">Google Chrome for Android</a>, which suggest the attack when you are on the Google login page:</p>
<p><a href="http://1.bp.blogspot.com/-fX_5rJeorAk/VL6V_gxilxI/AAAAAAAAAYw/mkyzvXmzwxs/s1600/google-sign-in.png" imageanchor="1" ><img border="0" src="http://1.bp.blogspot.com/-fX_5rJeorAk/VL6V_gxilxI/AAAAAAAAAYw/mkyzvXmzwxs/s400/google-sign-in.png" /></a></p>
<p>Well, it is unclear from the screenshot if there is a real attack possible. For example, Google might consider this login method to be something inferior, so Google would ask for password when buying an application. This is, however, not the case. Google allows you to use this passwordless login for buying apps without knowing the password.</p>
<p>There is one more issue. The attacker can install any application (paid or free) on other devices of the victim. For example, If you have your tablet stolen, the thief might abuse this feature for spying your phone.</p>
<h2>How could Google fix it?</h2>
<p>I've suggested some countermeasures:</p>
<ul>
<li>Remove the passwordless login feature. This would surely mitigate these attacks, but it costs too much of user convenience and there are some more convenient ways.</li>
<li>If user uses the passwordless login, the Google Play webapp would require the user's password for any application installation request. If user logs in with the password, Google would allow installing apps without entering the password again.</li>
<li>The password would be required always when the user purchases some item in Google Play.</li>
<li>Some combination of the above. My preferred approach is asking for password when user buys an item (regardless the authentication method) and asking for password when installing any application (either paid or free) on a remote device using the passwordless login feature. However, when user uses, say, Firefox for Android, so he can log in only with the password-based authentication, he would allow the attacker to install any free application on other devices of the victim.</li>
</ul>
<h2>How can I defend myself?</h2>
<p>First, when you lose an Android device, you should change your Google account password as soon as possible. (I also recommend changing all the passwords of other affected accounts, not just the Google account.) This performs a remote logout on the Android devices.</p>
<p>Screen lock might help, but it can be bypassed in general. In some cases, it might be very easy, e.g. on phone with enough access to recovery. In some cases, it might be hard, but one can disassemble the phone and directly access the flash memory. (Well, this extreme case is hard and might not be worth the cost.) Nevertheless, screen lock is likely to discourage some people.</p>
<p>Remote wipe tools can also help, but they should not be a primary countermeasure for this issue. First, I advise you to change the password regardless of remote wipe tools, because you can never be sure if you have it done in time. Moreover, I am not aware of any secure delete functionality in Android remote wipe tools. Of course, when you change the password, there might be still some other reasons for doing a remote wipe, so I don't suggest remote wipe tools to be useless. They are useful, but you should not rely on them too much…
<p>And of course, the best countermeasure is not having your device lost :)</p>
<h2>Issues outside the Google Play</h2>
<p>Of course, there are some other parts Google ecosystem affected by passwordless login.</p>
<h3>Two-factor authentication</h3>
<p>There are some apps (e.g. Android) not supporting the two-factor authentication, so Google allows you to <a href="https://security.google.com/settings/security/apppasswords">generate an application-specific password for these purposes</a>. In order to generate an application-specific password, you have to re-enter your password, which is good. However, it used to be enough to use the password-less authentication in Android for generating new application-specific password. This could be abused by a thief of an Android device for having an access to the account even after the user changes the password.</p>
<p>Well, Google sends an e-mail when user generates a new application-specific password, but the attacker is very likely to have access to his GMail account, so he can easily delete it.</p>
<p>It is worth noting that this used to be also an issue for Android non-users. An adversary was able to abuse this feature for cloning an application-specific password and use the cloned one even after the old one is revoked. Some social engineering (like choosing a good name for it) might be needed for successful attack.</p>
<p>Fortunately, this issue was fixed quickly after I reported it.</p>
<h3>Access to history and some other more protected data</h3>
<p>Google tries to protect some data more than others. For example, when you go to <a href="https://history.google.com/">https://history.google.com/</a>, Google is likely to require your password even if you are logged in. The passwordless login seems to weaken this extra protection. Google sees this to be just a feature, not a bug. You can see the history data by using Google Search app. So, mobile devices (including tablets) seem to have a different security policy from desktops. It might be confusing, but we should be aware of it.</p>Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com0tag:blogger.com,1999:blog-7247548023065923707.post-53815329543463801952015-01-20T09:55:00.000-08:002015-01-21T13:54:13.394-08:00V Google Play lze obejít ochranu nákupů heslem. Jak se bránit?<p>Google Play umožňuje nakupovat aplikace, knihy a hudbu. Jakmile jednou vyplníte způsob platby (např. platební karta nebo vyúčtování operátora), uloží se a můžete toho využít při přístím nákupu. Od určité doby se Google rozhodl ochránit tyto nákupy heslem. Tato snaha je určitě chvályhodná, pokud by to ale nešlo obejít. Takto máme místo zabezpečení spíše nesplněný slib, který může mít spíše opačné účinky – uživatel se může na zabezpečení spoléhat, to ale nebude fungovat.</p>
<p>Další problém nastává, pokud máte více zařízení s Androidem. Případný zloděj jednoho z těchto zařízení Vám může instalovat aplikace na jiné zařízení bez Vašeho vědomí.</p>
<p><strong>Článek slouží pouze jako varování před bezpečnostními problémy, ne jako návod na zneužití chyby.</strong></p>
<h2>Google chybu opravovat nechce.</h2>
<p>Přesněji řečeno, nechce opravovat tu část v Google Play. Problém postihoval i například dvoufaktorovou autentizaci, ale tam to již Google opravil velmi brzy po nahlášení. O dalších dopadech ale později.</p>
<p>Zajímavé je, že mi Google vyplatil odměnu za nalezení bezpečnostního problému a zařadil mě do <a href="https://www.google.com/about/appsecurity/hall-of-fame/reward/">síně slávy</a>, ale přesto to opravovat nechtějí.</p>
<h2>Kde je problém?</h2>
<p>Na Google Play můžeme nakupovat přes aplikaci pro Android. Ta chce heslo. Způsob, jak jej ověřuje jsem nezkoumal, předpokládám ale, že jej pošle serveru a že (snad) server tudy nedovolí nákup bez potřebného ověření. To ale není jediný způsob, jak mohu nakoupit v Google Play. Druhá možnost je navštívit <a href="https://play.google.com/">https://play.google.com/</a> a nakoupit přes webové rozhraní. Webové rozhraní nepožaduje nákup znovu potvrdit heslem.</p>
<p>Možná se zdá, že útočník potřebuje uživatele, který zůstal v prohlížeči přihlášený ke svému účtu u Google. Není tomu tak. Jakmile v telefonu je účet Google (což obvykle je, pokud chce uživatel používat Google Play apod.), můžeme se s ním totiž přihlásit i ve webovém prohlížeči. Stačí nám na to jednoduchý nástroj, který je navíc v mnohých telefonech a tabletech již předinstalovaný. Jedná se o <a href="https://play.google.com/store/apps/details?id=com.android.chrome">Google Chrome pro Android</a>. Je to velmi jednoduché, stačí navštívit stránku s přihlášením a Chrome Vám řekne, co máte udělat:</p>
<p><a href="http://1.bp.blogspot.com/-fX_5rJeorAk/VL6V_gxilxI/AAAAAAAAAYw/mkyzvXmzwxs/s1600/google-sign-in.png" imageanchor="1" ><img border="0" src="http://1.bp.blogspot.com/-fX_5rJeorAk/VL6V_gxilxI/AAAAAAAAAYw/mkyzvXmzwxs/s400/google-sign-in.png" /></a></p>
<p>Teoreticky v této chvíli útočník ještě nemá nutně vyhráno. Google by mohl brát přihlášení touto cestou jako „méněcenné“ a pro nákup přesto chtít heslo. Na svém vlastním účtu jsem si ale vyzkoušel, že zde Google heslo nevyžaduje.</p>
<p>Další problém je, že tudy lze instalovat aplikace (jak placené, tak ty zdarma) na libovolné zařízení spojené s tímto účtem Google. Pokud například ztratíte telefon, zloděj by mohl této vlastnosti zneužít ke špehování Vašeho telefonu.</p>
<h2>Jak by to mohl Google opravit?</h2>
<p>Googlu jsem navrhoval několik variant:</p>
<ul>
<li>Odstranit automatické přihlašování. Účinné řešení, ale zbytečně radikální.</li>
<li>Pokud se uživatel přihlásil přes automatické přihlášení, chtělo by se po něm při instalaci aplikace přes webový Google Play heslo. Pokud se uživatel přihlásil zadáním přihlašovacích údajů, heslo by se po něm nechtělo.</li>
<li>Heslo by bylo vyžadováno na každý nákup, ale ne pro aplikace zdarma.</li>
<li>Nějaká kombinace výše uvedených pravidel. Preferoval bych, kdyby se Google ptal na heslo jak při nákupu jakékoli aplikace i přes webové rozhraní (i kdyby byl uživatel přihlášen na počítači přes jméno a heslo), tak v případě automatického přihlášení při instalaci jakékoli aplikace (třeba i aplikace zdarma) na vzdálené zařízení. Nicméně, pokud se uživatel z nějakého důvodu přihlásí ke svému účtu na mobilu v jiném prohlížeči (a tedy nutně použije heslo), třeba jen kvůli vyhledávání, umožní to útočníkovi instalovat neplacené aplikace na jiná zařízení uživatele.</li>
</ul>
<h2>Jak se bránit?</h2>
<p>Zaprvé, při ztrátě telefonu nebo tabletu s Androidem co nejdříve změnit heslo k účtu Google. (Je samozřejmě vhodné změnit i hesla k ostatním účtům.) Tím ztracený telefon nebo tablet vzdáleně odhlásíte.</p>
<p>Samozřejmě může pomoci nějaký i zámek obrazovky, ten ale v principu lze obejít. Někdy to lze snadno (extrém je rootnutý telefon se zapnutým USB laděním, ale to už dnes není tak jednoduché zneužít – novější Android požaduje povolit klíč počítače), jindy obtížněji (teoreticky vždy můžeme telefon rozebrat a dostat z něj třeba flash paměť, otázka je, jestli to stojí za to). Každopádně zámek obrazovky telefonu může někoho odradit.</p>
<p>A samozřejmě ze všeho nejlepší je telefon ani tablet neztratit :)</p>
<h2>Týká se to pouze Google Play?</h2>
<p>Jak je možná zřejmé, tento problém se netýká výhradně Google Play, ale měl trošku více dopadů. Dříve jsem o dalších dopadech mlčel, protože by mohly naznačit podstatu chyby.</p>
<h3>Dvoufaktorová autentizace</h3>
<p>Ne všechny aplikace podporují dvoufaktorovou autentizaci, takže Google umožňuje <a href="https://security.google.com/settings/security/apppasswords">si nechat vygenerovat speciální heslo, které budete používat v jedné konkrétní aplikaci</a>. Google to zcela správně ochránil heslem. Jenže, jak možná tušíte, nebylo potřeba znát heslo. Stačilo mít účet Google v Androidu a bylo možné podobnou cestou generovat nová speciální hesla. Google sice uživateli poslal e-mail, že vygeneroval nové <em>application-specific password</em>, ale to nemuselo být moc platné, když útočník měl typicky i přístup k jeho e-mailu a mohl jej smazat…
<p>Stojí za zmínku, že bylo možné takto „rozmnožit“ tato speciální hesla. Pomocí speciálního hesla je možné se přihlásit do Androidu. S přihlášením do Androidu potom bylo možné výše uvedeným způsobem získat nové speciální heslo.
<p>Celý tento problém s dvoufaktorovou autentizací ale Google opravil brzy po nahlášení.
<h3>Přístup k historii a dalším datům s vyšší ochranou</h3>
<p>Když jdu například na <a href="https://history.google.com/">https://history.google.com/</a>, Google po mě chce zopakovat heslo. Chápu to tak, že historie vyhledávání patří mezi data, která si podle Google zasluhují vyšší ochranu, a proto vyžaduje zadat heslo znovu. Automatické přihlášení v Google Chrome pro Android ale tuto zvýšenou ochranu narušuje. Jenže to není bráno za slabinu, protože v Androidu lze tuto historii prohlížet i jinudy. Rozumím, že bezpečnostní zásady na desktopu se mohou lišit od těch na mobilu. Je to sice trošku matoucí, ale chápu to.</p>Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com0tag:blogger.com,1999:blog-7247548023065923707.post-31562689336204725562015-01-18T07:16:00.000-08:002015-01-18T07:16:52.725-08:00Co má Dvorakova klávesnice společného s morseovkou?<p>Zamysleli jste se někdy nad vztahem mezi Drovakovou klávesnicí a Morseovou abecedou? Naučit se Dvorakovu klávesnici by mohlo být o trošku jednodušší se znalostí morseovky. Obojí vychází z frekvence písmen v angličtině. V morseovce se častá písmena zapisují kratší posloupností signálů, u Dvoraka byla nejčastější písmena umístěna na prostřední řádek. (Dvorak nicméně sledoval i jiné vlastnosti, jako posloupnosti znaků nebo střídání levé a pravé ruky. V tomto článku to neřeším.)
<p>Všechna písmena v prostředním řádku Dvorakovy klávesnice kromě „H“ se v morseovce zapisují nejvýše třemi signály. Písmeno „H“ ale není až tak zásadní výjimka, to se zapisuje čtyřmi krátkými signály (<code>....</code>).
<p>Takovéto pravidlo je trošku hrubé, protože nerozlišuje mezi délkou krátkých a dlouhých signálů. Například M (<code>––</code>) trvá dva signály, zatímco H (<code>....</code>) trvá čtyři signály. Pokud bychom ale uvážili délku signálů, zjistíme, že trvají stejně: Podle aktuálního doporučení trvá krátký signál jednu jednotku času, dlouhý signál trvá tři jednotky času a pauza mezi signály v rámci písmena trvá jednu jednotku času. Odvysílání „dlouhého“ písmena H (<code>....</code>) tak trvá 7 jednotek času (4 krátké signály a 3 pauzy mezi nimi), zatímco odvysílání „krátkého“ písmena M (<code>––</code>) trvá také 7 jednotek času (2 dlouhé signály po třech jednotkách času a jedna pauza mezi nimi).
<p>Pokud bychom chtěli vytvořit opačné pravidlo, tedy že písmena do tří signálů mají být v prostředním řádku a ostatní písmena mají být v horním nebo dolním řádku, musíme mít bohužel více výjimek. Morseovka má celkem 14 písmen, která se zapisují nejvýše třemi signály. Dvorakova klávesnice má ale pouze 10 znaků v prostředním řádku. Nutně tak získáme aspoň 4 výjimky. Kvůli písmenu „H“ ale máme celkem 6 výjimek: v horním řádku G (<code>––.</code>) a R (<code>.–.</code>), v prostředním řádku H (<code>....</code>) a ve spodním řádku K (<code>–.–</code>), M (<code>––</code>) a W (<code>.––</code>).
<p>Zajímavé ale je podívat se na znaky, které „měly“ být v prostředním řádku (protože jejich zápis v morseovce je dostatečně krátký), ale nedostaly se tam. Jde o písmena G (<code>––.</code>), R (<code>.–.</code>), K (<code>–.–</code>), M (<code>––</code>) a W (<code>.––</code>). Čtyři z těchto pěti písmen se jsou složeny ze tří signálů, u tří z nich navíc převažují dlouhé signály. Z méně než tří signálů se zde skládá pouze písmeno M (<code>––</code>), ale to se skládá ze dvou <strong>dlouhých</strong> signálů. Trošku se divím, že na seznamu výjimek není písmeno O (<code>–––</code>), které se skládá se tří dlouhých signálů a je tedy nejdelší.
<h2>Jak je na tom QWERTY/QWERTZ?</h2>
<p>Rozložení QWERTY bylo vyvinuto tak, aby bylo psaní na něm co nejpomalejší, protože psací stroje tehdy nezvládaly rychlé písaře. Pokud bychom se pokusili aplikovat pravidlo o morseovce na QWERTY (příp. QWERTZ, ale tam to vychází prakticky stejně), dostali bychom mnohem více výjimek:
<p>V prostředním řádku se nachází písmena F (<code>..–.</code>), H (<code>....</code>), J (<code>.–––</code>) a L (<code>.–..</code>), která se skládají z více než tří signálů. Prostřední řádek QWERTY má pouze 9 písmen, z toho skoro polovina (4) porušuje naše pravidlo.
<p>Pokud chceme 14 písmen do tří signálů v morseovce umístit do řádku s devíti klávesami, minimálně pět písmen se nám tam nevleze. Další výjimky nám udělají zmíněná písmena F (<code>..–.</code>), H (<code>....</code>), J (<code>.–––</code>) a L (<code>.–..</code>), která vytlačí čtyři jiná písmena. Dohromady by mělo být 5+4+4 = 13 výjimek.
<p>A skutečně. Horní řádek má písmena W (<code>.––</code>), E (<code>.</code>), R (<code>.–.</code>), T (<code>–</code>), U (<code>..–</code>), I (<code>..</code>) a O (<code>–––</code>), tedy celkem sedm 7 na 10 písmen. Prostřední řádek jsme si ukázali, ten má 4 výjimky na 9 písmen. Ve spodním řádku potom nesedí N (<code>–.</code>) a M (<code>––</code>), tedy nesedí dvě ze sedmi písmen. Máme tedy celkem 7+4+2 = 13 výjimek.
<p>To je určitě mnohem víc, než kolik má Dvorak. Je to více než dvojnásobek. Na QWERTY tvoří výjimku přesně polovina písmen, což zhruba odpovídá náhodě. Pokud byla ale QWERTY navržena tak, aby se na ní psalo maximálně neefektivně, není to málo? Zřejmě neefektivita QWERTY měla spočívat v něčem jiném než v rozmístění kláves do řádků. Na QWERTY například převládá psaní levou rukou. Dost možná bychom ale našli i nějaký méně efektivní layout než QWERTY.
<h2>Který layout používám?</h2>
<p>Na závěr dodám, že se nechystám přecházet na Dvorakovu zjednodušenou klávesnici. Rád jsem nahlédl do jejího návrhu, určitě má svoje výhody, ale byla by to velmi náročná změna – musel bych změnit layout na tabletu, mobilu a notebooku zároveň. Navíc na notebook by se pro začátek hodily přelepky na klávesnici a na mobilu by to bylo ještě horší – mám výsuvnou klávesnici a přelepky bych nejspíš sloupnul při otevírání a zavírání mobilu.
<p>Používat Dvorakovu klávesnici na jednom zařízení a QWERTY na druhém by bylo obtížné. Pamatuju si, jak těžké bylo používat současně QWERTY (na mobilu) a QWERTZ (na notebooku). Časem jsem došel k tomu, že jsem to musel sjednotit a na notebooku jsem přešel na českou QWERTY. Ta byla celkem fajn, dokud jsem nepotřeboval psát na školním počítači s Windows, kde se česká QWERTY od české QWERTZ liší mnohem více než pouze pozicí Y a Z. Nedávno jsem zkusil <a href="http://xakru.com/cshack/">česko-americkou klávesnici CShack</a>, opravil pár chyb a mírně si ji upravil.Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com0tag:blogger.com,1999:blog-7247548023065923707.post-72137624064316185792014-10-04T03:45:00.000-07:002014-10-04T03:45:55.566-07:00Jak zpracovávat chyby?<p>V programu může běžně nastat nějaká chyba, kterou bychom měli zpracovat. Výjimky nejsou jediná možnost, jak to řešit. Co víc, výjimky nemusejí být vždy tou nejlepší možností.
<p>Dost totiž záleží na stylu programování. Nicméně dnes se styly programování často mísí, takže to není tak jednoznačné. Většinou dnes uplatníme od každého přístupu něco.
<h2>Imperativní přístup</h2>
<p>V imperativním kódu budou výjimky nejspíše správná cesta. Pokud volám funkci (proceduru), která má něco provést, ale nevrací žádný výsledek nebo mě její výsledek nemusí zajímat, je dost velké riziko, že zapomenu zkontrolovat výsledek. Dopady mohou být někdy fatální. Pokud se nepodaří změnit adresář, mohu vymazat třeba úplně jiná data. Pokud se nepodaří zkopírovat data, může dojít k jejich ztrátě. Pokud se nepodaří volání setuid, program může běžet dál s vyšším oprávněním, jako to bylo v případě <a href="https://thesnkchrmr.wordpress.com/2011/03/24/rageagainstthecage/">rageagainstthecage</a>. V takovýchto případech je lepší program nechat spadnout než dělat, že se nic špatného nestalo.
<p>Bylo by fajn, kdyby se programátor již při kompilaci dozvěděl, že něco zapomněl ošetřit. V Javě jsou k tomuto účelu <a href="https://en.wikibooks.org/wiki/Java_Programming/Checked_Exceptions">checked exceptions</a>. Používají se v situacích, kdy si programátor nemůže být jist, že operace proběhne bez chyby. Typicky jde o I/O. Naopak třeba u dělení by bylo otravné pokaždé muset kontrolovat, jestli nedošlo k ArithmeticException, ale zase programátor má šanci různými způsoby zajistit, aby nedělil nulou. Uznávám, že okolo checked exceptions je jistá kontroverze, a že nejspíš kvůli tomu je nemá moc jazyků. Nalezení hranice mezi checked a unchecked mi kupodivu v praxi většinou (ne vždy) nepřišlo jako až takový problém, ale třeba podpora v lambda funkcích je docela peklo. Dobře se to projevuje v Javě 8. Zkuste schválně upravit kód <code>urlStringList.map((url) -> new java.net.URL(url))</code> do funkční podoby.
<h2>Funkcionální přístup</h2>
<p>Mám dvě zprávy, jednu špatnou a druhou dobrou.
<p>Špatná zpráva je, že v čistě funkcionálních jazycích není chytání výjimek zrovna běžná záležitost. Například v Haskellu se snad nedají výjimky chytat mimo I/O monády. Důvodů pro to může být více, třeba určité narušení čistoty vzhledem k línému vyhodnocování. Je tedy celkem OK vyhodit výjimku třeba u dělení nulou, což mohl programátor snadno ošetřit různými způsoby. Na druhou stranu je méně vhodné házet výjimku třeba u neexistujícího klíče mapy.
<p>Dobrá zpráva je, že funkcionální jazyky přicházejí s něčím v jistých ohledech lepším, co by mohlo nahradit checked exceptions. Pokud výraz nemění stav, určitě nás bude zajímat jeho návratová hodnota. Jinak je zbytečný. (Výjimkou může být snad jen sleep.) V návratové hodnotě bude tedy buď výsledek, nebo chyba. Když chce programátor číst hodnotu, musí zároveň ošetřit i chybu. Podstatné je, že by nemělo jít o uspořádanou dvojici <code>(errorCode, value)</code>, protože tady je velmi snadné přečíst pouze value, i pokud došlo k chybě. Spíše by mělo jít o typ <code>Either[ErrorType, ReturnValueType]</code>. V případě úspěchu se vrátí <code>Right(value)</code>, v případě chyby se vrátí <code>Left(errorDescription)</code>.
<p>Možná to vypadá strašně komplikovaně, ale není. Funkcionální jazyky mívají pattern matching, který to usnadní. Ukážu příklad. Dejme tomu, že budeme mít celočíselné dělení <code>safeDivision</code>, které skončí chybou nejen v případě dělení nulou, ale i v případě nepřesného výsledku. Tedy <code>safeDivision(9, 3)</code> vrátí <code>Right(3)</code>, ale <code>safeDivision(9, 2)</code> vrátí <code>Left(InaccurateResult)</code> a <code>safeDivision(9, 0)</code> vrátí <code>Left(DivisionByZero)</code>. Budeme psát funkci, která má prezentovat výsledek uživateli. Její tělo může vypadat třeba takto:
<pre class="brush: scala">safeDivision(numerator, denominator) match {
case Right(result) => s"$numerator/$denominator = $result"
case Left(error) => "Can't divide"
}</pre></code>
<p>Nebo můžeme vypsat i konkrétní chybu:
<pre class="brush: scala">safeDivision(numerator, denominator) match {
case Right(result) => s"$numerator/$denominator = $result"
case Left(InaccurateResult) => "Can't divide accurately"
case Left(DivisionByZero) => "Can't divide by zero"
}</pre>
<p>Daly by se vymýšlet i složitější příklady, kdy bychom napsali nějaký výraz pro prvek JSONu (například <code>json.a.b.c.d.as[String]</code>) a na konci bychom zjistili buď hodnotu, nebo srozumitelnou chybovou hlášku (např. "a.b.c je null"). Toto by se přes výjimky dělalo obtížně.
<p>Nabízí se otázka, kdy ve funkcionálním programování použít výjimky a kdy návratové hodnoty. Výhoda výjimek je, že nezaplevelují kód, pokud ta chyba nemůže nastat, například u <code>foo/(1+x*x)</code> nenastane dělení nulou (pokud je vyřešeno číselné přetečení). Jejich nevýhoda je, že se na jejich zpracování snadno zapomene a že se hůře zpracovávají. Někdy se osvědčilo nabídnout dvě funkce, kdy jedna je optimistická (předpokládá bezchybný průběh, jinak hodí výjimku) a druhá pesimistická (předpokládá, že může nastat chyba, a vrátí Either nebo něco podobného). To může být užitečné třeba u mapy (slovníku), kdy záleží na použití, co se více hodí.
<h2>Který použít?</h2>
<p>Rozmýšlíte se, jestli použít funkcionální přístup, nebo imperativní? Nenechte se zmást jazykem. Máme imperativní jazyky s funkcionálními prvky (Ruby, Java, PHP), máme čistě funkcionální jazyky s I/O monádami (Haskell) a máme nečisté funkcionální jazyky (Scala, LISP). Hranice jsou někdy diskutabilní, záleží dost na kultuře. Co tedy s tím?
<p>Pokud by chyba v dobře napsaném programu neměla nastat, pak budou nejspíš nejlepší výjimky. Nutit programátora ošetřovat chybu, která nemůže nastat, těžko povede k něčemu dobrému. V lepším případě ji sám konvertuje na výjimku, v horším případě ji nějak bude ignorovat.
<p>Funkcionální přístup se dobře hodí u výrazů, které nemají žádný side effect. Tam těžko zapomenu na kontrolu návratové hodnoty. Zbývá pouze otázka, zda zvolený jazyk nabízí vhodné prostředky pro tento přístup.
<p>Diskutabilní bude použít funkcionální přístup, pokud sice mám side effect, ale vracím nějakou zajímavou návratovou hodnotu.
<p>Pokud je ale volání čistě o tom, abych udělal nějaký side effect (změna adresáře, setuid, ...), potom je dost riskantní se spoléhat na ověření návratové hodnoty. Jsme čistě imperativní, výjimka je tedy skoro jasná volba, pokud to jazyk umožňuje. Diskutovat lze možná o tom, jestli má jít o checked exception, nebo unchecked exception.
Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com4tag:blogger.com,1999:blog-7247548023065923707.post-71415188119606595112014-02-24T12:59:00.000-08:002014-02-24T13:08:59.119-08:00Nokia s Androidem pod Microsoftem? Ono to začíná dávat smysl.<p>Nejdřív Microsoft, nepřesně řečeno, „koupil Nokii“. Potom se objevily spekulace o Nokii s Androidem, které byly v Barceloně potvrzeny. A do toho se objevuje spekulace, že by měl Microsoft umožnit běh aplikací pro Android na Windows. Dává vám to smysl? Začínám tušit, co se chystá.</p>
<div class="disclaimer">Tento článek je spekulace. Snažil jsem se ale fakta odlišit od domněnek.</div>
<h2>Telefony s Androidem byly skutečně představeny</h2>
<p>Jasný fakt je, že <a href="http://mobil.idnes.cz/nokia-je-zpet-predstavila-atraktivni-smartphony-fbe-/mob_nokia.aspx?c=A140224_101422_mob_nokia_jm">Nokia smartphony s Androidem skutečně představila</a>. Jde o levnější smartphony, mají systém upravený do vzhledu Windows Phone a nemají Google Play. Uživatel s telefonem dostane prostor v úložišti OneDrive od Microsoftu. Dokonce v systému lze najít označení „Nokia X software platform 1.0.1“, jako by to ani nebyl Android. Samo o sobě některé věci, zejména absence Google Play, znějí jako šílenost, ale s ostatními událostmi to dohromady začne dávat smysl.</p>
<h2>Tyto telefony nejspíš bude vyrábět Microsoft</h2>
<p>Ještě šíleněji může na první pohled znít, že tyto telefony bude nejspíš vyrábět Microsoft. Microsoft totiž <a href="https://www.microsoft.com/en-us/news/press/2013/sep13/09-02announcementpr.aspx">koupil mobilní divizi Nokie</a>. (Nekoupil celou firmu Nokia – ta bude stále existovat a bude dělat mapy Here, bude mít <a href="https://en.wikipedia.org/wiki/Nokia_Solutions_and_Networks">Nokia Solutions and Networks</a> a další.) Zdroj už přesně nevím, ale od převzetí mobilní divize (očekává se první čtvrtletí 2014) do zhruba konce roku 2015 nebude, tuším, Nokia podle dohody smět vyrábět vlastní telefony. Těžko tedy můžeme předpokládat, že tyto telefony bude dělat Nokia. Spíš to převezme Microsoft s celou divizí Devices & Services.</p>
<p>Teoreticky by Microsoftu snad nemělo nic bránit v zahození těchto telefonů. Hádám ale, že se tak nestane. Spíše to vypadá, jako by vývoj těchto telefonů začal na pokyn Microsoftu.</p>
<h2>I když je bude vyrábět Microsoft, mohou ještě mít značku Nokia</h2>
<p>Nenechte se zmást, i když Nokia jako taková nebude patřit Microsoftu a bude stále mít svoji původní značku, dohodla se s Microsoftem na tom, že v některých případech může použít její značku. Můžeme se hádat, jestli „current Nokia mobile phone products“ napsané 3. 9. 2013 zahrnuje i telefony představené v roce 2014. Tisková zpráva nicméně není smlouva a právníci nejspíš pro skutečnou dohodu udělali přesnější formulaci. Dávalo by smysl, kdyby Microsoft nemusel rebrandovat všechny předchozí telefony a značku Nokia vypustil až u těch nových.</p>
<h2>Microsoft prý snad umožní běh aplikací pro Android na Windows</h2>
<p>Objevují se spekulace, že <a href="http://www.theverge.com/2014/2/12/5404098/microsoft-considering-android-apps-on-windows">Microsoft umožní na Windows spustit aplikace pro Android</a>. Nejspíš ale pouze ty, které sám schválí ve Windows Store. Instalace APK ze souboru tak asi možná nebude, Google Play nečekejte vůbec. Myslím, že <strong>podpora aplikací pro Android na Windows sice bude, ale bude to s ní trošku vlažnější, než to na první pohled může vypadat</strong>.</p>
<p>Zaprvé, těžko tu bude 100% kompatibilita. Některé aplikace pro Android mohou být vázány nějakým způsobem na Linux a to se Microsoftu asi nebude chtít řešit. (To se mimochodem nechtělo řešit ani BlackBerry, které to s aplikacemi pro Android myslí asi o něco vážněji.) Jiné aplikace zase používají Google Play Services, které tu bez dohody s Googlem nebude. (A pokud chce Microsoft schvalovat aplikace a mít provize z prodeje, dohoda tu asi nevznikne.) Microsoft může místo Google Play Services nabídnout alternativu s podobným či stejným API, ale třeba podporu push notifikací bude muset vyřešit vývojář i na serveru. Opět tu můžeme vidět do jisté míry paralelu s BlackBerry OS 10, kde též řešili podporu aplikací pro Android.</p>
<p>Zadruhé, možná ani po „jailbreaku“ nepůjde instalovat vlastní APK. Microsoft totiž nemusí dát do Windows obecný runtime pro aplikace pro Android. Možná bude mít pouze nějakou on-line službu, která aplikace pro Android (s nějakými omezeními) konvertuje pro Windows Phone. K této službě se mohou vázat různá omezení, která i v případě odemčeného telefonu zabrání nebo aspoň významně ztíží instalaci cizí aplikace jako APK.</p>
<p>Na druhou stranu, možná bychom nemuseli čekat na Windows 9, jak některé zdroje tvrdí. Touto cestou může Microsoft nabídnout tyto aplikace i pro starší Windows. V extrémním případě by věškeré potřebné součásti byly přímo v té konvertované aplikaci.</p>
<p>Microsoft to nejspíš dělá zejména kvůli Windows Phone. Smysl to ale může mít i kvůli desktopovým Windows – pro ty je sice aplikací dost, ale asi málo z nich je přizpůsobených pro dotykové ovládání. Pokud budou mít vývojáři možnost se věnovat hlavní platformě (Android) a s minimem práce ty aplikace dát i na Windows Store, budou tak nejspíš činit mnohem ochotněji a Microsoft by mohl tak rychleji zaplnit nedostatek aplikací.</p>
<h2>Z Nokia X software platform může být „Windows Phone Lite“</h2>
<p>Pokud ale bude podpora aplikací pro Android na Windows Phone, začínají dávat smysl telefony s Androidem. Zvláště když jsou upraveny tak, aby to Android moc nepřipomínalo a bude mít jiný obchod s aplikacemi. Navíc s nimi dostane člověk 10GB v OneDrive od Microsoftu. Jde o lowendy, které nebudou příliš konkurovat Windows Phone. Zatím snad vše nasvědčuje tomu, že Windows Phone budou pro Microsoft hlavním operačním systémem a upravený Android bude pro lowendy. Očekávám, že nastane zhruba toto:</p>
<ul>
<li>Pokud budu chtít aplikaci pro Android vystavit na obchodu Nokie (nebo Microsoftu?), bude muset splňovat stejná omezení jako pro Windows Marketplace. (Možná se najdou výjimky – například aplikace, které mají speciální verzi pro Windows Phone.)</li>
<li>Na Nokiích s Androidem nepůjde instalovat aplikace z neznámých zdrojů, ale pouze schválené aplikace z obchodu. Naproti tomu na běžných Androidech je instalace z neznámých zdrojů otázka jednoho zatržítka v nastavení.</li>
<li>Obchod Nokie časem splyne s Windows Marketplace.</li>
<li>Všechen software pro Nokia X software platform půjde spustit i na Windows Phone. Naopak to ale platit nemusí.</li>
</ul>
<p>Teď by to všechno mohlo dávat smysl. Microsoft by skutečně dělal telefony s Androidem, ale měl by tam Windows Marketplace a vlastně by ty telefony až tak nekonkurovaly těm s Windows Phone. Android v podání Microsoftu by byl spíše Windows Phone Lite.</p>
<p>Nové smartphony s Windows Phone by mohly používat značku Lumia, kterou Microsoft dostane od Nokie. Nové smartphony s Androidem by spíše použivaly jinou značku. Možná Asha, možná ještě jinou.</p>
<h2>Možná se dočkáme navigace Here pro Android</h2>
<p>Navigaci Here bude mít Microsoft licencovanou, ale patřit bude stále Nokii. Pokud tyto nově představené telefony mají mít Nokia Here, znamená to jediné – Nokia tuto navigaci připravila i pro Android. Samozřejmě nevím, jestli půjde nainstalovat do běžných telefonů s Androidem ani jestli tak půjde učinit oficiálně. Možná se ale objeví i přímo v Google Play. když Nokia nepatří Microsoftu, zveřejnění navigace Here v Google Play by dávalo smysl.</p>
<h2>Budou aplikace pro Android univerzální?</h2>
<p>Aplikace pro Android již dnes umí spustit Jolla (podrobnosti neznám) a BlackBerry OS 10 (s jistými omezeními). Nejspíš to bude do jisté míry umět i Windows. Stane se to trendem?</p>
<p>Hádám, že u iOS se podpory aplikací pro Android jen tak nedočkáme, aspoň zatím. Na to jsou příliš mainstreamové. Možná bude ale situace jiná třeba u Ubuntu. Technicky to může být i jednodušší než u Windows.</p>
<p>Na druhou stranu se jednotlivé operační systémy od sebe více nebo méně liší i logikou ovládání. Pokud bude snaha dostat k sobě aplikace pro cizí systém, mohou si s sebou vzít i logiku ovládání. V jednodušších případech to mohou vyřešit upravené knihovny, jindy ale bude potřeba ruční práce programátora a případně i návrháře UI. Jenže se může také stát, že aplikace pro ten OS nebudou mít uživatelské rozhraní dostatečně přizpůsobené a ovládání „infikují“ zvyky z Androidu.</p>
Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com2tag:blogger.com,1999:blog-7247548023065923707.post-86780663322584581822013-10-06T06:37:00.000-07:002013-10-06T11:11:58.994-07:00Jak je to s volbou menšího zla? Proč se nebát volit malou stranu?<p>Blíží se další volby a k volbám obvykle patří debata o menším zlu. Myslím si ale, že zde dochází k určitým zjednodušením, která někdy dokáží – byť neúmyslně – přinést zmatek. Musíme totiž rozlišit, jaké jsou možnosti, a jaký je volební systém.
<h2>Poměrný systém</h2>
<p>Pokud bychom měli dokonalý poměrný systém, pak by volba menšího zla evidentně neměla smysl. Mohu volit, koho/co chci, a v každém případě mám šanci na ovlivnění výsledku stejnou.
<p>V praxi ovšem dokonale poměrný systém asi nenajdeme. Tím, že je počet volených zástupců mnohem menší než počet voličů, a tím, že každý zástupce má stejně silný hlas (není ovlivněn např. počtem voličů), bude vždy docházet k menším či větším zaokrouhlováním. To ale většinou není velký problém.
<p>Jenže ani takto jednoduché to obvykle není. To by pro získání mandátu v Poslanecké sněmovně muselo stačit získat 0,5 % hlasů. To nestačí, protože tu jsou další deformace, jako třeba známý 5% práh. <strong>A tady začínají obvykle vznikat úvahy o volbě menšího zla. „Podpořil bych radši tuto malou stranu, ale ta se zcela určitě nedostane přes potřebných 5 %.“</strong> To je do jisté míry sebenaplňující předpověď, která může dlouhodobě ovlivnit výsledek voleb dost výrazně. <strong>Je tu ale několik možných důvodů, proč i přesto může stát volba malé strany za to:</strong>
<ol>
<li><strong>I pokud strana nezíská 5 % v těchto volbách, má její výsledek vliv na příští volby.</strong> Pokud strana získá např. jen 3 %, bude u příštích voleb brána nerozhodnutými voliči asi vážněji, než kdyby získala pouze 0,5 %.
<li><strong>Spekulace na těsné překročení 5% hranice.</strong> Případná ztráta nízká, případný výnos vysoký.<br>
Pokud strana získá pravděpodobně kolem 5 % hlasů, pak jeden hlas má mnohem větší šanci udělat významnější posun v celkovém výsledku voleb. Zvlášť pokud by mohla být potřebná pro vznik koalice.<br>
Toto jsem mimochodem reálně zvažoval u voleb v roce 2010.
<li><strong>Nechcete se nechat dovést k sebenaplňující předpovědi.</strong> Když přesvědčíte více lidí, aby se nenechali ovlivnit průzkumy, možná se budeme výsledkům voleb divit.
</ol>
<h3>K čemu vede myšlenka „ztraceného hlasu“?</h3>
<p>Upřímně by mě celkem zajímalo, co by se stalo, kdyby byla 5% hranice zrušena. Přirozená hranice u voleb do Poslanecké sněmovny by tak byla zhruba 0,5 %. Bez výrazné kampaně tuto hranici byli <em>ve stávajícím systému</em> například <a href="http://www.svobodni.cz/">Svobodní</a> v roce 2010 přesáhnout. Tehdy to byla nová strana, vznikli v roce 2009. Zajímalo by mě, kolik by taková strana mohla tehdy dostat, kdyby nebylo 5% hranice nebo kdyby ji voliči ignorovali. Možná i přes 5 %.
<p>Dlouhodobě navíc může tento přístup vést k tomu, že bude mít hlavní slovo několik stran, které málokdo chce. Protože se skoro všichni budou bát volit nové strany. Staré strany pak budou mít možnost dělat si celkem co chtějí. Třeba <a href="http://blog.zarohem.cz/clanek.asp?cislo=2370#b5bm">slíbit, že daně zvyšovat nebudou, a po volbách je zvýšit</a>.
<h2>Většinový dvoukolový systém</h2>
<h3>První kolo</h3>
<p>První kolo je celkem nezajímavé. I když zde může být k volbě „menšího zla“ větší motivace, argumenty a protiargumenty jsou v zásadě velmi podobné.
<p>Vlastně nějaká výjimka by se našla. V prvním kole je úplně jedno, kdo je první, a kdo druhý. Ti dva se utkají až ve druhém kole. Aspoň pokud ten první nezíská v prvním kole přes 50 %, což obvykle nezíská.
<h3>Druhé kolo</h3>
<p>Ve druhém kole je to ale jiné. Pokud jeden z kandidátů je přijatelný a druhý ne, je volba jasná. Pokud je ale jeden špatný a druhý ještě horší, máme se také vyhnout volbě menšího zla, když je ta volba menšího zla tak špatná?
<p>Ptám se, co tím člověk získá. Jediná možnost, jak se vyhnout volbě menšího zla, je nevolit. To v dnešních systémech neznamená, že chcete, aby místo zůstalo neobsazeno, tím pouze necháte volbu na ostatních. Kteří možná vyberou menší zlo a možná vyberou větší zlo. <strong>V čem si zde člověk pomůže oproti volbě menšího zla? V tomto případě v ničem.</strong> Nevolit tak má význam jen ve speciálních případech, například když z těch dvou variant neumíte vybrat menší zlo.
<p>Proto si taky myslím, že <strong>je konzistentní na jedné straně kritizovat volbu menšího zla ve volbách do Poslanecké sněmovny, ale na druhé straně volit menší zlo ve druhém kole voleb do Senátu nebo ve druhém kole voleb prezidenta</strong>.
Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com0tag:blogger.com,1999:blog-7247548023065923707.post-88812129520166596822013-02-16T10:55:00.000-08:002013-02-16T11:48:45.534-08:00[AKTUALIZOVÁNO] Co bude znamenat přechod Opery na WebKit pro Operu Mini?<p>Asi jste zaznamenali, že Opera opouští vlastní vykreslovací jádro Presto a přechází na WebKit. Nevím, co bude s funkcí Opera Turbo, ale nejspíš by mohla v nějaké (byť technicky možná odlišné) podobě přežít. Co ale Opera Mini? Opera Software slíbila, že ji zachová. Což možná nebude tak jednoduché...
<h2>Jak funguje Opera Mini?</h2>
<p>To, co si člověk stáhne do mobilu (klientská část Opery Mini), neumí ani HTML a CSS. To umí formát OBMP, který dostane ze serverů Opery. Nejde jen o nějakou obyčejnou kompresi typu GZIP. Server Opery patrně téměř kompletně vykreslí stránku a pošle ji v úsporném formátu klientovi. Ukázat si to můžeme malými experimenty:
<ul>
<li>Zkuste otočit displej. Text se nijak nepřeskládá, vše zůstane tak, jak je. Text se přeskládá jen po reloadu stránky. Starší verze Opery Mini (zřejmě 4.*) se v tomto případě dokonce ptala, jestli uživatel chce stránku znovu načíst.
<li>Zkuste zkopírovat nějaký text na stránce. Zkopíruje se i s novými řádky a případnými přidanými mezerami. To jen podporuje variantu, kdy i lámání textu probíhá na serveru.
<li>Zkuste na nějaké stránce kliknout nějaké tlačítko, které provede nějakou akci offline. Například může jít o rozbalení/sbalení textu. (Dřív to šlo vidět dobře například na mobilní Wikipedii, dnes už ne.) Opera Mini to neprovede offline. Musí se zeptat serveru, co s tím. Javascriptová validace formulářů tak může docela obtěžovat.
</ul>
<p>Jistě by se našlo mnoho dalších příkladů. Formát OBML se nejspíš v jistém smysllu podobá PDF. Je to připraveno pro přesně dané rozměry stránky a nejde nějak snadno provést například text reflow. (Ano, u PDF to jde, ale je to spíš hack a jsou s tím spojeny jisté problémy, pokud se například používá dělení slov.)
<h2>A kde je problém?</h2>
<p>Zkusme navrhnout, jak to implementovat. Mějme nějaké obecné jádro prohlížeče a implementujme nad ním prohlížeč podobný Opeře Mini. Co budeme potřebovat? Základ je jasný, klient pošle, řekněme, URL, rozlišení obrazovky a DPI, server to vykreslí a pošle zpět. Pro začátek třeba použijeme PNG, nebudeme řešit výběr textu, hledání, zoom ani datovou náročnost. Budeme asi muset sázet text do sloupců širokých nejvýše stejně jako obrazovka. To v případě WebKitu, který se používá v mnohých jiných mobilních prohlížečích, problém nebude. Budeme muset nějak udělat funkční formuláře, což vyřešíme posíláním pozic a identifikátorů jednotlivých elementů formuláře. Nejzajímavější ale může být implementace Javascriptu. Budeme muset vyřešit, která část stránky reaguje na kliknutí, udělat z ní odkaz, který se nějak speciálně zpracuje na serveru. Zároveň ale budeme chtít, aby se při kliknutí mimo klikatelné oblasti nemuselo nic vyměňovat se serverem. Toto už bude chtít celkem těsnou spolupráci s enginem.
<p>Pokud se do toho Opera pustí touto cestou, nabízejí se navíc některé otázky. Udělá nějaký patch pro jednodušší integraci, který pošle vývojářům WebKitu? Kdo se o tyto patche bude starat? Bude se chtít vývojářům WebKitu?
<h2>Co s tím Opera udělá?</h2>
<p>Je tu několik možností, jak se s tím Opera může vyrovnat.
<h3>Použít Presto pro Operu Mini?</h3>
<p>Problém je v tom, že by museli Presto vyvíjet a záplatovat. Je otázka, jestli se to vyplatí. Nejspíš by to znamenalo jen vývoj v rozsahu oprav. Prvně jsem byl skeptický, ale postupně si kladu otázku, jestli by to nebylo u tohoto prohlížeče good enough.
<h3>Opustit stávající model renderování na serveru?</h3>
<p>Pak by ale nejspíš nebyl rozdíl mezi Operou Mini a Operou Mobile (popř. Operou Ice). Pokud slibovali Operu Mini zachovat, pak asi nepůjdou touto cestou. To je dobrá zpráva pro uživatele J2ME verze, protože portovat WebKit pro J2ME by asi nikdo nechtěl. Když ne z jiných důvodů, tak kvůli nemožnosti spouštět přímo nativní kód. Kód v C++ by se špatně portoval.
<h3>Rozdělit WebKit na server a klienta?</h3>
<p>Jak jsem psal, je to sice jedna z možností, ale jsou s tím spojeny různé výše uvedené komplikace. Možná by se změnil (zvětšil?) objem přenesených dat. Od verze 5 zřejmě v Opeře Mini funguje u interaktivních stránek někdy rozdílový update. (To je můj odhad podle měření objemu přenesených dat.) To by se mohlo změnit a třeba v první verzi by to nemuselo tak fungovat.
<h2>Co rozhodne</h2>
<p>Vidím tu dvě reálné možnosti – adaptace WebKitu a udržování jádra Presto. Záleží na tom, jestli má jít o urdžení prohlížeče zhruba ve stávajícím stavu, nebo jestli Opera předpokládá další vývoj. Pokud předpokládá další vývoj, WebKit je asi jasná volba. Pokud ne, udržování jádra Presto (zejména opravy chyb) se může ukázat jako výhodnější varianta.
<h2>AKTUALIZOVÁNO: Opera kupuje Skyfire</h2>
<p>Přidala se nová zpráva, kterou jsem si bohužel přečetl až po publikaci tohoto blogpostu. Totiž že <a href="http://www.svetandroida.cz/opera-kupuje-skyfire-za-150-milionu-dolaru-201302">Opera kupuje Skyfire</a>. Trošku jsem zavzpomínal a pohledal a přinejmenším se dost nabízí, že Skyfire bude dost souviset s budoucí podobou Opery Mini. Dám sem citaci <a href="https://en.wikipedia.org/wiki/Skyfire_%28web_browser%29">z článku z Wikipedie</a>, které mluví za vše:
<blocquote> In Skyfire's first generation (1.x) browser, a web page is fully rendered by a server separate from the mobile device, similar to the operation of a thin client.[3] This approach is also used by Opera Mini. Skyfire's second generation (2.x) browser employs a hybrid approach, using a conventional rendering of Web pages on the handheld device, but streaming video from Skyfire's servers.[4]</blocquote>
<p>Je to otázka. Starší verze byla založena na jádru Gecko (stejně jako Firefox) a šlo o tenkého klienta stejně jako Opera Mini. Dnes staví na WebKitu, ale je mnohem blíže klasickým prohlížečům, protože na svém serveru zpracovává jen videa a podobný obsah. Může jít jen o komponentu do Opery Ice. Nebo se pro Operu Mini použije upravený kód ze Skyfire 1 a pro Operu Ice videa z novějších verzí Skyfire? Nevím, budoucnost je po tomto kroku ještě možná o něco nejasnější.Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com0tag:blogger.com,1999:blog-7247548023065923707.post-22571890905847772692013-01-20T08:16:00.000-08:002013-01-20T13:25:22.299-08:00Zeman vs. Schwarzenberg: žádná sláva<p>Tak se nám blíží druhé kolo prezidentské volby. Zbyli nám jen dva kandidáti. Navzdory tomu, jak se prezentují, mezi nimi nevidím příliš rozdílů. Ani jednoho na hradě nechci. Ale přece jen vybírám, jeden z nich tam, bohužel, bude.
<blockquote class="twitter-tweet"><p><a href="https://twitter.com/search/%23Zeman">#Zeman</a> a <a href="https://twitter.com/search/%23Schwarzenberg">#Schwarzenberg</a> s námi asi hrají hru "najdi deset rozdílů".</p>— Vít Šesták (@v6ak) <a href="https://twitter.com/v6ak/status/291493316468539392" data-datetime="2013-01-16T10:33:16+00:00">January 16, 2013</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<h2>Kauzy</h2>
<p>Zeman je spojen s mnoha kauzami. O tom se mluví tak, že je zde snad ani nemusím zmiňovat. Mnohem méně se mluví o tom, že čistý není ani Schwarzenberg. Ten například <a href="https://webcache.googleusercontent.com/search?client=ubuntu&channel=fs&q=cache%3Awww.senat.cz%2Fxqw%2Fxervlet%2Fpssenat%2Fhlasy%3FG%3D4907%26O%3D5&ie=utf-8&oe=utf-8">hlasoval pro podporu fotovoltaiky</a>. (Omlouvám se za Google cache, na senat.cz to dnes nefunguje.) Údajně hlasoval pro povinná biopaliva. (Nedaří se mi dohledat.) <a href="http://pavel.cernik.name/blog/politika/kdo-stoji-za-acta/">Doporučil schválit ACTA.</a> A <a href="http://www.psp.cz/sqw/hlasy.sqw?G=55930&o=6">hlasoval pro ESM</a>. Přesto má podle mnohých pověst čestného politika.
<p>Čistě nevypadá ani jeden. I tak se je můžeme pokusit srovnat:
<ul>
<li>Ke Schwarzenbergovi najdeme asi méně kauz.
<li>Není ale až tak důležitý počet, ale závažnost. V souvislosti se Zemanem jsem slyšel především o kauzách, kde se ztratil <strong>jednorázově</strong> nějaký milión, desítka milionů, možná miliarda. Máte-li jiné informace, uvítám. Zvlášť protože sám nejsem úplně rozhodnut, koho volit.
<li>Naproti tomu Schwarzenberg hlasoval pro smlouvu ESM a doporučil schválit smlouvu ACTA. Tuším, že tyto smlouvy by mohly (ACTA mohla, ESM může) páchat škodu řadu let po schválení.
<li>Od Zemana vyčnívá kauza Slonková. Ale nevím, jestli s tím měl Zeman něco přímo společného.
</ul>
<h2>Dohled médií</h2>
<p>Jak jsem psal, média jsou zajímavá věc. Zemanovy kauzy (aniž bych chtěl tím zmenšovat jejich význam) jsou propírány, zatímco podle dojmu z médií by Schwarzenberg měl být snad co nejdříve svatořečen. Nevím, čím to je, ale dobrý dojem z toho nemám.
<h2>Bankovní rada ČNB</h2>
<p>Prezident jmenuje bankovní radu České národní banky. Stávajícím členům funkce mají končit v letech 2014, 2016, 2017 a 2018 (opravil jsem to podle <a href="http://proinvestory.cz/prezidentske-volby-a-ceska-ekonomika">ProInvestory.cz</a>). Tady by se kandidáti lišili:
<ul>
<li>Zeman by zvažoval mj. Švejnara.
<li>U Schwarzenberga jsem nic konkrétnějšího nenašel. V roce 2016 ale bude dost možná TOP09 mimo vládu a Kalousek by mohl mít zájem. Je to ale jen spekulace.
</ul>
<p>Ani z jednoho nejsem nadšený.
<p>Zdroj: <a href="http://zpravy.ihned.cz/politika/c1-59133420-zeman-schwarzenberg-debata-rozhlas">debata na iHned</a>.
<h2>Euro</h2>
<p>Oba by chtěli euro nejdříve v roce 2017, pokud se nepletu. Ani jeden mě tím nenadchnul, rozdíly zde moc nejsou. Zeman má u mě menší mínus za <a href="http://www.novaustava.cz/clanky/zeman-a-prijeti-eura">mlžení okolo Sorose.</a> Ve skutečnosti by podobná situace mohla nastat i mezi dolarem a eurem, nezávisle na „velikosti“ měny.
<h2>Levice vs. pravice?</h2>
<p>Zeman se otevřeně hlásí k levici, která se nebojí vyšších daní ani regulací. Karel Schwarzenberg se hlásí k pravici. Takže snižuje daně a dereguluje? Hmm, asi ne.
<p>Tady taky není moc rozdílů. Nejde o souboj pravice vs. levice. A i kdyby byl, není to podle mého názoru u prezidenta až tak podstatné.
<h2>ESM</h2>
<p>Už jsem o tom psal, zmiňuji to znovu, protože to zde má i další význam. <a href="http://www.finmag.cz/cs/finmag/ekonomika/skandalni-eurotunel-dame-miliardy-a-zisk-nikde/">Evropský stabilizační mechanismus</a> by pro Českou republiku mohl znamenat povinnost platit dluhy („půjčovat“) za státy, které se příliš zadlužily. Až po vstupu do eurozóny, ke kterému jsme ale zavázáni (nemáme na rozdíl od Velké Británie a Švédska výjimku, takže si o tom nemůžeme rozhodnout sami). Vstup do eurozóny podporují oba kandidáti a u mnohých států (hmm, Řecko) ani nevadilo nesplnění příslušných kritérií. Je to tedy sice závazek do budoucna, ale ČR zřejmě nemá v případě jeho přijetí možnost se mu vyhnout. Šlo by to leda vystoupením z EU, které by mohlo trvat podle Lisabonské smlouvy až dva roky, ale na to bych se nespoléhal.
<p>ESM schválila Poslanecká sněmovna i Senát. Prezident Václav Klaus odmítl tuto smlouvu podepsat. Je tedy otázka, jak se k tomu postaví příští prezident.
<p>Tady se postoje kandidátů liší. <a href="http://www.psp.cz/sqw/hlasy.sqw?G=55930&o=6">Karel Schwarzenberg hlasoval pro ESM.</a> V <a href="http://www.ceskatelevize.cz/ivysilani/10483849868-prezidentsky-duel/213411033170117/">Prezidentském duelu 2013</a> na ČT uvedl, že by si smlouvu důkladně přečetl a pak by nejspíš podepsal. Jeden ústavní právník by ho od toho neodradil. Kdyby byli proti všichni ústavní právníci, pak by se podle svých slov ještě jednou zamyslel.
<p>Naproti tomu Zeman jasně uvedl své výhrady proti ESM. Sice neslíbil, že nepodepíše, ale byl zde mnohem přesvědčivější než Schwarzenberg.
<h2>Dopady na další volby</h2>
<p>Schwarzenberg je předseda strany TOP09. Přestože se mnozí voliči za volbu této strany omlouvali, Schwarzenberg je stále populární. Je otázka, co by se stalo, kdyby se stal prezidentem a nekandidoval ve volbách do Poslanecké sněmovny. Mohl by nastat propad TOP09. Je otázka, k čemu by to vedlo – jestli k větší popularitě ČSSD (vlastně žádná velká změna), nebo k větší popularitě skutečně pravicových stran.
<p>U Zemana nedokážu odhadnout. Pokud by se stal prezidentem, byl by více na očích a více na očích by mohla být jeho strana. Ale na druhou stranu, pokud by do Poslanecké sněmovny nekandidoval Zeman, výrazná ikona této strany, jakou šanci by měla SPOZ.
<h2>Slovník prezidenta</h2>
<p>Zemanovi je vyčítán jeho slovník. Zajímavé je, že se prakticky vůbec nemluví o tom, že ani Schwarzenberg nemá problém někoho označit např. za magora. Nevím proč.
<blockquote class="twitter-tweet"><p>Těším se na komentáře, jak je přisprostlej strejda Karel lepší než přisprostlej strejda Zeman (který se aspoň nestydí, že je levičák).</p>— Jan Sychra (@JanSychra) <a href="https://twitter.com/JanSychra/status/290110667808198656" data-datetime="2013-01-12T14:59:07+00:00">January 12, 2013</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>Na druhou stranu, je asi podstatné hlavně to, co prezident reálně udělá, než co (a jakými vyjadřovacími prostředky) říká.
<h2>Koho tedy volit?</h2>
<p>Sám nevím. Zvažuji Zemana, ale ve hře jsou všechny tři možnosti. Snížit zisk TOP09 ve volbách do PS 2014 ale může být též zajímavé. Jisté je jen to, že k volbám půjdu. Není jisté, jestli k nim půjdu střízlivý. (Za střízliva se chci rozhodnout, ale ne vhazovat obálku s jedním z těchto dvou kandidátů.) Možná podpořím <a href="http://data.stroukal.cz/hlasovaci_listek.pdf">někoho třetího</a> (via <a href="https://twitter.com/Stroukal">Dominik Stroukal</a>), nevím.
Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com0tag:blogger.com,1999:blog-7247548023065923707.post-59402205395195337932013-01-10T06:33:00.000-08:002013-01-10T06:33:18.081-08:00Grahamův problém v Javě je ukecaný. A vadí to?<p><a href="http://www.knesl.com/articles/view/grahamuv-problem">Grahamův problém</a> má ukázat, jak je nějaký jazyk expresivní. V některých jazycích stačí dva nebo tři řádky, v Javě jsem napočítal aspoň devět řádků. Vadí to?
<p>V Javě vypadá řešení zhruba takto, když chceme být struční:
<pre class="brush: java">public class Accumulator {
private int value;
public Accumulator(int value) {
this.value = value;
}
public int add(int i) {
return value += i;
}
}</pre>
<p>Prakticky totéž ve Scale by bylo stručnější:
<pre class="brush: scala">class MutableAccumulator(private var value: Int){
def apply(i: Int) = {
value += i
value
}
}</pre>
<p>Ačkoli dám přednost Scale, musím uznat, že i Javové řešení je dobře čitelné. A jak je to s psaním? Sice nešetřím každý úder do klávesnice, ale nemám rád, když s sebou psaní kódu nese zbytečně velkou režii, která odvádí pozornost. Není to trochu problém?
<p>Síla Javy je ale jinde. K Javě existují dobrá IDE. Napsal jsem v principu jen něco přes dva řádky, abytek řešilo celkem intuitivní cestou IDE. V mém případě IntelliJ IDEA, ale podobnou službu udělá i Eclipse nebo NetBeans. Tady je video (bez zvuku): </p>
<iframe width="590" height="460" src="http://www.youtube.com/embed/Jv61k7wH_OA" frameborder="0" allowfullscreen></iframe><br>
Pokud je to špatně vidět, doporučuji přepnout na vyšší kvalitu videa. <br>
Nejde-li video přehrát, je ke <a href="http://public.v6ak.com/accumulator-java-idea.ogv">stažení jako OGV</a>.
<p>Schválně jsem nastavil malé rozměry okna. Dá se na to koukat i z 3" mobilu. Až na rozměry okna ale je to pro mě normální nastavení. Nic navíc tam nezaclání, většina okna slouží k psaní kódu.
<p>Jak vidíte na videu:
<ul>
<li>Mám kód, který používá neexistující (neimplementovanou) třídu a neexistující metody. IDE mě na toto upozorní.
<li>Nechám tu zatím neexistující třídu vytvořit. (Alt+Enter)
<li>Přidám ručně <code>private int n;</code>
<li>Nakouknu se do mainu a vidím, že nesedí konstruktor. Nechám si tedy vygenerovat konstruktor z fieldů třídy. (Shift+Insert)
<li>Nakouknu se do mainu a vidím, že ještě chybí add. Nechám si tedy vytvořit metodu add (Alt+Enter), určím návratový typ a napíšu <code>return n += i</code>. Ostatní jen schválím
<li>V mainu teď nic není červené. Můžu spustit.
<li>Ještě jako bonus přidám getter a setter. (Možná se do akumulátoru nehodí, ale pro ukázku IDE...)
<li>Hmm, pojmenovat ten field <code>n</code> nebylo moudré. Nevadí, můžu jej přejmenovat (Shift+F6). Přejmenují se i metody getN a setN na getValue a setValue. Může se přejmenovat i parametr konstruktoru. Tady jsem to zamítl.
<li>Přidám i výpis hodnoty <code>acc.getValue()</code>. Napsal jsem ale jen <code>acc.gV</code> a IDE zbytek doplnilo.
</ul>
<p>Nabízí se tu otázky. Mohou kvality IDE nahradit všechny kvality jazyka? Nebo je to naopak a dobré IDE je tu jen od toho, aby pomohlo programátorovi strpět špatný jazyk?
<p>Pravda tu bude asi někde uprostřed. Dobré IDE těžko vyřeší šílené konstrukce nějakého jazyka. Na druhou stranu, IDE se hodí i u příjemnějších jazyků. Typickým příkladem je přejmenování nějaké metody, které je potřeba řešit i všude, kde se ta metoda používá. IDE tuto změnu udělá napříč celým projektem.
<p>Úplně ideální kombinaci jazyka a IDE jsem nenašel. Takovou podporu IDE, jakou má Java (toto video je jen stručný nástřel), jsem u jiného jazyka neviděl. Pokud si ale můžu vybírat jazyk, dám většinou přednost Scale. Podpora IDE se sice s Javou srovnávat nemůže, ale celkem to stačí. I díky tomu, že jde o příjemnější jazyk.
Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com0tag:blogger.com,1999:blog-7247548023065923707.post-10249700847116871472013-01-04T14:59:00.000-08:002013-01-04T15:01:14.310-08:00Jaké je vlastně funkcionální programování? (debata k ĚĽŠČŘ)<p>Jiří Knesl <a href="http://www.knesl.com/articles/view/elscr-plugin">napsal plugin ĚĽŠČŘ</a>, Jakub Vrána <a href="http://php.vrana.cz/elscr-elegantne.php">mu jej zkritizoval</a> a Jiří Knesl zareagoval na Jakubovu kritiku tím, <a href="http://knesl.com/articles/view/okomentovany-elscr-plugin">že mu šlo hlavně o vyzkoušení funkcionálního programování</a>. Jakub Vrána se ale podivuje, co je na tom tak elegantního. I já se tedy do diskuze zapojím, byť se zpožděním. Napřed ale trošku odbočím.
<h2>Způsoby vyhodnocování</h2>
<p>Nechci tu mít moc teorie, tak jen ve stručnosti:
<h3>Striktní vyhodnocování</h3>
<p>Toto určitě všichni znáte, protože to využívají snad všechny mainstreamové jazyky. Vyhodnotí se prostě vše (nepočítáme-li optimalizace jako &&), i pokud to nebude nikdy potřeba. To je právě důvod, proč v Javascriptu výraz <code>[3, decodeURIComponent("aa=%gg"), 8, 9][3]</code> nevrátí hodnotu 9, ale skončí výjimkou.
<h3>Vyhodnocování on-demand</h3>
<p>Druhá možnost je provést vyhodnocování teprve ve chvíli, kdy je to potřeba. Sem patřì normální a líné vyhodnocování, rozdíly mezi nimi teď nejsou podstatné. Pokud se v Haskellu pokusíme vyhodnotit <code>[3, 1 `div` 0, 8, 9] !! 3</code>, dostaneme 9, ačkoli celočíselné dělení nulou končí v Haskellu výjimkou. Funguje to díky tomu, že výraz <code>1 `div` 0</code> není potřeba vyhodnocovat. Pokud by se vyhodnocoval, vznikla by v Haskellu výjimka kvůli dělení nulou.
<p>Asi je zřejmé, proč v mainstreamových (aspoň trošku imperativních) jazycích na toto nenarazíte: jakmile byste začali ve výrazech používat side effects, nastala by pravá magie. Těžko by se ovlivňovalo pořadí vyhodnocování (nebo to, zda by se něco vůbec vyhodnotilo) a chování programu by se začalo nepředvídatelně měnit.
<h2>Funkcionální klasika: linked list</h2>
<p>Ve funkcionálním programování je spojový seznam velmi oblíbený. Ne, že by nešlo používat např. klasické pole, ale klasický funkcionální spojový seznam je dobré znát. Seznam je buď prázdný (v Haskellu <code>[]</code>), nebo se skládá z jednoho prvku a reference na zbytek seznamu (v Haskellu <code>head:tail</code>). Tak je seznam definován rekurzivně a lze některé suffixy seznamu použí ve více různých seznamech. Například budeme mít dva seznamy o sto prvcích, ale budou se lišit vždy jen v prvním prvku, takže do paměti uložíme jen 101 prvků. Na funkčnost to nebude mí vliv, protože tyto seznamy jsou immutable. U vyhodnocování on-demand je navíc možné mít nekonečné seznamy. Součet nekonečné řady tak sice nespočítáte (aspoň ne přesně, <code>sum (takeWhile (<epsilon) someList)</code>, tedy součet členů menších než epsilon u klesající řady, fungovat bude), ale třeba seznam všech prvočísel, ze kterého se na konec ve skutečnosti vyhodnotí jen prvních <code>n</code> z nich, není problém.
<h2>Jak je to s funkcemi map a filter</h2>
<p>A už se dostávám ke článku, na který jsem reagoval. Funkce map a filter (popř. další, jako třeba reduceLeft, reduceRight, take, drop, takeWhile, dropWhile...) skutečně nejsou vše, o čem je funkcionální programování. Programovat bez nich skutečně lze. Ale není to ono. Až tak se nedivím, že se Jakub Vrána pod článkem podivil, kde je ta elegance.
<h2>Jak jsou tyto funkce (map, reduce, ...) ve skutečnosti implementovány?</h2>
<p>Teď budu trošku kritizovat. A to článek nejen Jiřího Knesla, ale i samotné funkcionální programování. Jde mi o to, že funkce typické pro funkcionální programování není až tak snadné napsat správně. Ukážeme si to na funkci map. Nejdřív si odbydeme vyhodnocování on-demand (které zkritizuju za chvilku). Tam není nutné řešit tail call optimization, protože díky způsobu vyhodnocování nenastane rekurze v té podobě, v jaké ji známe ze striktního vyhodnocování. Můžeme tedy namapovat první prvek a rekurzivně namapovat zbytek:
<code><pre>map f (x:xs) = (f x) : (map f xs)</pre></code>
<p>Funkce tedy vezme funkci f a seznam (x:xs). Zápis (x:xs) ve skutečnosti znamená, že parametr je neprázdný seznam a ten je rozdělen na první prvek (x) a zbytek (xs). Zbývá dořešit prázdný seznam, ten se namapuje na prázdný seznam:
<code><pre>map f [] = []</pre></code>
<p>Jenže takto to funguje dobře jen u vyhodnocování on-demand. U striktního vyhodnocování získáme s dlouhými seznamy mnoho rekurzí a potřebujeme velký stack. Nepomůže ani tail call optimization, protože poslední operace není rekurze, ale vytvoření seznamu (:). Takto tedy ne.
<p>Pak se nám nabízí použít akumulátor, což přesně udělal Jiří Knesl. Určitou nevýhodou je, že seznam procházíme od začátku, ale přidáváme též na začátek. Výsledný seznam tedy dostaneme v opačném pořadí:
<code><pre>map f list = map0 f list []
map0 f [] acc = acc
map0 f (x:xs) acc = map0 f xs ((f x):acc) -- chyba, obracíme pořadí.</pre></code>
<p>Můžeme na to zavolat i funkci reverse (tu jde naštěstí napsat snadno) a dostaneme dokonce i dobrou asymptotickou složitost (konstantní na stack, lineární na heap a na čas), ale je to velmi neelegantní. O paměťové lokalitě nemluvě.
<p>Trošku po svém si s tím poradila Scala (funkcionální jazyk se striktním vyhodnocováním). Funkce map je u třídy List efektivní, elegantní, čitelná (byť se znalostí pokročilejších konstrukcí), ale bohužel ne funkcionální. Autoři byli pragmatici, ne fanatici.
<p>Původně jsem sem chtěl zkopírovat i implementaci pro důkaz, že to je fakt imperativně. Třída List ale nechává implementaci metody map na traitu TraversableLike, který to implementuje obecněji. Vysvětlovat tu implementaci lidem, kteří jazyk Scala nepotkali, by ale bylo nad rámec tohoto článku.
<h2>Snadný paralelismus?</h2>
<p>Funkcionální programování k paralelismu přímo vybízí. Například ve Scale stačí do funkcionálního kódu přidat na pár míst <code>par</code> a hned je paralelní. (No dobře, má to svá úskalí, ale o tom třeba jindy.) U striktního vyhodnocování to funguje celkem dobře, pokud se u funkcí jako je map vzdáme části elegance. Menší problém je formát seznamu, spojový seznam není příliš vhodný u mnoha krátkých výpočtů.
<p>Horší situace je u vyhodnocování on-demand. Co všechno má být vyhodnoceno paralelně? Pokud se výpočet něčeho odloží na později, nemusí se to vykonávat paralelně. Pokud se má vyhodnotit vše, bude se to vyhodnocovat striktně. Mimochodem, na tento problém jsem narazil ve Scale u funkce mapValues, která se kupodivu nechovala striktně. Místo toho, aby výpočet proběhl celý paralelně, se podstatná část odložila na později a spočítala se až při výpisu. Samozřejmě sériově.
<h2>Tail call optimization</h2>
<p>A ještě jedna věc, která se sice netýká výhradně funkcionálního programování, ale – protože se tam rekurze prostě používá často – stojí za zmínku. Navíc chci v tomto reagovat i na Jiřího Knesla. Myšlenka je, že pokud je nějaké volání funkce posledním příkazem, lze uvolnit místo na stacku již při volání. Typicky se toho využívá při rekurzi. Z koncové rekurze kompilátor může udělat (mírně zjednodušeno) skok na začátek funkce. Program s rekurzí se tak může přeložit úplně stejně, jako kdyby měl cyklus. Teorie je to pěkná, Jiří Knesl se na to i odvolává při obhajobě svého skriptu. Jak je to ale doopravdy?
<p>Hledal jsem Tail call optimization v Javascriptových enginech (na kterých bdou záviset i optimalizace Livescriptu), ale moc jsem o tom nenašel, nejvýše plány. Možná jsem jen špatně hledal, ale spíš bych se na to nespoléhal.
<p>Ona to vlastně ani není ekvivalentní úprava. Pokud čteme stack trace (např. z výjimky), dostáváme po optimalizaci jiné údaje. To nemusí vadit, pokud o tom víme. U Javy je ale snaha zpětným nekompatibilitám (třeba i teoretickým) bránit, takže se tato optimalizace sice zvažuje, ale volání metody musí být (podle jednoho návrhu) uvozeno speciální instrukcí. Nevím o tom, že by dnes něco takového bylo v nějaké production-ready JVM podporováno. Podporovat to může kompilátor (a kompilátor pro Scalu to skutečně podporuje), ale možnosti jsou omezené. Optimalizovat takto rekurzi známou v době překladu lze relativně snadno (stačí do parametrů přiřadit nové hodnoty a goto 0, jen je potřeba řešit, aby korektně fungovalo např. i prohození parametrů), ale jiné tail calls moc dobře nejdou, protože JVM nemá instrukce pro takto low-level práci se zásobníkem. A v případě Scaly doporučuji <a href="http://www.scala-lang.org/api/current/index.html#scala.annotation.tailrec">@tailrec</a>, aby kompilátor nezradil. U Livescriptu by teoreticky mohlo být něco podobného, překladač má asi podobné možnosti.
<h2>Závěr</h2>
<p>Ano, funkcionální programování nabízí řadu výhod – eleganci, použitelné vyhodnocování on-demand, snadný paralelismus a další. Nemůžte ale od toho chtít všechno současně. Mám sice rád líný čistě funkcionální Haskell, ale v praxi píšu spíš v ne úplně čistě funkcionální Scale.
<p>Pure functional programming is like anarchism: everything is stateless. Although I believe that reducing the state is often useful, I am not sure if total elimination of state is a good idea.
Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com0tag:blogger.com,1999:blog-7247548023065923707.post-43149990282641050672012-12-04T08:58:00.000-08:002012-12-04T08:58:41.663-08:00Třikrát jedenáct<p>Ačkoli se do řetězovek obvykle nezapojuju, výjimka potvrzuje pravidlo. Této se přezdívá Tříkrát jedenáct a obsahem je napsat:
<ol>
<li>Jedenáct zajímavostí o sobě
<li>Odpovědět na jedenáct otázek od bloggera, který člověka nominoval
<li>Vymyslet dalších jedenáct otázek pro dalších jedenáct bloggerů
</ol>
<p>Mě do toho <a href="http://blog.zarohem.cz/clanek.asp?cislo=2592">namočil</a> Karel Kilián (<a href="https://twitter.com/karelkilian/">@karelkilian</a>), autor <a href="http://blog.zarohem.cz/rubrika.asp?cislo=18">Týdnovin</a> na <a href="http://blog.zarohem.cz/">blogu ZaRohem.cz</a>, redaktor na <a href="http://www.svetandroida.cz/">SvětAndroida.cz</a> a mnoho dalšího.
<h2>Troška historie</h2>
<p>Pátral jsem, kdkud tato řetězovka pochází. Dostal jsem se k různým bloggerkám a k anglickým blogpostům, kde se tomu říká blogger tag. Po cestě se mírně upravila pravidla, nevadí. Dostal jsem se až k nějaké <a href="http://cakingiton.blogspot.co.uk/">Lauře</a>, která dostala nominace od dvou lidí, dál jsem už pátrat nechtěl.
<h2>Pár zajímavostí o mě</h2>
<ol>
<li>Jmenuju se Vít Šesták, ale neříkejte mi „Víte“, ledaže byste mi vykali.
<li>Dlouhodobě mě zajímají IT, takže hádejte, co studuju. A při studiu i pracuju v oboru.
<li>Vedle IT mě zajímá také ekonomie, dopady různých daní a regulací. To je právě důvod, proč regulace nemám rád.
<li>Nepěstuju moc peníze doma ani na bankovním účtu. Běžný bankovní účet téměř nepoužívám kvůli zákonu o kapitálové přiměřenosti, který směruje banky k tomu, aby nakupovaly státní dluhopisy. Místo toho investuju na burze sám.
<li>Mám rád decentralizaci. A to v různých podobách: kromě relativně centralizovaného Twitteru mě tedy najdete i na <a href="https://v6ak.com/dfrn_request/v6ak">decentralizovaných sítích (Friendica, Diaspora, StatusNet)</a>. <a href="http://twitter.v6ak.com">Twitter sleduju přes RSS</a>. Kontaktujete mě přes Jabber nebo SIP, ale ne přes ICQ, Skype nebo Facebook. České koruny sice používám (ono v ČR moc jiných možností není), ale moc nepřechovávám.
<li>Prý mám občas svérázný smysl pro humor. Ale nefunguje to na požádání.
<li>Z programovacích jazyků mám nejradši Scalu, ale programuju v ledasčem.
<li>Rád běhám. Obvykle kolem 10 km. Jednou jsem dal i dvacet, ale pak mě bolely ruce. Nohy kupodivu ne.
<li>Nekouřil jsem, nekouřím a nejspíš ani kouřit nebudu. Nemám k tomu důvod.
<li>Alkohol je ale něco úplně jiného :). Ale jen jednou za čas.
<li>Občas jsem líný, ale jindy jsem striktní a někdy dokonce i normální.
</ol>
<h2>Otázky od Karla Kiliána</h2>
<dl>
<dt>Jaký telefon s jakou verzí operačního systému používáš jako svůj hlavní?</dt>
<dd>Mám Sony Ericsson Xperia Mini Pro (SK17i) s Androidem 4.0.4. Jelly Beany mi zatím moc nechutnaly, byť se mohou důvody zdát malicherné. Hardwarová klávesnice je pro mě u telefonu nutná součást. (Hádejte, na čem právě píšu...) I proto se dívám tak trochu na BlackBerry. Ale dost váhám, jsem skeptický k BB OS 10.</dd>
<dt>Jaký seriál z těch, jež aktuálně běží (i v zahraničních) v televizi, máš nejraději?</dt>
<dd>Nesleduji televizi. Sleduji snad jen RSS, e-mail a burzu. A tam moc seriály nejsou.</dd>
<dt>Kdyby sis mohl/a vybrat jakékoli povolání, jaké by to bylo a proč?</dt>
<dd>Přemýšlím, co mě teď omezuje ve volbě povolání. Něco se najde, například moje schopnosti (jako grafik bych se zřejmě neuživil), ale věci, které mi nejdou, mě obvykle taky moc nebaví. Další věc je poptávka. Ale ani tady nejsem nějak zásadně limitován.
<p>Takže vlastně spíš odpovím, co dělám nebo budu dělat: během studia programuju a obchoduju na burze. Víc mě ale zajímá to programování.
</dd>
<dt>Co bys udělal/a s deseti miliony korun?</dt>
<dd>
Asi tu není moc věcí, které lze koupit a které by mě učinily šťastnějším. Možná budu časem potřebovat vlastní byt, ale jinak moc nevím. Vlastní auto? Na co?
<p>Nejspíš bych tedy peníze investoval. Ptáte se do čeho? Sám nevím. Poslední dobou neřeším, do čeho ty volné peníze investovat, ale kde vzít volné peníze. Možná částečně i do nějaké kampaně, kde bych propagoval myšlenky, které mi jsou blízké. Ale možná je to naivní.
<p>Ptáte se na pomoc chudým? V zásadě nejsem proti. Otázka ale je, jakou by měla mít podobu. Jedna možnost je přímá (jednorázová) pomoc chudým, druhá možnost je investice.
</dd>
<dt>Pokud bys musel/a emigrovat, do které země by to bylo?</dt>
<dd>Ideálně emigrovat nebudu. Kdybych už musel, nechtěl bych jet moc daleko, takže asi Švýcarsko. Nejspíš je to jedna z nejbližších zemí (po Lichtenštejnsku, které ale se Švýcarskem sdílí například měnu a armádu), kde bych si emigrací skutečně pomohl.</dd>
<dt>Co Tě dokáže opravdu naštvat?</dt>
<dd>Máloco. Přemýšlím, kdy jsem byl naposledy opravdu naštvaný.</dd>
<dt>Existuje slušný a poctivý politik? Kdo to je?</dt>
<dd>Důležité je si prvně ujasnit, co si pod tím představíme. A i pak je otáka, jakou tomu dávat váhu. Umím si představit slušně vystupujícího politika, který se slušným vystupováním odhlasuje nějakou příšernost. Je slušný? Možná ano. Ale pak bych slušnosti v politice nedával až takovou váhu.
<blockquote class="twitter-tweet"><p>Jak bych byl rád, kdyby byli u moci arogantní politikové, kteří mi dají pokoj, a ne sluníčkoví přetvářkové, kteří mi berou svobody a peníze.</p>— Jan Sychra (@JanSychra) <a href="https://twitter.com/JanSychra/status/252699400898506752" data-datetime="2012-10-01T09:20:06+00:00">1. 10. 2012</a></blockquote>
<script src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>A poctivost? Asi se shodneme, že politik, který přijme nějaký úplatek, není poctivý. A dál? Počítají se například úplatky voličům v podobě výměny hlasu za to, že jedněm něco sebere a druhým něco dá?
<p>Někdo by mohl říct, že člověk poctivý, když jedná podle svědomí. To bych asi věřil třeba paní Fischerové, ale potom má určitě jiné svědomí než já. A co lidé bez svědomí? Ti jsou poctiví automaticky?
<p>Aby nedošlo k mýlce, nechci se vysmívat slušnosti ani poctivosti. Když bych vybíral zaměstnance, asi bych nechtěl nikoho nepoctivého. Ale co by byl platný poctivý zaměstnanec, který by tomu nerozuměl? A slušnost je IMHO zvlášť v politice přeceňována, i když samozřejmě budu rád za slušného člověka.
<p>V zastupitelstvu městské části je pár lidí, se kterými se znám osobně a kterým věřím. (A opravdu jsem od nich nedostal zakázku. Ani jednu.) Najdou se určitě i další slušní a poctiví politici, ale málokdo se dostane někam vysoko -- do parlamentu přes <a href="https://cs.wikipedia.org/wiki/D%27Hondtova_metoda">d'Hondta</a> nebo do senátu přes většinový systém. Možná pan Kubera patří mezi světlé výjimky, ale třeba mi to někdo vyvrátí.
</dd>
<dt>Hledáš někdy své jméno na Internetu?</dt>
<dd>Párkrát jsem hledal, ale nedělám to moc často. Ale dopadl jsem celkem dobře, třeba kamarád měl jako první výsledek jeden náš neúspěšný projekt.</dd>
<dt>Pokud máš Twitter, sleduješ nějakým způsobem, kdo Tě přestal followovat?</dt>
<dd>Občas se podívám, kdo mě followuje, ale těžko z hlavy zjistím, kdo zmizel.</dd>
<dt>V jakém textovém editoru odpovídáš na tyto otázky?</dt>
<dd>V ColorNote (editor pro Android), závěrečné úpravy v Geany (takový editor na všechno, když nepotřebuju IDE).</dd>
<dt>Jak často uklízíš svůj pokoj/byt/dům?</dt>
<dd>Nepravidelně. Dobrou inspiraci vidím v generačním garbage collectoru :)</dd>
</dl>
<h2>Moje otázky</h2>
<ol>
<li>Vyslechneš/přečteš si radši názor od člověka s podobnými názory, nebo s odlišnými názory?
<li>Jak se stavíš ke kouření?
<li>Je potřeba chránit děti před svými rodiči (např. před špatnou výchovou), nebo to napáchá více škody než užitku?
<li>Jaký máš vztah k autoritám?
<li>Budeš při nejbližších prezidentských volbách volit?
<li>Na čem sis poprvé přečetl(a) tyto otázky? (Na mobilu, tabletu, počítači, papíru, e-papíru, ...)
<li>Které sociální sítě používáš? Kterým se vyloženě bráníš?
<li>Čteš si i na místech pro čtení ne zrovsna určených, např. na záchodě?
<li>Kupuješ software? A hudbu?
<li>Plánuješ si čas (aspoň vstávání, oběd apod.), nebo necháš vše plynout a nějak to dopadne?
<li>Co je pro Tebe úpěch? (Co u sebe považuješ za úspěch?)
</ol>
<h2>A nominováno jsou..</h2>
<p>Přemýšlel jsem, jestli mám nominovat spíš ty, které znám, nebo ty, které neznám. Nakonec jsem to zkombinoval:</p>
<ol>
<li><a href="https://twitter.com/GarretRaziel">@GarretRaziel</a> (také <a href="https://joindiaspora.com/people/4d11adac2c1743390f002315">na Diaspoře</a>)
<li><a href="https://twitter.com/HonzaBenisek">@HonzaBenisek</a>
<li><a href="https://twitter.com/HUdasp">@HUdasp</a> (<a href="http://hudasp.blogspot.cz/">blog</a>)
<li><a href="https://twitter.com/IAmAwesome24_7">@IAmAwesome24_7</a> (<a href="https://www.abclinuxu.cz/blog/poznatky">blog</a>)
<li><a href="https://twitter.com/kaja47">@kaja47</a> (<a href="http://k47.cz/">blog</a>, <a href="http://funkcionalne.cz/">Funkcionálně.cz</a>)
<li><a href="https://twitter.com/LukasSparrow">@LukasSparrow</a>
<li><a href="https://twitter.com/mnumerato">@mnumerato</a> (<a href="https://mareknumerato.wordpress.com/">blog</a>, <a href="http://humanaction.cz/">HumanAction.cz</a>)
<li><a href="https://twitter.com/OzzyCzech">@OzzyCzech</a> (<a href="http://www.nabito.net/">blog</a>)
<li><a href="https://twitter.com/roxetak">@roxetak</a>
<li><a href="https://twitter.com/xxxxmarek">@xxxxmarek</a>
<li><a href="https://twitter.com/ZbyCZ">@ZbyCZ</a>
</ol>
Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com0tag:blogger.com,1999:blog-7247548023065923707.post-62745666177639644792012-11-21T05:14:00.001-08:002012-11-21T05:14:08.144-08:00Komunismus vs. demokracie. Nebo komunismus+demokracie?<p>Pan Okamura <a href="http://okamura.blog.idnes.cz/c/304478/Zase-tu-beha-strasak-komunismu.html">označil</a> komunismus za asi nejdemokratičtější systém, který svět poznal. Jak se vlastně k sobě má komunismus a demokracie? Jsou to dva neslučitelné systémy, nebo mají mnoho společného?
<p>Jistěže komunismus je velmi demokratický. Když půjdeme do extrému, demokraticky se rozhodne, kdo dostane jakou práci a kdo musí pracovat kolik hodin. Demokraticky se rozhodne, kdo z toho bude co mít. Demokraticky určíme, kdo bude mít jakou pracovní dobu. Když se půjde do hospody, demokraticky se odhlasuje, že bude platit „tamten pán u okna”. (Pokud teda rovnou nezrušíme peníze.)
<p><strong>Komunismus má s demokracií mnohé společné. Ale já asi nejsem moc demokrat.</strong> Nechci dělat referendum o barvě sousedových bot. Brzy by mohlo dojít i na moje boty.
<p>Druhá věc je, že ve chvíli, kdy se moc příliš koncentruje, což je i případ silných demokratických států (moc se soustředí přinejmenším v procesu voleb), nastane velká motivace tuto moc získat jen pro sebe. Ať už jde o <a href="https://kinderporno.cz/d/node/885">lehký tuning hlasovacích zařízení</a>, zavedení <a href="https://cs.wikipedia.org/wiki/D%27Hondtova_metoda">D'Hondtovy metody</a> nebo kompletní zfalšování voleb. Z části jde navíc o přirozený jev, kdy se rozhoduje o mnoha věcech současně, ale volič má jen velmi malý hlas, takže se mu příliš nevyplatí investovat čas do správného výběru. Dopad správného rozhodnutí na něj bude malý, dopad špatného rozhodnutí též. (Mimochodem, doporučuji <a href="http://www.mises.cz/videa/o-prezidentskych-vo-bach-125.aspx">Schiffův komentář k prezidentským volbám v USA</a>.) Aniž bych choval odpor k bohatým lidem, právě ti dostávají moc (pokud chtějí) v demokracii. A to zvláště v silném státě, kde je moci hodně na jednom místě.
<p>To nás přivádí k důvodu, proč se období Československa od 1948 do 1989 často nazývá nedemokratické. Ono vycházelo z demokratických principů voleb. Ale moc státu byla tak velká, že se vyplatilo investovat různé prostředky do jejího získání. Ať už šlo o ovládnutí médií pro vytvoření „vůle lidu”, nebo nátlak u voleb.
<p>Podstatné ale je, základním nedostatkem komunismu není absence demokracie. Tím je nerespektování svobody.
Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com0tag:blogger.com,1999:blog-7247548023065923707.post-14001551437571287492012-10-08T13:22:00.000-07:002012-10-08T13:23:16.535-07:00Proč je zboží na černém trhu častěji nekvalitní?<p>Setkáváme se s tím, že zboží z černého trhu je pochybné kvality. Drogy jsou ředěné, alkohol vyroben z denaturovaného lihu. Aspoň se to říká, lvastní výzkum jsem neprováděl. Ale věřme tomu. (A Silk Road nechme na chvilku stranou.) Proč tomu tak je? Je za tím nedostatek regulací či státní kontroly, nebo naopak za to mohou samotné regulace?
<p>Ano, oficiální trh je regulován a státem kontrolován. Máme na to různé úřady, například <a href="http://www.szpi.gov.cz/">SZPI</a>. Nabízí se tedy myšlenka, že státní kontrola má na kvalitu blahodárný účinek. Že zákazník je člověk neuvěřitelně hloupý a nechtěl by při absenci SZPI (a dalších úřadů) nezávislý certifikát kvality. (Ten mimochodem platíme už teď z daní. Ale nemůžeme si moc vybírat, úřady mají prakticky monopol. A hlavně privilegium.) Nebo že zákazník kvalitu neřeší a koupí jen to nejlevnější. (Kdy jste si naposledy kupovali potraviny značky Euroshopper?)
<h2>Černý trh = volný trh?</h2>
<p>Na první pohled se opravdu může zdát, že černý trh nezná regulace a je na nich nezávislý. To je ale chyba. Na černý trh mají regulace přímo zásadní vliv. Bez nich by tento velmi specifický trh (jak si brzy ukážeme) ani nemohl existovat.
<h2>Určitý druh privilegií</h2>
<p>Je určitě pravda, že se černý trh snaží působení regulací vyhnout. Umí to ale každý? Troufli byste si na to?
<p>Zatímco na skutečně volném trhu by o tom, kdo může co vyrábět, prodávat a distribuovat rozhodovaly zejména schopnosti co možná nejlevněji vyrobit/dopravit/nakoupit co nejžádanější (a tedy i dostatečně kvalitní) výrobek, na černém trhu tyto schopnosti jsou více či méně upozaděny. Vyrábět, prodávat a distribuovat mohou ti, kteří si na to troufnou. Ti, kteří se nebojí kontrolních orgánů. Ti, kteří umí výrobu utajit. Mafiánské zázemí výhodou. To je ale teprve to menší privilegium.
<h3>Korupce kontrolních orgánů</h3>
<p>Kontrolní orgány mají velkou moc. Pokud se jim člověk neumí vyhnout, mohou mu jeho podnikání zastavit nebo aspoň znepříjemnit. Koncentrace moci ale není obvykle nic dobrého. Lidé jsou úplatní a kontrolní orgán není až tak závislý na tom, jestli ho chce někdo (kromě vlády) financovat. A jaké morální zábrany mohou mít lidé, kteří se nebojí jiným říkat, co je pro ně dobré, a tento názor vynucovat silou?
<p>Korupce typu „nechte nás být” by sama o sobě nevadila. Ta pouze snižuje účinnost restrikcí. Problém je zatím „jen” v tom, že bez této korupce je obtížné se na trh dostat. Jak ale upozornil Murray Rothbard, nabízí se zde i jiné možnosti. Kontrolní orgán má moc udělovat privilegia. Bude přehlížet jednoho výrobce, ale o to víc půjde po ostatních. A když se to dobře podá, lid mu za to ještě zatleská.
<h2>Nutnost utajení</h2>
<p>Jaké značky marihuany znáte? Kterou byste mi doporučili, když ještě nemám zkušenost? Která značka je dostatečně kvalitní, ale ne zbytečně drahá? Dočtu se tuto informaci na diskusním fóru? Kde tuto značku marihuany nakoupím?
<p>Jak je patrné, zákazník chce jisté informace. Zvlášť pokud chce kvalitu. Ale tytéž informace zajímají i policii, která by mohla začít konat. Takže informace buď jsou dobře dostupné a výrobce navštíví policie (a moc dlouho na trhu nezůstane), nebo jsou špatně dostupné. Obojí zákazníkovi škodí, pokud chce kvalitní zboží.
<p>Dokonce může nastat snaha vystupovat pod cizí značkou. To se asi nebude týkat marihuany, která je postihována jako taková. Ale alkoholu ano. Vystupování pod cizí značkou je zavrženíhodné a jde o klamání zákazníka. Prostor je pro to vždy. Ale na černém trhu se to může stát nutností, protože <strong>vlastní značka by budila pozornost například finančního úřadu</strong>. Paradoxně tak cizí značka může představovat nižší riziko než vlastní či žádná značka. Na zavrženíhodnosti se tím nic nemění, ale na motivaci ano.
<h2>Absurdní způsoby výroby</h2>
<p>Ve výrobě alkoholu se až tak nevyznám, ale něco je jasné: Vyrobit alkohol, <a href="https://cs.wikipedia.org/wiki/Denaturovan%C3%BD_ethanol">přidat do toho sajrajty (aby se to nedalo pít)</a> a následně <a href="http://aktualne.centrum.cz/domaci/kauzy/clanek.phtml?id=666021">z toho ty sajrajty jinými sajrajty dostávat ven (aby se to dalo pít)</a> je dost neefektivní proces a na skutečně svobodném trhu by v konkurenci kvalitnějšího alkoholu s nižšími výrobními náklady těžko obstál. Přesto se to na černém trhu vyplatí. Nejspíš je přímá výroba alkoholu příliš dobře odhalitelná. Náročná asi není (to jen odhaduji), ale teoreticky i to by mohlo být vysvětlení, protože na černém trhu není odbornost při výrobě to nejdůležitější.
<p>A nemusíme zůstávat jen u alkoholu. Jistě jste již někdy slyšeli o pokoutním domácím vaření pervitinu a možná i o nějakém výbuchu. Nechci hájit ohrožení okolí výbuchem. Ptám se ale: docházelo by k tomu, kdyby na výrobě pervitinu nebylo co skrývat a mohli jej vyrábět specialisté v továrnách?
<h2>Kdo z toho profituje a komu to škodí?</h2>
<p>Ačkoli jde snad výhradně o regulace výrobců, právě ti na tom mohou profitovat. Ale jen někteří – zejména ti na černém trhu. Mají totiž dost redukovanou konkurenci. A i pokud existuje legální konkurence (třeba u alkoholu), stát ji háže klacky pod nohy. Díky tomu si mohou i za nezdaněný alkohol účtovat cenu jako za zdaněný. Nižší cena by byla podezřelá. Už v roce 2010 <a href="http://aktualne.centrum.cz/domaci/kauzy/clanek.phtml?id=665492">se to prý týkalo skoro poloviny trhu s alkoholem</a>.
<p>Ačkoli zákazník není regulován (nebo jen málo), právě on je jednoznačně těmito regulacemi poškozen, protože platí vyšší cenu za nižší kvalitu na málo konkurenčním trhu. Poškozeni jsou i případní legální výrobci. A také všichni, kdo chtěli uspokojovat přání zákazníků svými kvalitními výrobky, ale neměli odvahu či schopnost restrikcím či zákazu vzdorovat. Práci jim sebrali méně odborní, kteří by se na skutečně svobodném trhu v této oblasti neuchytili.
<h2>Silk Road: zázrak na černém trhu?</h2>
<p>Možná mi někdo bude oponovat tržnicí Silk Road. Tam údajně lze nakoupit <a href="http://www.root.cz/zpravicky/obchod-s-drogami-silk-road-vydelava-pomoci-bitcoin-dva-miliony-dolaru-mesicne/">kvalitní nelegální zboží</a>. (Nezkoušel jsem.) Ale právě Silk Roadu se povedlo (aspoň prozatím) překonat některé (ne všechny) zmíněné problémy. Například dostat se k fyzické identitě prodejce sice není snadné, ale přitom <strong>si prodejce buduje reputaci a má svůj nick (obdoba značky)</strong>. Stále to není ideální, protože v případě podvodu nelze použít soud ani podobnou instituci, ale <strong>patrně i samotná reputace je pro prodejce velmi důležitá, když 98 % hodnocení je kladných</strong>. Regulační úřady zde zřejmě nefungují, ale nejspíš tu až tak nechybí.
<p>Není jasné, jestli nenastane nějaké větší sledování pošty, ale zatím to asi vychází. Silk Road nevyřešil přímo restrikce, ale je možno vyrábět ve velmi odlehlých oblastech, kde jsou restrikce minimální (nebo není tak těžké je obcházet), soustředit se na kvalitní výrobu a distribuci nechat na prostředníkovi. Silk Road tak umožnil černý trh přiblížit podmínkám skutečně svobodného trhu, aspoň prozatím. A nese to své ovoce. Buďme rádi. Kéž by k takovéto transformaci došlo na větší části černého trhu. Alkohol k pití jsem na Silk Roadu zatím nenašel. Pokud se objeví, možná to bude brzy bezpečnější než nákup alkoholu v samoobsluze v ČR. Zvlášť pokud Heger prosadí další zvýšení spotřební daně z alkoholu.
<h2>Jsou výrobci/prodejci/distributoři na černém trhu špatní?</h2>
<p>Je pravda, že černý trh zvýhodňuje mafii a podobné. Ale na druhou stranu bych neodsuzoval všechny. Věřím, že někteří se prostě jen umí skrýt a využívají situace, která nastala nezávisle na nich. Bez nich by to pro zákazníka bylo ještě horší – ještě méně konkurence, ještě menší výběr, ještě vyšší ceny apod. Neodsuzoval bych paušálně.
<h2>Pár slov závěr</h2>
<p>Pokud se někdo bude tvářit, že ví, co lidi chtějí, lépe než oni sami, je na místě přemýšlet. Nejspíš jako řešení nabídne nějakou regulaci či další speciální daň. Odhlédnu-li od té odvahy rozhodovat za někoho proti jeho vůli (a bez jeho souhlasu), výsledný účinek může být jiný než slibovaný. Přemýšlejme v souvislostech – komu se to hodí, komu to uškodí, kdo a jak se přizpůsobí a co si kdo promítne do ceny. Pokud něco nesedí, nebojme se na to upozornit okolí. A podle mých zkušeností často něco nesedí.
Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com0tag:blogger.com,1999:blog-7247548023065923707.post-18184100618346580302012-08-09T04:03:00.000-07:002012-08-09T04:03:26.434-07:00Stát vs. rodina: Kdy komunismus ani socialismus nebude fungovat<p>Ačkoli si to možná nepřiznáváme, s komunismem se většina (i z nás mladších) setkala a dokonce i mnohdy fungoval. Bylo to v rodině. Proč může fungovat v rodině, ale fatálně selhává na úrovni státu? Čím se rodina od státu tak zásadně liší?
<h2>Kdy komunismus může fungovat?</h2>
<p>Aby komunismus mohl fungovat, musejí být splněny určité podmínky:
<ol>
<li>Členové musejí mít chuť a morální sílu myslet na druhé, pomáhat jim a nezneužívat svých možností. Pár poznámek k tomu:
<ul>
<li>Tuto podmínku nejde dobře splnit bez dobrovolnosti. Pokud jsem k něčemu druhými nucen, budu to provádět spíš tak, aby se neřeklo. Bez nadšení pro věc.
<li>Také je těžké tuto podmínku splnit bez možnosti trestu v nějaké podobě.
<li>Pro čisté příjemce může být trestem i odchod dárců. Možnost odchodu dárců je negativní motivace i pro příživníky z povolání a zároveň podmínka dlouhodobé dobrovolnosti. (Teoreticky by člověk mohl dát jednou pro vždy dobrovolný souhlas, ale pokud si to časem rozmyslí, nebude se jako dobrovolník chovat.)
</ul>
<li>Musí být nějakým způsobem pokud možno všem co nejlépe zřejmé, co chtějí druzí, aby se tomu mohli přizpůsobit.
</ol>
<p>Možná tyto dvě podmínky jsou i postačující, můžete se k tomu vyjádřit v diskuzi. Každopádně se rodina od státu dost zásadně liší v tom, jak jsou tyto podmínky splněny.
<h2>Situace v rodině</h2>
<h3>Po založení rodiny</h3>
<p>Rodina začíná dobrovolným svazkem muže a ženy. (Nebudu teď řešit, jestli je ten svazek stvrzen úřadem, církví, smlouvou či třeba kmenovým náčelníkem – to je tady nepodstatné.) Tento svazek vzniká dobrovolně. I přes určité možné komplikace může v některých případech zaniknout. (Za určitých podmínek se to týká i křesťanských svazků, jen tak na okraj.) Do tohoto svazku zřejmě obvykle dobrovolně vstupují jen lidé, kteří se už do jisté míry znají, mají se rádi apod. Splnit obě podmínky není v této chvíli problém. Aspoň většinou.
<h3>Malé děti</h3>
<p>Po čase se přidávají děti. Ty zde do určitého věku představují v mnoha ohledech čisté příjemce. I když si samy nevybraly rodinu, do které se narodí, mají přinejmenším motivaci zůstat. Viděli jste už malé dítě, kterému maminka pohrozila, že ho tedy nechá být a odejde? Už takto malé dítě má do jisté míry ekonomický styl myšlení a vidí, že by ztratilo více, než by získalo. (V ekonomii nejde zdaleka jen o peníze.) Dítě sice v této chvíli nemá možná moc dobrou představu, po čem touží maminka a tatínek, ale stejně je zpočátku spíše příjemcem.
<p>I rodiče v tom jsou značnou měrou dobrovolně. Dítě si nechali, ačkoli mohli udělat radost některému bezdětnému páru. Ano, dál je už té dobrovolnosti méně (nepočítáme-li krajní možnost – opustit dítě a ponechat jej svému osudu), ale mají pro případ zlobení k dispozici celou škálu trestů, kdyby nic jiného. To neznamená, že musí všechny využít. Někdy stačí pohrozit. I přesto ale bývá mezi rodiči a dětmi dobrý vztah. Lidé, kteří mají hrůzu z malých dětí, zřejmě využijí v dostatečné míře antikoncepci a děti mít nebudou.
<h3>Dospívající děti</h3>
<p>Časem se situace pochopitelně mění a děti dospívají. Stávají se samostatnějšími. Na jednu stranu možná odpadávají z různých důvodů tradiční tresty, ale možnosti tu pořád jsou, pokud si nevydělává. Pokud si už vydělává víc než symbolicky, jsme ve stádiu, kdy může jít z domu, nebude-li soužití vítáno. Teď je celkem jedno, kdo se tak rozhodne – jestli rodiče, či děti. (Často k tomu ale nakonec nedochází kvůli špatným vztahům, ale třeba kvůli založení vlastní rodiny. To můžeme brát jako dobrý výsledek.)
<h3>Jen tak na okraj</h3>
<p>Můžete namítnout, že i v rodině mohou fungovat například oddělené finance. Nic proti tomu. Splnění těch dvou podmínek neznamená, že komunistické principy budou nevyhnutelné. Pokud manželé chtějí, mohou si mezi sebou třeba účtovat úplně všechno. Pokud jim to bude tak vyhovovat, budu ten poslední, kdo jim v tom bude bránit. A pokud jim to nevyhovuje, proč by to dělali?
<h2>Situace ve státě nebo ve velké oblasti</h2>
<p>Stát je celkem velké území. Jeho obyvatelé jsou relativně různorodí. (Klidně všichni mohou být třeba černoši, i pak budou nejspíš dostatečně různorodí v charakteru.) Každý zná sice své nejbližší okolí (ne nutně geograficky), ale ostatní většinou vůbec. Lidé mají různé názory a ne každý bude chtít komunismus. (Například já nechci komunismus na úrovni státu.) Nepůjde to tedy asi udělat moc dobrovolně, z čehož plynou další problémy. Zcela určitě se v takovém množství lidí navíc najde někdo nečestný, kdo situace bude zneužívat. Přinejmenším je tu lákavá možnost se stát free riderem.
<h3>Situace bez centrální autority</h3>
<p>Pokud bychom uvažovali nad nějakou společností bez centrální autority, nejspíš by v komunistické formě dlouho nevydržela. Jak by přibývalo free riderů, ubývala by motivace. A protože by nebyla nějaká moc, která by společnost mohla při komunismu udržet, lidé by začínali komunismus postupně opouštět. Motivace udržet komunismus by se vytratila asi jako u <a href="http://adamabelovsky.blog.idnes.cz/c/242410/Obamuv-socialismus-experiment.html">tohoto příběhu o přerozdělování známek</a>. Teď není podstatné, jestli ten příběh je pravý, nebo <a href="http://www.mises.cz/clanky/socializmus-alegoria--599.aspx">smyšlený</a>. Tady bych ale věřil ve šťastný konec v podobě přechodu na tržní hospodářství.
<h3>Situace s centrální autoritou – centrální plánování</h3>
<p>Druhá možnost je, že máme nějakou centrální autoritu, která provádí centrální plánování. To všechny problémy ještě zvětšuje. Centrální plánovač má velkou moc, ale často schází brzdné mechanismy. Zneužití moci, která mu byla přidělena, je často lákavé, a o moc se často zajímají především grázlové. Můžeme ostatně nahlédnout před rok 1989. Člověk se sice nedoslechl o korupci v novinách, ale spíš proto, že si to tam nikdo nedovolil napsat, když už se to dozvěděl.
<p>I kdyby ale všichni lidé byli čestní, centrální plánování nebude fungovat dobře. Na rozdíl od trhu zde nejsou signály, které by říkaly, co si lidé přejí a co ne. Není tu informace (natož motivace) v podobně možného zisku či možné ztráty. Omyl na trhu je prostor pro konkurenci, která to udělá lépe, nebo <a href="http://devian.cz/2011/chvala-spekulace-vrazi-z-wall-streetu-a-nevinna-pretty-woman/">pro spekulanty</a> či překupníky, kteří pomohou s optimální cenou. Naproti tomu omyl v centrálním plánování nemá snadné řešení, zvlášť pokud si centrální plánovač není schopen svůj omyl připustit. Může mít ale velké následky. To, že si centrální autorita není ochotna připustit svůj omyl, nemusí nutně být projevem nečestnosti ani ješitnosti. To <a href="http://venturebeat.com/2010/09/27/nokia-had-iphone-like-prototype-in-2004-but-killed-it/">může ostatně být problém i ve velkých firmách jako třeba Nokia</a> a pramenit to může i jen z nepochopení. V případě firem to ale řeší konkurence, v případě státu nikdo.
<h2>Závěr</h2>
<p>Závěr z toho mi vychází celkem jasně: Až někdo bude říkat, že komunistické principy fungují v mnoha rodinách a tedy mohou fungovat i na úrovni státu, nenechte ze zmýlit. V rodinách sice můžeme mnohdy narazit přinejmenším na prvky blízké komunismu, ale situace v rodině se od státu zásadně liší.Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.com0