Davide Gullo, Consulente web

08.09.2010
10:17 (+00:00)
36a settimana
250o giorno

  "E il mare il web concederà ad ogni uomo nuove speranze, come il sonno i sogni..." Cristoforo Colombo

Ottimizzazione URL (SEO) con Zend Framework

martedì, 07 settembre 2010

Rimettendo mano sul framework oggi mi sono scontrato di nuovo con un problema che da tempo volevo risolvere. Come sappiamo gli url con cui chiamiamo i vari Controller di Zend Framework vengono richiamati con una codifica ben precisa:

http://www.m4ss.net/controller/action

In questo modo quindi chiamiamo tutti i Controller e le Action che desideriamo invocare. A questo indirizzo possiamo poi aggiungere i parametri in questo modo:

http://www.m4ss.net/controller/action/params1/valore1/params2/valore2

In pratica accodiamo il nome del parametro e a seguire il suo valore.

Ciò che mi premeva risolvere da tempo era il poter accorciare questo indirizzo quando chiamo il contenuto di un sito. Ipotizziamo di avere un sito semplice che richiama i vari contenuti in base ad un codice ottimizzato per il SEO. Un esempio di codice potrebbe essere:

Tale codice è presente in un campo di database e, tramite query, estraggo il contenuto richiesto. Nel mio sito avrò un Controller che si occupa di estrarre i contenuti in base a tale codice. Se utilizzassimo la route normale avremmo un indirizzo del tipo:

http://www.m4ss.net/content/get/code/zend-framework-teoria-di-base-front-controller-action

/content/get/code si ripete per ogni contenuto, allo stesso modo, senza alcuna differenza. Mi premeva accorciarlo un po’!

Ho risolto in questo modo, il mio Controller Content è così composto:

class ContentController extends Zend_Controller_Action
{
private $_myCode;
public function init()
{
// get my code
$this->_myCode = $this->getRequest()->getActionName();
// change action -> redirect always to index
$this->getRequest()->setActionName(‘index’);
}
public function indexAction()
{
// get parameters
$cModel = new Model_ContentLang();
$myContent = $cModel->getByCode($this->_myCode);
$this->view->myC = $myContent;
}
}

In pratica intercetto l’action nella funzione init() di inizializzazione del Controller. Aggancio l’action facendolo diventare il mio codice e reimposto l’action inviando il tutto sempre ad index. In index poi prelevo il contenuto dal database in base al codice e lo invio alla View.

In questo modo l’url può essere semplificato in questo modo:

http://www.m4ss.net/content/zend-framework-teoria-di-base-front-controller-action


Condivisione connessione 3G via WiFi (Windows XP)

martedì, 24 agosto 2010

Quest’estate me la sto passando così, a mezzo servizio: con una gamba ingessata causa rottura del tendine di Achille. In montagna, a Villa Minozzo, si sta bene e almeno c’è fresco! Per fortuna son riuscito ad organizzarmi anche con Internet.

Sul mio iPhone ho Wind che a Villa va praticamente in GPRS quando va bene. Però ho scoperto che invece Tim (e poi anche Vodafone) copre Villa col 3G. A questo punto mi sono organizzato in questo modo per poter essere online.

  1. Acquisto di una nuova SIM della Tim (Privato Ricaricabile)
  2. Sottoscrizione offerta Internet 3GB
  3. Reset firmware del modem HUAWEI E220 HSDPA

In questo modo ora mi sto godendo un bel 3G a 7.2 Mb, quasi come avessi l’ADSL di casa sempre disponibile.  Tutto ciò però sul portatile a cui è attaccato il modem.

Dopo qualche giorno la misera velocità dell’iPhone è diventata insopportabile e quindi ho pensato di condividere la connessione 3G di Tim tramite la scheda Wireless del PC portatile. Dopo un po’ di ricerche son riuscito a configurare il tutto e ora ho una sorta di mini rete wireless a disposizione per l’iPhone e anche il Netbook.

Per la condivisione le operazioni sono abbastanza semplici.

In Risorse di Rete cercate la connessione Internet 3G che utilizzate per accedere alla rete. Qui cliccate col tasto destro e poi Proprietà. Entrate nel Tab in alto “Avanzate“:

Nell’area Condivisione connessione Internet spuntate “Consenti ad altri utenti di rete di collegarsi tramite la connessione Internet di questo computer” e selezionate la voce “Connessione rete senza fili” sotto (vedi immagine).

Cliccate su OK per confermare le impostazioni.

Sempre in Risorse di rete, poi,  individuate la Connessione di rete senza fili (Wireless) ed entrate (tasto destro) in Proprietà. Selezionate il Tab in alto “Reti senza fili“, poi nella sezione “Reti preferite” cliccate su “Aggiungi…”.

In questa schermata dovete:

  • Impostare il Nome di rete (SSID)
  • Spuntare la voce Rete computer a computer (ad hoc) come evidenziato nella foto.
  • Inserire (consigliato!) nella sezione sopra la Chiave di rete e Crittografia dati che preferite.

A questo punto OK e chiudete la finestra.

Ora da un altro PC dovreste vedere la rete wireless con SSID che avete impostato. A me funziona tutto correttamente, ogni tanto la connessione 3G ovviamente cade ma basta riavviala e tutto riparte! ;-)


Visual Basic “Impossibile trovare oggetto o libreria”

martedì, 03 agosto 2010

Oggi, controvoglia, ho dovuto rimetter mano ad una vecchissima procedura in Visual Basic, vecchia almeno 5 anni. Quando si riprende in mano un codice scritto 5 anni prima, in un linguaggio ormai abbandonato da altrettanti anni, tutto diventa più difficile!

Trattasi di uno script in Visual Basic che legge i dati da diversi fogli di Excel e li invio ad un web server dove un Web Service SOAP li “raccoglie”. Tale script però gira sul server di un cliente e nel momento in cui l’ho modificato, qui in locale da me, tutto ha smesso di funzionare! In pratica l’errore che ricevevo era questo:

“Impossibile trovare oggetto o libreria”

Dopo una serie di controlli effettuati via Skype (con condivisione della schermata) col cliente ho finalmente capito dove stava l’errore. Sulla mia macchina in locale Excel è stato aggiornato pertanto lo script includeva una nuova libreria (e nuovo percorso!) inesistente sulla macchina server del cliente.

Nei Riferimenti (Strumenti -> Riferimenti) infatti appariva questo:

La location come potete vedere è:
C:\Programmi\Microsoft Office\Office12\EXCEL.EXE

La libreria ad oggetti di Excel sul mio PC in locale è la 12.0, recentemente aggiornata. Quello del server del cliente invece puntava a:

C:\Programmi\Microsoft Office\Office\EXCEL9.OLB

Per correggere l’errore basta cliccare su Browse e selezionare la libreria correttamente installata sulla macchina. Nel mio caso ho preferito reinstallare il vecchio Excel (libreria 9.0 qui sopra) in modo da poter testare il tutto.

Su alcuni Forum ho letto che, nel caso in cui la libreria non esiste, Visual Basic lo segnala con un “MANCA:“. Nel mio caso il problema è stato leggermente più complesso da comprendere perchè VB in automatico scalava sulla nuova libreria. In ogni caso segnalo questo thread sul forum html.it perchè mi è stato di aiuto nella comprensione del problema.


Flash Remoting: NetServices da AS1 a AS2 (Action Script)

giovedì, 24 giugno 2010

Dopo l’upgrade a Flash 8 ho deciso di fare il passaggio del codice (per quanto possibile senza dover riscrivere tutto!) dalla versione 1 a 2 di Action Script. Il primo errore che ho incontrato e sul quale ho perso un po’ di tempo riguardava Flash Remoting.

L’errore che avevo era questo:

**Error** Scene=Scene 1, layer=Action, frame=1:Line 1: Error opening include file NetServices.as: File not found.
#include “NetServices.as”

Prima di tutto ho dovuto reinstallare e riconfigurare i componenti del Remoting per AS2.
Poi l’errore qui sopra è stato risolto richiamando la libreria Remoting con codice AS2, in questo modo:

import mx.remoting.NetServices;
invece di
#include “Netservices.as”

Successivamente ho dovuto anche riadattare le chiamate al Gateway, in questo modo:

mx.remoting.NetServices.setDefaultGatewayUrl(_global.myGatewayUrl);
gatewayConnnection = mx.remoting.NetServices.createGatewayConnection();
_global.myService = gatewayConnnection.getService(“myService”, this);

In questo modo tutto è tornato a funzionare!


Flash Remoting 8 su OSX Leopard

giovedì, 24 giugno 2010

Le librerie di Flash Remoting 8 richiedono qualche intervento in più di una semplice installazione con doppio click. Ricordo che non fu semplice nemmeno sulla versione MX di Flash, all’epoca su Windows.
Ora ho installato la versione 8 su OSX Leopard.

Per installare le librerie del Remoting è necessario scaricarle ed installarle:
Download Componenti Flash Remoting 8

Le procedure installano le librerie nella directory:
/Applications/Design/Macromedia Flash 8/First Run/Classes

Per averle a disposizione nel nostro file .fla dobbiamo ricordarci di settare tale directory nelle Preferenze, per cui:
Preferenze -> Action Script e poi cliccate su “ActionScript 2.0 Settings”.
Si aprirà questa finestra in cui potrete inserire il percorso qui sopra o ancora meglio selezionarlo direttamente come target.


Zend_Validate, traduzione messaggi di errore

venerdì, 28 maggio 2010

Come Adapter per Zend_Translate prediligo gettext, con Poedit si lavora molto bene!

In fase di deploy di un’applicazione, dopo aver tradotto i miei file, mi sono accorto che mancavano le traduzioni dei messaggi di errore di Zend_Validate (Alpha, EmailAddress, StringLength, ecc.). Dopo un po’ di ricerche ho scoperto che esiste una directory resources/languages (solo nella versione full di ZF) in cui risiedono tutti i file con le traduzioni dei suddetti messaggi di errore.

Il file però presenta le traduzioni in un array e quindi ho dovuto generare un testo da integrare nel file .po
Per fare ciò ho utilizzato queste semplici 2 righe di codice:

foreach($myAr AS $en => $it)
{
echo ‘msgid “‘ . $en . “\”\n”;
echo ‘msgstr “‘ . $it . “\”\n”;
echo “\n”;
}

Dove ovviamente $myAr è l’array che trovate nei vari file di traduzioni (i file si chiamano Zend_Validate.php).
Ho creato così un nuovo Catalogo di Poedit, poi l’ho aperto con un Editor di testo e ho incollato dentro il risultato visualizzato nel browser dalla suddetta procedura. Aprendolo con Poedit e salvando il gioco è fatto!

Potreste incontrare problemi (a seconda del SO e dell’Editor che usate) sulla codifica dei file. A me, ad esempio, Poedit è andato in errore perchè il file, una volta salvato con l’Editor, aveva perso la codifica UTF-8. Per fortuna l’editor del Mac (TextEdit) permette di scegliere la codifica in fase di salvataggio. Ripristinato l’UTF-8 tutto è filato liscio.

Esistono diversi metodi comunque per convertire la codifica dei file di testo (UTF-8).


Zend_Form e problema col quote (magic_quotes_gpc)

mercoledì, 26 maggio 2010

E’ da ieri che sbatto la testa su questo problema!
Sul mio server di sviluppo tutto ok, nessun problema. In ambiente di produzione invece riscontro un problema col quoting dei campi passati dalle form create con Zend_Form. Appena aggiungo le virgolette (“) la procedura di salvataggio dati me li quota (\”) e non capivo il perchè!

Il problema sta nell’impostazione magic_quotes_gpc del PHP.
Sul server in produzione infatti questo è settato a On. Ecco la differenza tra l’ambiente di sviluppo (su cui è Off, infatti monta PHP 5.3.x) e quello in produzione (PHP 5.2.x). A questo punto le alternative per risolvere il problema sono diverse.

Una soluzione è disabilitare tale impostazione via file .htaccess inserendo in questo file la riga:

php_flag magic_quotes_gpc Off

In alternativa, ove questo non sia possibile, consiglio l’utilizzo dell’ottimo Filter_StripSlashes creato e descritto da Phil Brown.


svn: Cannot rename file … entries

lunedì, 17 maggio 2010

smartsvn icon

Lavoro in ambiente OSX e uso Eclipse per scrivere codice e SmartSVN come client Subversion.
Avevo necessità di aprire un vecchio progetto (proveniente da macchina Windows) di un copia in locale prima di effettuare operazioni sul repository. Ho provato a fare un Relocate della copia locale in modo da poterlo poi sincronizzare con il repository ma ho ricevuto questo errore:

Relocate: Cannot rename file ‘/project/css/.svn/tmp/entries’ to ‘/project/css/. svn/entries’

La soluzione ai miei problemi l’ho trovata su StackOverflow dove si legge:

If you’re changing workspaces on OS X and you import an SVN-based project into your new workspace, some of your files may have the uchg flag set. SubClipse/SVN will not be able to update this project.

Effettivamente le cose stavano così anche nel mio caso e per sistemare correttamente il flag uchg (“user immutable flag“) basta dare il comando (al livello più alto della directory del progetto) da riga di comando:

chflags -R nouchg .


 

Pinguino imperatore

Aptenodytes forsteri,
descritto da G. R. Gray nel 1844, Mari Antartici.

Tux è la mascotte ufficiale del kernel Linux. Creato da Larry Ewing nel 1996, è un pinguino paffuto dall'aria contenta. L'idea che la mascotte di Linux dovesse essere un pinguino venne da Linus Torvalds, il creatore del kernel Linux.
[FSF Associate Member]
Free Software Foundation
Associate Member
Join!
Davide Gullo
   Crea il tuo badge