Content Editor is a Beast plugin that allows creation of simple pages with …stuff.
Features
- Nice Permalinks (http://example.com/my-cool-page);
- Admin only (http://example.com/pages to start with it);
- Textarea with Textile;
- …umm
Install
Halp?
- Contact/Patches: use the form. or the email, no patches via SMS.
What’s Beast?
A forum.
[ANN] Content Editor for Beast, written by aurelian in
projects,
rails
|
No Comments
I) Short snippet
validates_each :iban do | record, attr, value |
record.errors.add attr, 'IBAN is mandatory' and next if value.blank?
# IBAN code should start with country code (2letters)
record.errors.add attr, 'Country code is missing from the IBAN code' and next unless value.to_s =~ /^[A-Z]{2}/i
iban = value.gsub(/[A-Z]/) { | p | p[0]-55 }
record.errors.add attr, 'Invalid IBAN format' unless (iban[6..iban.length-1].to_s+iban[0..5].to_s).to_i % 97 == 1
end

More on IBAN numbers and validation.
II) Load Beast plugins with script/console
[aurelian@stalingrad beastapp]$ script/console
Loading development environment (Rails 2.0.2)
beastapp> profile = User.find(:first).profile
NoMethodError: undefined method `profile' for #<User:0x32b72a0>
beastapp> Dispatcher.new($stdout).prepare_application
=> false
beastapp> profile = User.find(:first).profile
=> #<Profile id: 1, user_id: 4, title: "Mr.", [...]
IBAN validation and Beast, written by aurelian in
web,
rails
|
No Comments
Am ajuns la 21.
Alex incearca sa formeze o Nationala Romana de Ruby (NRR), ca un site pentru a strange resurse in limba romana despre Ruby sau Rails.
Nu se supara nimeni daca cineva ar adauga o traducere sau daca ar posta pur si simplu intrebari, totusi pentru a face lucrul acesta, ai nevoie de un cont. Pentru a comenta pe marginea articolelor este permis si accesul anonim.
Dupa modelul seattle.rb am pus-o si de un proiect pe rubyforge cu scopul de a publica sub-proiecte create in cadrul comunitatii NRR sau de catre membrii acestei comunitati.
Alex este primul care contribuie cu Civic Duty, un plugin pentru Rails care permite realizarea de poll-uri. Mai multe detalii pe siteul Nationalei.
De fapt, initial civic-duty era un proiect separat pe rubyforge, imi place sa cred ca l-am convins pe Alex sa il mute ca sub-proiect NRR :)
In curand or sa apara si alte mini-proiecte.
Daca ai vreo idee, sau ai facut mici experimente care sunt in pericol sa se piarda pe HDD-ul tau, poti sa iei legatura cu Alex sau cu mine, si te vom adauga cu placere in lista membrilor.
Trebuie doar sa aiba legatura cu Ruby (scripturi cool, extensii Ruby, orice Rails) si sa alegi una dintre licentele BSD, MIT sau Ruby License.
Ah, si sa nu uit, se simte si ceva activitate de vara pe lista de discutii Ruby on Rails – Romania.
Sa vedem ce se intampla in timpul unei sesiuni prin care incerc sa instalez gemu cu RMagick.
[aurelian@stalingrad ~]$ gem install rmagick
Attempting local installation of 'rmagick'
[...............]
Building native extensions. This could take a while...
[...............]
make: *** [rmmain.o] Error 1
setup.rb:655:in `command': system("make") failed (RuntimeError)
from setup.rb:664:in `make'
from setup.rb:1258:in `setup_dir_ext'
from setup.rb:1532:in `__send__'
[...............]
from setup.rb:772:in `invoke'
from setup.rb:1578
make: *** [all] Error 1
[...............]
---> ext
---> ext/RMagick
no ruby extention exists: 'ruby setup.rb setup' first
Try 'ruby setup.rb --help' for detailed usage.
make: *** [install] Error 1
ruby gem_extconf.rb install rmagick
sh configure
Configuring RMagick 1.14.1
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
[...............]
This installation of RMagick 1.14.1 is configured for
ruby 1.8.5 (2006-08-25) [i586-linux-gnu] and ImageMagick 6.2.9.
RMagick configuration completed successfully.
[...............]
make install
/usr/bin/ruby setup.rb install
Successfully installed rmagick-1.14.1
[aurelian@stalingrad ~]$ gem list | grep rmagick
rmagick (1.14.1)
[aurelian@stalingrad ~]$ irb
irb(main):001:0> require "rubygems"
=> true
irb(main):002:0> require "RMagick"
LoadError: no such file to load -- RMagick.so
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in `require__'
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:21:in `require'
from /usr/lib/ruby/gems/1.8/gems/rmagick-1.14.1/lib/RMagick.rb:11
Gem a devenit metoda standard prin care se instaleaza o librarie/pachet pentru Ruby.
Sistemul pare destul de bine pus la punct si surprinzator chiar functioneaza.
In majoritatea cazurilor.
Nu cunosc toate detaliile privind modalitatea prin care se construieste un astfel de pachet, insa in ultimul timp am intampinat ceva dificultati la instalarea unor extensii "native" ( si libxml-ruby(0.3.8) se comporta asemanator pe FreeBSD).
Nu inteleg insa de ce instalarea nu se opreste imediat cand este intalnita o eroare.
Nu inteleg de ce la sfarsit am primit mesajul prin care am fost anuntat ca libraria respectiva a fost instalata cu succes.
Ai ridicat o spranceana, ti-a starnit interesul si ai incercat.
Ai citit articole, ai cautat alte tutoriale si ai cumparat carti.
Ti-a placut si ai inceput un proiect de la zero.
Atunci a aparut si prima problema: nu stiai Ruby la un nivel acceptabil. Si cum trebuia sa ai un raspuns pregatit pentru aceasta, te-ai intors la articole, tutoriale si carti.
Te-ai decis sa faci pasul cel mare, si sa lucrezi full-time cu o tehnologie ce iti permite sa iti imbunatatesti performantele de programator.
Poate cel mai bine te perfectionezi studiind codul scris de altii. Acum un an era destul de greu sa gasesti o aplicatie open-source mai serioasa. Acum insa Rails a intrat in cel de-al III-lea an de viata si avem de unde alege.
Cateva surse de inspiratie:
M-am confruntat zilele trecute cu o problema ciudata intr-o aplicatie Rails.
Foloseam validates_presence_of :foo pentru a valida prezenta unui camp, dar si o validare specializata, validate :foo_is_not_bar unde asteptam o valoare pentru campului folosit.
Credeam ca in Rails, validarile ajutatoare (validation helpers) sunt executate inaintea metodei mele. Ei bine, este exact invers, si pana acum nu am gasit o modalitate de a schimba oridinea de executare a acestor metode, si, citind sursele metodei valid? nici nu cred ca se poate.
Asa ca, nu te astepta sa primesti valoarea unui camp, vei avea nil si o eroare daca respectivul camp nu a fost completat.
Te poti intalni cu asa ceva, cand folosesti numericality_of si doresti ca numarul primit sa fie pozitiv. Pentru asta, pe langa validates_presence_of :price, validates_numericality_of :price va trebui sa mai adaugi o validare pentru a verifica ca pretul este pozitiv validate :price_should_be_positive exemplul este asemanator cu cel din Agile Web Development with Rails - First Ediition, pagina 67:
def price_should_be_positive
errors.add(:price, "Should be positive") unless price.nil? || price > 0.0
end
Nu mi se pare normal sa mai adaug si price.nil?, atat timp cat folosesc si validates_presence_of :price.
Imi face o mare placere sa anunt aparitia primului serviciu de hosting ce ofera Ruby on Rails in Romania.
Da, serverele sunt in Romania, da paginile web sunt servite de lighty in colaborare cu apache, da ai acces la shell si da decorul este completat de Subversion.
Preturile pentru hosting rails incep de la 34RON/luna.
Acum cateva saptamani am avut placerea sa fac un mic test pentru a asigura buna functionare a unei aplicatii in rails. Well, totul a mers asa cum m-as fi asteptat: super-bine! In curand sper sa devin si client.
Gazduirea este oferita de CHML. Mai multe detalii se gasesc aici.
Update 26.05.2006
- Nu am primit si nu o sa primesc niciodata bani sa fac “reclama” unui produs prin intermediul unui articol scris pe blogul locknet.ro. Spun asta pentru ca un cititor ma acuza cum ca as fi primit favoruri pentru a scrie de bine despre un serviciu de hosting la un pret considerat de dansul “prohibit”.
Il rog sa citeasca mai atent detaliile ofertei si sa ma indrume (poate printr-un comentariu) catre un serviciu de hosting web din Romania ce ofera facilitati similare.
- Via RailsWebHosts am aflat ca Smarthost Romania ar mai oferi hosting cu Ruby in Romania, deci poate am gresit cand am spus ca CHML ar fi primii.
Mi-am facut ceva timp si am reusit sa schitez in cateva ore partea centrala a aplicatiei marks: salvarea si afisarea bookmarkurilor. si, ta-ta-ta-ta-ta-taguri.
Fata de planul initial, am ales sa fac modelul bookmark cu
has_one_and_belongs_to_many :users.
Sper sa fie o decizie inteleapta cu toate ca intampin ceva probleme la afisarea unui total pe bookmark, de genul: “acest url a mai fost salvat de alti X utilizatori”.
Pentru taguri, am folosit pluginul Act As Taggable cu destule modificari ce permit gruparea acestora per user.
Sunt inca multe lipsuri, de exemplu nu pot edita sau sterge intrarile odata introduse.
Validarea modelului bookmark va veni si ea.
Cateva actiuni sunt inca neimplementate (ex. “save this mark”).
Pe Internet Explorer arata cam aiurea, si asta pentru ca folosesc niste margini negative pentru a stiliza anumite elemente HTML (probabil).
“Atat de mult AJAX incat o sa fie de prost gust”, in curand.
Plus mailuri cand te inregistrezi, password recovery, RSS, import din alte aplicatii. Si deja am idei pentru urmatorul proiect cu RubyOnRails.
Uff, acum imi dau seama cate mai sunt de facut, insa … toate la timpul lor.
Totusi, tin insa sa multumesc celor care s-au inregistrat in prima faza, in total suntem cam 12 utilizatori (WOW!!!) banuiesc ca doar vreo 7-8 conturi sunt “pe bune”.
Intr-un viitor articol o sa explic mai pe larg de ce nu tin sa fac codul disponibil sub o licenta open-source.
Acum, o sa spun doar doua idei:
In primul rand nu cred ca programatorii romani prefera sa se implice intr-un proiect ce nu le va aduce satisfactii materiale.
Apoi, exista un proiect asemanator publicat sub GPL, url.markr. As fi mult mai tentat sa incerc sa ajut aceasta initiativa, daca ar avea o licenta mai pe placul meu.
Da stiu, o sa ma gandesc si la un alt nume :)
Ceva idei? :)
Spuneam ca sunt putin nefericit din cauza ca testele pentru controllerul account sunt cam subtiri.
Vineri seara am descoperit rcov. Pe scurt, rcov este o aplicatie care identifica acoperirea codului cu unit-teste pentru ruby, destul de greu de explicat in romana.
Se poate vedea alaturat, ca dupa prima rulare, la 121 de linii de cod in account_controller, doar 16,1 % erau acoperite de teste. O cifra acceptabila ar fi 75%, dar pentru o aplicatie atat de mica ar fi fost pacat sa nu am 100% code coverage.
rcov is a code coverage tool for Ruby
Code coverage shouldn’t be abused (in few words, C0 coverage guarantees nothing) but it’s still useful for testing: it will at least tell you when your tests need more work, and most importantly where.
Dupa cateva ore, folosind pasi marunti de genul: scrie unit-test, ruleaza, regeneraza graficul de acoperire am ajuns la 100%.
Revenind la marks, nu am reusit sa imi fac timp pentru a adauga facilitati noi, insa cel putin acum sunt mai sigur ca partea de management al utlizatorilor va functiona corect.
Acoperire cu rcov, written by aurelian in
rails,
web
|
No Comments
Anuntam acum cateva zile intentia de a dezvolta primul meu proiect public in rails.
In prima etapa mi-am propus sa implemetez un sistem pentru gestionarea utilizatorilor cu urmatoarele cerinte:
- posibilitatea creeri de noi conturi;
- odata autentificat, utilizatorul curent va putea sa isi schimbe parola, adresa de mail sau sa isi stearga contul;
- un utilizator privilegiat va putea sterge/edita conturile altor indivizi;
- privilegiatul poate sa deschida si alte conturi dar sa si vada detalii despre utilizatorii inregistrati (nume, last login, email, etc).
Era mult prea simplu sa folosesc un plugin pentru toata treaba asta si probabil as fi ratat unul din scopurile aceste aplicatii: sa ma familiarizez cu ruby si cu rails.
Am gasit destule exemple de urmat, printre ele
Acts_As_Authenticated dar si alte aplicatii open-source facute cu rails.
Ce a iesit pana acum se poate vedea aici.
Lipsuri:
- vreo doua actiuni nu sunt inca implementate: password_recovery si editarea altor conturi de catre super-user;
- trebuie sa testez mai atent controllerul
account;
- aplicatia arata cam ciudat (look-and-feel) si prezinta ceva inconsistente intre pagini (paginile nu arata toate la fel).
Am facut deja planul si pentru etapa 2 unde utilizatorul inregistrat va putea sa adauge intrari noi in sistem.
Pentru a fii sigur ca nimeni nu va folosi numele tau de utilizator preferat rezerva-ti un cont chiar acum :)
Marks va fi titlul primului meu proiect facut in ruby folosind Ruby on Rails.
Marks vine de la Bookmarks si, TADA: va fi o clona dupa del.icio.us.
Asa cum ziceam, este doar un pet project, nu caut celebritatea in domeniul asta, si nici nu incerc sa intru pe piata celor care ofera “Social Bookmarks” (din unele statistici, cica ar fi peste 20 de astfel de aplicatii).
Just for fun.
Sper totusi sa fiu primul care foloseste acest nume.
Sa spun adevarul pana la capat, dupa ce am descoperit ca voi putea folosi Ruby on Rails si dupa ce m-am gandit cateva zile, aveam deja planul initial pentru “marks”.
Saptamana asta o sa incep si implementarea.
Marks, Application Workflow
Un utilizator va putea sa vada linkurile adaugate, insa va avea nevoie de un cont pentru a putea introduce un URL in sistem.
Gruparea se va face pe “taguri”, pe utilizatori sau pe tagurile unui utilizator.
Pentru inceput:
- Va fi un sistem in care nu va exista posibilitatea adaugarii de comentarii pentru o anumita intrare.
- Validare utilizatorilor nou creati se va face automat, totusi, in viitor fiecare va trebui sa isi valideze contul folosind un link primit pe mail.
Marks, Database
Tabelul central al aplicatiei va fi denumit bookmarks si va avea campurile:
Fiecare bookmark va avea asociat un user, deci tabelul pentru pastrarea utilizatorilor, users, va arata cam asa:
Pentru taguri va fi folosit pluginul Acts As Taggable
Marks, Frontend
In partea de prezentare voi folosi foarte mult AJAX, atat de mult incat va fi de prost gust.
Foarte importanta mi se pare insa validarea campurilor completate de utlizatori si mesajele de eroare care vor fi afisate in cazul in care se intampla ceva gresit.
La fel de important: as vrea ca aceasta aplicatie sa fie functionabila si pe browsere fara javascript.
Cam acesta este PLANUL.
Pentru o versiune viitoare, as avea nevoie de:
- Un maestru in chestiuni de usabilitate si/sau un guru specializat in desenarea interfetelor web,
- Un server mai rapid.
Sincer, ma astept sa apara un destept cu ideea ca ar putea face acest proiect in ASM sau PHP in 10 minute, iti zic inca de acum: felicitari!
Un altul imi va atrage atentia ca nu va folosi niciodata aceasta aplicatie pentru ca exista deja X sau Y: foarte bine ramai cu X.
Daca nu v-ati prins deja, repet: este un proiect pe care il fac doar din placere, si pentru a avea parte de bucurii adevarate trebuie sa folosesc ruby si Ruby on Rails.
Poti vedea cum progreseaza PLANUL pe http://marks.locknet.ro. O sa anunt cand va fi gata pentru testare.
Am incercat in ultimele zile sa ma familiarizez cu RubyOnRails si sa incerc sa fac o aplicatie de la zero.
In mod normal primul lucru pe care il facem este tipicul HelloWorld pentru a testa mediul in care o sa dezvoltam in continuare.
Dupa un weekend on Rails, pot da urmatoarele sfaturi:
Daca se foloseste combinatia Apache/mod_ruby sau Apache/CGI performanta aplicatiilor scrise in ruby si implicit in rails scade simtitor.
Lucrurile se schimba insa cu Lighty + FastCGI (recomandat) sau Apache cu FastCGI.
Am aflat si de SCGI (via blog.peat.org) insa nu stiu momentan daca as putea instala asa ceva intr-un mediu in care nu am acces direct la serverul web (apache in cazul meu). Se pare insa ca Lighty/SCGI este o solutie buna pentru cei care ofera hosting cu rails.
- Foloseste setup-uri asemanatoare pe masina pe care se face dezvoltarea si sistemul unde o sa publici aplicatia (production)!
Am pierdut foarte mult timp (probabil ca acum as rezolva problema mult mai repede) sa imi mut aplicatia dezvoltata pe localhost cu Lighty/FCGI pe Apache/CGI. Cautari fara raspuns pe google (nu prea se foloseste Apache/CGI?), intrebari pe #rubyonrails si intr-un final cu ajutorul unei console de debug pentru CGI (practic examinarea erorilor din fiserul de log al serverului web) am rezolvat problema, cam 5-6 ore in total. Si asta cu noroc, pentru ca dupa vreo 4 ore am decis sa ma culc putin.
Ma gandesc cat timp as fi pierdut daca foloseam windows cu WEBrick.
- Foloseste o metoda de deploy automata!
Deploy: adica publicarea aplicatiei pe net.
De cele mai multe ori, transferul prin ftp este incomod.
Daca se poate, foloseste capistrano (fost SwitchTower), daca nu cauta metode alternative, de exemplu rsync sau orice alt script care iti va muta fisierele rapid pe serverul live.
Apropos, inca nu m-am hotarat ce fel de aplicatie o sa fac (ei bine, de fapt am niste idei), insa, primii pasi cu o aplicatie dezvoltata in rails si publicata pe internet i-am facut aici.
Rails, primele 3 indicii, written by aurelian in
rails,
web
|
No Comments
Prin nu stiu ce minune, serverul web apache care serveste continut pentru 29dots.com stia sa lucreze si cu scripturi scrise in ruby (pe langa php3, php4 sau php5) rulate ca CGI.
Mi-am instalat singurel, prin ssh, RubyGems si Rails ca utilizator neprivilegiat in $HOME.
Toate bune si frumoase, insa Rails are nevoie de ruby versiunea 1.8.2 sau 1.8.4, iar pe server era fix versiunea 1.8.1, normal un debian ultra-stable si ultra-tested.
Inapoi la consola, mi-am compilat si ruby, versiunea 1.8.4, tot ca utilizator obisnuit, si am scris repede un mic HelloWorld de test.
Pasul urmator va fi sa imi gasesc un “pet-project1” pe care sa il fac cu Rails.
Sunt inca la un nivel incepator-mediu cu ruby. Am citit si facut multe tutoriale dragute pe care le-am gasit pe net.
Aplicatia mea trebuie sa fie destul de simpla (cu 2-3 tabele in baza de date) si sa foloseasca ceva AJAX.
Inca nu am nicio idee concreta, dar de vreo 2-3 zile ma tot gandesc.
Ah, nu trebuie sa fie ceva super-original, m-as multumi si cu o clona a unui sistem existent deja, va fi o aplicatie prin care vreau doar sa vad cum m-as descurca si intr-un alt limbaj de programare.
1 Wikipedia: A pet project is a task undertaken out of personal interest instead of necessity.
Am hosting cu Rails, mai departe?, written by aurelian in
rails,
web
|
No Comments
3 or 4 weeks ago, every day I’ve heard the words : ruby, rubyonrails, rails.
It seams that everyone saw, touch and get back to php or whatever.
Well, I’m wrong, rails is even better and today David announced version 1.1 with more that “500 other things”, a impressive list of new features.
The biggest upgrade in Rails history has finally arrived.
Welcome.
Is the hype over?, written by aurelian in
rails,
|
No Comments