Mingans posterous
Štěpán „Mingan“ Pilař: student, zvědavec, programátor, web developer, žonglér, medvídek baribal a goril.
Štěpán „Mingan“ Pilař: student, zvědavec, programátor, web developer, žonglér, medvídek baribal a goril.
I've started working on a new project called Hlasite.eu. Currently it's running on some raw PHP code mixed with Smarty templates, but that's not good enough anymore, so we're coding it from scratch using CakePHP. It's very exciting project to work on. However, it's rather complicated, so we've put quite an effort in planning and designing the whole thing.
Facing so daring project, I had to admit that I've never used proper testing in PHP before, and I had to do something about it. After baking the basic structure of the app I ran into a strange issue with test cases not running properly even without any test methods.
I dug around a bit and dropped the predefined schema in fixture in favour of fetching it from the live database. After more debugging I found out that the schema generation method doesn't work well with composite primary keys!
I'm trying MySQL Workbench for designing the database schema and it creates a composite primary key in HABTM tables over two columns. It makes sense in the design but Cake has a problem. It correctly finds out that both columns are part of a primary key, but it gives them both the AUTO INCREMENT property - that doesn't fly.
It's understandable that Cake doesn't support PK in common tables. But HABTM relationship tables seem to be a different deal to me. There are two possible workarounds:
I don't like either of them so I slightly modified the DboSource::createSchema method to look for composite PK and create proper schemas.
I still have this annoying feeling it'll bite me in the ass at some point, but I can't put my finger on when and where exactly. So I will go with it a see how it's working out.
V pátek mě Jára vytáhl na "městskou" noční šifrovací hru Po škole 2010. V životě jsem se ničeho podobného neúčastnil a šifry jsem neluštil už pět let od posledního tábora, takže jsem to bral jako skvělou příležitost protáhnout si trochu mozek. Stanovili jsme si cíl vyluštit alespoň tři šifry.
Hra začínala v sedm večer u Čínského pavilonku, u Cibulky. Protože jsme dorazili s předstihem, začali procvičovat na zapeklité, asi tabulkové šifře, kterou přinesl Petr. V sedm nula jedna se hra po hvizdu rozběhla a 70 týmů vybalilo první zadání.
Úkol byl nechutně jednoduchý, ale my na něj šli komplikovaně a měli jsme trochu smůly. V obálce byla mapa okolí v měřítku 1 : 3 333 se sítí značenou pomocí karet (od srdcové dvojky po krále a od pikového esa po krále) a třináct seřazených karet s dvěmi odlišnými hlavami. Na první pohled bylo jasné, že karty poslouží jako souřadnice na mapě. Nakreslili jsme si tedy body a snažili se v nich něco najít. Po nějaké době jsme zkusili prostě se jít podívat na místa jednotlivých souřadnic, ale nic tam nebylo, takže jsme bádali dál a dál.
Když už se blížil limit zveřejění nápovědy, vyrazil Petr s Járou omrknout koordináty v lese ještě jednou. Ukázalo se, že na nich skutečně něco je a Dáda jen měla smůlu a nevšimla si při první obchůzce papíru. Oběhli jsme tedy celý les a nafocené symboly poskládali dohromady. Výsledkem bylo "km 9,5 žel. trati." Jako jedni z posledních jsme se tedy vydali najít kilometr 9,5.
Další stanoviště jsme po chvíli našli a vyzvedli si šifru. Rozložili jsme se mezi ostatními světélkujícími týmy a dali se do práce. Byli jsme v té době na 69. pozici. Tentokrát šlo o příběh s rozhodováním a odkazy na jednotlivé kroky. Najít správný průchod příběhem netrvalo dlouho. Součástí textu byla i informace o obrácení a posunutí o osm znaků. Stačilo tedy zapsat čísla kroků, šoupnout je o osm míst a pozpátku přeložit na písmena abecedy.
Vyrazili jsme k rybníku do Jinonic. Potom, co jsme se shodli, že "doleva" vlastně znamená "rovně vpravo," jsme dorazili do ulice Stodůlecké. U rybníka jsme zjistili, že všechna zadání jsou rozebraná, takže jsme si museli posloužit pouze fotkami textu, než dorazil org s dalšími kopiemi. Šifra měla čtyři části v podobě alb hudební skupiny. První album se jmenovalo Papoušek na motocyklu a názvy skladem evokovaly jednoduché tvary, jako písmenka pro děti (kolo, had, hřeben). Druhé album se jmenovalo Začátek konce. Stačilo tedy sepsat počáteční písmena posledních slov názvů skladeb. Třetí album neslo název Filipíny - délka slabik názvů odpovídala morseovce. Po třech částech jsme měli text "osamělá bříza od Sv. Vavřince n."
Čtvrté album nás stálo tři hodiny času. Jára sice rychle přišel s řešením, ale nebylo příliš správné. Přesunuli o pár set metrů dále ke kostelu Sv. Vavřince, ale nemohli jsme najít osamělou břízu. Prochodili jsme okolí křížem krážem, ale nikde žádný vhodný strom. Následovala snaha o vyluštění posledního alba Čas se zajímavými názvy skladeb. Jednotlivé týmy se postupně vytrácely, ale některé stále zjevně řešily ten samý problém, jako my. Střídavě jsme obcházeli okolí, snažili se najít řešení a nadávali. Kolem druhé ráno jsem se rozhodl vypravit pro nápovědu na I. P. Pavlova, ostatní se vydali zase hledat.
Když jsem dorazil na autobus, dozvěděl jsem se, že našli břízu s dalším zadáním a mám se vrátit. Třetí šifru jsme v podstatě splnili jen an 75 %, takže jsme stále neměli splněnou kvótu. Sešli jsme se a začali pracovat na čtyřce. Neměla žádné textové zadání, pouze jsme dostali deset dalších karet, které org promíchal. Díky tomu, že už u první šifry jsme našli zajímavou shodu mezi kartami - častý výskyt některých hodnot a "párovatelnost" napadlo mě vzít karty dohromady a použít je jako domino. Vznikl uzavřený kruh s několika zaměnitelnými úseky. V dalším kroku jsme kartám přiřadili číselnou hodnotu podle pořadí karet na mapě z první šifry. Výsledek byl nesmyslný blábol. Na základě častého výskytu srdcové pětky, tj. čísla 4 a písmene D, jsme zkusili posunout abecedu o jeden znak a náhle se z nesmyslu vynořila slova "most" a "zelezn." Prohodili jsme pár kombinací a získali text "nejbližší železničí most." Celá šifra nám trvala asi 15 minut, což nás nakoplo k pokračování.
Most se nacházel v Prokopském údolí, takže jsme se kolem třetí ráno spustili do Prokopáku. Našli jsme most, světlušky posedávající okolo a nakonec i zadání páté šifry. Žádný text, pouze obrázek přibližně ve tvaru písmen "TiFR" ze zvířecích stop, vlnovku z otazníků překříženou otisky lidských chodidel a mostek s šipkou. Po sotva dvou minutách napadlo Petra, že zná shluk ulic, které se jmenují podle zvířat a jsou nedaleko. Porovnali jsme mapu a bylo to tak. Vlnovka odpovídala potoku s brodem a mostkem na konci Dalejského údolí. Po deseti minutách jsme se vydali vzhůru Prokopákem k dalšímu stanovišti.
Už za světla, něco po čtvrté ráno, jsme našli další šifru. Po čeknutí SMSkou jsme se dozvěděli, že z 69. místa jsme se posunuli na 48! (Samozřejmě vedoucí týmy byly tou dobou u šifry č. 12).
Šestka nám dala zabrat. Obsahovala 14 linek pozemní dráhy Podprahy (z příběhu, který hru doprovázel) ve výlukovém vedení přes Prahu. Názvy reálných zastávek a čtvrtí se tak střídaly s místy jako Poddědek, Brekov, Ithaka, Tyčkovský hampejz, Fauna nebo Žlutňany. Spousta názvů byla vtipná a víceméně snadno se daly dekódovat jejich pražské ekvivalenty. Co s nimi jsme ovšem už nevymysleli a ve čtvrt na šest hru vzdali. Podle konečných výsledků se ukázalo, že hodně týmů na šestce odpadlo (většina z nich bohužel o čtyři hodiny dříve než my).
Těm, kteří zvládli vyluštit šestou šifru i šifry následující patří můj obdiv. Podle diskuse na stránkách hry byla šestka jednou z nejtěžších úloh celé trati a složitostí by se hodila spíše na konec trasy. Ze 70 týmů dokončily pouze čtyři, Rudá záře dokonce již po necelých 14 hodinách hry. My splnili předsezvetí, rozluštili čtyři šifry a skvěle se přitom pobavili.
Děkuju pořadatelům, že všechno takhle skvěle připravili a správně načasovali počasí. Rozhodně se těším na příští ročník a na jakékoliv podobné hry. Samozřejmě že každá složitá šifra si nese jisté riziko frustrace, ale zábava při řešení to hravě vynahradí.
Blíží se zkouškové a podle pravidla "You can do anything as long as there's something else you should be doing" čtu stále víc knih, které nepatří na hromadu učebnic.

Překonal jsem svou zaostalost a přečetl Nikdykde. Narazil jsem na vydání od Polarisu z roku 2006 v překladu Ladislavy Vojtkové, které je dle předmluvy syntézou anglické a zjednodušené americké verze textu.
Nikdykde se čte skvěle. Mám slabost pro městské povídky a romány kvůli jejich atmosféře, kterou Gaiman vykreslit umí. Reálný Londýn se prolíná s nereálným zatímco Richard, obyčejný úředník, který se před pár lety přistěhoval do Londýna, žije běžným šedým životem - chodí do práce, sbírá figurky trolů a nechává se svojí snoubenkou tahat po událostech, které jí pomáhají šplhat po společenském žebříčku.
Monotónnost naruší nález zraněné dívky, které se rozhodne pomoci přes veškeré výkřiky logiky, rozumu a snoubenky pomoci sám. Jeho život se ze dne na den obrací vzhůru nohama a on se ocitá v naprosto jiném Londýně. Jak to tak bývá, je zatažen do běhu událostí, kde každý sleduje své vlastní zájmy, hraje na několik stran a jenom Richard ničemu nerozumí. S postupem času se dostává do obrazu a snaží se pomoct Lady Dvířce na útěku před pány Croupem a Vandemarem v podivné kombinaci Londýnů - reality, fantazie a reálné fantazie.
Řádky textu ubíhají svižně jedna za druhou. Autor chvílemi odbočí na vedlejší dějovou linku, aby se příběhy postupně sbíhaly, vysvětlovaly a podporovaly navzájem. Nejde sice o žádnou složitost, ale přináší tak několik překvapení a zvratů, které by bez nastínění motivů vedlejších postav nedávaly smysl.
Úprava knihy je povedená, text je čitelný, stránky neruší nějaké velké texty po okrajích a jednotlivé bloky jsou odděleny symbolem podzemky. Mile mě překvapil překlad. V závěru knihy je uvedeno pár slov od překladatelky, která se ze všech sil snažila převést slovní hříčky autora do češtiny. Většina se jí podařila, protože jména skutečně vyvolávají ty správné asociace v češtině. Na druhou stranu v případech, kdy by výsledek byl příliš bizardní, rozumně ustoupila snaze uchovat asociace za každou cenu (Night's Bridge/Knightsbridge je v češtině prostě Most noci resp. Most rytířů).
Celkový dojem je čistě pozitivní a děkuji těm, kteří mi knihu doporučovali (David Soška pokud se nepletu a určitě i mnozí další).

Před více jak dvěma roky jsem objevil vynikající rozhlasový pořad RadioLab, který každý díl věnuje nějakému fenoménu a přináší různé pohledy na něj. Namátkou můžu jmenovat díly Deception, Laughter, Numbers, Sleep nebo Stress. V epizodách, které se týkají hudby se často objevuje jako host právě neurolog Oliver Sacks, který je autorem několika knih určených pro širokou veřejnost.
Musicophilia je v podstatě sbírka krásně popsaných a rozebraných různých jevů souvisejících s hudbou, jejím vnímáním a vlivem na lidskou psychiku. První část probírá témata jako musicophilia (posedlost hudbou), hudební představivost, brainworms (písničky, které se vám v hlavě přehrávají stále dokola), hudební halucinace a vztah s epilepsií. Jednotlivé jevy jsou rozebrány na zdokumentovaných případech. Například hned první příběh popisuje chirurga, který po úderu blesku začne být posedlý hudbou, naučí se hrát na klavír a veškerý jeho nepracovní život se najednou začne točit jenom okolo hudby.
Druhá část rozebírá jednotlivé aspekty hudby a dílčí části jejího vnímání. Dočteme se zde o absolutním sluchu, který je mnohem častější u Asiatů kvůli charakteru jazyků, relativním sluchu a významu prostorového vnímání hudby. Jedna kapitola je též věnována výjimečným hudebním schopnostem, které prokazují například lidé trpící autismem či demencí. Na druhou stranu autor popisuje pacienty, kteří přišli o některé schopnosti a dovednosti. Někteří ohluchli na jedné straně a hudba pro ně ztratila hloubku, jiní trpí progresivní ztrátou sluchu a nedokážou identifikovat správně vysoké tóny. Poslední kapitola tohoto oddílu je věnována synestezii a hudbě.
Třetí část se soustředí na hudbu jako na prostředek pro terapii. První kapitola věnovaná amnézii popisuje strhující příběh Cliva Wearinga, muže s nějtežším zdokumentovaným případem amnézie, jehož paměť nesahá dále než dvě tři minuty a několik desetiletí tak žije ve stále novém světě. Pro něj je hudba záchranou a možností seberealizace, protože schopnost hrát na hudební nástroje, zpívat (včetně textů) nebo vést sbor je jednou z mála netknutých oblastí jeho osobnosti. Další kapitoly se věnují využití hudby při problémech s řečí (koktání, zadrhávání nebo afázii), kdy přirozené plynutí hudby a textu umožňuje souvislý projev v kontrastu s problematickou řečí.
Rytmus hudby je popsán jako možný prostředek terapie pro pacienty s Parkinsonem nebo Tourettovým syndromem (rozsáhlé tiky), kteří dokážou díky hudbě získat kontrolu nad svým tělem a udržet si jí, pokud se drží v mezích hudby. Závěrečné kapitoly třetí části se věnují vztahu mezi motorickou pamětí a hudbou. Je zde popisován případ pianisty, který přišel o jednu ruku, ale stále má pocit existence druhé ruky (na téma phantom limbs více V. S. Ramachandran v přednášce pro TED nebo v epizodě RadioLabu Who Am I - pokud neznáte, tak si aspoň vzpomeňte na jeden z dílů House, kde léčí souseda-veterána), která se při hře pohybuje, ačkoliv hraje pouze jednou rukou s upraveným prstokladem.
Závěrečná část se zabývá takovými otázkami jako proč nás hudba někdy rozčilí nebo naopak potěší? Jak to, že má hudba takový vliv na náladu? Proč si tleskáme, podupáváme a klepáme do rytmu a proč mohou být davy lidí uneseni hudbou? Jedna z kapitol popisuje Williamsův syndrom (nadměrná emocionální citlivost na hudbu) a možnosti, které hudební terapie přináší pacientům trpícím tímto stavem. Podobné možnosti jsou zdokumentovány i u demence, kdy hudba z dětství umožňuje pacientům zapojit se, komunikovat navzájem a navázet kontakt s okolím.
V některých recenzích jsem narazil na výtku absence nějakého shrnutí a závěru. Když se ovšem podívám na širokou škálu témat, která kniha pokrývá, tak není možné je sesumírovat do pár stránek. Sacks velmi citlivě a krásně popisuje případy skutečných pacientů. Každý z příběhů může být námětem k zamyšlení a k ocenění toho, co většina z nás dokáže vnímat přirozeně. Jiné kapitoly na druhou stranu přináší naději pro lidi trpící různými nemocemi a poruchami - hudba, každodenní a všudypřítomný jev, má nad námi obrovskou moc a my jí můžeme využít ke zlepšení života.
Minule jsem psal o odeslání počítače na reklamaci. Teď už mám počítač zpátky, takže poheld zpět:
Podal jsem žádost o reklamaci.
Dostal jsem se do situace, kdy potřebuji sledovat změny stránky s informacemi o stavu zakázky. Web pochopitelně neposkytuje žádné notifikace a musím si informace obstarat sám.
Sledovat změnu každých pár minut ručně je nesmysl, chce to automatizovat proces. Rozhodl jsem se pro PHP skript stojící na cURL, které přečte stránku a obsah zapíše do souboru s timestampem v názvu. Samotný skript stačí v podstatě okopírovat z dokumentace PHP a pozměnit pár údajů: adresu, kterou chci číst a soubor, do kterého chci zapisovat.
dl("php_curl.dll");
$ch = curl_init("http://example.com");
$fp = fopen('C:\Users\Public\Documents\www\folder/' . time() . ".html", "w");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch); fclose($fp);
Dále je ptořeba zajistit spouštění skriptu. Na Windowsech se dají nainstalovat obdoby cronu nebo použít Plánovač úloh.
V Plánovači vytvoříme novou úlohu. Pro fungování je třeba zadat název, četnost spouštění a spouštěný program. Tím je php.exe (pozor na url s mezerami, ty je třeba uzavřít do uvozovek), jako parametr zadáme adresu spouštěného skriptu. Dále je třeba zajistit zápis. Jednou variantou je nastavit pole "Spustit v" na url složky, kde se nalézá skript, nebo nastavit adresu souboru do, kterého zapisujeme absolutně.
Zbývá už jen uložit úlohu, zkusit jí jednorázově pustit a je hotovo.
Včera jsme si se Zizim konečně prakticky vyzkoušeli Google Wave.
Tentokrát jsem si Wave pouštěl v Chrome, protože ve FF rostou nároky na paměť neuvěřitelnou rychlostí. Na druhou stranu musím teď používat jen netbook (Asus N10), takže při současné práci a dalších aplikacích byl Wave dost pomalý (nejhorší při psaní delšího textu), Zizimu to běželo svižně.
Ovládání je docela dobře zpracované. Při práci pomáhají klávesové zkratky. Kromě běžných Ctrl + B, Ctrl + I se dá editace ukončit pomocí Shift + Enter. Stejnou zkratkou se současně odpovídá na vybranou vlnku (wavelet), pokud jsem v režimu prohlížení. S tím jak roste vlna a vzniká mnoho vláken začíná být problém orientovat se a zachytávat novinky. Každá nepřečtená vlnka je označena zeleným pruhem na levé straně, což usnadňuje jejich vizuální vyhledávání, ale během práce ve vlně je lepší mezerník, který přeskočí na následující nepřečtenou vlnku.
Za možný počátek problému jsme označili rozdíl mezi odpovědí na té samé úrovni a v hlubší úrovni. Bez předem dané konvence hloubka vlna rychle narůstá a stává se nepřehlednou. Každá úroveň je odsazená o 40 px a na malém monitoru stačí čtyři úrovně a člověk toho už moc nevidí. Současně se možnost odpovědi v té samé nebo hlubší úrovni nabízí na základě toho, zda vlnka, na kterou reagujeme je uprostřed nebo na konci nadřazené vlnky. Tento rozdíl ovšem není promítnut do klávesových zkratek, takže přirozené ovládání myší a klávesnicí vede k rozdílné struktuře vlny.
Zkoušeli jsme si vkládání jiných prvků do vlny. Vložit YT video samozřejmě není problém, ale opravdu zajímavé je vkládání obrázků pouze drag'n'drop ze systému (za použití Gears), což práci usnadňuje. Do vlny jdou samozřejmě vložit i Google Maps, v kterých lze vyznačit body, linie i plochy, popsat je a celkově nastavit zobrazení. Každý čtenář vlny se současně může přepnout do mapy - přiblížit si jí, změnit mapový podklad atd.
Hlavní věc, která nám chyběla bylo uzamknutí vlny nebo její části. Díky playbacku jsou všechny změny vidět, ale možnost některé části vlny zamknout by mohla správu vlny usnadnit (vím, že nikdy nikdo do té vlny omylem neklikne, takže nebude každého otravovat svým překlepem).
Druhou fcí je možnost vyčistit vlnu a vyhodit z ní průběžné změny a ponechat pouze výsledek. To stojí proti kompletní historii, ale myslím, že nějaký kompromis by šlo najít, ve smyslu "sepnutí" řady změn do jedné s možností "rozbalení" do detailu. Druhou alternativou je kombinace s IM, která umožní rychlou domluvu, u níž je podstatný výsledek.
Na vývoj, komunikaci s klientem. Je to ideální nástroj (když pominu jistou domluvu v otázce etikety a veřejnost informací (Google plánuje možnost hostovat Wave na vlastním serveru, takže data nikam pryč nepotečou)). Dají se prodiskutovávat jednotlivé úkoly, otázky a vyjádří se k nim na jednom místě každý zainteresovaný - klient, manažer, programátor, grafik atp. Odpadá tak řada dlouhých a rozstrkaných emailových konverzací, kdy jeden účastník omylem neodpoví všem. Příliš velké konverzace lze přehodit do jiné vlny, rozdělit na menší díly a stále udržet přehlednost.
Myslím, že Wave má potenciál pro jisté účely. Velká prohlášení jako nahrazení emailu, IM a FB se mi zdají přehnaná, ale kompletní odsouzení Wave jako nesmyslu mi taky nepřijde jako reálné. Existuje použití, pro které je Wave vhodný a najde si uplatnění. Otázkou je, zda se po hodně přehnaném nástupu, který vybičoval očekávání, prosadí vhodné případy použití.