Togliere il R: da Outlook 2007 in italiano

Caro utente Outlook in italiano: se mi vuoi un po’ di bene – ma vuoi comunque continuare ad usare quell’orribile programma di posta elettronica – fai per favore questo piccolo sforzo: sono veramente 2 minuti del tuo prezioso tempo. Farai di me un uomo felice (e per te non cambierà niente). Grazie!

Poi, sempre sull’argomento, della serie “se ne impara sempre una”:

Often mistaken for being an abbreviation of “reply”, “re” is the ablative singular form of “res, rei” (a Latin noun meaning “thing, matter”), the indicator Re: stands for “In this matter”, or “With regard to”

Su Friendfeed, Angelo mi fa notare che esiste anche un altro approccio: convincere Thunderbird a “capire” gli R: e compagnia bella. Lo trovate su mozillazine.


Usare VirtualBox per sviluppare su OSX

Giusto un paio di giorni fa sono entrato in possesso di un bellissimo MacBook Pro. La mia attività principale, nell’utilizzo di un computer, è lo sviluppo di applicazioni web. Dopo aver installato tutto il necessario lato client (ah, il software libero… ma di questo parlerò più avanti) rimaneva tutta la parte “server” ovvero, nella fattispecie, PHP, MySQL e Apache.

Quando mi sono posto il problema della loro installazione, partivo da questi prerequisiti:

  • su quei servizi ho bisogno di avere la massima flessibilità. Devo poter decidere la loro versione, le eventuali estensioni, dove mettere i dati, i permessi, i virtual host, eccetera eccetera
  • il deploy delle nostre applicazioni avviene sempre su server linux, per cui mi piaceva continuare ad usare una Ubuntu come macchina di sviluppo per non avere sorpresine in fase di deploy
  • questo OSX è puro e vergine e non ho nessuna voglia di incasinarlo con installazioni non… “standard”
  • i vari MAMP, distribuzioni buffe di PHP e MySQL, sono roba per ragazzi (per non parlare di quello che arriva direttamente con OSX) :)

Detto questo rimaneva da scegliere il sistema di virtualizzazione ma ovviamente (costo, libertà, solite cose) la scelta è caduta su VirtualBox.

Installarci Ubuntu è stata una passeggiata di salute: avevo l’immagine ISO di una 9.10 su una pennetta USB e dopo aver creato una macchina virtuale ho montato la ISO all’interno del suo CD (senza neanche toglierla dalla chiavetta USB) e l’installazione è partita.

Anche la rete è stata vista subito e da Ubuntu ho installato tutto il necessario. Anche qui tutto allegro e banale.

A questo punto dovevo condividere una directory tra OSX e Ubuntu. L’idea appunto è quella di usare OSX per programmare, fare debug con i browser, magari un po’ di grafica e usare la macchina virtuale Ubuntu per servire l’applicazione via Apache. Avrei dunque condiviso la directory Sites di OSX con Ubuntu (che sarebbe poi diventata la base di tutti i miei virtual host di sviluppo).

Lato OSX è stato facile: si dichiara direttamente da VirtualBox che esiste uno “shared folder”, dandogli il path locale e un nome (questa configurazione è per singola macchina virtuale). Nel mio caso il nome è stato proprio “Sites”.

In Ubuntu occorre montare da qualche parte questa directory “esportata”. Non esistono però sistemi automagici per farlo, afaik. L’operazione è fattibile direttamente tramite mount, configurando /etc/fstab. Nel mio caso ho aggiunto la seguente riga al file (dopo aver creato la directory Sites nella mia home):

Sites /home/claudioc/Sites vboxsf uid=1000,gid=1000,exec 0 0

A questo punto un bel sudo mount Sites e siete a posto (successivi riavvii della macchina virtuale useranno l’fstab e non ci sarà bisogno di intervenire manualmente). Credo si possa fare anche in modo di che il mount sia permesso ad un utente qualsiasi usando il parametro “user” della riga di mount, ma non ho indagato oltre.

A questo punto si è presentato il primo problema: non è possibile creare link simbolici dalla macchina guest. In pratica, da Ubuntu, non si possono creare link simbolici su un file system montato con vboxsf. Non si può: è proprio un limite riconosciuto. È tuttavia possibile fare il contrario: ovvero creare un link simbolico in quella directory dal sistema ospite (nel mio caso OSX). In tal caso il link simbolico sarà visto, da Ubuntu, come un normale file (non so se questo fatto possa avere o meno conseguenze strane…). Per certe configurazioni questo rimane comunque uno show stopper. Speriamo che nelle versioni successive di vbox il limite sia superato.

Passo successivo era quello di testare il funzionamento di apache di Ubuntu da OSX, accedendo da un browser di OSX all’indirizzo IP del server embedded. Il funzionamento (me illuso) sembrava scontato… e invece niente da fare. Eccoci al secondo problema.

Non appena viene installata una macchina virtuale con supporto di rete, questa viene configurata per uscire in modalità NAT. Questo vuol dire che da vbox viene assegnato un IP privato all’interfaccia di rete della macchina virtuale la quale poi userà la macchina ospite come gateway. Il tutto viene configurato automaticamente e trasparentemente.

Un ifconfig di Ubuntu mi aveva rilevato l’IP del serverino Ubuntu (10.0.2.15). Da OSX riuscivo a fare ping a quell’indirizzo, ma qualsiasi altro servizio sembrava stranamente non attivo. Questo dettaglio (il ping…) è quello che mi ha fatto sprecare più tempo in assoluto. Si dà il caso, ho realizzato più tardi, che non era assolutamente possibile che io potessi fare ping al 10.0.2.15! Eppure succedeva. La cosa buffa infatti è che quell’indirizzo esisteva, sì, ma… nella rete di Fastweb. Non apparteneva dunque al mio server embedded, ma a chissà chi :)

Se il guest è in modalità NAT, l’host non può vedere i suoi servizi di rete. Period.

Un’altra possibilità sarebbe stata quella di configurare il sottosistema di rete di Ubuntu a lavorare in modalità “bridge”, ovvero fare in modo che usando OSX come ponte (appunto…) questa entrasse direttamente nella rete di OSX ricevendo dunque un IP dal dhcp server usato dallo stesso OSX. Per fare questo avrei dovuto associare l’interfaccia di rete di Ubuntu ad un’interfaccia di rete fisica di OSX (per esempio Airport). Ma così non andava bene: io volevo che le due macchine, quella fisica e quella virtuale, potessero colloquiare anche quando nessuna connessione esterna fosse attiva.

In pratica quello che mi serviva era la possibilità di poter uscire su internet con Ubuntu, quando una connessione fosse presente, ma comunque poter SEMPRE parlare con l’host OSX usando una sottorete privata.

Questa configurazione è possibile avendo a disposizione DUE schede di rete sulla Ubuntu (operazione da eseguire nei Settings della macchina virtuale, aggiungendo una scheda). La prima scheda è quella che farà parte della sottorete “privata” tra Ubuntu e OSX e va configurata in modalità Host-only. La seconda è quella che ci farà uscire su internet e possiamo configurarla a piacere su NAT o Bridge (Bridge, per me).

La cosa bella, una volta capito il funzionamento, è che il resto è tutto automatico. Fatta ripartire la macchina virtuale Ubuntu, avremo a disposizione due interfacce, una delle quali si troverà nella stessa sottorete di una nuova interfaccia di rete virtuale creata sul sistema host (OSX). Nel mio caso, su OSX, l’interfaccia si chiama vboxnet0.

Maggiori informazioni nel manuale di VirtualBox (pdf).


Foto di Artisti al BilBolBul

Non sono mai stato uno sfegatato amante dei fumetti, come del resto non sono mai stato costantemente innamorato di niente per troppo tempo. La mia ammirazione è dunque quella di un dilettante affascinato dai colori, dalle matite e dalla disinvoltura con la quale certe persone riescono a creare qualcosa di bello, che fino a pochi minuti prima non esisteva.

Ieri è finito a Bologna il festival del fumetto BilBolBul. Tra le attività previste, in sala borsa ogni giorno un manipolo di disegnatori si trovava a disposizione del pubblico entusiasta per fare dediche personalizzate usando il loro stile o i loro personaggi. Staresti ore a guardarli lavorare. Quello che mi è piaciuto di più (ma questo è un giudizio assolutamente personale)  è stato Piero Ruggeri. Ogni dedica era un piccolo capolavoro, fatta di matita, penna, Ecoline e acrilico. Non ho potuto fare a meno di fotografarlo mentre lavorava alla creazione di un strega: sul mio posterous trovate tutta la foto sequenza.


The new providers discovery for Zend_Tool 1.10

With the recent release of the 1.10 version of the  Zend Framework, they made a subtle change on how Zend_Tool searches its providers. Before 1.10 the loader (aka the provider discover) was set to be the IncludePathLoader class; what that meens is that if you wrote a new provider, all that you needed to do to have Zend_Tool automatically find it was to edit your PHP’s include_path or add your provider’s directory to the ZEND_TOOL_INCLUDE_PATH_PREPEND environment variable.

Now that is history, because (source):

There were many issues for people when Zend_Tool used a scanning approach to finding providers. This caused many issues on all different platforms. Now we’ve opted to go the specify your providers approach.

(beware: the suggested solution in that post is wrong)

So if you ever write a new tool provider remember that there’s no more “auto discovery” by scanning the path. The loader now is the BasicLoader and you have to explicitely tell Zend_Tool where your providers are and how their classes are named. For this to happen, you can use the zf enable config.provider command or use the zf.ini file.

My solution is:

  • create a zf.ini file for your project. This is slighlty different from what the documentation implies; it considers zf.ini to be an hidden file in your $HOME. But this is only a default you can change via the  ZF_CONFIG_FILE env variable
  • put something like basicloader.classes.0 = “Migrations_MigrationProvider” as the first line (that example is the actual class name of my migration tool provider)
  • assure that your class can be loaded, setting ZEND_TOOL_INCLUDE_PATH_PREPEND accordingly

On the same topic you can also read this issue.

As a bonus track, below is a little bash script I use to run my migration tool.

#!/bin/bash

APPPATH=$(readlink -f ..)/app

export ZF_CONFIG_FILE=${APPPATH}/../zf.ini

if [ ! -f ${ZF_CONFIG_FILE} ]; then
  echo "Non trovo zf.ini"
  echo "Forse non stai eseguendo questo programma dalla directory DB?"
  exit -1
fi

if [[ "${ZF_BIN_DIR}" == "" ]]; then
  ZF_BIN_DIR=$(readlink -f ../vendor/Zend)/../../bin
  ZF_BIN_DIR=$(readlink -f ${ZF_BIN_DIR})
fi

if [ ! -f ${ZF_BIN_DIR}/zf.sh ]; then
  echo "Non trovo zf.sh in " ${ZF_BIN_DIR}
  echo "Forse non stai eseguendo questo programma dalla directory DB?"
  exit -1
fi

MIGCLASSDIR=$(readlink -f ../vendor/Renomo/library)

if [ ! -d ${MIGCLASSDIR} ]; then
  echo "Impossibile trovare la directory della classe Migration"
  exit -1
fi

MIGDIR=$(readlink -f migrations)

if [ ! -d ${MIGDIR} ]; then
  echo "Impossibile trovare la directory delle migration"
  exit -1
fi

export ZEND_TOOL_INCLUDE_PATH_PREPEND=${MIGCLASSDIR}

${ZF_BIN_DIR}/zf.sh run migration ${1}

Date in italiano in PHP

Usi date() o strftime() ma queste continuano a visualizzare il nome dei mesi e dei giorni in inglese mentre tu le vuoi vedere in italiano? Hai letto che devi usare setlocale(LC_ALL, “it_IT.utf8″); ma anche facendolo non cambia niente?

Ecco cosa devi fare:

  • devi usare solo la strftime() e non la date(), visto che quest’ultima non è sensibile al locale del sistema
  • devi verificare che il tuo sistema abbia il supporto per il locale italiano (altrimenti il nome dei mesi da dove se lo prende? Il PHP non ha mica tutti i mesi in tutte le lingue “dentro sé stesso”). Verificalo con il comando locale -a. Ti verrà visualizzata la lista di tutti i locali supportati sul tuo sistema
  • se il locale che ti serve non è presente nella lista, lo devi installare. Il comando è locale-gen e il parametro è il locale che ti interessa (es: locale-gen it, installerà tutti i locale italiani conosciuti, compreso quello standard e quello svizzero)
  • prendi la stringa ESATTA che identifica il locale che ti interessa e la usi come argomento della funzione PHP setlocale() prima di usare la strftime. Esempio: setlocale(LC_TIME, “it_IT.utf8″)

I contenuti di questo sito sono distribuiti con una licenza Creative Commons 2.5 eccetto dove diversamente specificato.

Tema WordPress Punto5 sviluppato da Claudio Cicali; icone del set famfamfam silk e komodomedia.

© 2005-2010
Claudio Cicali