L’integrazione continua e’ una tecnica per cui il software viene automaticamente sottoposto ad una serie di processi di build e di controllo di qualita’ ogni volta che viene creata una nuova versione, ovvero ogni volta che uno sviluppatore fa un commit al repository.
Jenkins (fork del progetto Hudson) e’ il uno fra i migliori server open source per l’integrazione continua che puo’ essere utilizzato per fare il build e testare automaticamente i progetti php.
Sebastian Bergmann il creatore di PhpUnit ha recentemente creato un nuovo progetto jenkins-php.org per avere un template standard per l’integrazione continua in php. Sul suo sito potete trovare tutte le informazioni sui software e i plugins da installare per la continuous integration in php.
Per una buona review della procedura potete dare un occhiata a questo post (in inglese) : Setting up jenkins for php projects
continuous integration, php, quality assurance, SCM, version control
Le espressioni regolari sono state sempre state un lato oscuro della programmazione che con cui non mi sono mai cimentato prima d’ora, ma devo dire che sono uno strumento veramente potente.
Ho deciso di condividere con voi questa bella espressione regolare per la validazione di un indirizzo Samba, utilizzando preg_metch in PHP
Un indirizzo Samba e’ composto essenzialmente da tre parti:
//SERVER_NAME/SHARED_NAME/file_name.jpg
per la validazione e per estrarne le componenti si puo utilizzare questa espressione regolare:
/[\/]{2}(?P<servername>[\w]+)[\/](?P<sharedname>[\w]+)[\/](?P<filename>[\w\/.]+)/
In linguaggio umanamente comprensibile:
Fra parentesi () trovate i match ovvero le parti variabili dello schema a cui ho dato un nome (vedremo perche’) ?P<servername> seguito dalla classe di caratteri che vi possono essere inclusi (\w = significa ogni carattere maiuscolo e minuscolo inclusi i numeri e il trattino basso) ripetuto una o piu’ volte +
Fra parentesi [] ci sono i le classi che delimitano le corrispondenze [\/]{2} significa esattamente due slash.
Tradotta l’espressione suonerebbe come: esattamente due slash [\/]{2} seguito da qualcosa composto da piu’ caratteri e numeri [\w]+ che chiameremo ?P<servername> , poi uno slash [\/] seguito da qualcosa composto da piu’ caratteri e numeri [\w]+ che
chiameremo ?P<sharedname> poi uno slash [\/] seguito da qualcosa composto da piu’ caratteri , numeri slash e punti [\w\/.] che chiameremo ?P<filename>
In php :
$uri = "//SERVER_NAME/SHARED_NAME/file_name.jpg";
$success = preg_match("/[\/\/]{2}(?P<servername>[\w]+)[\/](?P<sharedname>[\w]+)[\/](?P<filename>[\w\/.-]+)/", $uri, $matches);
questo ritornera’ $succeess se il match e’ stato esatto e un array cosi composto:
$matches = Array
(
[0] => //PAES2005LAP42/EB3_SPOOL/28_F_F/Rep36_1.jpg
[server] => PAES2005LAP42
[1] => PAES2005LAP42
[shared] => EB3_SPOOL
[2] => EB3_SPOOL
[filename] => 28_F_F/Rep36_1.jpg
[3] => 28_F_F/Rep36_1.jpg
)
per opprofondimenti preg_match
Per una veloce reference riporto la lunghezza dei piú comuni campi di testo in un database mysql
Campi di testo
| CHAR( ) |
Dimensione fissa da 0 a 255 caratteri. |
| VARCHAR( ) |
Dimensione variabile da 0 a 255 caratteri. |
| TINYTEXT |
Dimensione massima di 255 caratteri. |
| TEXT |
Dimensione massima di 65535 caratteri. |
| BLOB |
Dimensione massima di 65535 caratteri. |
| MEDIUMTEXT |
Dimensione massima di 16777215 caratteri. |
| MEDIUMBLOB |
Dimensione massima di 16777215 caratteri. |
| LONGTEXT |
Dimensione massima di 4294967295 caratteri. |
| LONGBLOB |
Dimensione massima di 4294967295 caratteri.
|
Campi numerici
| TINYINT( ) |
-128 to 127 normal
0 to 255 UNSIGNED. |
| SMALLINT( ) |
-32768 to 32767 normal
0 to 65535 UNSIGNED. |
| MEDIUMINT( ) |
-8388608 to 8388607 normal
0 to 16777215 UNSIGNED. |
| INT( ) |
-2147483648 to 2147483647 normal
0 to 4294967295 UNSIGNED. |
| BIGINT( ) |
-9223372036854775808 to 9223372036854775807 normal
0 to 18446744073709551615 UNSIGNED. |
| FLOAT |
A small number with a floating decimal point. |
| DOUBLE( , ) |
A large number with a floating decimal point. |
| DECIMAL( , ) |
A DOUBLE stored as a string , allowing for a fixed decimal point |
Nano è un editor da shell molto utile e molto piu’ immediato di vim, ma come istallazione di default manca della colorazione della sintassi, ecco come aggiungere la sintassi colorata su nano:
In /user/share/nano si trovano una serie di file con estenzione .nanorc che controllano la colorazione della sintassi
possiamo attivarli su nano per il nostro utente, includendoli nel file /home/mioNomeUtente/.nanorc, manualmente o con un semplice comando:
for i in /usr/share/nano/*.nanorc; do echo “include \”$i\”"; done >> ~/.nanorc
per aggiungere la sintassi colorata per un tipo di file non presente in /usr/share/nano, nel mio caso php, basta creare nella propria home un file php.nanorc e aggiungervi le istruzioni per colorare la sintassi, facilmente reperibili dal progetto nanosyntax su google code, ed includere questo file nel file /home/mioNomeUtente/.nanorc
Purtroppo non c’è un metodo facile per accedere al document allínterno di un Iframe, ma possimamo facilitare questa operazione con un semplice paio di condizioni:
var iFrameContainer = document.getElementById('iFrameContainer');
// l'oggetto document all'interno dell'iFrame
var iFrameContent = null ;
if (iFrameContainer.contentDocument) {
// Firefox
iFrameContent = iFrameContainer.contentDocument;
}
else if (iFrameContainer.contentWindow) {
// IE > 5
iFrameContent = iFrameContainer.contentWindow.document;
}
else if (iFrameContainer.document) {
// IE5
iFrameContent = iFrameContainer.document;
}
else {
// non si puó mai sapere
return false;
}