Ruby en Rails 2008
S menším zpozděním přináším reportáž o letošním ročníku konference Ruby en Rails, která se konala před dvěma týdny v Amsterdamu.
Zed Shaw
Prvním přednášejícím byl Zed Shaw, muž slavný díky autorství Mongrelu a hanopisu, kterým opustil Ruby komunitu. Tedy zdá se, že úplně neopustil, že? Prý ale navštěvuje pouze evropské konference, protože na těch jsou zakázány zbraně.
Jeho vystoupení bylo dle očekávání velmi vtipné, každý prý má dnes virtuální stroj a díky tomu si myslí, že všechno zázrakem zrychlí (zjevná narážka na YARV a Rubinius), on ale vyvinul "skutečný stroj" (literal machine) jménem EaRing, která je tedy nejrychlejší, protože kód rovnou pouští na procesoru. Pak chvíli ukazoval něco jako interpret assembleru a utahoval si z benchmarku na Fibonacciho číslech, jejichž výpočet byl pod hranicí meřitelnosti.
Přes lehkovážně laděný průběh prezentace byly hlavní myšlenky velmi zajímavé. Virtuální stroje pro dynamické jazyky podle Zeda nic zásadního neřeší, jsou třeba procesory a operační systémy tyto jazyky podporující. Také ukázal, že paralelizací na 200 procesorech se dá dosáhnout pouze šestinásobného zrychlení (kvůli overheadu, nemožnosti dalšího souběžného zpracovávání atd.). To ale jen s velmi dobrými programátory, s těmi průměrnými na tom budete o něco hůř a s těmi podprůměrnými (se kterými prý Zed snad pracuje výhradně) si podle něj klidně můžete pokusy o paralelizaci pohoršit.
Jak tedy podle Zeda zrychlit vaši aplikaci? Optimalizovat! "Pokud chcete mít program rychlejší, udělejte ho rychlejší." Zde také zdůraznil nebezpečnost metaprogramování, které kód znepřehledňuje a optimalizaci značně zesložiťuje.
Obie Ferndandez
Následoval Obie Fernandez, mimo jiné autor knihy The Rails Way. Jeho přendáška byla zdá se totožná s tou na letošní RailsConf: The Worst Rails Code You've Ever Seen (and how not to write it yourself), v podstatě ukázky všemožných chyb, kterých se nezkušení Rails programátoři dopouštějí a pár obecných tipů, jak to dělat lépe: naučte se dobře Ruby a možnosti RoR (a nevymýšlejte již vytvořené), následujte zažité Rails konvence (např. krátké metod v krátkých controllerech). Také vyhledejte senior programátory (20-30 let zkušeností), kteří vám budou skvělými mentory i bez znalosti Railsů (velmi rychle je začnou chápat), čtěte knihy (Chad Fowler a někdo další prý chystá knihu Rails anti-vzorech).
Pokud máte silnou náturu, podívejte se na slajdy (PDF) z prezentace, uvidíte opravdu zajímavé kousky a kusance kódu. Ačkoliv ty nejlepší byly ukázány mimo slajdy (např. controller s 1300 řádky a metodami "confirm" a "do_confirm")
Norbert Crombach
Norbert je holandská Ruby superstar, osnovu přednášky měl napsanou v textovém souboru (otevřeném ve vi), ze kterého postupně odmazával řádky. Přednáška byla celá programovaní naživo a provedla nás zajímavými vlastnostmi Ruby. Uvedu pár těch, které jsem neznal vůbec nebo poznal teprve nedávno.
To, že jakýkoliv kus kódu je možné uzavřít do begin-rescue-end bloku je jasné, ne moc dlouho ale vím, že hlavička metody slouží jako begin, tj. není třeba psát
def method begin .. rescue Exception => e end
ale stačí
def method ... rescue Exception => e end
Zachytávat všechny potomky Exception ale není často vhodné, protože to zachytí například i systémové signály (např. SIGTERM), typicky je vhodnější chytat StandardError a z ní také dědit vlastní výjimky. Pak Norbert ukázal pár způsobů, jak zajistit větší oddělení kódu ve vašich modelech - vytvoří se pomocná třída, jejíž instanci pak v případě potřeby deleguje metody na "nadřazený" model (referenci na jehož instanci si drží). Zde padla důležitá poznámka, než něco slepě volat pomocí send je dobré si nejprve zjistit, jestli daný object volaní podporuje a dovoluje; pomocí respond_to?. Toto volání totiž nevrací true pro privátní metody.
Když jsem tak Norberta pozoroval, znovu jsem si uvědomil, jak je důležité pracovat v krátkých iteracích a přijít tak na problémy co nejdříve. Testy samozřejmě pro tyto jednoduché demonstrace nepsal, ale vždy po pár naimplementovaných řádcích vyzkoušel, že dělají, co čeká. Ne že by napsal dlouhou metodu a pak dlouze zjišťoval, kde všude jsou jaké chyby (což je zdlouhavé především kvůli frustraci, kterou to přínáší).
Možná někdo z vás neví, jak snadno lze získat všemožné šikovné metody modulu Enumerable. Stačí namixovat do vaší třídy, nadefinovat metodu each a je to.
Záver kromě *x == x.to_a patřil informaci o metodě tap z Ruby 1.9, která mi přišla že dělá to samé, co returning z activesupport, tj. umožní instanciovat, pracovat s objektem a nakonec ho i vrátit v jednom bloku:
def user_with_specials
returning User.new do |user|
user.set_something_special
user.set_another_thing
end
end
Úplně nakonec jsme si zase hráli s metaclassamy, ale to už všichni známe, že?
Ninh Bui & Hongli Lai
Tihle dva asijští Holanďani představili novou verzi jejich Phusion Passenger, dříve známému pod jménem mod_rails, jehož cílem je udělat Rails aplikace stejně snadno nasaditelné a rychle běžící jako ty v PHP. V kombinaci s jejich Ruby Entreprise Edition (obohacení Ruby o copy on write garbage collector) se jim to zdá se podle benchmarků daří (tj. není to rychlé jako PHP, ale je to nejrychlejší mezi ostatními alternativami pro Railsy)
Různé
Mluvilo se i o JRuby, ale to jsem si radši zkoušel hrát s Merbem. Mluvilo se i o testování, rcovu, cruisecontrol.rb, heckelu, flogu, ale to už všichni dospěláci znají. A prý průměrný programátor vytvoří 1000 řádek kódu ročně. Průměrný programátor je koukám samá lenost.
DHH
Nakonec iChat Q&A session s DHH. Celkem zajimavé, protože se dostalo i na netechnická témata. V 37Signals nedávájí zaměstnancům podíly, protože nehodlají nikdy fimu prodat. Vůbec se mu nelíbí ta atmosféra, kdy všichni "vyhrávají" jenom v případě, kdy se firma prodá (to mi něco připomíná). Oni si chtějí užívat každý den a z práce se radovat průběžně. Jestli budou někdy Railsy mainstream? Leda že by se mainstream ohnul k Railsům, naopak to nebude.
Někdo se zeptal, jaký vidí rozdíl mezi životem v Dánsku a USA. Prý ho překvapuje, jak málo jsou Evropani ochotní oproti Američanům riskovat. Přitom všude v Evropě je přebujelý sociální stát a riziko, že budete živořit na ulici bez kůrky chleba, je minimální. Proč je tedy Evropa tak konzervativní? Také by mě zajímalo. DHH vyzval k neutíkání z Evropy a k riskování tam, i když sám není dobrým příkladem. Na podzim se ale prý minimálně na pár měsíců chystá do Švédska.
Jinak doporučuje Macbook Air oproti Pro a do důchodu se nechystá, Obie Fernandez má smůlu.