Upto, downto

Jau gan ilgą laiką dirbu su Ruby, o jis vis dar nenustoja stebinti.

Dirbant su Rails’u (ypač kuriant template’us) dažnai tenka įdėti besikartojančius dummy elementus (pvz. naujienos, meniu punktai ir pan.). Pats neefektyviausias būdas yra žinoma copy-paste. Kurį laiką naudojau kažką tokio:

[code]
< % (1..5).each do |i| %>
Dummy text
< % end %>
[/code]

ir jaučiausi kietas hakeris 😉

Tačiau kažkur giliai viduje žinojau, kad kintamasis “i” čia yra nereikalingas, jutau kad aš atvedžiau jį į gyvenimą, kuriame jam nėra skirta nieko nuveikti, visą laiką kol bus rašomas “Dummy text” gyventi su nepilnavertiškumo kompleksu ir galiausiai išnykti taip ir nepalikus jokio pėdsako šiame pasaulyje.

Tvirtai nusprendžiau daugiau nežaloti nekaltų sielų (nors ir skaitmeninių, gyvenančių vos kelias akimirkas) ir surasti būda kaip galėčiau apsieiti be jų. Ir toks būdas yra!

[code]
< % 1.upto 5 do %>
Dummy text
< % end %>
[/code]

Update: kaip ir buvo pažymėta komentaruose dar gėriau naudoti “times” (kas beje parašyta pačioje Agile Web Development with Ruby on Rails pradžioje =))
[code]
< % 5.times do %>
Dummy text
< % end %>
[/code]

Gera yra žinoti, kad pakeitei kažkam gyvenimą 😉

Great hackers

Šiandien internete aptikau Paul’o Graham’o audio įrašą apie tai kaip surasti, motyvuoti bei išlaikyti neeilinius programuotojus. Šis mp3 tikrai vertas dėmesio. Ar ne vertas? =)

Rašykite savo nuomonę komentaruose.

Getting real

Prieš kurį laiką 37 signals išleido knygutę kurioje aprašomi principai kaip kurti mažesnį, greitesnį, geresnį programinį produktą.

Dabar galima ją nemokamai pasiskaityti internete šiuo adresu: getting real .

Malonaus skaitymo, bei siūlau pasidalinti savo mintimis (jei tokių iškils) komentaruose.

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 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.

Ruby vs. PHP našumas

Pastaruoju metu vis girdžiu klausimą dėl Ruby našumo. Ruby ir PHP (bei kitų programavimo kalbų) našumo palyginimus galima rasti čia.