RubyConf 2007: Videa, RejectConf a poslední den
Tímto zakončujeme sérii reportáží z letošní RubyConf konající se Charlotte v Severní Karolíně. Přecházejícím článkem byl report o Matzově keynote, v něm najdete i odkazy na předchozí příspěvky.
Zdá se, že videa z přednášek se objeví na příslušné stránce Confreaks, zatím tam je ale jenom Q&A session s Matzem na konci prvního dne. Buďme trpěliví. Co tam ale již je, jsou videa z letošní RejectConf, což jsou pidi-konference v rámci RubyConf nebo RailsConf, které - jak již název napovídá - dávají prostor všem, kteří to nedotáhli na hlavní pódium. Kdokoliv se může během pár hodin přihlásit o slovo a pokud přednáška nebude moc dlouhá, je téměř stoprocentní šance, že dostane prostor k prezentaci čehokoliv s Ruby souvisejícího.
Neviděl jsem úplně všechno, ale zaujal mě hlavně monitorovací nástroj skromně pojmenovaný God. Také MonkeyBars - knihovna umožňující vývoj GUI v Ruby pomocí Swingu - stojí za zmínku. Pak snad jen že PDF-Writer má zas někoho, kdo ho bude udržovat. Pro zasmání ale doporučuji zmínku o rozšíření IRB historie ("If you're like me - and I certainly am").
Teď v cuku letu posledním dnem. Dr. Nic Williams ukázal vtipnou variaci úvodní znělky seriálu A-team (v době psaní tohoto článku je YouTube nefunkční, kam ten svět směřuje??), kde zaměnil původní hrdiny známými příslušníky Ruby scény. Poté výpravěl o různých generátorech všeho a generátorech generátorů všeho. Pokud vás zajímá, zkuste Nicův screencast.
Dave Astels (který čerstvě doplnil řady inženýrů Googlu - evidentně tam také dělají Ruby) a David Chelimsky poté představili TDD, BDD a RSpec. TDD neboli Test Driven Development je podle Astelse zaměření na design (Test Driven Design), dokumentaci a chování, ne koncentrací na testy. Tj. nejde ani tak o to mít napsané testy, ale o fakt, že psaním testů dřív, než samotný výkonný kód, dosahujeme přehlednějšího a čistšího designu.
Také to znamená, že nepíšeme žádný kód zbytečně, ale pouze na základě selhávajícího testu (tj. nesplněného požadavku na chování). Odsud se dostáváme k BDD (Behavior Driven Development), tedy vývoji řízeném popisem chování. Při BDD nejprve napíšete specifikaci velmi malé části systému ve formě programu (testu) a pak dopíšete co nejmenší množství kódu tak, aby specifikaci splňoval (test uspěl). Pak pokračujete implementací dalšího požadavku na chování.
RSpec je implementace BDD a co přináší oproti obyčejnému test-first přístupu je především odlišný slovník. Porovnejte dva stejné "testy" a posuďte sami, který se víc hodí na to být napsaný dřív, než kód, který testuje (specifikuje).
describe "Controller" do
it "should have a session hash accessible" do
@controller.session.should.be.an.instance_of Hash
end
end
class Controller < Test::Unit::TestCase
def test_controller_should_have_a_session_hash_accessible
assert @controller.session.instance_of?(Hash)
end
end
Ke konci přednášky byly předneseny nové vlastnosti RSpec, nějaké user stories, které byly napsány jakoby přirozeným jazykem a nějak se překládaly do těch popisů chování. Tam mi to přišlo hodně přehnané, zbytečně komplexní a přinášející duplicity. Vrcholem byla úvaha, že takové specifikace budou psát uživatelé (či jejich podpora). To mi přišlo jako naprostá hloupost. Teď když nad tím ale přemýšlím, možná by je mohl psát znalec dané domény (např. fyzik, chemik) pro programátory. Ještě to tedy neztracuji.
Další přednáška byla o Adhearsion, též známým jako "nové Rails", hehe. Adhearsion je v Ruby napsaný framework pro VoIP aplikace. Není to napsané od nuly, jedná se o vrstvu nad starší knihovnou Asterisk, ve které psát přímo nebude podle výjadření autora a předvedených ukázek žádný med. Pokud děláte cokoliv s telefony/telefonií, neváhajte Adhearsion alespoň prozkoumat (a dát nám vědět).
Pokud máte více aplikací vyžadující autentikaci, může se vám hodit představený RubyCAS server. Co je ale mnohem podstatnější (že?) je informace, že toto dílko je napsáno ve frameworku Camping. A pak že je jen na hraní. Pokud zas potřebujete samostatný server na full-text prohledávání vaší databáze s API, které umí vracet Ruby, třeba se vám bude hodit Solr.
Den a celou konferenci pro mě zakončila přednáška Bena Scofielda na téma DSL (doménově specifický jazyk). Jedním z jeho sdělení bylo, že v Ruby napsané DSL vlastně žádné jazyky nejsou, jsou to pouze dialekty Ruby, neboť nemají odlišnou gramatiku, pouze jinou slovní zásobu. Navrhoval nazývat je tedy DSD (dialects). To bylo poněkud nešťastné, neboť jak poznamenali diskutující, nemusíme být zas takoví puntičkáři; slovo "language" nemusí být chápáno jako tak striktně definující. O tom se bohužel diskutovalo poměrně dlouho, a tak asi zapadla pro mě důležitější myšlenka prezentace. Totiž že slova, která používáme, ovlivňují, jak o věcech přemýšlíme. Hodně záleží na tom, jaké si zvolíme jména proměnných, protože a, b, x nás myšlenkově drží v abstraktním programování, kdežto today_flights, return_fligths apod. nám umožňuje přemýšlet v doméně, pro kterou programujeme. A to je přesně to, čeho chceme dosáhnout, protože pak náš design dává daleko větší smysl. Zmíněno bylo i to, že test máme ze školy zafixované jako něco, co přichází na konec (nejprve studujeme, pak se píše test a toť vše), kdežto specifikace je vždy na začátku. Podnětné. Než bude k dispozici video, můžete zkusit více pochytit ze slajdů.
A to je vše přátelé o RubyConf 2007. Setkání to bylo velmi inspirující. Příští ročník bych doporučil všem, kteří budou mít možnost za moře vyrazit. Ostatní to budou mít (snad!) velmi blízko na RubyConf Europe 2008.