Massimo Zappino

19feb/100

Call-time pass-by-reference has been deprecated

If you recently upgraded PHP to version 5.3.0 or higher, you have probably encountered a message like this:

Deprecated: Call-time pass-by-reference has been deprecated in filename.php

Use & when you call a function foo(&$var) generates the warning message.

Remember that in 5.3 version of PHP only Call-time pass by reference is deprecated but not Passing by reference.

See the example below:

// normal passing by reference
function functionA(&$var) {
    $var++;
}
 
// call-time passing by reference
function functionB($var)
{
    $var++;
}
 
// correct call
functionA($var);
 
// deprecated
functionB(&$var);

If you can't edit existing code, for example, third-party software, you can use these work-arounds:

  1. Turn off error messages: is always a good idea hide any type of error message in a production site. You can use error_reporting(0) function or if you want you can use the @ symbol before any statement. This is not a good solution of this problem.
  2. Allow call-time pass-by-reference in your php.ini file: in your php.ini file you can set allow_call_time_pass_reference = on but this is a temporary solution only until the next version.

Resources:

  • Share/Bookmark
27gen/100

UTF-8 problem with Spreadsheet Excel Writer

Spreadsheet Excel Writer is a PEAR package that allows you to generate Excel documents.

When we try to generate an new Excel document using UTF-8 string we ran into a display error.

There is a simple way to fix this problem. See the example below:

$workbook = new Spreadsheet_Excel_Writer();
$workbook->send("file.xls");
 
// add this row
$workbook->setVersion(8);
 
$worksheet =& $workbook->addWorksheet("My worksheet");
 
// add this row
$worksheet->setInputEncoding("UTF-8");
 
$workbook->close();
  • Share/Bookmark
26gen/100

Create a PHP data structure accessible like an array and an object simultaneously

Often we need to operate with objects that sometimes we have to use as an array.
For example we can get an attribute from an object:

$attr = $myObject->attr;

or by array access from the same object

$attr = $myObject['attr'];

We can set data simply like an array or directly.

// create object setting data by array
$myArray = array('apple' => 'red', 'pear' => 'green', 'lemon' => 'yellow', 'apricot' => 'orange' );
$myObject = new MyObject($myArray);
 
// create object setting data by magic method __set()
$myObject = new MyObject();
$myObject->apple = 'red';
$myObject->pear = 'green';
$myObject->lemon = 'yellow';
$myObject->apricot = 'orange';

This is the class source code:

  • Share/Bookmark
18gen/102

Impostare l’ambiente di sviluppo per Zend Framework su Ubuntu

Se vogliamo iniziare a conoscere il fantastico mondo di Zend Framework sarà necessario creare un ambiente di sviluppo adatto alle nostre esigenze. In questa guida vedremo come configurare la nostra distribuzione Ubuntu per poter lavorare in locale con tutti gli strumenti necessari.

Lo scopo di questo tutorial è quello di ottenere un sistema di sviluppo per Zend Framework

Configurazione del sistema operativo

Quello che noi vogliamo ottenere è un server LAMP configurato ah hoc per le nostre applicazioni web. Per prima cosa installiamo MySQL:

sudo apt-get install mysql-server mysql-client

Se vogliamo rendere accessibile il server MySQL dall'esterno dobbiamo modificare il file /etc/mysql/my.conf

sudo nano /etc/mysql/my.conf

e commentare la linea

#bind 127.0.0.1

Questa configurazione del sistema utilizzerà Zend Server CE che comprende la propria versione di PHP e le librerie vere e proprie di Zend Framework. Fortunatamente Zend ha messo ha disposizione i repository contenenti tutti i pacchetti per le varie distribuzioni di Linux tra cui Debian/Ubuntu. Seguiamo quindi le indicazioni fornite aggiungiamo il nostro repository al file /etc/apt/source.list.

deb http://repos.zend.com/zend-server/deb server non-free
  • Share/Bookmark
15gen/100

Creare la struttura di un menu con Zend Navigation

La gestione di un menu e delle relative pagine è molto semplice grazie alla classe Zend Navigation.
Il manuale di Zend Framework spiega molto bene come utilizzare questo componente. In breve il principio di funzionamento consiste nel creare oggetti pagina (Zend_Navigation_Page) che a loro volta possono contenere altre pagine. Questa struttura dati verrà poi data in pasto alla classe Zend_Navigation che si occuperà di mettere a disposizione tutti i metodi necessari per la gestione del menu.

Possiamo creare un metodo privato all'interno del nostro Bootstrap per inizializzare il menu e renderlo disponibile agli helper nella view.

protected function _initNavigation()
    {       
        $this->bootstrap('layout');
        $layout = $this->getResource('layout');
        $view = $layout->getView();
 
        // create pages
        $pages = array(
                array(
                        'label'         => 'Home',
                        'module'        => 'default',
                        'controller'    => 'index',
                        'action'        => 'index',
                        'order'         => -100 // first page
                ),
                array(
                        'label'         => 'Posts',
                        'module'        => 'default',
                        'controller'    => 'posts',
                        'action'        => 'index',
                        'visible'       => true,
                        'pages'         => array(
                                array(
                                        'label'         => 'Add',
                                        'module'        => 'default',
                                        'controller'    => 'posts',
                                        'action'        => 'add'
                                )
                        )
                ),
                array(
                        'label'      => 'Administration',
                        'module'     => 'admin',
                        'controller' => 'index',
                        'action'     => 'index',
                        'resource'   => 'mvc:admin', // resource
                )
        );
 
        // create container from array
        $navigation = new Zend_Navigation($pages);
        Zend_Registry::set('Zend_Navigation', $navigation);
        $view->navigation($navigation);
    }
  • Share/Bookmark
12gen/100

Tunnel SSH

L'idea di poter creare un canale virtuale cifrato tra due computer remoti attraverso internet  permette di scambiare dati in modo sicuro e apre le porte a numerose applicazioni.

Immaginiamo di dover accedere alla nostra rete privata di casa senza l'uso di VPN da una postazione esterna alla LAN.

Chiameremo server il pc di casa che accetta la connessione dall'esterno sulla porta 22 e client il pc remoto dal quale vogliamo connetterci. Per creare il nostro tunnell SSH non dobbiamo far altro che lanciare il seguente comando dal client:

ssh -N -D 9999 user@server.mydomain.com

Verrà creato un socket tra client e server, l'opzione -N impedisce che vengano eseguiti comandi remoti mentre l'opzione -D 9999 specifica che vogliamo creare un socket sulla porta 9999 del client. A questo punto abbiamo un canale collegato direttamente al nostro server accessibile dal nostro browser. Per poter navigare come se fossimo sul server è necessario configurare firefox in modo che utilizzi il socket. Abbiamo due opzioni, una consiste nel modificare le preferenze direttamente nel browser, la seconda consiste nell'installare l'estensione Foxy Proxy. Quest'ultimo è comodo per facilitare il passaggio tra navigazione diretta e navigazione tramite socket. Nel primo caso andiamo nelle preferenze di Firefox, selezioniamo la tab Avanzate, poi la tab Rete e clicchiamo su Impostazioni di rete, selezioniamo quindi la voce "Configurazione manuale del proxy". Scriviamo localhost nella casella Proxy HTTP e 9999 nella casella Porta.

  • Share/Bookmark
3gen/100

Acquisire video da videocamera firewire con Kdenlive su Kubuntu 9.10

Tramite questa guida impareremo ad acquisire i nostri video dalla videocamera al pc e successivamente archiviarli in formato DVD video.

I passaggi che seguono sono stati effettuati su un sistema GNU/Linux Kubuntu 9.10 Karmik Koala con desktop KDE (non dovrebbero esserci problemi per Gnome) e una videocamere Samsung con interfaccia firewire (IEEE_1394).

Per prima cosa installiamo kdenlive e le relative librerie.

sudo apt-get update
sudo apt-get install kdenlive

Dopo l'installazione apriamo kdenlive e verrà mostrato un breve wizard sulla configurazione del programma, quindi apparirà la schermata principale.

kdenlive

A questo punto colleghiamo la videocamera all'interfaccia firewire e, come potrete notare nella sezione monitor registrazione, la videocamera non sarà disponibile. Questo è dovuto al fatto che il driver che comanda la periferica, /dev/raw1394, ha i permessi impostati solo per l'utente root. Per ovviare a questo inconveniente esistono vari metodi descritti nella guida ufficiale di Ubuntu a questo indirizzo https://help.ubuntu.com/community/Firewire.

Il metodo che ho utilizzato consiste nell'aggiungere un gruppo denominato firewire di cui il nostro utente farà parte.

  • Share/Bookmark
11dic/091

Schermata blu in aeroporto, Windows non si smentisce mai

È certamente una piccola soddisfazione da condividere quella che ti può capitare in una qualsiasi giornata di novembre nei pressi dell'aeroporto di Malpensa, in particolare al ritoro bagagli.
Una lunga serie di monitor pubblicitari che circondano l'edificio, mostrando spot programmati uno dietro l'altro, intrattengono gli impazienti passeggeri che dopo interminabili minuti si vedono finalmente recapitare il proprio bagaglio. D'improvviso, quando sei ormai incantato e il tuo sguardo è completamente catturato da uno di questi monitor... Puff! Schermata blu! A quel punto non sai se ridere o rimanere in eterna attesa del tuo bagaglio. Io nel dubbio ho tirato fuori la macchina fotografica.

Schermata bluChe dire? Questo è Windows, il sistema operativo definito sicuro e affidabile da casa Microsoft, voi ci credere? Io no.

Ma cos'è una schermata blu e perchè compare? Windows blocca il computer quando a livello kernel viene generato un errore che non è risolvibile dal sistema operativo. Ciò puè essere causato da un driver di qualche periferica, spesso sviluppato da terze parti, oppure dal kernel stesso. Per evitare di causare danni ai dati presenti sull'hard disk, Windows ha come unica soluzione quella di bloccare il computer. Per approfondire: http://en.wikipedia.org/wiki/Blue_Screen_of_Death

Non voglio ora entrare in merito alla logica di funzionamento, ma diamo un'occhiata alle storiche figuracce di Windows.

Forse la più famosa durante la presentazione di Windows 98, molti di voi ricorderanno la risata a denti stretti di Bill Gates dopo la comparsa della temutissima Blue Screen of Death:

Vediamo invece cosa succede quando qualcosa non funziona durante la presentazione di Windows Media Center e Bill Gates vorrebbe spaccarlo quel telecomando, ma anche l'Xbox non sembra poi così stabile:

Se ancora siete convinti che Windows sia un sistema operativo sicuro e affidabile guardate qui e poi leggete qui.

  • Share/Bookmark
10dic/090

Software per la scansione su KDE4

Dopo anni che non utilizzavo uno scanner per digitalizzare fotografie o documenti mi sono ritrovato a rispolverare quella vecchia scatola rettangolare ormai finita in archivio. Entusiasta del fatto che con le precedenti versioni di linux il mio HP Scanjet 3300C veniva riconosciuto e funzionava alla perfezione mi sono apprestato a collegare alimentatore e cavo USB, e come per magia, la luce bianca si è accesa.

Benissimo, ora procediamo con la scansione, apriamo il programma... bene! Quale programma? Cercando nel menu di KDE non trovo nulla che corrisponda alla stringa "scan". Niente male, installiamo Kooka con apt-get ed il gioco è fatto.

Niente di più sbagliato, kooka è stato cancellato dal pacchetto KDE Graphics. Cerchiamo quali pacchetti per KDE ci offre synaptic e compare magicamente Skanlite.

Apparentemente appare molto semplice, all'avvio riconosce immediatamente le periferiche di acquisizione video, incluse webcam.

Selezione scanner

Opzioni

ZoomPer quanto mi riguarda ha fatto egregiamente il suo lavoro e risulta essere un software leggero, intuitivo, ma soprattutto un software che fa quello che gli si chiede di fare.

  • Share/Bookmark
9dic/090

Problema di escape nel plugin WP-Syntax per Wordpress

WP-Syntax è il plugin che utilizzo per evidenziare i codici che inserisco nei miei post. Da subito ho notato un problema che deriva dall'editor integrato di Wordpress. Infatti al momento dell'inserimento del codice all'interno dei tag <pre></pre> tra il passaggio da modalità "Visuale" o "HTML" i caratteri speciali vengono convertiti in entità HTML, come per esempio i carattetri <> vengono tradotti in &lt; &gt;

Cercando velocemente su Internet ho subito trovato una soluzione immediata, ovvero un workaround che utilizza la funzione htmlspecialchars_decode di PHP.
Modificando una riga del file wp-syntax.php si risolve il problema.

    //$geshi = new GeSHi($code, $language);
    $geshi = new GeSHi(htmlspecialchars_decode($code), $language);

Nota: la funzione htmlspecialchars_decode è disponibile solo per le versioni di PHP superiori o uguali alla 5.1.0. Per le versioni precedenti è possibile simularla in questo modo:

if (!function_exists("htmlspecialchars_decode")) {
    function htmlspecialchars_decode($string, $quote_style = ENT_COMPAT) {
        return strtr($string, array_flip(get_html_translation_table(HTML_SPECIALCHARS, $quote_style)));
    }
}

Fonte: http://blog.felho.hu/escaping-problem-with-wp-syntax-wordpress-plugin.html

  • Share/Bookmark