2. října 2011 ↴

Povídka – kam s ní?

Napsal jsem povídku a uveřejnil jsem ji přímo jako HTML stránku. Pak mi došlo, že jsem něco podobného už dlouho neudělal. Teď nemyslím psaní povídky (byť to jsem taky dlouho neudělal), ale uveřejnění nějakého textu přímo jako HTML stránku.

Došlo mi, že to možná znamená “návrat ke kořenům”.

Mohl jsem uveřejnit povídku jako blogpost, nebo klidně jako G+ post (maximální velikost G+ postu je něco kolem 100KB…). Mohl jsem si taky založit účet na serverech typu “poeta.cz”. Bylo by to asi rychlejší. Ale chtěl jsem mít co největší kontrolu nad prezentací. Chtěl jsem, aby se povídka i na internetu četla jako kniha, ne jako blogpost. Bez distrakcí. Pro všechny stejně. Bez nutnosti zapínat Safari Reader nebo stránku filtrovat přes Instapaper. Bezproblémově i na telefonu nebo tabletu. Chtěl jsem, aby byl text vysázen v určitém typu písma, s určitou výškou řádků, odsazením apod.

A to mi prostě žádná platforma, kterou znám, nenabídla. Přitom nebylo vůbec těžké tu stránku během hodinky napsat. Zdá se mi, že s postupující standardizací CSS a HTML to je čím dál lehčí. Největší problém jsem měl s “optimalizací” pro mobily, ale to nakonec vyřešily dva řádky:

<meta name="HandheldFriendly" content="true"/>
<meta name="viewport" content="width=device-width, height=device-height, user-scalable=no"/>

Samozřejmě netuším, jestli se k téhle metodě ještě někdy vrátím. Možná je to slepá ulička. Ale jak nad tím teď přemýšlím, říkám si, jestli by web neuvítal publishing platformu pro delší texty, s minimem distrakcí a s maximem kontroly nad typografií. Ne tumblr, ne posterous. To jsou pořád blogy. Něco mnohem “literárnějšího”.

28. července 2011 ↴

Vyplatí se loterie?


Občas mám problémy vysvětlit někomu, jaká nebetyčná blbost je sázení v loterii. Lidé stejně nakonec řeknou něco ve smyslu "ale co kdyby to náhodou vyšlo!" Co na to má po několika minutách vysvětlování člověk říct?

"Loterie je daň za blbost", říkají někteří. Nesouhlasím. Chápu, že matematika není pro každého, a některé věci prostě nejsou intuitivní. Dal jsem si proto takové duševní cvičení: jak hloupost loterie vysvětlit co nejjednodušeji a nejvíce pochopitelně. Tady je výsledek:

Jana a Honza se oba chtějí dobrat sumy 20 miliónů Kč (tedy jackpotu Šťastných 10). Jana šetří každý den 10 Kč. Honza si každý den kupuje loterijní lístek Šťastných 10, také za 10 Kč.

Pro našetření této částky bude Jana potřebovat 2 milióny vkladů, tedy 5479 let.

Nicméně: Ve chvíli, kdy má Jana našetřeno (tedy má 20 melounů v kapse), Honza s velkou pravděpodobností (79.9%) ještě nic nevyhrál. Skóre 20 miliónů ku nule.

Aby měl Honza alespoň 50:50 šanci, že vyhraje, potřeboval by sázet 6,177,782krát, tj. až do roku 18,936 n.l. To znamená, že sázení Šťastných deset je trochu jako čekání 17 tisíc let a pak hod mincí. :)

Kdyby chtěl mít Honza skoro jistotu (99% — protože úplnou jistotu nebude mít nikdy), nezbývá mu než sázet 112 tisíc let.

Pro představu, stejný počet let uplnynul od doby neandrtálců po dnes. Za 100 tisíc let bude mnoho dnešních souhvězdí k nepoznání kvůli pohybu hvězd v Galaxii.

Poznámky pro pozorné:
  1. Jana by měla 20 miliónů samozřejmě mnohem dřív — díky úrokům.
  2. Do úlohy na druhou stranu vůbec nepočítám fakt, že Honza může vyhrát i něco menšího než jackpot.
  3. I tak by byl ale výsledek stále o mnoho příznivější pro Janu.

Příklad jsem napsal co nejprimitivněji v Pythonu, abych měl možnost měnit parametry a případné zájemce provést celou logikou. Pravděpodobnost výhry ve hře Šťastných 10 jsem vzal z bakalářské práce Ondřeje Staňka "Loterie". Samozřejmě uvítám jakékoliv opravy či připomínky.


#!/usr/bin/env python
# encoding: utf-8

import datetime
import math

jackpot = 20000000
cena_listku = 10
pravdepodobnost_vyhry = 1.122e-07 # viz http://is.muni.cz/th/78265/prif_b/Loterie.pdf, str. 14

print(u"Jana a Honza se oba chtějí dobrat sumy {jackpot:n} Kč (tedy jackpotu Šťastných 10). Jana šetří každý den {suma} Kč. Honza si každý den kupuje loterijní lístek Šťastných 10, také za {suma} Kč.\n".format(jackpot=jackpot, suma=cena_listku))

pocet_nutnych_vkladu = jackpot / cena_listku
pocet_let_jana = pocet_nutnych_vkladu / 365.0
rok_jana = int(datetime.datetime.now().year + pocet_let_jana)

print(u"Pro našetření této částky bude Jana potřebovat {pocet:d} vkladů, tedy {pocet_let:n} let.\n".format(pocet = pocet_nutnych_vkladu, pocet_let = pocet_let_jana))

pravdepodobnost_prohry = 1 - pravdepodobnost_vyhry

pocet_sazek = pocet_nutnych_vkladu
kumulativni_pravdepodobnost_prohry = pravdepodobnost_prohry ** pocet_sazek
kumulativni_pravdepodobnost_vyhry = 1 - kumulativni_pravdepodobnost_prohry

print(u"Nicméně: Ve chvíli, kdy má Jana našetřeno (tedy v roce {rok} n.l.), Honza s pravděpodobností {p:.1%} ještě stále nevyhrál!\n".format(rok=rok_jana, p=kumulativni_pravdepodobnost_prohry))

fifty_pravdepodobnost = 0.5
pocet_nutnych_sazek_fifty = math.log(fifty_pravdepodobnost, pravdepodobnost_prohry)
pocet_let_honza_fifty = pocet_nutnych_sazek_fifty / 365.0
rok_honza_fifty = int(datetime.datetime.now().year + pocet_let_honza_fifty)

urcite_pravdepodobnost = 0.01
pocet_nutnych_sazek_urcite = math.log(urcite_pravdepodobnost, pravdepodobnost_prohry)
pocet_let_honza_urcite = pocet_nutnych_sazek_urcite / 365.0
rok_honza_urcite = int(datetime.datetime.now().year + pocet_let_honza_urcite)

print(u"Aby měl Honza alespoň 50:50 šanci, že vyhraje, potřeboval by sázet {pocetf:d}krát, tj. až do roku {rokf} n.l. Kdyby chtěl mít skoro jistotu (tj. 99%, úplnou jistotu nebude mít nikdy), nezbývá mu než sázet {let} let.\n".format(pocetf=int(pocet_nutnych_sazek_fifty), rokf=rok_honza_fifty, let=int(pocet_let_honza_urcite)))


Ještě krátká varianta jako "matematický příklad":

Člověk sází 10 Kč denně na Šťastných 10. Jak dlouho musí sázet, aby měl šanci 50:50 (hod mincí), že vyhraje jackpot? Odpověď: 17 tisíc let.


23. července 2011 ↴

Sociální média ≠ hustopřísná revoluce


Aby bylo jasno: Ano, sociální média rozhodně mění vztah "velkých" (např. firmy) a "malých" (jednotlivci). Už jenom proto, že hodně lidí dnes může velmi lehce a zadarmo publikovat svůj názor tak, aby byl dostupný všem. Mediální pole se trochu srovnalo a zdemokratizovalo. Souhlas. A je to tak dobře a je to přirozený vývoj (který začal někdy s vynálezem knihtisku).

Někteří lidé ale dle mého názoru trochu ztrácí perspektivu a považují sociální média za naprostou bombič hustokrutou revoluci, která mění úplně všechno od základů. Narážím na rétoriku, jakou najdete v infotainment videích, jako je toto:



Určitě jste už viděli několik podobných, nebo to samé slyšeli na konferenci nebo na obchodní schůzce. Co se mi na tom nelíbí? Vždyť ta čísla hovoří jasně! Jo, ale autoři úplně splošťují vliv sociálních médií. To v lepším případě. V horším případě ho cíleně nafukují.

Abych byl konkrétnější, zvolím si jednu obzvlášť oblíbenou ideu. Týká se komunikace mezi firmou a zákazníkem. Zní asi takto: firmy konečně komunikují se spotřebitelem. Poprvé v historii od něj dostávají zpětnou vazbu. Sociální média jsou jejich šancí vyslyšet ty "tam venku". Komunikace many-to-many dnes střídá staré a zkomírající one-to-many.

Vážně? Jsem si celkem jistý, že firmy (aspoň ty úspěšné) vždy naslouchaly zákazníkům.
  • Spotřebitelské výzkumy. Jakkoliv to slovní spojení nezní moc sexy, dobře udělané výzkumy jsou pořád ještě mnohem validnější zpětná vazba než tweety nebo statusy.
    • Dobře udělaný kvantitativní výzkum ukazuje reprezentativní rozložení názorů v cílové skupině. Názory na sociálních sítích reprezentativní nebývají. Zkreslení vychází nejen z omezené skupiny lidí, kteří jsou na dané sociální síti, ale ještě menší skupiny těch, kteří jsou ochotní bavit se o značkách, a ještě menší skupiny témat, které dotyční chtějí na sociální síti řešit. Jak často vidíte někoho na sociální síť napsat: "Dnes jsem si nekoupil Snickers, protože jsem tlustý" nebo "Pohádal jsem se s přítelkyní po telefonu, ale přenos zvuku byl skvělý. Bravo Vodafone!"?
    • Dobře udělaný kvalitativní výzkum jde více do hloubky než feedback ze sociálních médií. Nikdo nemůže čekat, že z jednoho či dvou tweetů vytáhne víc informací než z hodinového interview. Jak říkal Henry Ford: "Kdybych se zeptal lidí, co chtějí, řekli by mi 'rychlejšího koně'." Kdyby se ale zeptal pořádně (a já jsem si jistý, že to udělal), rozhodně by se dozvěděl víc. Jak píše Roger L. Cauvin: "[Consumers] are not experts on the features or solutions; they are experts on their experiences and challenges.".
  • Prodej, tržby, tržní podíl, apod. Vzhledem k tomu, že na těchto číslech závisí budoucnost každé firmy, každý si je hlídá velmi pozorně.
    • Tady postačí příklad: nikdy jsem nikam veřejně nenapsal, že mám rád Margotku. Až do teď nebylo proč. Svoji náklonnost k téhle cihle plné kalorií ale dávám najevo tím, že si ji prostě jednou za čas koupím. Asi nemusím rozvádět, že takový způsob komunikace se zřejmě Orionu dost zamlouvá (zvlášť pokud to nedělám jenom já).
  • Zákaznická podpora. Ze všech těch revolučních řečí o sociálních médiích může člověk dostat pocit, že jediný způsob, jak se firma dozví o tom, že je něco špatně, je z Twitteru. Ve skutečnosti mnohem víc reálných problémů reálných zákazníků lze nalézt v soukolích zákaznické podpory (viz tenhle článek od eMarketeru). Ne každý chce například své technické problémy řešit veřejně.
    • Problém nastává, když zákazník žádnou zákaznickou podporu nedostane, a postěžuje si na to na sociální síti. Pak musí firma problémy jednoho člověka řešit na očích všech ostatních. (A v tomto jsou sociální média hustopřísně revoluční!)

Ještě než kliknu na tlačítko "Publikovat", rád bych zopakoval, že sociální média považuji za zásadní. Věřím například tomu, že umožnily Arabské jaro a že si ještě přičtou spoustu skalpů z řad nedemokratických hlav států. Vím také, že mění každodenní život nás všech, a že přetváří komunikaci mezi zákazníky a značkou.

Ale není to taková revoluce, že bychom měli briskně zapomenout na všechno ostatní.

3. června 2011 ↴

Jak jsem naprogramoval TMZNS

Často přepočítávám časy v různých časových zónách. Někdy je to kvůli plánování dálkových konferencí, telefonátů, apod. — v tom pomáhá Google Calendar, který vše přepočítává automaticky. Častěji jde ale o mnohem primitivnější záležitosti:

  • Když mí kolegové v New Yorku něco vypustí v 9 ráno, kolik bude u nás?
  • Má teď cenu volat (nebo spěchat s emailem) do Indie? Do Japonska?
  • Když bude živý přenos z konference v Austrálii, kolik budou mít tou dobou v San Franciscu? A u nás?

Tady je Google Calendar krátký — nebo lépe řečeno “dlouhý”, protože byť v něm takové věci můžu zjistit, je to poměrně na dlouho. Jaké jsou další možnosti? Když hledáte v Googlu třeba time in tokyo, distanete odpověď, ale pouze o aktuálním času. Nejblíž k tomu, co potřebuji, je timeanddate.com, ale tam mě neskutečně nasírá jejich uživatelské rozhraní. Za drop-down menu s tři sta šedesáti šesti (!!!) položkami bych střílel. (Později jsem našel ještě mnohem použitelnější WorldtimeBuddy a EasyClock, ale i tady bych se dostával k požadované informaci zbytečně složitě a úplně nestandardním rozhraním.)

Osobně věřím, že pro textový vstup je pořád ještě nejlepší volbou — světe div se — klávesnice. Ideálně s auto-complete. Chtěl jsem rozhraní, kde bych mohl zadat: “9” → tab → “h” → enter → tab tab → “new y” → enter — a měl bych hotovo. 10 vteřin max. Místo toho jsem dostával samé klik → scroll scroll scroll scroll → klik → klik → scroll scroll → klik … a teď zadáme čas … klik → klik … oops, vedle … klik … → klik. Hotovo uff! Teď už jen kliknout na Convert time a počkat až se načte stránka. Co když chci změnit zadání? No přece zmáčknout link “Make changes to the current search” a klikat a klikat… Co když nedej bože potřebuji upravit druhý čas a zjistit, jak se to projeví na prvním? Vše znova.

Uznávám, že můj přístup je možná trochu specifický. Spousta lidí raději kliká. Ale napadlo mě, že by snad nebylo tak těžké něco takového naprogramovat a uveřejnit to na internetu. Krom toho jsem měl zrovna absťák z programování a hořel jsem touhou vyzkoušet Traceur. A taky Chrome Web Store.

A tak po večerech vznikl TMZNS. Začal jsem cestou na Google IO (7. květen) a první verzi “uveřejnil” 1. června.

Bylo to (samozřejmě!) víc práce, než jsem čekal. (Klasický příklad uvažování typu “tohle by přece mělo být jednoduché!”) V časových zónách je nicméně bordel: rozhodně nejsou jen po hodinách, nejsou rozloženy lineárně, ani po státech, každý si přehazuje letní čas, kdy chce, někteří víc než dvakrát ročně, atd. atp. Více info na Wikipedii.

Tvorba web aplikace mi trvala déle mj. proto, že jsem si toho chtěl co nejvíc vyzkoušet. Slibný Traceur jsem po chvíli vzdal, ještě v něm totiž není implementována žádná UI knihovna. Programování v Pythonu na AppEnginu jsem začal, ale velmi brzy jsem se vydal cestou “vše u klienta” — tedy JavaScript. AppEngine využívám, ale funguje jako bezplatný, velmi rychlý a nezničitelný webhosting (s tím, že je tam prostor na nějaké jednoduché API nebo aspoň statické URL typu tmzns.com/london/newyork do budoucna).

Následoval výběr JavaScriptové knihovny. Nejprve jsem automaticky sáhnul po jQuery, ale pak jsem se zamiloval do Closure Library. O výhodách i úskalích Closure a kompilovaného JavaScriptu se chci rozepsat na českém Google Blogu, takže si tady nechci vystřílet střelivo.

Po tom, co stránka začala jakž takž fungovat, jsem nasadil stylovací nástroj CSSEdit. Podle mě nejlepší způsob, jak “malovat” stránku v CSS. (CSSEdit jsem použil i při designu tohoto blogu.)

Protože je TMZNS open source projekt (zdrojáky tady), seznámil jsem se také blíže s Google Project Hosting a s Mercurialem (rozhodně doporučuji nad SVN, alespoň pro projekt tohoto typu).

TMZNS je web aplikace (která navíc využívá CSS3 a nejlépe vypadá v moderních prohlížečích), dávalo proto velký smysl ji dát na Chrome Web Store jako “aplikaci”. S nástrojem AppMator od kolegy Paula Kinlana to byla záležitost pár minut — i když to znamená, že v tuto chvíli “aplikace” není nic jiného, než bookmark k www.tmzns.com. Aplikace i s daty má totiž přes 7MB — a takové monstrum s tak jednoduchou funkcionalitou se fakt zdráhám někomu nahrávat na harddisk. Třeba se jednou dostanu k tomu tu velikost radikálně sesekat (“mělo by to být jednoduché”).

Aplikace mi už zdárně slouží a zdá se, že se líbí i ostatním. Na Project Hostingu už jsem (doufám zdárně) uzavřel svůj první, byť kosmetický issue. (Mimochodem, je neuvěřitelné, jak rozdílné je zobrazování barev na různých monitorech — původní “subtle” zvýraznění na některých monitorech vůbec nebylo vidět.).

Mám radost z vlastní tvorby i z naučených technologií. Takové projektíky si budu dávat častěji.

8. května 2011 ↴

Kterak Filip přes velkou louži přeletěl a velká nebezpečenství v San Franciscu postoupil (část 1.)

Toto píši z hotelového pokoje v San Franciscu, v neděli 8. května ráno pacifického času. Je to jeden z těch článků, které slouží spíš jako externí paměť autora-zapomětlivce než jako cokoliv jiného.

Z Paříže do San Francisca je to kolem 9000 km a asi 12 hodin letu, ale protože letíte se sluncem, hodinky se vám posunou jen asi o 2 hodiny. Minulý let s takovou vzdáleností (LA-Praha) měl na můj organismus dost drastické následky, tak jsem se tentokrát chtěl pojistit. V návodech proti jetlagu vždy píší, že si člověk hned po vzletu má nařídit čas destinace a od té chvíle se chovat, jako by byl tam. V mém případě: v 7 ráno v Praze si nařídit 10 hodin večer, po přesednutí v Paříži zalehnout a spát. Ale jak se prý říká mezi boxery: “Každý má plán, dokud nedostane první ránu přes držku”. V mém případě: prostě nešlo usnout, a to jsem měl takový ten nafukovací polštář kolem krku a clonu na oči.

Další obrana proti jetlagu: vypít v letadle ~1 litr vody na hodinu letu. Fakt, že hodně chodíte na záchod se zároveň postará o to, že vám nezdřevění celé tělo. Koupil jsem si tedy 1.5l vody na letišti a plánoval jsem si často říkat o čaj apod. Realita: seděl jsem v prostřední řadě mezi dvěma pány, z nichž ten bližší vypadal, že jestli ho budu moc otravovat, vyhodí celé letadlo do povětří (seděl celou dobu v dlouhém černém plášti), a druhý sice neseděl v dlouhém černém plášti, ale také se na mě netvářil moc nadšeně. Jo, a oba skoro celý let spokojeně spali. Strašně nerad někomu působím nepohodlí, takže jsem vypil akorát těch 1.5 litru a dvakrát za let jsem si odskočil, pokaždé přes jiného pána. :)

Po příletu do San Francisca se zjistilo, že moje check-in zavazadlo zůstalo v Praze (problém s pojízdným pásem, který se nějakým záhadným způsobem dotkl pouze mého zavazadla). Přiletí až dnes (v neděli) odpoledne. To znamená, že mám s sebou jen příruční batoh. Žádné náhradní oblečení, a to jdu dnes odpoledne na BarCamp a na večeři s lidmi z GTUGů. Naštěstí se mnou letěl Pavel Kasík, který se zmínil o tom, že aerolinky musí poskytnout peníze na oblečení v případě, kdy člověk někam dolítne a nemá co na sebe. Forwardnul jsem tu informaci paní za přepážkou. (Abych byl fér, paní z Air France byla příjemná a pravděpodobně by se k tématu dostala i bez mého všetečného dotazu.) Zjistilo se, že člověk má v takové situaci právo na utracení až €100 za oblečení — a částka mu bude proplacena. Navíc mi paní podala tyhle epesní mikro-hřebeny a mikro-kartáčky, mikro-deodoranty a mikro-krémy na obličej. Velká paráda.

Po příjezdu BARTem do centra San Francisca (Market & Powell) jsem s povděkem zjistil, že město je stále stejně živé a šílené, jako když jsem jej v lednu opustil (moje první výprava do US). Prošel jsem kolem slavného člověka s cedulí “Jesus Christ Loves You” a několika hiphoperů s boomboxy, a ubytoval jsem se v hotelu Triton. Zkuste si představit veskrze hippie hotel — s barevnými chodbami, gay recepčním a escherovský schodištěm — vaše představa žije, hned vedle slavné brány do Chinatownu.

Odpoledne jsem na doporučení gay recepčního zašel nakoupit bundu, triko a košili do místního H&M. Tohle je výsledek (nemyslím ten zamračený ksicht, ale to, co mám na sobě). Pak jsem se najedl výborného japonského menu (za velmi příznivou cenu) v nenápadném čínském bistru v Chinatownu. Byl jsem tam už v lednu, takže jsem šel na jisto.

Po návratu na pokoj jsem chtěl ještě pracovat, ale po chvíli jsem to vzdal a lehl. Šel jsem spát někdy kolem osmé, 24,5 hodiny ranním stávání v Praze. Vstal jsem v 5 ráno — a tento text je způsob, jak jsem se vypořádal s časem, kdy je venku zima a všude je zavřeno. Teď už ale hurá do ulic!

Pokračování (možná) příště.

15. března 2011 ↴

Proč je méně (lidí) někdy více (odvedené práce)?

Odpověď je jednoduchá: čím více kolegů s podobnou náplní práce, tím větší pocit, že to udělá někdo jiný.

Když jste na něco sami, tenhle pocit nikdy nemůžete mít. Když máte jen několik kolegů, zeptáte se jich. Ale jakmile jste v organizaci, kde má 1000 lidí na starosti jednu a tu samou věc, můžete se lehce dostat do módu: “na tomhle určitě už někdo dělá” nebo hůř “proč bych to měl řešit zrovna já?”.

Dobrá zpráva je, že se proti tomu dá bojovat. Za prvé: firemní kultura. Za druhé: uvědomění si problému. Za třetí: přesnější definování povinností každého jednotlivce. Za čtvrté: issue tracking.

1. března 2011 ↴

AppEngine projekt

Pro jeden projekt (nesouvisející s Googlem) bych rád najal někoho, kdo si rozumí s AppEnginem. Nemůžu se ohánět nějakým extra vysokým finančním ohodnocením. Jinými slovy: studenti vítáni!

Ony jsou to projekty vlastně dva. Ten první je spíš na sondování možností. Zato ten druhý by mohl být pecka, děcka! :)

Pokud má někdo zájem, něchť prosím napíše mail na filip tečka hráček zavináč gmail tečka hádej co. Stačí něco jako “tady jsem”, odkaz na LinkedIn (nebo něco podobného), a — pokud je — příklad existující aplikace. Vyhrazuji si právo neodpovědět osobně na všechny maily, pokud jich náhodou přijde víc než malé množství.

Díky a tweety vítány!