Šiandien pasirodė Ruby on Rails 2.0, o atrodo kad tik vakar turėjome versiją 0.13. Laikas bėga nenumaldomai greitai…
Console history
Man dažnai tenka dirbti su Rails console. Neretas yra toks scenarijus panašus į šį:
post = Post.find :first
pasirodo tai galima sutrumpinti iki
post.title
post = Post.find :first
Ir darbas su Ruby on Rails tampa dar truputi malonesnis =)
_.title
Eksperimentuokite
Apple stiliaus Ruby on Rails reklama
Turbūt daugeliui teko matyti Apple’o reklamas lyginančias Apple ir PC kompiuterius. Šį kartą lyginame Ruby on Rails ir Java =).
Atsitiktinio įrašo suradimas su ActiveRecord
Norint surasti atsitiktinį įrašą MySQL’e naudojame
[code]
SELECT * FROM products ORDER BY rand();
[/code]
Norint tą gražiai atlikti su ActiveRecord galime panaudoti
[code]
Product.find(:all, :order => ‘rand()’)
[/code]
Update: tas pats, bet PostgreSQL’ui
[code]
Product.find(:all, :order => ‘random()’)
[/code]
Lynda.com – Ruby on Rails Essential Training
Šiomis dienomis peržiūrėjau Ruby on Rails Essential Training is lynda.com.
Medžiaga susideda iš 17 dalių pateiktu 2 CD. Pradedant nuo 3 dalies prie kiekvieno filmuko yra prikabinta Rails aplikacija, tokia, kokia ji yra filmuko pradžioje ir rekomenduojama visus veiksmus atlikti kartu su autoriumi.
Pirmoje dalyje pasakojama apie Ruby on Rails, DRY, conventions bei MVC architektūrą, kas man asmeniškai buvo visai įdomu.
Antrą dalį – Ruby on Rails instaliaciją sėkmingai praleidau.
Trečioje, ketvirtoje, penktoje bei šeštoje dalyje iš pagrindų pasakojama apie tai kaip Rails’as veikia, aiškinami tokie dalykai kaip view, controllers, file structure, CRUD, routes, (private, public) actions ir panašiai. Šios dalys žiūrėjosi ganėtinai įdomiai, nes nors dirbu su Rails’u kiekviena diena, dažnai tiesiog nesusimastau kodėl tas veikia vienaip ar kitaip, tad išgirsti trumpa lakonišką paaiškinimą buvo ne pro šalį.
Septintoje dalyje pristatoma Ruby programavimo kalba. Šiuo atžvilgiu, manau geriau tiesiog apsilankyti try ruby! puslapyje.
Aštunta dalis – troubleshooting nieko naujo nepasakė: write comments, look for the errors in logs ir break problems into pieces.
Devinta dalis – Models patiko labiausiai. Mes, mašinistai , esame pripratę (ir ne be pagrindo), kad Rails’e modelis – tai duombazės lentelės objektinis atvaizdavimas. O čia autorius nusprendžia eiti kitu keliu ir parodyti kaip veikia modelis be duomenų bazės. Paaiškinamos models, attributes, instances, netgi inheritance sąvokos. Be to ši dalis yra svarbi tuo, kad ją pažiūrėjus net ir didžiausias ignorantas turėtu suvokti MVC.
Dešimta dalis – vėlgi interesting approach. Žingsnis po žingsnio pasakojama apie ActiveRecord parašant SQL kodą, panaudojant ActiveRecord, parašant SQL kodą, panaudojant ActiveRecord… Ši dalis turėtu ypač patikti PHP’ninkams .
Vienuolikta – penkiolikta dalys pasakoja apie muzikos krautuvėlės suprogramavimą. Ir čia laukė didžiausias nusivilimas. Visą laiką tikėjausi, kad autorius tik tik įsibėgėja ir pagaliau “Building Application” skyriuje parodys ką sugeba, o šis skyrius pasirodė tiesiog perrašymu (su nedideliais skirtumais) is Agile Web Development with Rails. Labai bandžiau išgirsti bent kažką originalaus – deja. Be to dirbama buvo su versija 1.16, kurioje (jei man nemeluoja atmintis) tokie dalykai kaip start_form_tag jau buvo deprecated, o pavyzdžiuose pateikiami būtent jie. Tad prieš rasant production code remiantis šia medžiaga reikėtu dar dėl viso pikto užsukti i api.rubyonrails.com.
Bent dalinai išgelbeti padėti dar galejo šešiolikta dalis – Deploying. Visgi tiek yra įdomybiu su production environment, caching, Mongrel, Capistrano. Deja nieko iš to pasakyta nebuvo.
Susumuojant viską mano verdiktas butu toks: jei dar neteko dirbti su Rails, o knygos skaityti nesinori (tačiau ankščiau ar vėliau vis vien teks ) tada Ruby on Rails Essential Training yra geras pasirinkimas. Iš kitos pusės, jei jau teko parašyti vieną kitą Rails aplikaciją, geriau praleisti savaitgalį prie Ruby for Rails arba Rubyisms in Rails.
Reikalingas IT administratorius
Faberlic Baltija SIA – tarptautinė įmonė, užsiimanti prekyba kosmetikos priemonėmis ieško IT administratoriaus.
Darbo pobūdis: programinės įrangos bei geležies priežiūra, iškilusių problemų šalinimas. Be to įmonėje veikia Ruby on Rails pagrindu sukurtas extranetas – reikėtu sugebėti jį perimti ar bent jau mokėti palaikyti.
Kontaktiniai duomenys: tel. 2133203 , f.info@lt.faberlic.com
P.S. Veiksmo vieta – Vilnius.
Dinamiškas thumbnail ‘o generavimas
Vakar vienam iš vystomų projektų reikėjo sukurti foto galerijos funkcionalumą. Nieko ypatingo: tiesiog “thumbnail’ai”, kuriuos paspaudus iššoka naujas langas su originalaus dydžio nuotrauka. Kiek panaršius internete sukūriau testinį variantą, kuris rašė dvi bylas: originalą bei thumbnail’ą, tačiau kiek pamąsčius nusprendžiau, jog to paties paveikslo (nors ir skirtingo dydžio) saugojimas bei juo manipuliavimas neatitinka DRY principų =) Tad beliko tik parašyti kodą, kuris dinamiškai formuotu thumbnailą.
Veikimo principas: žemiau pateiktas kodas keliauja į application.rb, ir išbandyti jį galima taip: [jūsų controllerio pavadinimas] / img?src=rails.png
Update: dado1945 prašymu pateikiu sprendimą su thumbnail’ų kešavimų =) (Daugiau apie http kešavimą)
Update2: ištaisiau tikrai kvailą klaidą kai paveiksliukas nekeitė dydžio dėl vienodų matmenų =)
Update3: Rimanto dėka calc_size funkcijos kodas tapo daug gražesnis. Ačiū.
Tikiuosi kažkam padės sutaupyti laiko =)
[ruby]
BASE_SIZE = 200.0
def calc_size(width, height)
ratio = [width, height].max / BASE_SIZE
[width, height].map { |s| s.div ratio }
end
def img
require ‘RMagick’
file = “public/images/#{params[:src]}”
if file and File.exists?(file)
req_last_modified = Time.rfc2822(@request.env[“HTTP_IF_MODIFIED_SINCE”]) rescue nil
last_modified = File.mtime(file)
@response.headers[‘Last-Modified’] = last_modified.rfc2822
if req_last_modified and last_modified < = req_last_modified
render_text '', '304 Not Modified'
else
image = Magick::Image.read(file)[0]
width, height = calc_size(image.columns, image.rows)
image.resize!(width, height)
send_data(image.to_blob, :disposition => ‘inline’, :type => image.mime_type, :filename => file)
end
else
render_text “Image not found!”
end
end
[/ruby]
Ruby on Rails rusiškai arba Веб-разработка с удовольствием
Ruby on Rails resursas rusų kalba: rubyonrails.ru. Maloniai stebina išverstos informacijos kiekiai bei originaliojo puslapio “look&feel”.
rubyonrails.lt gi permeta į pixel.lt. Įdomu ar “pikseliečių” komanda planuoja (bent dalinai) pakartoti mūsų kaimynų darbą =)
RailsConf 2006 – DHH
Neseniai peržiūrėjau DHH pranešimą RailsConf 2006 konferencijoje. Paliko labai pozityvų įspūdį ir norą truputi “parefactorinti” šiuo metu vystomus projektus =)
Ruby on Rails live CD
Šiandien išbandžiau Ruby on Rails live CD (ačiū develop už nuorodą).
Iš pradžių buvau nusiteikęs skeptiškai: sunku mąstyti apie live cd kaip apie programavimo aplinkos įrankį kada jame negaliu išsaugoti nustatymų. Nebent CD butu skirtas programinės įrangos išbandymui, o tam, manau, nepakanka keleto valandų. Iš kitos pusės norint “išbandyti” Ruby on Rails – Instant Rails atrodo labiau logiška alternatyva. Tačiau nežiūrint į šiuos (mano manymu esminius minusus) RoR live CD paliko neblogą įspūdį.
Live CD yra sukurtas PC Linux pagrindu. Perkrovus kompiuterį ir palaukus keletą minučių pasikrauna KDE sąsaja ir vaizdas ekrane yra maždaug toks. Pirmoje eilėje pasigedau muzikos grotuvo (mano giliu įsitikinimu labai dažnai jis tiesiog būtinas produktyviam programavimui =)), tačiau apt-get install mplayer ir mplayer http://di.fm/mp3/trance.pls greitai šią problemą išsprendė.
Toliau buvo smalsu pamatyti ką turime instaliuoto sistemoje – taigi gem list. Čia maloniai nustebino Capistrano (bei žinoma svn).
Programavimui skirtas RadRails buvo pilnai paruoštas darbui: sukurta RoR aplikacija, MySQL duomenų bazė beliko tik paspausti “Start server” mygtuką.
Dirbti su MySQL duombazę įdiegtas patogus (mano manymu) MySQL Administrator’ius.
Taigi nors po valandos “žaidimo” savo nuomonės apie šį Live CD nepakeičiau – jis paliko gerą įspūdį ir pademonstravimui kaip veikia Ruby on Rails nieko neinstaliuojant kompiuteryje jo daugiau nei pakanka.