In my previous article I explained how to install and upgrade Redmine using Capistrano, in this post I want to explain how to import your existing installation using the same method. Once again this is an experimental procedure, so make a backup before doing anything.
Installing Redmine using Capistrano
Redmine is a great project, but it has a pretty complex multisteps installation procedure and upgrade is a little pain. In order to semplify installation I tried to develop a Capistrano (+RVM) recipe to install and upgrade it. I made it available on github for who wants to try it. You should know a little bit how capistrano works to follow this guide, you can find a lot of documentation on it here.
Deploying Zend Framework applications using Capistrano
Are you tired of deploying manually your zf projects to production servers, do you want to automate this tedious and error prone process, do you want to be able to revert changes if you make some mistakes? If the answer to these questions is yes, this is the post for you.
Recently I started to exploring Ruby on Rails and one of the aspects I like of it is the ability to deploy projects using Capistrano an automated deployment tool. With Capistrano your deployment process (once configured the app) is simple as typing cap deploy, and if you make a mistake you can revert the things as before by just typing cap deploy:rollback, no more ssh, no more (s)ftp, nothing, just a command.
Zend Framework Exception Notifier
Do you want to be notified when an exception is raised in your code? This code is for you. I wrote an application resource that will send you a nicely formatted email with all the data about the exception. In order to use it you have to install my library and insert the following lines into your application.ini file
autoloadernamespaces[] = "Zle_" pluginPaths.Zle_Application_Resource = "Zle/Application/Resource"
Then you’ll have to setup the application resource using the following directives
; notifier settings resources.notifier.project = Project Name resources.notifier.addresses[] = foo@example.com resources.notifier.addresses[] = bar@example.com
This snippet of code attachs an email log writer to the log resource, so don’t forget to configure the log resource in application.ini file. The generated email will be sent using the default transport, so you’ll have to configure it otherwise the default transport (sendmail) would be used.
The default error controller will log any error with the CRIT priority, this will trigger the writer and send a message like this one to the given recipients:
You would like to avoid to receive notifications for a page not found (otherwise all the request generated by script kiddies would flood your inbox), in order to do this you can edit the default error controller to keep track of that in this way:
public function errorAction()
{
$errors = $this->_getParam('error_handler');
$logError = true;
// skipped code
switch ($errors->type) {
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
$logError = false;
// other case for the switch
// Log exception, if logger available
if ($logError && $log = $this->getLog()) {
$log->crit($this->view->message, $errors->exception);
}
Last but not least, when you are in development or in testing mode you can avoid notifications by using this line in the right section of your application.ini
; disable notifier for development resources.notifier.disabled = true
Google Sync: sincronizzare iPhone e Mac over the air
Una delle funzioni più interessante degli smartphone è sicuramente la possibilità di sincronizzare i propri dati (email, agenda, contatti) tra il proprio computer e il proprio telefono potendo usare uno o l’altro indistintamente. Nella pratica però quando si tratta di iPhone e Mac la necessità di passare per iTunes ogni volta che si apporta una modifica al calendario (oppure ai contatti) è piuttosto noiosa.
Per ovviare a questo inconveniente è possibile utilizzare i servizi messi a disposizione gratuitamente da Google per far si che le modifiche apportate ai propri dati siano riflesse in tempo reale su uno o sull’altro dispositivo in maniera semplice e trasparente senza dover collegare il telefono al computer via USB.
Visualizzare il contenuto degli archivi in QuickLook
Una delle funzionalità migliori aggiunta a Mac OS X nella versione 10.5 è sicuramente stata l’introduzione di QuickLook, ovvero la possibilità di visualizzare in anteprima i file dal finder senza aprire il programma associato, ma solamente evidenziando un file e premendo la barra spaziatrice. Chiaramente non tutti i file sono supportati da QuickLook ma per quelli non supportati (o anche per cambiare l’anteprima di quelli supportati) gli sviluppatori Apple hanno previsto la possibilità di usare un meccanismo di plugin.
Installare il comando tree su Mac OS X
Il comando tree è un comando di terminale molto utile per chi lavora molto con questo strumento. Il suo output fornisce un elenco strutturato dei file e delle directory contenuti in un determinato path, molto utile mentre si naviga in un albero di directory usando il terminale.
Verificare i dati recuperati con ddrescue e md5sum
In un precedente post ho spiegato come recuperare dati da un supporto danneggiato utilizzando il programma GNU ddrescue. Sfortunatamente se il recupero non è completo ci possono essere dei file danneggiati all’interno del materiale recuperato. In questo post utilizzeremo nuovamente il programma ddrescue per verificare quanto e quale del materiale sia stato effettivamente recuperato.
Creazione di un raid software livello 5 con Debian o Ubuntu
Nella gestione dei dati una delle tecniche migliori da utilizzare è sicuramente il RAID, in particolare tra tutti i livelli disponibili per questa tecnologia, quello che offre il miglior rapporto tra prestazioni, uso disco e ridondanza è sicuramente il livello 5. Esistono 3 tipologie di RAID a livello implementativo
- RAID hardware: disponibile sui server di fascia alta, è quello che offre forse le migliori performance in quanto le operazioni vengono eseguite tutte dal controller in maniera completamente trasparente, ma ha sicuramente i costi più elevati. Inoltre utilizzando questa tipologia di raid i dati sono legati al controller utilizzato e non possono essere utilizzati ad esempio in un’altra macchina senza che si utilizzi lo stesso controlloer
- FAKERAID: ovvero RAID hardware a basso costo. Questa è la tecnologia che viene usata sui controller di fascia bassa oppure implementata nelle motherboard dei computer desktop. Questa tecnologia viene chiamata fakeraid in quanto non è un RAID vero e proprio ma una parte dell’implementazione e della computazione viene lasciata alla CPU e l’interfacciamento con i dati avviene tramite un driver. Qui le performance sono decisamente più basse e rimane il problema del trasporto dei dati da un sistema all’altro. Inoltre non è detto che il driver di questi controller sia disponibile per tutti i sistemi operativi.
- RAID software: quello di cui discuteremo qui. Il maggiore vantaggio di questa tecnologia è il controllo assoluto sui propri dati, si possono aggiungere e rimuovere dispositivi a piacere e soprattutto si possono trasferire da una macchina all’altra. Inoltre è possibile eseguire le operazioni di manutenzione a sistema attivo, cosa che non è possibile negli altri due casi in cui è richiesto un reboot.
Geotag delle foto con iPhone, Everytrail ed exiftool
Una delle funzioni che ho apprezzato maggiormente di iPhoto 09 è l’aggiunta di “Places” (nella versione italiana “Luoghi”). Questa funzione si interfaccia con Google Maps per mostrare una mappa interattiva delle proprie fotografie e dei luoghi dove esse sono state scattate.
Per far si che le foto vengano mostrate sulla mappa è necessario però che le immagini contengano i dati GPS negli appositi campi EXIF. Questo può essere ottenuto in vari modi, ad esempio iPhone, essendo dotato di un modulo GPS interno, inserisce automaticamente tali dati nelle proprie foto. Altre macchine fotografiche di fascia medio alta hanno integrato un sensore GPS oppure dispongono di un interfaccia hardware per collegare un ricevitore esterno, normalmente questo comporta una spesa aggiuntiva che con un iPhone ed un po di sforzo possiamo evitare.

