Archivio di Maggio 2008

Convertire una stringa in un nome di classe

Sabato, 31 Maggio 2008

Vi sarà sicuramente capitato in una fase di programmazione avanzata di voler convertire una semplice stringa in un nome di classe. Facciamo un esempio pratico:
Tramite una normalissima form vogliamo passare il nome di un modello come parametro ad un metodo che si occupi poi di richiamare il metodo find appropriato? niente di più semplice in pieno stile ruby ;-)

#per comodità assegno alla variabile stringa il paramentro in arrivo
stringa = params[:model]
#converto la stringa in modello e richiamo la find
stringa.camelize.constantize.find(:all)

Camelize si occupa di rendere la stringa in formato corretto: “il mio modello” diventa “IlMioModello”
Constantize invece cerca una costante con il nome corrispondente alla stringa già “cammelizzata” (cioè maiuscole/minuscole).

Di seguito i link al mio server con la documentazione relativa:

Documentazione di camelize
Documentazione di constantize

E’ tutto!

Installare RMagick su Leopard

Sabato, 31 Maggio 2008

E’ da un pò che ci giravo intorno, non volevo utilizzare Macports ma alla fine mi sono convinto. Cominciamo.

Scenario:

  • iMac 24″ nuovo di pallino
  • Installazione fresca fresca di Leopard 10.5.3

Come ormai è ben noto Macosx 10.5.3 (Leopard) è l’unico sistema operativo che esce di default con Ruby e Rails installati e perfettamente funzionanti.

Con i comandi

ruby -v
rails -v

è possibile conoscere le rispettive versioni che mamma Apple ha installato per noi.

Il mio consiglio (ed anche Apple stessa lo dice) è quello di aggiornare subito sia il sistema Gem che le relative gemme installate (quindi anche Rails).

sudo gem update –system
sudo gem update

Una volta terminato l’aggiornamento passiamo all’argomento che da il titolo a questo articolo, cioè come installare RMagick su Leopard per poter poi utilizzare le funzioni di manipolazione immagini nelle nostre web application…

(more…)

Come ottimizzare Apple Mail

Venerdì, 30 Maggio 2008

Stamattina aprendo il mio fidatissimo client di posta Apple mail mi sono reso conto che ho una quantità di email esagerata e che l’avvio non era più veloce come un tempo.

Da utente Apple non posso tollerare situazioni di questo tipo così ho deciso di fare un ricerchina veloce su google ed ho scoperto come risolvere la questione in pochissimi secondi!

Chiudete Mail e aprite il terminale.
Entrate nella cartella delle preferenze di mail:

cd ~/Library/Mail

e digitate questo codice:

sqlite3 Envelope\ Index

Vi apparirà ora il prompt di sqlite3 (il database di mail)

A questo punto digitate:

vacuum subjects;

Il comando vacuum non fa altro che ricostruire il database in modo ottimizzato. Ad esempio, quando si cancella un messaggio questo purtroppo lascia dello spazio vuoto nel file .db. Con il comando vacuum invece questo spazio viene eliminato e il file db viene ridotto di dimensioni. Per i più curiosi un link alla documentazione di sqlite3 ci sta bene:
Attendente quindi qualche istante che ricompaia il prompt, poi premete control + D per uscire da sqlite3 e riavviate tranquillamente Mail.

Noterete un incremente di prestazioni (avvio e ricerche) notevole!

Fonte

Quando i fantastici quattro ‘girano in casa’

Venerdì, 30 Maggio 2008

Ovvero come compilare ed installare Ruby, Rails Imagemagick Rmagick nella propria /home/ senza chiedere aiuto a ’sudo’: questa procedura ha dato ottimi risultati su DreamHost, ma dovrebbe funzionare egregiamente su ogni host.

Il problema nasce dal fatto che nessuna azienda di hosting renderá mai disponibile la versione piú recente dei pacchetti installati sul server per non incorrere in troppi bugs e cosí capita che proprio quando fai un deploy dell’applicazione Rails che in localhost funziona tranquillamente, in produzione ha un comportamento differente e solitamente sono errori fatali!

1) PREPARARE L’AMBIENTE

editare il file ~/.bash_profile come segue

umask 002
PS1=’[\h:$PWD]$ ‘
alias restart=”touch tmp/restart.txt” *
EDITOR=”/usr/bin/nano”
. .bashrc

*opzionale: é utile su DreamHost per riavviare le applicazioni Rails che girano in produzione con Passenger

editare il file ~/.bashrc

export TZ=ECT # visto che ci siamo impostiamo European Central Time
export LD_LIBRARY_PATH=$HOME/.packages/lib
export PATH=$HOME/.packages/bin:$HOME/.gems/bin:${PATH}
export GEM_HOME=$HOME/.gems
export GEM_PATH=$GEM_HOME:/usr/lib/ruby/gems/1.8
export LDFLAGS=-L/$HOME/.packages/lib
export LD_RUN_PATH=$HOME/.packages/lib
export CPPFLAGS=-I/$HOME/.packages/include

chiediamo alla shell di ricaricare i file di configurazione e verifichiamo che tutto sia stato caricato correttamente:

$. ~/.bash_profile
$ env

env vi mostrerá un elenco di variabili d’ambiente tra le quali anche quelle appena aggiunte: se non é cosí scommetto 5€ che non avete scritto i file di configurazione nella vostra home: rimediare con cd ~ e ricominciare!

2) CREARE LE DIRECTORY OPERATIVE

$ mkdir .gems && mkdir .src && mkdir .packages

3) SCI! Scaricare, Compilare, Installare

== READLINE ==

$ cd ~/.src
$ wget ftp://ftp.cwru.edu/pub/bash/readline-5.2.tar.gz
$ tar zxvf readline-5.2.tar.gz
$ cd readline-5.2
$ ./configure –prefix=$HOME/.packages
$ make
$ make install
$ rm readline-5.2.tar.gz && rm -Rf readline-5.2
$ cd ~

== RUBY ==

$ cd ~/.src
$ wget ftp://ftp.ruby-lang.org:21/pub/ruby/ruby-1.8.6-p114.tar.gz
$ tar zxvf ruby-1.8.6-p114.tar.gz
$ cd ruby-1.8.6-p114
$./configure –prefix=$HOME/.packages –with-readline-dir=$HOME/.packages
$ make
$ make install
$ rm ruby-1.8.6-p114.tar.gz && rm -Rf ruby-1.8.6-p114
$ cd ~

controlliamo?

$ which ruby
/home/yourhome/.packages/bin/ruby
$ ruby -v
ruby 1.8.6 (2008-03-03 patchlevel 114) [i686-linux]

== RubyGems ==

$ cd ~/.src
$ wget http://rubyforge.org/frs/download.php/20989/rubygems-0.9.4.tgz
$ tar zxvf rubygems-0.9.4.tgz
$ cd rubygems-0.9.4
$ ruby setup.rb config –prefix=$HOME/.packages
$ ruby setup.rb setup
$ ruby setup.rb install –prefix=$HOME/.packages/
$ rm rubygems-0.9.4.tgz && rm -Rf rubygems-0.9.4
$ cd ~

controlliamo?

$ which gem
/home/yourhome/.packages/bin/gem
$gem list -l

*** LOCAL GEMS ***

actionmailer (1.3.6, 1.2.5)
actionpack (1.13.6, 1.12.5)
actionwebservice (1.2.6, 1.1.6)
activerecord (1.15.6, 1.14.4)
activesupport (1.4.4, 1.3.1)
login_generator (1.2.2)
rails (1.2.6, 1.1.6)
rake (0.8.1, 0.7.1)
rmagick (2.3.0, 1.14.1)
rubygems-update (1.1.1)
sources (0.0.1)

ora é possibile..

$gem update –system

oppure

$ gem install rails –include-dependencies

== ImageMagick ==

$ cd ~/.src
$ wget ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz
$ tar xvfz ImageMagick.tar.gz
$ cd ImageMagick-6.4.1/
$./configure –prefix=$HOME/.packages -without-perl –with-gslib –with-gs-font-dir=/usr/share/fonts/type1/gsfonts/ && make && make install
(–with-gslib –with-gs-font-dir=/usr/share/fonts/type1/gsfonts/ é richiesto solo da DreamHost!)
$ rm ImageMagick.tar.gz && rm -Rf ImageMagick-6.4.1
$ cd ~

come sempre possiamo controllare che il comando convert di IM sia presente e sia proprio quello appena installato..

$ which convert
/home/yourhome/.packages/bin/convert

l’ultima versione di IM é davvero potente! provate questo, su un’immagine ‘image.jpg’ ;)

$ convert -font Times -background ‘#0008′ -fill white -gravity center -size 200×40 -pointsize 25 label:”Sono Stupido!” +size image.jpg +swap -gravity south -composite label_image.jpg

== RMagick ==

$ cd ~/.src
$ wget ‘http://rubyforge.org/frs/download.php/23510/rmagick-1.15.8.gem’
$ gem install -l rmagick-1.15.8.gem — –build-opts –prefix=$HOME/.packages/
$ rm rmagick-1.15.8.gem

A questo punto dimenticare di inserire questa direttiva nel file config/environment.rb delle vostre applicazioni Rails sarebbe davvero un grave errore..

ENV['GEM_PATH'] = ‘/home/yourname/.gems’

Buon Divertimento!

Testing in Rails

Lunedì, 19 Maggio 2008

Ho scoperto da pochissimo la gemma autotest che fa esattamente quello che il nome suggerisce…lancia continuamente i test contenuti nella directory /test del vostro progetto.

Ogni volta che salvate e/o modificate un test functional, integration, o unit, autotest rilancia per voi il relativo task

rake test

Geniale no?

Per installare la gemma basta un

sudo gem install ZenTest

Dalla directory del vostro progetto vi basterà lanciare il comando

autotest

e il gioco è fatto. Per terminare autotest vi basta digitare due volte di seguito “ctrl + c

Ciao