mercoledì 5 dicembre 2012

Come cambiare la root directory di un progetto ZF2 su di un hosting di terze parti

Questo .htaccess va nella root directory.



RewriteEngine On

RewriteRule ^\.htaccess$ - [F]
RewriteCond %{REQUEST_URI} =""
RewriteRule ^.*$ public/index.php [NC,L]

RewriteCond %{REQUEST_URI} !^/public/.*$
RewriteRule ^(.*)$ public/$1

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]

RewriteRule ^public/.*$ public/index.php [NC,L]



Questo invece nella cartella public (è uguale a quello dello scheletro).



RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Come cambiare il base URL in un progetto ZF2

Cambiare il file in public/index.php in questo modo.

<?php
chdir(dirname(__DIR__));

require 'init_autoloader.php';

$application = Zend\Mvc\Application::init(require 'config/application.config.php');
$application->getRequest()->setBaseUrl('/school_gear');
$application->run();

venerdì 6 luglio 2012

Dominio di primo livello gratis

Se hai aperto un sito web su di un servizio di hosting gratuito, quasi sicuramente ti sarà stato assegnato un dominio di secondo o di terzo livello del tipo tuodominio.altervista.it. Ti piacerebbe che questo fosse raggiungibile attraverso l'hostname tuodominio.it? Ovviamente si può fare, però non è gratis per il dominio .it. Puoi però ottenere gratuitamente un dominio di primo livello .tk, per cui il tuo sito potrà essere raggiunto da tuodominio.tk.

Tutto ciò è completamente gratuito e puoi registrare quanti domini desideri. Una volta registrato il dominio potrai cambiarne i DNS per farli puntare al tuo sito. Sbalorditivo!

mercoledì 4 luglio 2012

Non lavare i piatti

Ti piacerebbe non dover mai lavare i piatti? Bene, io ho la soluzione che fa per te. No, non ti proporrò l'acquisto di una lavastoviglie. Io a casa ce l'ho e non la uso mai.

Come faccio? Il trucco è semplice. Non vuoi lavare i piatti? Semplicemente non farlo.
Ti sembrerà assurdo ma ogni qualvolta sporchi un piatto, una forchetta, una tazzina o qualsiasi altra cosa richieda di essere lavata, tu mettila nel lavandino e lasciala li. La prossima volta che ti serve qualcosa di pulito, tu prova a vedere, prima di pescarla pulita dalla credenza, se ce n'è qualche esemplare sporco nel lavandino. Se è presente, dalle una sciacquata e prendi quella.

L'obbiettivo principale sarà quello di non far lievitare il livello del lavandino, evitando l'accumulo di pezzi dello stesso tipo.

Io seguo una dieta crudista e non ungo o macchio quasi nulla, quindi mi trovo divinamente con questo metodo perché con una sciacquata pulisco davvero le stoviglie. Se per te non è lo stesso, prova a lasciare sempre vicino al lavandino una spugnetta per lavare i piatti già insaponata. In questo modo la prossima volta che dovrai sgrassare qualcosa ci metterai meno tempo.

Il trucco c'è ma non si vede. In segreto è che lo smazzamento di lavare centinaia di piatti, posate e padelle in una volta sola viene ammortizzato nel tempo, facendo sembrare il lavoro molto più leggero (per me praticamente inesistente).

giovedì 28 giugno 2012

Elenco di tutti i pacchetti installati da AUR

Se ti interessa un elenco di tutti i pacchetti "non ufficiali" installati da AUR, allora puoi utilizzare il comando pacman -Qm. Se utilizzi Yaourt allora in alternativa puoi utilizzare anche il comando yaourt -Qm che ti darà un output più colorato.

Vedere la coda di stampa su XFCE

XFCE non ha di default una GUI per permettere all'utente di interagire con la coda di stampa.

Per colmare questo vuoto puoi installare il pacchetto disponibile anche su Gnome: system-config-printer-gnome. La versione per Arch Linux si trova nei repo ufficiali. Questa è la pagina del pacchetto.

mercoledì 27 giugno 2012

Recuperare latitudine e longitudine da un indirizzo

Capita spesso di dover convertire la stringa dell'indirizzo dell'utente in latitudine e longitudine terrestri. Per fare ciò è possibile utilizzare le Google Geocoding API impacchettate e già pronte in questa classe da me realizzata.

<?php

/**
 * GooglePlaceRequest uses Google Geocoding API to retrieve information
 * about an address.
 *
 * @author Egidio Caprino
 * @see https://developers.google.com/maps/documentation/geocoding/
 */
class GooglePlaceRequest
{
    /**
     * HTTP request to Google Geocoding API address.
     *
     * @var Zend_Http_Client
     */
    protected $response = null;
 
    /**
     * Constructor method. Will execute the request for the given address.
     *
     * @param string $address
     * @throws Zend_Http_Client_Exception
     */
    function __construct($address)
    {
        $uri = 'https://maps.googleapis.com/maps/api/geocode/json';
     
        $client = new Zend_Http_Client($uri);
        $client->setParameterGet('address', urlencode($address));
        $client->setParameterGet('language', 'en');
        $client->setParameterGet('sensor', 'false');
     
        $response = $client->request(Zend_Http_Client::GET)->getBody();
        $response = Zend_Json_Decoder::decode($response);
     
        if (strcmp($response['status'], 'OK') !== 0) {
            throw new Zend_Http_Client_Exception('Invalid status: "' .
                $response['status'] . '".');
        }
     
        $this->response = $response;
    }
 
    /**
     * Return the formatted address in english language.
     *
     * @return string
     */
    public function getFormattedAddress()
    {
        return $this->response['results'][0]['formatted_address'];
    }
 
    /**
     * Return the latitude of the place.
     *
     * @return int
     */
    public function getLatitude()
    {
        return $this->response['results'][0]['geometry']['location']['lat'];
    }
 
    /**
     * Return the longitude of the place.
     *
     * @return int
     */
    public function getLongitude()
    {
        return $this->response['results'][0]['geometry']['location']['lng'];
    }
}

mercoledì 20 giugno 2012

Sconcertante

Leonard Kleinrock è l'uomo che ha realizzato i principi della commutazione a pacchetto, la tecnologia alla base di Internet. Sentite un po' cosa dice in un'intervista quando gli chiedono cosa vedesse nel futuro delle reti:

[...] Guardando un po' più avanti, vedo un futuro che include i seguenti componenti chiave aggiuntivi. Vedo agenti software intelligenti rilasciati nella rete la cui funzione è scavare nei dati, agire su di essi, osservare tendenze ed effettuare compiti in modo dinamico e adattivo. Vedo molto più traffico in rete generato non tanto dagli uomini ma dai dispositivi integrati e dagli agenti software descritti. Vedo grandi insiemi di sistemi che si auto-organizzano e che controllano questa rete vasta e veloce. Vedo grandi quantità di informazione che si diffondono istantaneamente in questa rete e che vengono sottoposti a enormi elaborazioni e filtraggi. Internet diventerà fondamentalmente un sistema nervoso globale pervasivo. Vedo tutte queste cose e anche di più, mentre ci buttiamo a capofitto nel ventunesimo secolo.

Sconcertante. Leggendo quello che dice mi è venuto in mente lo scenario del film Matrix.

lunedì 11 giugno 2012

Leggere la partizione Linux da Windows

Linux è di default in grado di leggere le partizioni FAT32 e NTFS di Windows, mentre purtroppo non accade il contrario.

Per leggere le partizioni EXT (e altre) da Windows puoi usare questo programma, completamente gratuito.

domenica 3 giugno 2012

Problemi ad avviare Chrome dopo l'ultimo aggiornamento

Ho avuto dei problemi ad avviare Google Chrome dopo l'ultimo aggiornamento del pacchetto su AUR. Per la precisione, l'errore che ho riscontrato era il seguente.

error while loading shared libraries: libudev.so.0: cannot open shared object file: No such file or directory


In pratica è saltato un collegamento con una libreria richiesta dall'eseguibile. Ho risolto creando un link simbolico in questo modo:

sudo ln -sf /usr/lib/libudev.so.1.0.1 /usr/lib/libudev.so.0

mercoledì 30 maggio 2012

Come ho risolto gli errori 1602/1604 durante il ripristino

Volevo effettuare il jailbreak del mio iPhone, dato che era uscita la versione Absinthe compatibile con iOS 5.1.1.
Provando però a ripristinare il telefono con iTunes, durante il processo ricevevo gli errori 1602 e 1604.

Dopo aver perso molto tempo e sudore, sono riuscito a risolvere in questo modo.

Ho rimosso e reinstallato iTunes sul mio Windows XP come descritto nella guida ufficiale.

Dopodiché, con l'iPhone in modalità ripristino, ho fatto un tentativo. Non è andato a buon fine. Allora ho chiuso e riaperto iTunes che ha riconosciuto l'iPhone, sempre in modalità ripristino. Ho fatto un ulteriore tentativo, questa volta andato a buon fine.

Gioia indescrivibile.

domenica 13 maggio 2012

Come gestire le chiamate AJAX lato server con lo Zend Framework

Capita spesso di dover scrivere un controller che contiene una o più azioni AJAX che il più delle volte devono restituire una stringa JSON.

Si possono gestire questi casi singolarmente per ogni action, indicando  al controller di non renderizzare alcuno script di view dopo l'esecuzione, oppure si può facilmente fattorizzare questo processo al fine di semplificarci la vita.

Per fare ciò è sufficiente realizzare una classe che estende Zend_Controller_Action che si occuperà di controllare per ogni richiesta il prefisso dell'action. Ovviamente tutte le action che risponderanno ad una chiamata AJAX dovranno avere un prefisso speciale, per esempio ajax.

Ecco un esempio:

<?php

class Library_Controller_Action_Ajax extends Zend_Controller_Action
{

    const AJAX_ACTION_PREFIX = 'ajax';

    protected function _isAjax()
    {
        $actionName = $this->_request->getActionName();
        $ajaxActionPrefix = Awatag_Controller_Action_Ajax::AJAX_ACTION_PREFIX;
        if (strlen($actionName) < strlen($ajaxActionPrefix)) {
        return false;
        }
        $actionPrefix = substr($actionName, 0, strlen($ajaxActionPrefix));
        $isAjax = strcmp($ajaxActionPrefix, $actionPrefix) === 0;
        return $isAjax;
    }

    public function init()
    {
        if ($this->_isAjax()) {
            $this->_helper->viewRenderer()->setNoRender(true);
        }
    }

    public function ajaxFooAction()
    {
        // azione ajax
        // il risultato delle operazioni è nell'array data
        $response = Zend_Json::encode($data);
        echo $response;
    }

    public function barAction()
    {
        // azione normale
    }
}

In questo modo tutte le azioni ajax non renderizzeranno alcuno script di view.

domenica 19 febbraio 2012

.htaccess di un progetto Zend Framework su di un host condiviso

Un progetto Zend Framework richiede che la document root del sito punti alla cartella public.




Se però stiamo lavorando su un hosting condiviso non possiamo modificare i file di configurazione del server.


Possiamo però risolvere facilmente il problema eliminando il file .htaccess nella cartella public e sostituire quello nella root directory con questo.


RewriteEngine On
 
RewriteRule ^\.htaccess$ - [F]
 
RewriteCond %{REQUEST_URI} =""
RewriteRule ^.*$ /public/index.php [NC,L]
 
RewriteCond %{REQUEST_URI} !^/public/.*$
RewriteRule ^(.*)$ /public/$1
 
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]
 
RewriteRule ^public/.*$ /public/index.php [NC,L]