Letošní WebExpo se podle mě mimořádně vyvedlo. Spokojený jsem byl i loni, protože jsem drobné organizační problémy považoval za detaily, ale letos se jich konference zbavila a musím říct, že byla opravdu profesionálně připravená a zcela srovnatelná se zahraničními konferencemi. Na rozdíl od loňska nebudu popisovat všechny přednášky, na kterých jsem byl, ale jenom ty, které mě něčím zaujaly.
Doporučuji také komunitní poznámky z DevHall a DevRoom.
Konference pro mě začala už ve čtvrtek, protože jsem přišel na workshop o objektovém pojetí programování kluků z Medio (i když oficiální název byl trochu jiný). Bylo velmi zajímavé se pobavit o tom, jestli může být Square
potomkem Rectangle
(nebo snad naopak), jestli má být Cache
interface nebo abstraktní třída nebo jak řešit ošetření chyb u nesouvisejících operací. Zajímavá byla debata o zodpovědnosti konstruktoru – na přednášce zaznělo dogma „Nedělat v konstruktoru žádnou práci“, což je třeba u třídy reprezentující připojení do databáze podle mě nesmysl. Na obědě jsme se bavili také o tom, jestli třída může znát své výchozí hodnoty – ať už formou statické vlastnosti nebo předáním hodnoty null místo objektu (to podle mě šikovně využívá NotORM). Obecně mi přišlo, že se kluci zbytečně bojí dědičnosti (která vyjadřuje vztah „je“) a místo ní se omezují jen na skládání objektů (které vyjadřuje vztah „má“) a implementaci rozhraní („umí“). Zajímavá byla i diskuze o Dependency Injection, při které jsem dospěl k tomu, že se mi nelíbí volání $userSevice->login($user)
ve srovnání s $user->login()
. Další věc je ta, že když přidám parametr do konstruktoru, tak to musím deklarovat ještě v konfiguraci DI (pokud nepoužívám magii).
Nakonec došlo i na testování se zaměřením na PHPUnit. Ten sice nepoužívám, ale docela mě zaujala možnost mockování (které osobně dělám až na co nejnižší možné úrovni, protože tím se mi zadarmo otestují nižší vrstvy na operacích, které aplikace skutečně používá). Ale i obrat whitebox testování může být někdy užitečný. Např. při blackbox testu operace uložení musíme data následně načíst, abychom ověřili, že se to podařilo. Při whitebox stačí ověřit, jestli se zavolala metoda pro uložení se správnými parametry.
Na přednášce Davida Grudla bylo znát, že výjimečně nepřednáší o něčem, co sám vytvořil. Jeho obvykle velmi vysoké úrovně přednášení se mu proto podle mě tentokrát nepovedlo dosáhnout.
Přednáška Jana Mittnera se mi líbila velmi. Bylo vidět, že nasazování PHP aplikací mají opravdu dobře zvládnuté. Bylo mi trochu líto, že v některých oblastech nešel trochu víc do hloubky, např. principu fungování DBDeploy mohlo být podle mě věnováno alespoň pár minut.
Přednášku Jirky Knesla jsem si bohužel moc neužil. Začala totiž popisem CoffeeScriptu, který znám, a tak jsem se pustil do připravování vlastní přednášky. Pak ale najednou koukám, že na obrazovce se volají jakési funkce test
a asyncTest
, které přesně nevím, kde se vzaly. Část o tom, jak zprovoznit testovací prostředí, mi tedy asi bohužel unikla.
Přednáška o NoSQL databázi Cassandra pro mě byla zajímavá především proto, že ji vytvořili ve Facebooku (i když ji už teď nepoužívají). Přednáška byla dobrá, ale přesto mi bylo líto, že jsem kvůli tomu přišel o přednášku o AngularJS, která prý byla výborná.
Na přednášku o Mapy.cz jsem se těšil, protože tuto aplikaci považuji za velmi zdařilou a mapové aplikace mě zajímají obecně. Přednášejícímu se ale podle mě bohužel nepodařilo kvalitu aplikace a práci, která s tím byla spojená, ukázat příliš přesvědčivě. Rozhodně bych víc ocenil přednášku od současného vývojáře, než od produktového manažera.
Danovi Steigerwaldovi se na přednášce podařilo ukázat, že se v JavaScriptovém vývoji opravdu dobře orientuje a část svých znalostí dokázal předat i publiku. Na přednášce se podle mě zbytečně zdržoval některými obecnými tématy (např. Dependency Injection), takže nezbyl čas na detailnější popis toho, jaké přednosti frameworky za hranicemi jQuery vlastně mají. Jeho rozdělení na frameworky první až třetí generace se nicméně okamžitě ujalo a odkazovali na něj i další přednášející. Zajímavá byla i zmínka o novém jazyku Dart, který má ambice JavaScript nahradit. Danovo školení vývoje aplikací v JavaScriptu bych si rozhodně nenechal ujít.
Douglas Crockford, jedna z největších osobností na konferenci, začal popisem programování v JavaScriptu na straně serveru. Pak bohužel neukázal, jaké problémy jsou s tím spojené, a rovnou přešel k řešení těchto problémů. Kvůli tomu na mě přednáška působila poněkud roztříštěným dojmem bez sjednocující nitě. Jako opakování principu closures, který má v JavaScriptu široké uplatnění, to ovšem bylo dobré. Člověk skoro nabyl dojmu, že nejpřirozenější funkce je taková, která přijímá callback a vrací zase callback. Vrtalo mi hlavou, jak se dá napsat funkce, která paralelně spustí více funkcí a zavolá callback, až skončí. Základní myšlenka je tahle (jak mi poradil Dan):
/** Paralelní spuštění více funkcí s dokončovací operací
* @param function[] pole funkcí, které se mají spustit
* @param function funkce spuštěná po jejich dokončení
* @return undefined
*/
function parallel(callbacks, done) {
var count = callbacks.length;
for (var i=0; i < callbacks.length; i++) {
setTimeout((function (callback) {
return function () {
callback();
count--;
if (!count) {
done();
}
}
})(callbacks[i]), 10 * Math.random());
}
}
Přednáška Rasmuse Lerdorfa, původního tvůrce PHP, byla vynikající. V prezentaci se mi líbily živé ukázky, které bez opuštění stránky komunikovaly se serverem. Dobrý byl i popis vlastností PHP 5.3 a 5.4, který šel nad rámec běžně uváděných informací. Např. mi došlo, že místo break 2
by bylo lepší použít goto
nebo jsem se dozvěděl o zlepšení chybových hlášek v PHP 5.4 (to je k nezaplacení při školeních). V pasáži o HipHopu jsem se dozvěděl také o zajímavém chování PHP: funkce může dostat dva stejnojmenné parametry (HipHop na to upozorní, PHP ne):
<?php function two_as($a, $a) { echo "$a\n"; } two_as(1, 3); ?>
Při následné diskuzi jsme se bavili o tom, proč se některé věci do PHP 5.4 nejspíš nedostanou (např. new foo()->bar()
má nekvalitní patch, který někdy způsobuje i pád PHP) a jaký bude další vývoj PHP (Rasmusovi osobně teď žádná zásadní vlastnost nechybí).
Přednáška o Scale byla asi nejprofesionálnější na celé konferenci – práce s publikem, krásné slajdy, motivující přednes. Od jiných přednášejících jsem se přitom dozvěděl, že na generální zkoušce patřila přednáška naopak k tomu nejhoršímu – klobouk dolů za takový pokrok. Nejvíce mě zaujal současný trend jazyků, které se kompilují do něčeho jiného – CoffeScript do JavaScriptu, Scala do bytekódu Javy. Spatřuji na tom jisté výhody (možnost používat stávající knihovny a nástroje), ale i nevýhody (pomalejší běh, horší možnosti ladění). Jsem zvědav na přístup jazyka Dart, který by měl v kompatibilních prohlížečích běžet nativně a v nekompatibilních pomocí JavaScriptu.
Karmi dostál pověsti vynikajícího přednášejícího a ElasticSearch dokázal publiku „prodat“. Škoda, že se přednáška soustředila hlavně na možnosti rozkládání zátěže a schopnosti zotavit se z výpadku serveru a ne na samotné vlastnosti vyhledávání.
Druhý přednášející působil zmateně a i když k vyhledávání vytvořil zajímavé rozhraní, tak bych si přednášku víc užil, když by prezentaci nechal na Karmim.
Honza Král nabídl přehledný úvod do testování webových aplikací, i když z kódu jsem dvakrát nadšený nebyl. Komentář „tady vypočítáme nějaká data“ v definici pohledu (logika by přitom měla být v modelu) nebo vytváření objektů přímo v kódu testování příliš nepomáhá. Ani poznámka o tom, že některé metody není třeba testovat, mě příliš nenadchla – takové metody je někdy lepší z kódu úplně eliminovat. Ale jako testování 101 to myslím pro řadu lidí mohlo být užitečné.
Já jsem na WebExpo přihlásit přednášku o tom, jak urychlit webovou aplikaci tím, že se většina operací (návštěva odkazů a odeslání formulářů) bude dělat AJAXem. S tím mám velké zkušenosti z Admineru a chtěl jsem se o ně podělit. Původně jsem o tom chtěl napsat článek, ale téma se mi nedařilo příliš uchopit, tak jsem zvolil formu přednášky. A musím říct, že nelituji. Přednáška byla ryze technická a soustředila se především na popis problémů, se kterými by aplikace měla počítat. Nebylo to takové to konferenční show, ale mým cílem bylo především předat informace, což se mi doufám povedlo. Materiály jsou ke stažení.
V pátek jsem se dozvěděl, že bych měl být spolu s Honzou Králem hostem rozhovoru o práci v zahraničí. Já jsem v zahraničí ještě nepracoval a Honza momentálně pracuje pro českou pobočku, ale nakonec jsme se o čem bavit přece jen měli. V sále bylo jen pár posluchačů, protože většina dala přednost nadšenému projevu Johna Vanhary, kam jsem chtěl původně jít i já. Nakonec jsem stihl alespoň závěr přednášky (dotazy z publika) a i to stálo za to.
Většina přednášek mě něčím zaujala a rozhodně nelituji, že jsem na WebExpu byl. Organizace i prostory konference se zlepšily, takže i na to už si málokdo může stěžovat. Nejsem si jist, že se WebExpu někdy podaří vyrůst mimo české prostředí, ale podle mě to není na škodu. Pokud se organizátorům bude dařit shánět vynikající české i zahraniční přednášející tak jako letos a české publikum to dokáže uživit, tak podle mě ani nevadí, že platící cizinci na konferenci prakticky nejsou.
Diskuse je zrušena z důvodu spamu.