Tag Archives: rails

Apie RubyConfLT 2010

Praėjusį savaitgalį prasirideno trečioji, jau tradicinė ir kasmetinė, RubyConfLT – keletas sakinukų apie smagius įspūdžius iš šio rūbininko sielą džiuginusio įvykio.Šįkart, pagaliau, veiksmas Vilniuje, MIF’e – kauniečių ir vilniečių santykis išliko nepakitęs nuo praėjusių metų :-) Gaila, kad Edvinui nepavyko išsikovoti pristatymų filmavimo, būtų smagu turėti įrašą tiek atminimui, tiek publikavimui platesniai publikai, nes temos buvo gan universalios ir įdomios ko gero ne tik everyday Ruby programuotojams.Saulius nepagailėjo patarimų ir plačiai papasakojo apie daugelį didelio apkrovimo problemų sprendimo būdų, taikytų jų įmonėje [skaidrės]. Pats dirbu prie kiek kitokios specifikos projektų ir cloud’o pagalbos dar tikrai nereikės ieškotis, bet tikrai praplėtė akiratį.Eimantas pademonstravo platų IRB įrankių arsenalą, kuriuos tikrai turėtų naudotis savo darbo efektyvumu besirūpinantys geekai. Daug pavyzdžių, buvo įdomus pristatymas daugiausiai live peržiūra [skaidrės, pavyzdžiai]. Iki idealaus pristatymo trūko tik pasikrauti visą tai Rails konsolėje :-)Artūras papasakojo apie gana egzotišką dalyką Ruby pasaulyje – žaidimų serverio kūrimą. Smagu, kad Ruby tinkamas įrankis ir tokiems projektams, tikiuosi pavyks išeiti į didesnę nei 1 vartotojas rinką. Tai kada LAN party? ;-) [skaidrės]Pats pristačiau ERB alternatyvas – jų tikrai yra ;-) [skaidrės]Remigijus paporino apie iš pradžių gana painų dalyką – metaprogramavimą. Painų turint galvoj ypatingai statines kalbas, kuriomis daugelis pradėjome, ir tas metaprogramavimo galimybės,  ką galima nuveikti su Ruby. So, what’s the class of the Class class?  [skaidrės, pavyzdžiai]Andrius palygino testinių duomenų užkrovimo būdus, taip pat buvo naudinga sužinoti, kad ir pats Andrius yra nemažai nuveikęs šioje srityje :-) čekitout. [skaidrės]Na ir pabaigai Remigijus trumpai pristatė objektų serializavimo būdus, kurių tiek tikrai nežinojau. Geras sutapimas, kad sekančią dieną jo pristatytą alternatyvą YAJL (JSON serializavimui) naujoje Railsų versijoje naudojama pagal nutylėjimą, jei tik instaliuotas šis gems’as :-) [skaidrės, pavyzdžiai]

Media_httpemptydotcom_icfzg

Saulius “Ruby on Rails LT Team” komandos (šios konferencijos organitoriai) vardu padėkojo pranešėjams ir išsiskirstėme į after party.

Afteryje, aišku, visada gimsta tiesa ;-) Visame kame.

Buvo žiauriai smagu susipažinti su naujais veidais ir susitikti su kasmetiniais Ruby bendruomenės palaikytojais. Ačiū organizatoriams už konfenreciją ir kvietimą joje pašnekėti, visiems dalyvavusiems už gerą nuotaiką, įdomias diskusijas ir Ruby palaikymą.

Iki kito susitikimo!

Visos nuotraukos

Ruby/Rails workshop’as #4

Media_httpemptydotcom_wmywe

Kartu su kolega dar prieš Naujus nutarėm paorganizuoti tokį neformalų nuolat vykstantį įvykį – workshopą Ruby/Rails tematika. Idėja labai paprasta – susirenkam kartą per kelias savaites, kas nori tas pristato kokią nors temą, kiti pamokyti pakodinam, padiskutuojam, žodžiu atvirai dalinamės know how ir kitu gėriu. Aišku, afterparty ir visokie ten flame wars su pythonistais tai čia pagal nutylėjimą ;-) Juokauju. Bet ne dėl afterparty.Keliskart “išbandę” tokią idėją su kursiokais, draugais, nusprendėm, kad nėr čia ko sėdėti užsidarius ir nuo 3-ojo workshopo, kuris mano galva pavyko tikrai neprastai (kaip ir visi iki tol!), kviečiame prisijungti visus norinčius. Šį šeštadienį organizuojame #4 workshopą, taigi ką domina Ruby/Rails tematika, nori paklausyti, pasidalinti, sužinoti ir/ar susipažinti – esat labai laukiami.Veiksmas vyks MIF’e, šį šeštadienį 14:00. Visa informacija, temos, dalyvių registracija ir kiti privalomi formalumai – workshops.emptydot.comŽinai kam būtų įdomu? Persiųsk šią informaciją!

RSpec + machinist pradžiamokslis (I dalis)

Ruby on Rails tikrai daro įspūdį pradedantiesiems kaip greit ir natūraliai galima sukurti web aplikaciją. Tačiau panorėjus pasekti Rails guru pėdomis, kurie kalbant apie kokybę visi vienu balsu tvirtina “always, always test!”, tikrai galima atsimušti į informacijos pradedantiesiems trūkumą, ypač jeigu norit pasikinkyti ne standartinį Test::Unit. Ne pirmą kartą girdint tokį nusiskundimą, nusprendžiau sudėlioti trumpą RSpec ir machinist pradžiamokslį – kaip instaliuoti, kaip susikonfigūruoti, nuo ko ir kaip pradėti, kur/kaip ieškoti informacijos.Kodėl būtent RSpec ir machinist?RSpec leidžia aprašyti sistemos elgseną labiau “ruby way”, negu Test::Unit, nors pastarasis vis dar dažnai naudojamas. RSpec laikomas behaviour-driven development įrankiu, nors šiuo atveju parodysiu tiesiog test-driven development panaudojimą.Sistemai augant išlaikyti reikiamą fixtures kiekį ir struktūra yra tikras vargas, todėl apžiūrėkime machinist, kuris suteikia galimybę sugeneruoti duomenis, kurių reikšmės mums nesvarbios. Kodėl ne factory_girl? Tiesiog, kodas atrodo gražiau ;-)SąlygosŠis pradžiamokslis nėra skirtas įrodyti, kad jums reikia testuoti. Jis taip pat nebus naudingas pažengusiems, kuriems ši informacija gali atrodyti savaime suprantama. Visgi turite būti susipažinę su pagrindiniais Ruby on Rails principais. Pavyzdžiai skirti Rails 2.3.4, RSpec 1.2.9, machinist 1.0.3 ir faker 0.3.1, tačiau greičiausiai veiks ir su kitomis šių paketų versijomis.PradžiaTarkime, kad norime padaryti aukcioną, kuriame galima kelti kainą iki tam tikros datos.

rails auction_example

config/environments/test.rb pridedame:

config.gem "rspec", :lib => false, :version => ">= 1.2.9"config.gem "rspec-rails", :lib => false, :version => ">= 1.2.9"

Instaliuojame, jeigu dar neturime:

rake gems:install RAILS_ENV=test

Ir sugeneruojame RSpec failiukus:

ruby script/generate rspec

Jau pasiruošę pradėti!Pirma pavaraAkivaizdu, kad turėsime prekes, kurias norėsime brangiai prakalti piniguotiems dėdėms iš užsienio:

ruby script/generate rspec_scaffold product name:string auction_ends_at:datetime

rspec_scaffold generatorius parūpino mums ne tik įprastinius scaffold failus, bet ir pradinius griaučius testavimui. Analogiškos komandos yra rspec_controller, rspec_model. Faile spec/models/product_spec.rb rasite jau tokį tekstuką:

require 'spec_helper'describe Product do  before(:each) do    @valid_attributes = {      :name => "value for name",      :auction_ends_at => Time.now    }  end  it "should create a new instance given valid attributes" do    Product.create!(@valid_attributes)  endend

Manau, kad nieko papildomai aiškinti nereikia, geriau pulkime ir pažiūrėkime ar tikrai veikia:

rake db:migraterake spec#=>............................. Finished in 1.296021 seconds29 examples, 0 failures

Kol kas viskas kaip per sviestą. Kadangi darome aukcioną, akivaizdu, jog jeigu prekei skirtas laikas baigėsi, daugiau statymų daryti nebegalima. Žinoma, tam prireiks Product modelyje metodo auction_ended?. Pagal TDD pirma turime parašyti testą:

# iškart po it "..." do - end blokoit "should mark auction as ended if it's so" do   product = Product.create(@valid_attributes.merge(:auction_ends_at => 2.hours.ago))   product.auction_ended?.should be_trueend

Ir žinoma, išbandę rake spec gausime pranešimą:

1)NoMethodError in 'Product should mark auction ended if it's so'undefined method `auction_ended?' for #Product:0xb731808c./spec/models/product_spec.rb:17:Finished in 1.070546 seconds30 examples, 1 failure

Dabar jau galima bandyti rašyti kodą, kuris tenkintų esamus testus:

class Product Ir jau su tokiu kodu gauname išganingajį pranešimą:
30 examples, 0 failures

Bet juk kodas tai neteisingas, tiesa? Čia yra svarbiausia žinutė – testuokite įvairius variantus. Jeigu metode yra if sąlyga, apeikite visas šakas:

it "shouldn't mark auction as ended if it ends in the future" do  product = Product.create(@valid_attributes.merge(:auction_ends_at => 2.hours.from_now))  product.auction_ended?.should be_falseend

Dabar jau, žinoma, turime 1 failure. Teliko pamodifikuoti Product metodą, kad jis atitiktų realybę:

def auction_ended?  auction_ends_at Dabar mūsų parašyti testai ne tik tuščiai prasisuka bet ir praneš apie galimą problemą jeigu ką nors tvarkydami subjaurosim šio metodo prasmę. Realiai toks testavimo tikslas ir yra - būti užtikrintam, kad keičiant ką nors viename gale, kitame viskas veikia tiksliai taip, kaip turėtų. Antroje dalyje - kam reikalingas machinist, kodėl jis geresnis negu standartiniai fixtures ir pavyzdys kaip testuoti controllerius.Kad lengviau galėtumėt pabandyti kaip viskas atrodo, sukūriau šios mini-serijos aplikacijos repozitoriją GitHub.

Techninis marketingas

Vakar “Zen And The Art of Programming” bloge pasirodė įdomus įrašas apie techninio marketingo įgūdžių būtinybę programuotojams.

Technical marketing is not about spamming, selling out, deceiving or spreading FUD regarding your competition, whoever they may be. Technical marketing is about promoting a given product or technology by clearly illustrating its advantages to a technical audience.

Ruby on Rails’ story is a proverbial example of technical marketing done right – and it all started with a convincing screencast by David Heinemeier Hansson. David’s demo was not the most amazing technical demonstration of all time, but it was effective at conveying the potential benefits that could derive from the adoption of this new framework. That’s what got people interested enough to want to take a second look at it. The framework actually being good, did the rest.

Small adjustments to the way we think about projects and the way we showcase them, can have a huge impact on their success. It’s worth genuinely caring about these details and embracing the possibilities that begin to open up when you make decisions with marketing in the forefront of your mind.

Pilnas įrašas

Darbas Ruby on Rails programuotojui

Media_httpemptydotcom_hmzim

Update (2010-11-29): skelbimas, žinoma, jau nebegalioja ;-) bet Lietuvoje dirbančių įmonių su Rails sąrašiuką galite rasti čia. Kaip pastebėjau, beveik visos jos nuolat ieško darbuotojų

Taip jau būna, kad įmonės dėl žmogiškų resursų trūkumo nespėja “apdirbti” visko tiek, kiek galėtų ir norėtų. Tai vadinama “plečiamės” :-) Taip nutiko ir įmonei, su kuria bendradarbiauju jau apie pusantrų metų, tad norėčiau pakviesti atsiliepti savo skaitytojus Ruby on Rails programuotojus, kurie ieško įdomios veiklos (už kurią, be abejo, mokama :-)). Svarbiausia – reali patirtis su Rails, sveika nuovoka ir tinkami asmeninio laiko planavimo įgūdžiai. Formalus skelbimas. Iš savo pusės galiu pažadėti, kad “įdomūs projektai” čia nebus “įdiegti 15 CMS per savaitę”, kaip dažniausiai būna tipinių pažadų skelbimuose. Laisvė siūlyti savus sprendimo būdus, diskusija, įvairių verslo procesų įsisavinimas, galimybė “sudalyvauti” optimizuojant ne tik programinę įrangą, bet ir kitų įmonių veiklą – mano kasdienybė. Jeigu turite klausimų – mielai atsakysiu ;-)