Su Internet Magazine n.124 di Marzo trovate la mia intervista a Diego La Monica, amico e creatore dell’interessantissimo framework javascript jastEgg

Su Internet Magazine n.124 di Marzo trovate la mia intervista a Diego La Monica, amico e creatore dell’interessantissimo framework javascript jastEgg

Con orribile ritardo pubblico le slides del mio intervento alla conferenza Rails to Italy 07 dove ho affrontato l’utilizzo dei principali sistemi di ricerca con RubyOnRails.

In attesa che Il nuovo package manager, frutto del lavoro di Ian Murdock nel Project Indiana, faccia la sua comparsa nella prossima build di Solaris Express Community Edition, ecco un bell’how-to in Sun BigAdmin per ‘switchare’ da MySQL a PostgreSQL
C’è un nuovo linguaggio di template per rails, e sembra essere molto interessante, Malline . Una cosa rende il codice veramente pulito, si tratta di puro ruby!
div.page do
h1 'Header one'
ul.list! do
li { a 'Link to somewhere', :href => '/foo' }
end
end
E’ anche disponibile uno script per convertire file rhtml nel nuovo template:
html2mn.rb <input file> <output file>
Vi rimando alla pagina delle features dove troverete molti esempi. E’ ora di ababndonare ERB ?
Oggi, dopo tanto lavoro, apriamo il nuovo sito di Carta! Con questa nuova edizione il settimanale si rilancia aggiungendo alle edizioni cartacee, il nuovo sito e un’edizione quotidiana in formato PDF.
Il vecchio sito di Carta, con le sue 500.000 pagine viste al mese cominciava a sentire gli anni, il sito era statico ma conteneva migliaia di pagine, la gestione dei contenuti avveniva attravero Dreamweaver se non per una piccola parte del sito dedicata alle news per la quale veniva utilizzato un vecchio software scritto in php. Per la ricerca dei contenuti si era costretti ad utilizzare un motore di ricerca esterno.
Le esigenze del cliente erano queste: poter amministrare la mole notevole di contenuti che vengono inseriti ogni giorno da un interfaccia unica, rendere flessibile la classificazione dei contenuti e renderli ricercabili in maniera efficace. In questi mesi abbiamo trasportato il vasto archivio del vecchio sito statico in un nuovo sistema, basato su Ruby on Rails e abbiamo costruito gli strumenti richiesti dal committente.
Come piattaforma tecnologica, per richiesta di Carta, è stato scelto di usare Debian e Mysql. Il motore di ricerca è stato costruito attorno a Ferret. Un’altra richiesta di Carta era quella di sviluppare un software che permettesse di costruire un file pdf partendo da una selezione degli articoli del giorno pubblicati sul sito. Dato che la veste grafica che si voleva dare al PDF era, per quanto essenziale, piuttosto elaborata (2 colonne, sillabazione, immagini, uso di particolari fonts..) abbiamo deciso di realizzare una piccola applicazione Cocoa che importasse dal sito i contenuti prescelti e creasse, utilizzando il motore di rendering di Mac OS X, il file PDF.
Il risultato grafico non è propriamente web 2.0! Ma anche questa era un’esigenza della redazione, abbiamo comunque introdotto elementi quali i tags, i feed rss, i podcast per RadioCarta.

La nuova release di sviluppo di Sphinx che nel giro di poche settimane diverrà la 0.9.8 porta un’importante novità, il supporto nativo per libstemmer che permettera lo stemming in molte lingue, tra cui l’italiano, ed elimininando la precedente disponibilità per il solo inglese e russo (lingua madre dello sviluppatore Andrew Aksyonoff )
Ricordando che è ancora una versione in fase di sviluppo, e quindi non adatta ad essere utilizzata in produzione, per installarla fate così:
Scaricate la versione dev di Sphinx 0.9.8 (al 14/10/2007 rev.871) da questo indirizzo
Scaricate la libreria C di libstemmer da qui
Scompattatela e compilatela direttamente nel directory sphinx-0.9.8-svn-r871/libstemmer_c
Compilate Sphinx con il comando:
$ ./configure —with-libstemmer
seguito naturalmente da:
$ make
$ sudo make install
Per l’utilizzo con il plugin rails ultrasphinx , ricordarsi di modificare adeguatamente il file di configurazione situato in config/ultrasphinx/default.base e di rilanciare
$ rake ultrasphinx:configure
Solr (si pronuncia “solar”) è il potente server di ricerca che ingloba la tecnologia di Lucene, un’interfaccia HTML/XML.
Noi utenti rails possiamo utilizzarlo come motore di ricerca per le nostre applicazioni grazie al plugin acts_as_solr .
Ma come fare ad utilizzare uno stemmer italiano? facile! basta aprire il file di configurazione e sostituire la classe java EnglishPorterFilterFactory
<filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
con
<filter class="solr.SnowballPorterFilterFactory" language="Italian" />
il file di configurazione, un file xml in stile java si trova in vendor/plugins/acts_as_solr/solr/solr/conf/schema.xml
Sempre nello schema di configurazione si possono indicare i file per le stopwords e i sinonimi nella nostra lingua.
Sun fornisce una appliance di Solaris Express Developer Edition per Parallels. Questa è un ottima notizia perchè finora per installare OpenSolaris su Parallels bisognava ricorrere ad alcuni noiosi trucchetti .
Questo tutorial segue un’installazione su debian Etch, nel nostro caso la macchina è un Apple Mini Mac (PPC).
Con Etch è diventato davvero immediato installare Ruby on Rails.
Prima aggiorniamo tutto e verifichiamo che alcuni pacchetti base siano presenti nella macchina:
$ sudo apt-get install gcc g++ make libc6-dev flex openssl curl wget bison lib64stdc+6 libstdc+6-4.1-doc
Installiamo Mysql 5
$ sudo apt-get install mysql-server libmysqlclient15-dev mytop
Ora si tratta di installare ruby:
$sudo apt-get install ruby ruby-dev rdoc irb rubygems libzlib-ruby libmysql-ruby
Vengono così installati ruby 1.8.5 e rubygems 0.9.0
Ora ci serve installare Subversion
$ sudo apt-get install subversion subversion-tools
Installiamo Imagemagick
$ sudo apt-get install imagemagick libmagick9-dev
Ora finalmente possiamo usare rubygems per installare Ruby on Rail e gli altri pacchetti necessari!
$ sudo gem install rails -y
installiamo un driver di connessione a mysql scritto in C che sostituisca l’originale driver scritto in Ruby:
$ sudo gem install mysql
e alcuni pacchetti necessari per la nostra applicazione, nel mio caso:
$ sudo gem install fastercsv map_by_method net-sftp net-ssh radius rmagick ferret
Mancherebbe da installare Redcloth, purtroppo la versione attuale ha diversi problemi sia come prestazioni che come risultati di rendering, installare la futura versione comporta qualche difficoltà in più:
In particolare ora redcloth necessita Ragel, un’interfaccia a eseguibili C, C++ che permette di incrementare le prestazioni di 10x.Ho preferito un’installazione da sorgenti rispetto al pacchetto in debian stable forse troppo datatato:
$ cd source
$ wget http://www.cs.queensu.ca/~thurston/ragel/ragel-5.20.tar.gz
$ tar xvf ragel-5.20.tar.gz
$ cd ragel-5.20
$ ./configure
$ make
$ sudo make install
A questo punto installamo da repository Superredcloth, la futura versione di Redcloth 4:
$ cd source
$ svn co http://code.whytheluckystiff.net/svn/redcloth/branches/superredcloth
$ cd superredcloth/
$ rake
$ rakegem
$ sudo gem install pkg/superredcloth-1.163.gem
Mongrel:http://mongrel.rubyforge.org/ è un server HTTP scritto in ruby. in questo tutorial imposteremo un cluster di server mongrel che si occuperanno di servire la nostra applicazione rails. Il frontend sarà affidato al server http Nginx.
$ sud gem install mongrel mongrel_cluster -y
Bisogna poi effettuare delle operazione per lanciare Mongrel come un servzio, questa è una versione leggermente migliorata dello scipt init.d che viene con mongrel_cluster (/var/lib/gems/1.8/gems/mongrel_cluster-0.2.1/resources/mongrel_cluster)
in /etc/init.d/mongrel_clusters:
#!/bin/bash
#
# Copyright (c) 2006 Bradley Taylor, bradley@railsmachine.com
#
# mongrel_cluster Startup script for Mongrel clusters.
#
# chkconfig: - 85 15
# description: mongrel_cluster manages multiple Mongrel processes for use \
# behind a load balancer.
#
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local:/usr/local/sbin:/usr/local/bin:/var/lib/gems/1.8/bin
CONF_DIR=/home/ettober/Sites/trunk_carta
RETVAL=0
# Gracefully exit if the controller is missing.
which mongrel_cluster_ctl >/dev/null || exit 0
# Go no further if config directory is missing.
[ -d "$CONF_DIR" ] || exit 0
case "$1" in
start)
mongrel_cluster_ctl start -c $CONF_DIR
RETVAL=$?
;;
stop)
mongrel_cluster_ctl stop -c $CONF_DIR
RETVAL=$?
;;
restart)
mongrel_cluster_ctl restart -c $CONF_DIR
RETVAL=$?
;;
*)
echo "Usage: mongrel_cluster {start|stop|restart}"
exit 1
;;
esac
exit $RETVAL
a questo punto:
$ sudo chmod +x /etc/init.d/mongrel_cluster
$ sudo update-rc.d mongrel_cluster defaults
Nginx, è un ottimo server web e proxy di fabbricazione russa. malgrado non sia ancora molto conosciuto è un’ottima per ottenere alte prestazioni, stabilità e un consumo ridotto di memoria. E’ attivo un wiki:http://wiki.codemongers.com/ dove una parte della documentazione è in via di traduzione dal russo.
alcuni prterequisiti:apt-get install libpcre3-dev zlib1g-dev
su macchine i386 potremmo scaricare il pacchetto .deb da http://deb.wapper.ru/nginx/. Nel nostro caso siamo su PowerPC, scarichiamo quindi i sorgenti da: http://sysoev.ru/nginx/download.html
$ cd /source bq. $ wget http://sysoev.ru/nginx/nginx-0.5.17.tar.gz bq. $ tar -xvf nginx-0.5.17.tar.gz
ora si possono configurare i sorgenti, maggiori inso su: http://wiki.codemongers.com/NginxInstall
$ ./configure—sbin-path=/usr/local/sbin—pid-path=/var/run—conf-path=/etc/nginx.confcat /et —error-log-path=/var/log/ngnx—http-log-path=/var/log/ngnx
Configuration summary
+ threads are not used
+ using system PCRE library
+ OpenSSL library is not used
+ md5 library is not used
+ sha1 library is not used
+ using system zlib library
nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/sbin"
nginx configuration file: "/etc"
nginx pid file: "/var/run"
nginx error log file: "/var/log/ngnx"
nginx http access log file: "/var/log/ngnx"
nginx http client request body temporary files: "/usr/local/nginx/client_body_temp"
nginx http proxy temporary files: "/usr/local/nginx/proxy_temp"
nginx http fastcgi temporary files: "/usr/local/nginx/fastcgi_temp"
$ sudo make install clean
a questo punto è necessario un init.d script per attivare nginx all’avvio del server:
$ sudo vi /etc/init.d/nginx
#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local:/usr/local/sbin:/usr/local/bin
DAEMON=/usr/local/sbin/nginx
NAME=nginx
DESC="Nginx HTTP Server"
test -x $DAEMON || exit 0
# Get lsb functions
#. /lib/lsb/init-functions
. /etc/default/rcS
start() {
echo "Starting $DESC... "
# echo "Starting $DESC: "
if ! start-stop-daemon --start --quiet --oknodo --exec $DAEMON
>/dev/null 2>&1; then
status=$?
echo $status
return $status
fi
log_end_msg 0
return 0
}
case "$1" in
start)
start
;;
stop)
echo "Stopping $DESC: "
start-stop-daemon --stop --quiet --oknodo --exec $DAEMON
echo $?
;;
restart|force-reload)
$0 stop
sleep 1
start
#echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
$ sudo chmod +x /etc/init.d/nginx bq. $ sudo update-rc.d nginx defaults bq. $ sudo /etc/init.d/nginx start
La nostra macchina, un Mac mini G4 con soli 256mb di ram ha bisogno di una certo affinamento delle impostazioni per ottenere prestazioni adeguate:
evitiamo di avviare il login grafico all’avvio:
$ sudo mv /etc/rc2.d/S21gdm /etc/rc2.d/_S21gdm
Con una mail alle comunità di FreeBSD e OpenSolaris è stata annnunciato il commit di ZFS in FreeBSD 7.0_CURRENT.
Questa incontro tra le due comunità si affianca alla già effettuata inclusione della nuova piattaforma sun4v per processori Niagara / UltraSPARC-T1 T1 e allo studio per l’inclusione di DTrace al trunk per di FreeBSD 7.0 , in stallo per problemi di incompatibilità nella licenza del software.
Fino a poco tempo fa era impossibile installare OpenSolaris su Parallels , la soluzione per la virtualizzazione più usata in ambiente Mac OS X, il boot del cd di installazione si piantava irrimediabilmente, rimaneva solo la versione beta di vmware fusion . Oggi mi ho scoperto che Sun fornisce nella documentazione di Solaris Express Developer edition 2/07 dettagliate istruzioni su come installare su Parallels!

Oggi è arrivato il dvd di Solaris Express Developer Edition 2/07 che avevo ordinato circe 3 settimane fa. Si tratta di un solo dvd in una bustina di plastica, e purtroppo è solo per x86, niente versione sparc! Il dvd contiene, oltre alla build 55 di OpenSolaris, Sun Studio 11, NetBeans IDE 5.5 e un nutrito di pacchetti OpenSource quali PostgreSQL, MySql, Python e varie applicazioni ( StarOffice 8, Firefox) Secondo Sun questo è il sistema ideale per sviluppatori Java e web 2.0.
La comunità di OpenSolaris sta votando per eleggere il nuovo OpenSolaris Governing Board (OGB) e per la ratifica della bozza di costituzione.

Per poter votare è necessario essere membri della comunità e inserire nella propria pagina profilo una coppia di chiavi SSH. Maggiori istruzioni sul blog di Ben Rockwood
Per configuare il controllo di versione per progetti rails con subversion bisogna ricordarsi di effettuare una serie di operazioni :
ignorare i file nelle directory tmp/ e log/
Non considerare il file database.yml
permessi ed eseguibili
etc etc
Tutto questo alla lunga può diventare noiso.. Questo script, sotto forma di baloon , rende tutta la configurazione semplicissima: dopo aver fatto il checkout dal nostro repository basta lanciare dalla cartella root del progetto:
ruby -ropen-uri -e ‘eval(open(“http://balloon.hobix.com/svn_configure”).read)’
Un baloon non è altro che una pagina web che agisce come uno script .. Naturalmenteci si può anche non fidare e scaricare il baloon come normale file.rb… per lanciarlo con più sicurezza!
Qui Londra, prima conferenza Rails in Europa.. post-conf-pint ;-)


The conference as in the previous two years will focus on new technologies in web programming, open source and everything that stands for IT (Internet Technologies).
During the two days event visitors will be acquainted with many aspects of these technologies and will be introduced to the future plans for development.
rake unfreeze_rails svn propdel svn:externals vendor (from rails app root dir)
C’è nuovo interessante webserver Cherokee
E’ ancora giovane, il supporto per FastCGi è ancora in fase di sviluppo e non vengono supportati .htaccess ma le prestazioni sembrano di tutto rilievo.
Ce la farà a differenziarsi da Lighhtpd?

Questo è un breve how-to con le istruzioni per l’installazione su FreeBSD 6, la versione di Lighttpd è la 1.4.10.
cd /usr/ports/www/lighttpd/ && make install clean
Apparirà un messaggio per la scelta delle opzioni di compilazione, va bene lasciare solo openSSL selezionata.
Per automatizzare l’avvio di Lighttpd si può aggiungere a /etc/rc.conf
lighttpd_enable=”YES”
Con l’installazione viene creato un file di configurazione in /usr/local/etc per utilizzarlobasta rinominarlo:
cd /usr/local/etc && cp lighttpd.conf.sample lighttpd.conf
nel file di configurazione bisogna indicare la posizione dei file di log, ad esempio in /var/log:
cd /var/log/ && touch lighttpd.access.log lighttpd.error.log && chown www:www lighttpd.*.log
Se si utilizza una versione di FreeBSD precedente alla 6.0 necessario installare questi port
cd /usr/ports/security/portaudit && make install clean
In tutti i casi serve installare questi ports:
cd /usr/ports/sysutils/portsnap && make install clean cd /usr/ports/sysutils/portupgrade && make install clean
portaudit confronta i port installati con un archivio di rischi di sicurezza portsnap serve per l’aggiornamento dell’albero dei port portupgrade aggiorna i port già installati
prima di procedere all’agiornamento bisogna generare un file di configurazione:
cd /usr/local/etc/ && cp portsnap.conf.sample portsnap.conf
A questo punto facciamo partire l’aggiornamento. Al primo utilizzo è necessario scaricare l’intero albero in /var/db/portsnap con il comando:
portsnap fetch fetch
e poi copiarlo in /usr/ports con:
portsnap fetch extract
Ad ogni successivo utilizzo basterà digitare il comado:
portsnap fetch update
Ora abbiamo una copia dell’ultima versione dell’albero dei ports in /usr/ports, bisogna tenere presente che questo viene aggiornato con intervalli di circa un’ora, potremmo quindi creare un ruolo nel nostro crontab per mantenere sempre aggiornato il nostro albero.
Ora che abbiamo effettuato l’aggiornamento dell’albero dei ports, possiamo individuare quali ports hanno disponibile un aggiornamento con il comando
pkg_version | grep ‘<’
Ci verrà mostrata una lista di ports,
| ImageMagick | < |
| apache | < |
| postgresql-client | < |
| postgresql-server | < |
per aggiornare un singolo port usa
portupgrade apache
se vuoi puoi aggiornare tutti i ports:
portupgrade -a